Wîkîferheng
kuwiktionary
https://ku.wiktionary.org/wiki/Destp%C3%AAk
MediaWiki 1.47.0-wmf.15
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
asê
0
3310
6333784
6292752
2026-08-15T11:10:22Z
Rewiye tine
7120
/* Jê */
6333784
wikitext
text/x-wiki
{{bnr-h|Asê}}
== {{ziman|ku}} ==
=== Bilêvkirin ===
* {{ku-IPA}}
* {{deng|ku|LL-Q36368 (kur)-Dildadil-asê.wav|dever=Amed}}
** {{deng|ku|LL-Q36163 (kmr)-Ebulfîda-asê.wav|dever=Bidlîs}}
* {{ku-kîte}}
=== Rengdêr ===
{{ku-tewîn-rd|asê}}
{{rengdêr|ku}}
# [[dijwar]], [[zehmet]], [[nexweş]] <br>(bi taybetî bo tê re [[derbas]]bûnê wek çiya yan daristan)
# tiştê ku ji derbasbûnê re rê nade
#: ''Me [[qulik]]a dîwar bi [[potik]] '''asê'''kir.''
#: ''Şeva berfê ji ber ku em ji [[gur]]an ditirsiyan me deriyê xwe '''asê''' kiribû.''
==== Bi alfabeyên din ====
* {{ku-ar|ئاسێ}}
==== Formên alternatîv ====
* {{g|ku|hasê}}
==== Bide ber ====
{{kol3|ku
|asa
|asan
|hêsa
}}
==== Jê ====
{{kol3|ku|cure=Jê
|asêhî
|asêtî
|asêyî
|asê bûn<q:lêker>
|asê kirin<q:lêker>
|asêbûn<q:navdêr>
|asê mayîn<q:lêker>
|asêkirin<q:navdêr>
|asêbûyî<q:rengdêr>
|asêkirî<q:rengdêr>
}}
==== Etîmolojî ====
Ji {{ji|ar|ku|-}}, bi maneya [[pişterêbûn]] ji {{g|ar|عاصي|tr='aṣî}}, bi wateya "pişterêbûn" ji {{g|ar|عصيان|tr=iṣyan}}. Bo nimûneyeke din jî ku tê de "'e" ya erebî di kurdî de dibe "a" binêre [[alif]], [[aqil]].
==== Werger ====
{{werger-ser}}
* {{Z|de}}: {{W+|de|unzugänglich}}, {{W+|de|verlassen}}, {{W+|de|abgelegen}}, {{W+|de|hartnäckig}}, {{W+|de|schroff}}, {{W+|de|abschüssig|guman=erê}}, {{W+|de|jäh|guman=erê}}, {{W+|de|steil|guman=erê}}, {{W-|de|weglos|guman=erê}}, {{W+|de|verschanzt|guman=erê}}
* {{Z|ar}}: {{W-|ar|منحصر}}, {{W-|ar|ممتنع}}, {{W-|ar|العنود|guman=erê}}, {{W-|ar|المقعنسس|guman=erê}}, {{W-|ar|النكیر|guman=erê}}
* {{Z|fa}}: {{W+|fa|گرفتار}}, {{W+|fa|مانع}}, {{W+|fa|صعب العبور}}
* {{Z|en}}: {{W+|en|stuck}}, {{W+|en|steep}}, {{W+|en|difficult}}, {{W+|en|forbidding}}, {{W+|en|inaccessible}}, {{W+|en|wayward|guman=erê}}, {{W+|en|inexpugnable|guman=erê}}, {{W-|en|well-fortified|guman=erê}}
* {{Z|tr}}: {{W+|tr|muhkem}}, {{W+|tr|müstahkem}}, {{W+|tr|kör}}, {{W+|tr|sarp}}, {{W+|tr|eşkıya}}, {{W+|tr|yalçın|guman=erê}}
{{werger-bin}}
== {{ziman|zza}} ==
==== Mane ====
# asê, ciyê bilind û çiya ku rê nede, merivê înadker û serhişk;'' Cay keydê ma asê yo: Ciyê mala me asê ye''<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>
=== Çavkanî ===
{{çavkanî}}
5xd9yjqyht1h8iiuy0hi0ki9x7jmry5
6333785
6333784
2026-08-15T11:41:07Z
Balyozbot
7867
[[Special:PermanentLink/6298023|Bot]]: rêzkirina beşan
6333785
wikitext
text/x-wiki
{{bnr-h|Asê}}
== {{ziman|ku}} ==
=== Bilêvkirin ===
* {{ku-IPA}}
* {{deng|ku|LL-Q36368 (kur)-Dildadil-asê.wav|dever=Amed}}
** {{deng|ku|LL-Q36163 (kmr)-Ebulfîda-asê.wav|dever=Bidlîs}}
* {{ku-kîte}}
=== Rengdêr ===
{{ku-tewîn-rd|asê}}
{{rengdêr|ku}}
# [[dijwar]], [[zehmet]], [[nexweş]] <br>(bi taybetî bo tê re [[derbas]]bûnê wek çiya yan daristan)
# tiştê ku ji derbasbûnê re rê nade
#: ''Me [[qulik]]a dîwar bi [[potik]] '''asê'''kir.''
#: ''Şeva berfê ji ber ku em ji [[gur]]an ditirsiyan me deriyê xwe '''asê''' kiribû.''
==== Bi alfabeyên din ====
* {{ku-ar|ئاسێ}}
==== Formên alternatîv ====
* {{g|ku|hasê}}
==== Jê ====
{{kol3|ku|cure=Jê
|asêhî
|asêtî
|asêyî
|asê bûn<q:lêker>
|asê kirin<q:lêker>
|asêbûn<q:navdêr>
|asê mayîn<q:lêker>
|asêkirin<q:navdêr>
|asêbûyî<q:rengdêr>
|asêkirî<q:rengdêr>
}}
==== Etîmolojî ====
Ji {{ji|ar|ku|-}}, bi maneya [[pişterêbûn]] ji {{g|ar|عاصي|tr='aṣî}}, bi wateya "pişterêbûn" ji {{g|ar|عصيان|tr=iṣyan}}. Bo nimûneyeke din jî ku tê de "'e" ya erebî di kurdî de dibe "a" binêre [[alif]], [[aqil]].
==== Bide ber ====
{{kol3|ku
|asa
|asan
|hêsa
}}
==== Werger ====
{{werger-ser}}
* {{Z|de}}: {{W+|de|unzugänglich}}, {{W+|de|verlassen}}, {{W+|de|abgelegen}}, {{W+|de|hartnäckig}}, {{W+|de|schroff}}, {{W+|de|abschüssig|guman=erê}}, {{W+|de|jäh|guman=erê}}, {{W+|de|steil|guman=erê}}, {{W-|de|weglos|guman=erê}}, {{W+|de|verschanzt|guman=erê}}
* {{Z|ar}}: {{W-|ar|منحصر}}, {{W-|ar|ممتنع}}, {{W-|ar|العنود|guman=erê}}, {{W-|ar|المقعنسس|guman=erê}}, {{W-|ar|النكیر|guman=erê}}
* {{Z|fa}}: {{W+|fa|گرفتار}}, {{W+|fa|مانع}}, {{W+|fa|صعب العبور}}
* {{Z|en}}: {{W+|en|stuck}}, {{W+|en|steep}}, {{W+|en|difficult}}, {{W+|en|forbidding}}, {{W+|en|inaccessible}}, {{W+|en|wayward|guman=erê}}, {{W+|en|inexpugnable|guman=erê}}, {{W-|en|well-fortified|guman=erê}}
* {{Z|tr}}: {{W+|tr|muhkem}}, {{W+|tr|müstahkem}}, {{W+|tr|kör}}, {{W+|tr|sarp}}, {{W+|tr|eşkıya}}, {{W+|tr|yalçın|guman=erê}}
{{werger-bin}}
== {{ziman|zza}} ==
==== Mane ====
# asê, ciyê bilind û çiya ku rê nede, merivê înadker û serhişk;'' Cay keydê ma asê yo: Ciyê mala me asê ye''<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>
=== Çavkanî ===
{{çavkanî}}
10mdymaostek2uqe0h8d4vj49dtk3w0
standin
0
3825
6333650
6325906
2026-08-14T15:29:41Z
حوسێن
9221
/* Etîmolojî */
6333650
wikitext
text/x-wiki
== {{ziman|ku}} ==
=== Bilêvkirin ===
* {{deng|ku|LL-Q36163 (kmr)-Key Mîrza-standin.wav|dever=Bidlîs}}
* {{ku-kîte}}
=== Lêker ===
{{ku-tewîn-lk|standin|form=gerguhêz|niha=stîn|borî=stand}}
{{lêker|ku|c=x-gh}}
# bi [[kotek]]î [[wergirtin]], bi zorê ji destê kesekê/î [[deranîn]]
#: {{mk|ku|Kurrê te goga kurrê min jê '''standiye'''.}}
# ([[dever]]ek) [[rizgar]] kirin yan [[dagir]] kirin
#: {{mk|ku|Emerîkiyan Kuwêt ji Iraqê '''stand'''.}}
# [[kirîn]], bi [[pare]] [[wergirtin]], bi pere bi dest xistin, bi [[dirav]] bi dest xwe ve anîn
#: {{mk|ku|Te ev [[tirimpêl]] kengî '''standiye'''?}}
==== Ji wêjeya klasîk ====
* {{jêder|ku|{{Jêgirtin/Melayê Cizîrî/Dîwana Melayê Cizirî}}|jêgirtin=Te canê min divêt ey canê 'alem</br>Ji min '''bistîn''' bi le'lên xwey şekerrîz</br>Du 'enber bû li şimşadê bi mestî}}
==== Bi alfabeyên din ====
* {{ku-ar|ستاندن}}, {{g|ku|sc=Arab|صتاندن|tr=-}}
==== Formên alternatîv ====
* [[stendin]]
* {{g|ku|sandin}}
* [[hestandin]]
* [[histandin]]
==== Dijmane ====
* [[dan]]
==== Jê ====
{{kol3|ku
| jê standin
| jêstandin
| danûstandin
| danûstîner
| danûstînerî
| standî
| stîner
}}
==== Etîmolojî ====
Ji {{ji|ine-pro|ku|*steH2n-}} (kirîn, xwestin bikirre; eyar kirin), {{ji|ira-pro|ku|*steʰn-}} (standin, rakirin, birin), avestayî ''fre-sten'' (standin, birin), parsî û pehlewî ''st'n-'' (jê standin, birin), farisî {{g|fa|ستادن}} (sitaden - rehê dema niha -sitan-: birin, standin; sekinîn), hewramî ''esey'' (rehê dema niha ''san-''), goranî ''san-'', soranî {{g|ckb|ستاندن}} (standin - rehê dema niha ''-stên-''), latînî ''prae-stinare'' ([[kirîn]], [[biha]]yê tiştekî eyarkirin), ermenî ''stenem'' (belkî ji kurdî yan zimanekî din hatiye deynkirin).
Berevajî ku [[Şablon:Chyet|Chyet]] di ferhenga xwe de îdia dike û gelek kurd jî bawer dikin, "standin" bi maneya "kirîn"ê ne ji tesîra tirkî ye lê bi heman maneyê hem di zaravayên din yên kurdî û hem jî di zimanên lêzim de jî tê bikaranîn. Ihtimaltir e ku tirkî "almak"a xwe li gor maneyên zimanên îranî berfireh kiribe.
==== Bide ber ====
* [[girtin]]
* [[kirîn]]
* [[wergirtin]]
==== Werger ====
{{werger-ser|bi zorê jê wergirtin|1}}
* {{Z|af}}: {{W-|af|tref}}, {{W-|af|merk}}, {{W+|af|vang}}, {{W+|af|vat}}, {{W-|af|beetgryp}}, {{W-|af|beetkry}}, {{W-|af|beetneem}}, {{W-|af|beetpak}}, {{W-|af|beetvat}}, {{W-|af|gryp}}, {{W-|af|bemagtig}}
* {{Z|sq}}: {{W+|sq|kap}}
* {{Z|de}}: {{W+|de|empfangen}}, {{W+|de|abholen}}, {{W+|de|Annahme}} {{mê}}, {{W+|de|Einkauf}} {{n}}, {{W+|de|ankaufen}}, {{W+|de|ausführen}}, {{W+|de|beanspruchen}}, {{W+|de|bekommen}}, {{W+|de|besetzen}}, {{W+|de|bestellen}}, {{W+|de|einhandeln}}, {{W+|de|erfüllen}}, {{W+|de|erhalten}}, {{W+|de|leisten}}, {{W+|de|wegnehmen}}, {{W+|de|Erhebung|f|guman=erê}}, {{W+|de|erkaufen|guman=erê}}, {{W+|de|loskaufen|guman=erê}}, {{W-|de|Besitz ergriffen haben|guman=erê}}
* {{Z|da}}: {{W+|da|fange}}, {{W-|da|gribe}}
* {{Z|ar}}: {{W+|ar|أخذ}}, {{W-|ar|ابتاع|guman=erê}}, {{W-|ar|شراء|guman=erê}}, {{W-|ar|الإحتواء|guman=erê}}, {{W-|ar|الإستیلاء|guman=erê}}, {{W-|ar|السلب|guman=erê}}
* {{Z|eo}}: {{W+|eo|trafi}}, {{W-|eo|percepti}}, {{W+|eo|konfiski}}, {{W+|eo|kapti}}, {{W-|eo|ekkapti}}, {{W+|eo|brogi}}
* {{Z|fa}}: {{W+|fa|ستاندن}}, {{W+|fa|گرفتن}}, {{W+|fa|بدست آوردن}}, {{W+|fa|خریدن}}
* {{Z|fo}}: {{W-|fo|raka}}, {{W-|fo|ráma}}, {{W-|fo|leggja hald á}}, {{W-|fo|fanga}}, {{W-|fo|handbera}}, {{W-|fo|skálda}}
* {{Z|fi}}: {{W+|fi|ottaa}} (väkisin)
* {{Z|fr}}: {{W+|fr|saisir}}
* {{Z|fy}}: {{W-|fy|treffe}}, {{W-|fy|fange}}, {{W-|fy|beetkrije}}, {{W-|fy|beetpakke}}
* {{Z|gd}}: {{W-|gd|glac}}
* {{Z|nl}}: {{W+|nl|halen}}, {{W+|nl|inslaan}}, {{W+|nl|raken}}, {{W+|nl|teisteren}}, {{W+|nl|treffen}}, {{W-|nl|gewaar worden}}, {{W+|nl|merken}}, {{W+|nl|bemerken}}, {{W+|nl|vernemen}}, {{W+|nl|waarnemen}}, {{W+|nl|confisqueren}}, {{W-|nl|in beslag nemen}}, {{W-|nl|konfiskeren}}, {{W-|nl|verbeurd verklaren}}, {{W+|nl|beetkrijgen}}, {{W+|nl|beetnemen}}, {{W+|nl|pakken}}, {{W+|nl|vangen}}, {{W+|nl|vastpakken}}, {{W+|nl|vatten}}, {{W+|nl|bemachtigen}}, {{W+|nl|grijpen}}, {{W+|nl|aangrijpen}}, {{W+|nl|vastgrijpen}}
* {{Z|he}}: {{W+|he|חזק}} {{n}}, {{W+|he|תמך|cuda=תמךְ}}, {{W+|he|תפש|cuda=תפשׂ}}, {{W+|he|אחז}} {{n}}
* {{Z|io}}: {{W+|io|sizar}}, {{W+|io|embargar}}, {{W+|io|atrapar}}
* {{Z|ang}}: {{W-|ang|huntian}}, {{W-|ang|gripan}}
* {{Z|en}}: to {{W+|en|seize}}, to {{W+|en|get}}, to {{W+|en|grab}}, to [[take]] to {{W+|en|capture}}, {{W+|en|grapple}}, {{W+|en|captivate}}, to {{W+|en|grip}}, to {{W+|en|nab}}, to {{W+|en|snatch}}, {{W+|en|appropriate}}, {{W-|en|take from}}, {{W+|en|conquer}}, {{W+|en|receipt}}, {{W+|en|collecting|guman=erê}}, {{W+|en|draw|guman=erê}}, {{W+|en|drew|guman=erê}}, {{W+|en|drawn|guman=erê}}, {{W+|en|exaction|guman=erê}}, {{W+|en|extort|guman=erê}}, {{W+|en|extortion|guman=erê}}, {{W+|en|grabbing|guman=erê}}, {{W+|en|impetrate|guman=erê}}, {{W+|en|impetrating|guman=erê}}, {{W+|en|impetration|guman=erê}}, {{W+|en|incept|guman=erê}}, {{W+|en|obtaining|guman=erê}}, {{W+|en|snaffling|guman=erê}}, {{W+|en|swagger|guman=erê}}, {{W+|en|swindle|guman=erê}}, {{W+|en|wresting|guman=erê}}
* {{Z|it}}: {{W+|it|colpire}}, {{W+|it|prendere}}, {{W+|it|afferrare}}
* {{Z|ca}}: {{W+|ca|caure}}, {{W+|ca|encertar}}, {{W+|ca|endevinar}}, {{W+|ca|ensopegar}}, {{W+|ca|percebre}}, {{W+|ca|confiscar}}, {{W+|ca|agafar}}, {{W+|ca|atrapar}}, {{W+|ca|captivar}}, {{W+|ca|capturar}}, {{W+|ca|copsar}}, {{W+|ca|escaldar}}
* {{Z|la}}: {{W+|la|capere}}
* {{Z|ms}}: {{W-|ms|memukul}}, {{W+|ms|pukul}}, {{W-|ms|menangkap}}, {{W+|ms|tangkap}}
* {{Z|yua}}: {{W-|yua|chukik}}
* {{Z|hu}}: {{W+|hu|megfog}}
* {{Z|no}}: {{W+|no|fange}}, {{W-|no|gripe}}
* {{Z|pap}}: {{W-|pap|raka}}, {{W-|pap|konfiská}}, {{W-|pap|fango}}, {{W-|pap|fangu}}, {{W-|pap|kèch}}, {{W-|pap|kohe}}, {{W-|pap|koi}}
* {{Z|pl}}: {{W+|pl|trafić}}, {{W+|pl|łapać}}, {{W+|pl|chwytać}}
* {{Z|pt}}: {{W+|pt|acertar}}, {{W+|pt|atingir}}, {{W-|pt|dar no alvo}}, {{W+|pt|confiscar}}, {{W+|pt|apanhar}}, {{W+|pt|aprisionar}}, {{W+|pt|capturar}}, {{W+|pt|escaldar}}, {{W-|pt|escalfar}}
* {{Z|ro}}: {{W+|ro|apuca}}, {{W+|ro|prinde}}, {{W+|ro|captura}}
* {{Z|ru}}: {{W+|ru|бить}}, {{W+|ru|ударить}}, {{W+|ru|воспринимать}}, {{W-|ru|наложить арест на}}, {{W+|ru|взять}}
* {{Z|srn}}: {{W-|srn|fanga}}, {{W-|srn|grabu}}
* {{Z|es}}: {{W+|es|agarrar}}, {{W+|es|prender}}, {{W+|es|coger}}, {{W+|es|acertar}}, {{W-|es|dar en}}, {{W-|es|dar con}}, {{W+|es|percibir}}, {{W+|es|confiscar}}, {{W+|es|atrapar}}, {{W+|es|capturar}}, {{W+|es|asir}}, {{W-|es|apoderarse de}}, {{W+|es|escaldar}}
* {{Z|sv}}: {{W+|sv|konfiskera}}, {{W+|sv|fånga}}, {{W+|sv|köpa}}, {{W+|sv|inhandla}}, {{W+|sv|erhålla}}, {{W+|sv|få}}, {{W+|sv|anskaffa}}
* {{Z|tr}}: (zorla) {{W+|tr|almak}}, {{W+|tr|almak}}
* {{Z|el}}: {{W+|el|αιχμαλωτίζω}}
{{werger-bin}}
=== Navdêr ===
{{navdêr|ku|z=m}}
# {{mane?|ku}}
#* {{bênimûne|ku}}
==== Tewandin ====
{{ku-tewîn-nav/nû|mê}}
==== Werger ====
{{werger-ser}}
{{werger-bin}}
45munkroe0fjlq8huwpe368jeln1ayv
6333656
6333650
2026-08-14T15:38:57Z
Ghybu
1393
/* Etîmolojî */
6333656
wikitext
text/x-wiki
== {{ziman|ku}} ==
=== Bilêvkirin ===
* {{deng|ku|LL-Q36163 (kmr)-Key Mîrza-standin.wav|dever=Bidlîs}}
* {{ku-kîte}}
=== Lêker ===
{{ku-tewîn-lk|standin|form=gerguhêz|niha=stîn|borî=stand}}
{{lêker|ku|c=x-gh}}
# bi [[kotek]]î [[wergirtin]], bi zorê ji destê kesekê/î [[deranîn]]
#: {{mk|ku|Kurrê te goga kurrê min jê '''standiye'''.}}
# ([[dever]]ek) [[rizgar]] kirin yan [[dagir]] kirin
#: {{mk|ku|Emerîkiyan Kuwêt ji Iraqê '''stand'''.}}
# [[kirîn]], bi [[pare]] [[wergirtin]], bi pere bi dest xistin, bi [[dirav]] bi dest xwe ve anîn
#: {{mk|ku|Te ev [[tirimpêl]] kengî '''standiye'''?}}
==== Ji wêjeya klasîk ====
* {{jêder|ku|{{Jêgirtin/Melayê Cizîrî/Dîwana Melayê Cizirî}}|jêgirtin=Te canê min divêt ey canê 'alem</br>Ji min '''bistîn''' bi le'lên xwey şekerrîz</br>Du 'enber bû li şimşadê bi mestî}}
==== Bi alfabeyên din ====
* {{ku-ar|ستاندن}}, {{g|ku|sc=Arab|صتاندن|tr=-}}
==== Formên alternatîv ====
* [[stendin]]
* {{g|ku|sandin}}
* [[hestandin]]
* [[histandin]]
==== Dijmane ====
* [[dan]]
==== Jê ====
{{kol3|ku
| jê standin
| jêstandin
| danûstandin
| danûstîner
| danûstînerî
| standî
| stîner
}}
==== Etîmolojî ====
Ji {{ji|ine-pro|ku|*steH2n-}} (kirîn, xwestin bikirre; eyar kirin), {{ji|ira-pro|ku|*steʰn-}} (standin, rakirin, birin), avestayî ''fre-sten'' (standin, birin), parsî û pehlewî ''st'n-'' (jê standin, birin), farisî {{g|fa|ستادن}} (sitaden - rehê dema niha -sitan-: birin, standin; sekinîn), hewramî ''esey'' (rehê dema niha ''san-''), goranî ''san-'', soranî {{g|ckb|ستاندن}} (rehê dema niha ''-stên-''), latînî ''prae-stinare'' ([[kirîn]], [[biha]]yê tiştekî eyarkirin), ermenî ''stenem'' (belkî ji kurdî yan zimanekî din hatiye deynkirin).
Berevajî ku [[Şablon:Chyet|Chyet]] di ferhenga xwe de îdia dike û gelek kurd jî bawer dikin, "standin" bi maneya "kirîn"ê ne ji tesîra tirkî ye lê bi heman maneyê hem di zaravayên din yên kurdî û hem jî di zimanên lêzim de jî tê bikaranîn. Ihtimaltir e ku tirkî "almak"a xwe li gor maneyên zimanên îranî berfireh kiribe.
==== Bide ber ====
* [[girtin]]
* [[kirîn]]
* [[wergirtin]]
==== Werger ====
{{werger-ser|bi zorê jê wergirtin|1}}
* {{Z|af}}: {{W-|af|tref}}, {{W-|af|merk}}, {{W+|af|vang}}, {{W+|af|vat}}, {{W-|af|beetgryp}}, {{W-|af|beetkry}}, {{W-|af|beetneem}}, {{W-|af|beetpak}}, {{W-|af|beetvat}}, {{W-|af|gryp}}, {{W-|af|bemagtig}}
* {{Z|sq}}: {{W+|sq|kap}}
* {{Z|de}}: {{W+|de|empfangen}}, {{W+|de|abholen}}, {{W+|de|Annahme}} {{mê}}, {{W+|de|Einkauf}} {{n}}, {{W+|de|ankaufen}}, {{W+|de|ausführen}}, {{W+|de|beanspruchen}}, {{W+|de|bekommen}}, {{W+|de|besetzen}}, {{W+|de|bestellen}}, {{W+|de|einhandeln}}, {{W+|de|erfüllen}}, {{W+|de|erhalten}}, {{W+|de|leisten}}, {{W+|de|wegnehmen}}, {{W+|de|Erhebung|f|guman=erê}}, {{W+|de|erkaufen|guman=erê}}, {{W+|de|loskaufen|guman=erê}}, {{W-|de|Besitz ergriffen haben|guman=erê}}
* {{Z|da}}: {{W+|da|fange}}, {{W-|da|gribe}}
* {{Z|ar}}: {{W+|ar|أخذ}}, {{W-|ar|ابتاع|guman=erê}}, {{W-|ar|شراء|guman=erê}}, {{W-|ar|الإحتواء|guman=erê}}, {{W-|ar|الإستیلاء|guman=erê}}, {{W-|ar|السلب|guman=erê}}
* {{Z|eo}}: {{W+|eo|trafi}}, {{W-|eo|percepti}}, {{W+|eo|konfiski}}, {{W+|eo|kapti}}, {{W-|eo|ekkapti}}, {{W+|eo|brogi}}
* {{Z|fa}}: {{W+|fa|ستاندن}}, {{W+|fa|گرفتن}}, {{W+|fa|بدست آوردن}}, {{W+|fa|خریدن}}
* {{Z|fo}}: {{W-|fo|raka}}, {{W-|fo|ráma}}, {{W-|fo|leggja hald á}}, {{W-|fo|fanga}}, {{W-|fo|handbera}}, {{W-|fo|skálda}}
* {{Z|fi}}: {{W+|fi|ottaa}} (väkisin)
* {{Z|fr}}: {{W+|fr|saisir}}
* {{Z|fy}}: {{W-|fy|treffe}}, {{W-|fy|fange}}, {{W-|fy|beetkrije}}, {{W-|fy|beetpakke}}
* {{Z|gd}}: {{W-|gd|glac}}
* {{Z|nl}}: {{W+|nl|halen}}, {{W+|nl|inslaan}}, {{W+|nl|raken}}, {{W+|nl|teisteren}}, {{W+|nl|treffen}}, {{W-|nl|gewaar worden}}, {{W+|nl|merken}}, {{W+|nl|bemerken}}, {{W+|nl|vernemen}}, {{W+|nl|waarnemen}}, {{W+|nl|confisqueren}}, {{W-|nl|in beslag nemen}}, {{W-|nl|konfiskeren}}, {{W-|nl|verbeurd verklaren}}, {{W+|nl|beetkrijgen}}, {{W+|nl|beetnemen}}, {{W+|nl|pakken}}, {{W+|nl|vangen}}, {{W+|nl|vastpakken}}, {{W+|nl|vatten}}, {{W+|nl|bemachtigen}}, {{W+|nl|grijpen}}, {{W+|nl|aangrijpen}}, {{W+|nl|vastgrijpen}}
* {{Z|he}}: {{W+|he|חזק}} {{n}}, {{W+|he|תמך|cuda=תמךְ}}, {{W+|he|תפש|cuda=תפשׂ}}, {{W+|he|אחז}} {{n}}
* {{Z|io}}: {{W+|io|sizar}}, {{W+|io|embargar}}, {{W+|io|atrapar}}
* {{Z|ang}}: {{W-|ang|huntian}}, {{W-|ang|gripan}}
* {{Z|en}}: to {{W+|en|seize}}, to {{W+|en|get}}, to {{W+|en|grab}}, to [[take]] to {{W+|en|capture}}, {{W+|en|grapple}}, {{W+|en|captivate}}, to {{W+|en|grip}}, to {{W+|en|nab}}, to {{W+|en|snatch}}, {{W+|en|appropriate}}, {{W-|en|take from}}, {{W+|en|conquer}}, {{W+|en|receipt}}, {{W+|en|collecting|guman=erê}}, {{W+|en|draw|guman=erê}}, {{W+|en|drew|guman=erê}}, {{W+|en|drawn|guman=erê}}, {{W+|en|exaction|guman=erê}}, {{W+|en|extort|guman=erê}}, {{W+|en|extortion|guman=erê}}, {{W+|en|grabbing|guman=erê}}, {{W+|en|impetrate|guman=erê}}, {{W+|en|impetrating|guman=erê}}, {{W+|en|impetration|guman=erê}}, {{W+|en|incept|guman=erê}}, {{W+|en|obtaining|guman=erê}}, {{W+|en|snaffling|guman=erê}}, {{W+|en|swagger|guman=erê}}, {{W+|en|swindle|guman=erê}}, {{W+|en|wresting|guman=erê}}
* {{Z|it}}: {{W+|it|colpire}}, {{W+|it|prendere}}, {{W+|it|afferrare}}
* {{Z|ca}}: {{W+|ca|caure}}, {{W+|ca|encertar}}, {{W+|ca|endevinar}}, {{W+|ca|ensopegar}}, {{W+|ca|percebre}}, {{W+|ca|confiscar}}, {{W+|ca|agafar}}, {{W+|ca|atrapar}}, {{W+|ca|captivar}}, {{W+|ca|capturar}}, {{W+|ca|copsar}}, {{W+|ca|escaldar}}
* {{Z|la}}: {{W+|la|capere}}
* {{Z|ms}}: {{W-|ms|memukul}}, {{W+|ms|pukul}}, {{W-|ms|menangkap}}, {{W+|ms|tangkap}}
* {{Z|yua}}: {{W-|yua|chukik}}
* {{Z|hu}}: {{W+|hu|megfog}}
* {{Z|no}}: {{W+|no|fange}}, {{W-|no|gripe}}
* {{Z|pap}}: {{W-|pap|raka}}, {{W-|pap|konfiská}}, {{W-|pap|fango}}, {{W-|pap|fangu}}, {{W-|pap|kèch}}, {{W-|pap|kohe}}, {{W-|pap|koi}}
* {{Z|pl}}: {{W+|pl|trafić}}, {{W+|pl|łapać}}, {{W+|pl|chwytać}}
* {{Z|pt}}: {{W+|pt|acertar}}, {{W+|pt|atingir}}, {{W-|pt|dar no alvo}}, {{W+|pt|confiscar}}, {{W+|pt|apanhar}}, {{W+|pt|aprisionar}}, {{W+|pt|capturar}}, {{W+|pt|escaldar}}, {{W-|pt|escalfar}}
* {{Z|ro}}: {{W+|ro|apuca}}, {{W+|ro|prinde}}, {{W+|ro|captura}}
* {{Z|ru}}: {{W+|ru|бить}}, {{W+|ru|ударить}}, {{W+|ru|воспринимать}}, {{W-|ru|наложить арест на}}, {{W+|ru|взять}}
* {{Z|srn}}: {{W-|srn|fanga}}, {{W-|srn|grabu}}
* {{Z|es}}: {{W+|es|agarrar}}, {{W+|es|prender}}, {{W+|es|coger}}, {{W+|es|acertar}}, {{W-|es|dar en}}, {{W-|es|dar con}}, {{W+|es|percibir}}, {{W+|es|confiscar}}, {{W+|es|atrapar}}, {{W+|es|capturar}}, {{W+|es|asir}}, {{W-|es|apoderarse de}}, {{W+|es|escaldar}}
* {{Z|sv}}: {{W+|sv|konfiskera}}, {{W+|sv|fånga}}, {{W+|sv|köpa}}, {{W+|sv|inhandla}}, {{W+|sv|erhålla}}, {{W+|sv|få}}, {{W+|sv|anskaffa}}
* {{Z|tr}}: (zorla) {{W+|tr|almak}}, {{W+|tr|almak}}
* {{Z|el}}: {{W+|el|αιχμαλωτίζω}}
{{werger-bin}}
=== Navdêr ===
{{navdêr|ku|z=m}}
# {{mane?|ku}}
#* {{bênimûne|ku}}
==== Tewandin ====
{{ku-tewîn-nav/nû|mê}}
==== Werger ====
{{werger-ser}}
{{werger-bin}}
g5erbok5al48h8lheupz9uvvc3rf43l
Enqere
0
4432
6333637
6325949
2026-08-14T14:59:38Z
Wikihez
7344
[[Bikarhêner:Wikihez/wergerîne.js|Wergerîne]] ji [[en:Ankara]], [[Bikarhêner:Wikihez/templateScript2.js|TS]]: sererastkirin
6333637
wikitext
text/x-wiki
== {{ziman|ku}} ==
=== Bilêvkirin ===
* {{ku-IPA}}
* {{ku-kîte}}
=== Serenav ===
[[Wêne:Ankara_(16290014657).jpg|thumb|Enqere]]
{{serenav|ku|z=m}}
# {{bajar|ku|koord=39.92, 32.85}} [[paytext|Paytextê]] [[Tirkiye|Tirkiyê]].
#* {{bêmînak|ku}}
==== Tewandin ====
{{ku-tewîn-nav/nû|mê|guherto=hemû}}
==== Formên alternatîv ====
* {{g|ku|Anqere}}
==== Jê ====
* {{g|ku|enqereyî}}
==== Etîmolojî ====
Ji {{ji|la|ku|Ancyra|t=[[paytext]]ê [[Galatya]]yê}}, ji {{ji|el|ku|Ἄγκυρα|tr=Ankura}} ji {{ji|el|ku|ἄγκυρα<tr:ankura><t:[[lenger]], [[ankor]]>}}
==== Bêhtir bixwîne ====
* {{pedia}}
==== Werger ====
{{werger-ser|paytextê Tirkiyeyê}}
* {{Z|af}}: {{W-|af|Ankara}}
* {{Z|sq}}: {{W-|sq|Ankaraja|m}}, {{W-|sq|Ankara|m}}
* {{Z|de}}: {{W+|de|Ankara|nt}}, {{W+|de|Angora|nt}}
* {{Z|am}}: {{W-|am|አንካራ}}
* {{Z|arc}}:
*: {{Z|aii}}: {{W-|aii|ܐܲܢܩܵܪܵܐ|tr=Anqāra|m}}
* {{Z|ast}}: {{W+|ast|Ankara}}, {{W+|ast|Ancara}}
* {{Z|az}}: {{W+|az|Ankara}}
* {{Z|eu}}: {{W+|eu|Ankara}}
* {{Z|be}}: {{W-|be|Анкара́|m}}
* {{Z|bn}}: {{W-|bn|আঙ্কারা}}
* {{Z|bg}}: {{W+|bg|Анка́ра|m}}
* {{Z|my}}: {{W-|my|[[အန်ကာရာ]][[မြို့]]}}
* {{Z|cs}}: {{W+|cs|Ankara|m}}
* {{Z|zh}}:
*: {{Z|yue}}: {{W-|yue|安卡拉|tr=on1 kaa1 laai1}}
*: {{Z|cmn}}: {{W+|cmn|安卡拉|tr=Ānkǎlā}}
* {{Z|da}}: {{W-|da|Ankara|nt}}
* {{Z|id}}: {{W-|id|Ankara}}
* {{Z|ar}}: {{W+|ar|أَنْقَرَة|m}}, {{W-|ar|أَنْكُورِيَة|m}}
*: {{Z|arz}}: {{W-|arz|أنقرة|m|tr=ʔanqara}}
*: {{Z|acw}}: {{W-|acw|أنقرة|m|tr=ʔangara, ʔanqara}}
* {{Z|hy}}: {{W+|hy|Անկարա}}
* {{Z|eo}}: {{W+|eo|Ankara}}, {{W+|eo|Ankaro}}
* {{Z|et}}: {{W+|et|Ankara}}
* {{Z|fi}}: {{W+|fi|Ankara}}
* {{Z|fr}}: {{W+|fr|Ankara|m}}
* {{Z|gl}}: {{W+|gl|Ancara}}
* {{Z|ka}}: {{W+|ka|ანკარა}}
* {{Z|hi}}: {{W-|hi|अंकारा|n}}
* {{Z|nl}}: {{W+|nl|Ankara|nt}}
* {{Z|he}}: {{W-|he|אַנְקָרָה|m|tr=ánkara}}
* {{Z|io}}: {{W-|io|Ankara}}
* {{Z|en}}: {{W+|en|Ankara}}
* {{Z|ia}}: {{W-|ia|Ankara}}
* {{Z|ga}}: {{W-|ga|Ankara}}
* {{Z|it}}: {{W+|it|Ankara|m}}
* {{Z|is}}: {{W-|is|Ankara}}
* {{Z|ja}}: {{W+|ja|アンカラ|tr=Ankara}}
* {{Z|ca}}: {{W+|ca|Ankara|m}}
* {{Z|ky}}: {{W+|ky|Анкара}}
* {{Z|ko}}: {{W+|ko|^앙카라}}
* {{Z|la}}: {{W+|la|Ancyra|m}}
* {{Z|lv}}: {{W+|lv|Ankara|m}}
* {{Z|lo}}: {{W-|lo|ອັງກາລາ}}
* {{Z|lt}}: {{W-|lt|Ankara|m}}
* {{Z|mk}}: {{W-|mk|Анкара|m}}
* {{Z|ms}}: {{W-|ms|Ankara}}
* {{Z|mt}}: {{W-|mt|Ankara}}
* {{Z|mr}}: {{W-|mr|अंकारा|nt}}
* {{Z|hu}}: {{W+|hu|Ankara}}
* {{Z|mn}}:
*: Kirîlî: {{W-|mn|Анкара}}
* {{Z|nds}}: {{W-|nds|Ankara}}
* {{Z|no}}:
*: {{Z|nb}}: {{W+|nb|Ankara|nt}}
* {{Z|ug}}: {{W-|ug|ئەنقەرە}}
* {{Z|uz}}: {{W-|uz|Anqara}}
* {{Z|ps}}: {{W-|ps|انقره|m|tr=anqara}}
* {{Z|fa}}:
*: {{Z|fa-cls}}: {{W-|fa-cls|اَنْقَرَه}}
*: {{Z|prs}}: {{W-|prs|اَنْقَرَه}}
*: {{Z|fa-ira}}: {{W-|fa-ira|آنْکارا}}, {{W-|fa-ira|اَنْگورِیِه}}, {{W-|fa-ira|اَنْگورِه}}
* {{Z|pl}}: {{W+|pl|Ankara|m}}
* {{Z|pt}}: {{W+|pt|Ancara|m}}
* {{Z|kk}}: {{W-|kk|Анкара}}
* {{Z|rhg}}: {{W-|rhg|Añgkera}}
* {{Z|ro}}: {{W+|ro|Ankara|m}}
* {{Z|ru}}: {{W+|ru|Анкара́|m}}
* {{Z|scn}}: {{W-|scn|Àncara|m}}, {{W-|scn|Àncura|m}}
* {{Z|sh}}:
*: Kirîlî: {{W-|sh|А̀нкара|m}}
*: Latînî: {{W+|sh|Ànkara|m}}
* {{Z|sk}}: {{W+|sk|Ankara|m}}
* {{Z|sl}}: {{W-|sl|Ankara|m}}
* {{Z|es}}: {{W+|es|Angora|m}}, {{W+|es|Ankara}}
* {{Z|sv}}: {{W+|sv|Ankara|nt}}
* {{Z|tg}}: {{W-|tg|Анқара}}
* {{Z|tl}}: {{W-|tl|Ankara}}
* {{Z|th}}: {{W-|th|อังการา}}
* {{Z|tt}}: {{W-|tt|Әнкара}}
* {{Z|tr}}: {{W+|tr|Ankara}}
*: {{Z|ota}}: {{W-|ota|آنقاره|tr=Anḳara}}
* {{Z|tk}}: {{W-|tk|Ankara}}
* {{Z|ur}}: {{W-|ur|اَن٘قَرَہ|n}}
* {{Z|uk}}: {{W+|uk|Анкара́|m}}
* {{Z|vi}}: {{W-|vi|Ăng-ca-ra}}
* {{Z|cy}}: {{W-|cy|Ankara}}
* {{Z|km}}: {{W+|km|អង់ការ៉ា}}
* {{Z|yi}}: {{W-|yi|אַנקאַראַ|nt}}
* {{Z|el}}: {{W+|el|Άγκυρα|m}}
*: {{Z|grc}}: {{W-|grc|Ἄγκῡρα|m}}
{{werger-bin}}
:{{werger çavkanî|en|Ankara|beş=Ev qismê Wergerê|oldid=91554692}}
lfvwt5y6470hdwkjo3orc0w4h79qnhk
6333644
6333637
2026-08-14T15:09:13Z
Wikihez
7344
/* Etîmolojî */ [[Bikarhêner:Wikihez/templateScript2.js|TS]]: Ji [[en:Ankara|en.wikt]]
6333644
wikitext
text/x-wiki
== {{ziman|ku}} ==
=== Bilêvkirin ===
* {{ku-IPA}}
* {{ku-kîte}}
=== Serenav ===
[[Wêne:Ankara_(16290014657).jpg|thumb|Enqere]]
{{serenav|ku|z=m}}
# {{bajar|ku|koord=39.92, 32.85}} [[paytext|Paytextê]] [[Tirkiye|Tirkiyê]].
#* {{bêmînak|ku}}
==== Tewandin ====
{{ku-tewîn-nav/nû|mê|guherto=hemû}}
==== Formên alternatîv ====
* {{g|ku|Anqere}}
==== Jê ====
* {{g|ku|enqereyî}}
==== Etîmolojî ====
Ji {{deyn|ota|en|آنقره|tr=Ankara}}, ji {{ji|gkm|en|-}} û {{ji|grc|en|Ἄγκυρα}}, ji {{qal|grc|ἄγκυρα||[[lenger]], [[ankor]]}} ji ber tewîna Çemê [[Çölova]] berî ku bi Çemê [[Cubuk]] bibe yek û di netîceyê de Enqere derdikeve feqat mihtemelen herwiha {{ferhengok|yekser|tercimeyeke yekser}} a navekî mehelî ye ku taliyê ji {{ji|hit|en|𒌷𒀭𒆪𒉿|tr=Ankuwa}} hatiye dariştin, ew jî taliyê ji {{ji|ine-pro|en|*h₂enk-||[[enîşk]], [[tewîn]]}}.
==== Bêhtir bixwîne ====
* {{pedia}}
==== Werger ====
{{werger-ser|paytextê Tirkiyeyê}}
* {{Z|af}}: {{W-|af|Ankara}}
* {{Z|sq}}: {{W-|sq|Ankaraja|m}}, {{W-|sq|Ankara|m}}
* {{Z|de}}: {{W+|de|Ankara|nt}}, {{W+|de|Angora|nt}}
* {{Z|am}}: {{W-|am|አንካራ}}
* {{Z|arc}}:
*: {{Z|aii}}: {{W-|aii|ܐܲܢܩܵܪܵܐ|tr=Anqāra|m}}
* {{Z|ast}}: {{W+|ast|Ankara}}, {{W+|ast|Ancara}}
* {{Z|az}}: {{W+|az|Ankara}}
* {{Z|eu}}: {{W+|eu|Ankara}}
* {{Z|be}}: {{W-|be|Анкара́|m}}
* {{Z|bn}}: {{W-|bn|আঙ্কারা}}
* {{Z|bg}}: {{W+|bg|Анка́ра|m}}
* {{Z|my}}: {{W-|my|[[အန်ကာရာ]][[မြို့]]}}
* {{Z|cs}}: {{W+|cs|Ankara|m}}
* {{Z|zh}}:
*: {{Z|yue}}: {{W-|yue|安卡拉|tr=on1 kaa1 laai1}}
*: {{Z|cmn}}: {{W+|cmn|安卡拉|tr=Ānkǎlā}}
* {{Z|da}}: {{W-|da|Ankara|nt}}
* {{Z|id}}: {{W-|id|Ankara}}
* {{Z|ar}}: {{W+|ar|أَنْقَرَة|m}}, {{W-|ar|أَنْكُورِيَة|m}}
*: {{Z|arz}}: {{W-|arz|أنقرة|m|tr=ʔanqara}}
*: {{Z|acw}}: {{W-|acw|أنقرة|m|tr=ʔangara, ʔanqara}}
* {{Z|hy}}: {{W+|hy|Անկարա}}
* {{Z|eo}}: {{W+|eo|Ankara}}, {{W+|eo|Ankaro}}
* {{Z|et}}: {{W+|et|Ankara}}
* {{Z|fi}}: {{W+|fi|Ankara}}
* {{Z|fr}}: {{W+|fr|Ankara|m}}
* {{Z|gl}}: {{W+|gl|Ancara}}
* {{Z|ka}}: {{W+|ka|ანკარა}}
* {{Z|hi}}: {{W-|hi|अंकारा|n}}
* {{Z|nl}}: {{W+|nl|Ankara|nt}}
* {{Z|he}}: {{W-|he|אַנְקָרָה|m|tr=ánkara}}
* {{Z|io}}: {{W-|io|Ankara}}
* {{Z|en}}: {{W+|en|Ankara}}
* {{Z|ia}}: {{W-|ia|Ankara}}
* {{Z|ga}}: {{W-|ga|Ankara}}
* {{Z|it}}: {{W+|it|Ankara|m}}
* {{Z|is}}: {{W-|is|Ankara}}
* {{Z|ja}}: {{W+|ja|アンカラ|tr=Ankara}}
* {{Z|ca}}: {{W+|ca|Ankara|m}}
* {{Z|ky}}: {{W+|ky|Анкара}}
* {{Z|ko}}: {{W+|ko|^앙카라}}
* {{Z|la}}: {{W+|la|Ancyra|m}}
* {{Z|lv}}: {{W+|lv|Ankara|m}}
* {{Z|lo}}: {{W-|lo|ອັງກາລາ}}
* {{Z|lt}}: {{W-|lt|Ankara|m}}
* {{Z|mk}}: {{W-|mk|Анкара|m}}
* {{Z|ms}}: {{W-|ms|Ankara}}
* {{Z|mt}}: {{W-|mt|Ankara}}
* {{Z|mr}}: {{W-|mr|अंकारा|nt}}
* {{Z|hu}}: {{W+|hu|Ankara}}
* {{Z|mn}}:
*: Kirîlî: {{W-|mn|Анкара}}
* {{Z|nds}}: {{W-|nds|Ankara}}
* {{Z|no}}:
*: {{Z|nb}}: {{W+|nb|Ankara|nt}}
* {{Z|ug}}: {{W-|ug|ئەنقەرە}}
* {{Z|uz}}: {{W-|uz|Anqara}}
* {{Z|ps}}: {{W-|ps|انقره|m|tr=anqara}}
* {{Z|fa}}:
*: {{Z|fa-cls}}: {{W-|fa-cls|اَنْقَرَه}}
*: {{Z|prs}}: {{W-|prs|اَنْقَرَه}}
*: {{Z|fa-ira}}: {{W-|fa-ira|آنْکارا}}, {{W-|fa-ira|اَنْگورِیِه}}, {{W-|fa-ira|اَنْگورِه}}
* {{Z|pl}}: {{W+|pl|Ankara|m}}
* {{Z|pt}}: {{W+|pt|Ancara|m}}
* {{Z|kk}}: {{W-|kk|Анкара}}
* {{Z|rhg}}: {{W-|rhg|Añgkera}}
* {{Z|ro}}: {{W+|ro|Ankara|m}}
* {{Z|ru}}: {{W+|ru|Анкара́|m}}
* {{Z|scn}}: {{W-|scn|Àncara|m}}, {{W-|scn|Àncura|m}}
* {{Z|sh}}:
*: Kirîlî: {{W-|sh|А̀нкара|m}}
*: Latînî: {{W+|sh|Ànkara|m}}
* {{Z|sk}}: {{W+|sk|Ankara|m}}
* {{Z|sl}}: {{W-|sl|Ankara|m}}
* {{Z|es}}: {{W+|es|Angora|m}}, {{W+|es|Ankara}}
* {{Z|sv}}: {{W+|sv|Ankara|nt}}
* {{Z|tg}}: {{W-|tg|Анқара}}
* {{Z|tl}}: {{W-|tl|Ankara}}
* {{Z|th}}: {{W-|th|อังการา}}
* {{Z|tt}}: {{W-|tt|Әнкара}}
* {{Z|tr}}: {{W+|tr|Ankara}}
*: {{Z|ota}}: {{W-|ota|آنقاره|tr=Anḳara}}
* {{Z|tk}}: {{W-|tk|Ankara}}
* {{Z|ur}}: {{W-|ur|اَن٘قَرَہ|n}}
* {{Z|uk}}: {{W+|uk|Анкара́|m}}
* {{Z|vi}}: {{W-|vi|Ăng-ca-ra}}
* {{Z|cy}}: {{W-|cy|Ankara}}
* {{Z|km}}: {{W+|km|អង់ការ៉ា}}
* {{Z|yi}}: {{W-|yi|אַנקאַראַ|nt}}
* {{Z|el}}: {{W+|el|Άγκυρα|m}}
*: {{Z|grc}}: {{W-|grc|Ἄγκῡρα|m}}
{{werger-bin}}
:{{werger çavkanî|en|Ankara|beş=Ev qismê Wergerê|oldid=91554692}}
qvg8ucbxi68ks21pjjjay7e9mge1w0s
6333645
6333644
2026-08-14T15:09:45Z
Wikihez
7344
/* Etîmolojî */ (bi [[MediaWiki:Gadget-AjaxEdit.js|AjaxEdit]]ê re)
6333645
wikitext
text/x-wiki
== {{ziman|ku}} ==
=== Bilêvkirin ===
* {{ku-IPA}}
* {{ku-kîte}}
=== Serenav ===
[[Wêne:Ankara_(16290014657).jpg|thumb|Enqere]]
{{serenav|ku|z=m}}
# {{bajar|ku|koord=39.92, 32.85}} [[paytext|Paytextê]] [[Tirkiye|Tirkiyê]].
#* {{bêmînak|ku}}
==== Tewandin ====
{{ku-tewîn-nav/nû|mê|guherto=hemû}}
==== Formên alternatîv ====
* {{g|ku|Anqere}}
==== Jê ====
* {{g|ku|enqereyî}}
==== Etîmolojî ====
Ji {{deyn|ota|ku|آنقره|tr=Ankara}}, ji {{ji|gkm|ku|-}} û {{ji|grc|ku|Ἄγκυρα}}, ji {{qal|grc|ἄγκυρα||[[lenger]], [[ankor]]}} ji ber tewîna Çemê [[Çölova]] berî ku bi Çemê [[Cubuk]] bibe yek û di netîceyê de Enqere derdikeve feqat mihtemelen herwiha {{ferhengok|yekser|tercimeyeke yekser}} a navekî mehelî ye ku taliyê ji {{ji|hit|ku|𒌷𒀭𒆪𒉿|tr=Ankuwa}} hatiye dariştin, ew jî taliyê ji {{ji|ine-pro|ku|*h₂enk-||[[enîşk]], [[tewîn]]}}.
==== Bêhtir bixwîne ====
* {{pedia}}
==== Werger ====
{{werger-ser|paytextê Tirkiyeyê}}
* {{Z|af}}: {{W-|af|Ankara}}
* {{Z|sq}}: {{W-|sq|Ankaraja|m}}, {{W-|sq|Ankara|m}}
* {{Z|de}}: {{W+|de|Ankara|nt}}, {{W+|de|Angora|nt}}
* {{Z|am}}: {{W-|am|አንካራ}}
* {{Z|arc}}:
*: {{Z|aii}}: {{W-|aii|ܐܲܢܩܵܪܵܐ|tr=Anqāra|m}}
* {{Z|ast}}: {{W+|ast|Ankara}}, {{W+|ast|Ancara}}
* {{Z|az}}: {{W+|az|Ankara}}
* {{Z|eu}}: {{W+|eu|Ankara}}
* {{Z|be}}: {{W-|be|Анкара́|m}}
* {{Z|bn}}: {{W-|bn|আঙ্কারা}}
* {{Z|bg}}: {{W+|bg|Анка́ра|m}}
* {{Z|my}}: {{W-|my|[[အန်ကာရာ]][[မြို့]]}}
* {{Z|cs}}: {{W+|cs|Ankara|m}}
* {{Z|zh}}:
*: {{Z|yue}}: {{W-|yue|安卡拉|tr=on1 kaa1 laai1}}
*: {{Z|cmn}}: {{W+|cmn|安卡拉|tr=Ānkǎlā}}
* {{Z|da}}: {{W-|da|Ankara|nt}}
* {{Z|id}}: {{W-|id|Ankara}}
* {{Z|ar}}: {{W+|ar|أَنْقَرَة|m}}, {{W-|ar|أَنْكُورِيَة|m}}
*: {{Z|arz}}: {{W-|arz|أنقرة|m|tr=ʔanqara}}
*: {{Z|acw}}: {{W-|acw|أنقرة|m|tr=ʔangara, ʔanqara}}
* {{Z|hy}}: {{W+|hy|Անկարա}}
* {{Z|eo}}: {{W+|eo|Ankara}}, {{W+|eo|Ankaro}}
* {{Z|et}}: {{W+|et|Ankara}}
* {{Z|fi}}: {{W+|fi|Ankara}}
* {{Z|fr}}: {{W+|fr|Ankara|m}}
* {{Z|gl}}: {{W+|gl|Ancara}}
* {{Z|ka}}: {{W+|ka|ანკარა}}
* {{Z|hi}}: {{W-|hi|अंकारा|n}}
* {{Z|nl}}: {{W+|nl|Ankara|nt}}
* {{Z|he}}: {{W-|he|אַנְקָרָה|m|tr=ánkara}}
* {{Z|io}}: {{W-|io|Ankara}}
* {{Z|en}}: {{W+|en|Ankara}}
* {{Z|ia}}: {{W-|ia|Ankara}}
* {{Z|ga}}: {{W-|ga|Ankara}}
* {{Z|it}}: {{W+|it|Ankara|m}}
* {{Z|is}}: {{W-|is|Ankara}}
* {{Z|ja}}: {{W+|ja|アンカラ|tr=Ankara}}
* {{Z|ca}}: {{W+|ca|Ankara|m}}
* {{Z|ky}}: {{W+|ky|Анкара}}
* {{Z|ko}}: {{W+|ko|^앙카라}}
* {{Z|la}}: {{W+|la|Ancyra|m}}
* {{Z|lv}}: {{W+|lv|Ankara|m}}
* {{Z|lo}}: {{W-|lo|ອັງກາລາ}}
* {{Z|lt}}: {{W-|lt|Ankara|m}}
* {{Z|mk}}: {{W-|mk|Анкара|m}}
* {{Z|ms}}: {{W-|ms|Ankara}}
* {{Z|mt}}: {{W-|mt|Ankara}}
* {{Z|mr}}: {{W-|mr|अंकारा|nt}}
* {{Z|hu}}: {{W+|hu|Ankara}}
* {{Z|mn}}:
*: Kirîlî: {{W-|mn|Анкара}}
* {{Z|nds}}: {{W-|nds|Ankara}}
* {{Z|no}}:
*: {{Z|nb}}: {{W+|nb|Ankara|nt}}
* {{Z|ug}}: {{W-|ug|ئەنقەرە}}
* {{Z|uz}}: {{W-|uz|Anqara}}
* {{Z|ps}}: {{W-|ps|انقره|m|tr=anqara}}
* {{Z|fa}}:
*: {{Z|fa-cls}}: {{W-|fa-cls|اَنْقَرَه}}
*: {{Z|prs}}: {{W-|prs|اَنْقَرَه}}
*: {{Z|fa-ira}}: {{W-|fa-ira|آنْکارا}}, {{W-|fa-ira|اَنْگورِیِه}}, {{W-|fa-ira|اَنْگورِه}}
* {{Z|pl}}: {{W+|pl|Ankara|m}}
* {{Z|pt}}: {{W+|pt|Ancara|m}}
* {{Z|kk}}: {{W-|kk|Анкара}}
* {{Z|rhg}}: {{W-|rhg|Añgkera}}
* {{Z|ro}}: {{W+|ro|Ankara|m}}
* {{Z|ru}}: {{W+|ru|Анкара́|m}}
* {{Z|scn}}: {{W-|scn|Àncara|m}}, {{W-|scn|Àncura|m}}
* {{Z|sh}}:
*: Kirîlî: {{W-|sh|А̀нкара|m}}
*: Latînî: {{W+|sh|Ànkara|m}}
* {{Z|sk}}: {{W+|sk|Ankara|m}}
* {{Z|sl}}: {{W-|sl|Ankara|m}}
* {{Z|es}}: {{W+|es|Angora|m}}, {{W+|es|Ankara}}
* {{Z|sv}}: {{W+|sv|Ankara|nt}}
* {{Z|tg}}: {{W-|tg|Анқара}}
* {{Z|tl}}: {{W-|tl|Ankara}}
* {{Z|th}}: {{W-|th|อังการา}}
* {{Z|tt}}: {{W-|tt|Әнкара}}
* {{Z|tr}}: {{W+|tr|Ankara}}
*: {{Z|ota}}: {{W-|ota|آنقاره|tr=Anḳara}}
* {{Z|tk}}: {{W-|tk|Ankara}}
* {{Z|ur}}: {{W-|ur|اَن٘قَرَہ|n}}
* {{Z|uk}}: {{W+|uk|Анкара́|m}}
* {{Z|vi}}: {{W-|vi|Ăng-ca-ra}}
* {{Z|cy}}: {{W-|cy|Ankara}}
* {{Z|km}}: {{W+|km|អង់ការ៉ា}}
* {{Z|yi}}: {{W-|yi|אַנקאַראַ|nt}}
* {{Z|el}}: {{W+|el|Άγκυρα|m}}
*: {{Z|grc}}: {{W-|grc|Ἄγκῡρα|m}}
{{werger-bin}}
:{{werger çavkanî|en|Ankara|beş=Ev qismê Wergerê|oldid=91554692}}
l3jn2boqbrd2m6mi7mlmt9tdkd7w3jg
6333655
6333645
2026-08-14T15:37:19Z
Ghybu
1393
/* Serenav */ ew şablon were rakirin...
6333655
wikitext
text/x-wiki
== {{ziman|ku}} ==
=== Bilêvkirin ===
* {{ku-IPA}}
* {{ku-kîte}}
=== Serenav ===
[[Wêne:Ankara_(16290014657).jpg|thumb|Enqere]]
{{serenav|ku|z=m}}
# {{e|ku|bajar}} [[paytext|Paytextê]] [[Tirkiye|Tirkiyê]].
#* {{bêmînak|ku}}
==== Tewandin ====
{{ku-tewîn-nav/nû|mê|guherto=hemû}}
==== Formên alternatîv ====
* {{g|ku|Anqere}}
==== Jê ====
* {{g|ku|enqereyî}}
==== Etîmolojî ====
Ji {{deyn|ota|ku|آنقره|tr=Ankara}}, ji {{ji|gkm|ku|-}} û {{ji|grc|ku|Ἄγκυρα}}, ji {{qal|grc|ἄγκυρα||[[lenger]], [[ankor]]}} ji ber tewîna Çemê [[Çölova]] berî ku bi Çemê [[Cubuk]] bibe yek û di netîceyê de Enqere derdikeve feqat mihtemelen herwiha {{ferhengok|yekser|tercimeyeke yekser}} a navekî mehelî ye ku taliyê ji {{ji|hit|ku|𒌷𒀭𒆪𒉿|tr=Ankuwa}} hatiye dariştin, ew jî taliyê ji {{ji|ine-pro|ku|*h₂enk-||[[enîşk]], [[tewîn]]}}.
==== Bêhtir bixwîne ====
* {{pedia}}
==== Werger ====
{{werger-ser|paytextê Tirkiyeyê}}
* {{Z|af}}: {{W-|af|Ankara}}
* {{Z|sq}}: {{W-|sq|Ankaraja|m}}, {{W-|sq|Ankara|m}}
* {{Z|de}}: {{W+|de|Ankara|nt}}, {{W+|de|Angora|nt}}
* {{Z|am}}: {{W-|am|አንካራ}}
* {{Z|arc}}:
*: {{Z|aii}}: {{W-|aii|ܐܲܢܩܵܪܵܐ|tr=Anqāra|m}}
* {{Z|ast}}: {{W+|ast|Ankara}}, {{W+|ast|Ancara}}
* {{Z|az}}: {{W+|az|Ankara}}
* {{Z|eu}}: {{W+|eu|Ankara}}
* {{Z|be}}: {{W-|be|Анкара́|m}}
* {{Z|bn}}: {{W-|bn|আঙ্কারা}}
* {{Z|bg}}: {{W+|bg|Анка́ра|m}}
* {{Z|my}}: {{W-|my|[[အန်ကာရာ]][[မြို့]]}}
* {{Z|cs}}: {{W+|cs|Ankara|m}}
* {{Z|zh}}:
*: {{Z|yue}}: {{W-|yue|安卡拉|tr=on1 kaa1 laai1}}
*: {{Z|cmn}}: {{W+|cmn|安卡拉|tr=Ānkǎlā}}
* {{Z|da}}: {{W-|da|Ankara|nt}}
* {{Z|id}}: {{W-|id|Ankara}}
* {{Z|ar}}: {{W+|ar|أَنْقَرَة|m}}, {{W-|ar|أَنْكُورِيَة|m}}
*: {{Z|arz}}: {{W-|arz|أنقرة|m|tr=ʔanqara}}
*: {{Z|acw}}: {{W-|acw|أنقرة|m|tr=ʔangara, ʔanqara}}
* {{Z|hy}}: {{W+|hy|Անկարա}}
* {{Z|eo}}: {{W+|eo|Ankara}}, {{W+|eo|Ankaro}}
* {{Z|et}}: {{W+|et|Ankara}}
* {{Z|fi}}: {{W+|fi|Ankara}}
* {{Z|fr}}: {{W+|fr|Ankara|m}}
* {{Z|gl}}: {{W+|gl|Ancara}}
* {{Z|ka}}: {{W+|ka|ანკარა}}
* {{Z|hi}}: {{W-|hi|अंकारा|n}}
* {{Z|nl}}: {{W+|nl|Ankara|nt}}
* {{Z|he}}: {{W-|he|אַנְקָרָה|m|tr=ánkara}}
* {{Z|io}}: {{W-|io|Ankara}}
* {{Z|en}}: {{W+|en|Ankara}}
* {{Z|ia}}: {{W-|ia|Ankara}}
* {{Z|ga}}: {{W-|ga|Ankara}}
* {{Z|it}}: {{W+|it|Ankara|m}}
* {{Z|is}}: {{W-|is|Ankara}}
* {{Z|ja}}: {{W+|ja|アンカラ|tr=Ankara}}
* {{Z|ca}}: {{W+|ca|Ankara|m}}
* {{Z|ky}}: {{W+|ky|Анкара}}
* {{Z|ko}}: {{W+|ko|^앙카라}}
* {{Z|la}}: {{W+|la|Ancyra|m}}
* {{Z|lv}}: {{W+|lv|Ankara|m}}
* {{Z|lo}}: {{W-|lo|ອັງກາລາ}}
* {{Z|lt}}: {{W-|lt|Ankara|m}}
* {{Z|mk}}: {{W-|mk|Анкара|m}}
* {{Z|ms}}: {{W-|ms|Ankara}}
* {{Z|mt}}: {{W-|mt|Ankara}}
* {{Z|mr}}: {{W-|mr|अंकारा|nt}}
* {{Z|hu}}: {{W+|hu|Ankara}}
* {{Z|mn}}:
*: Kirîlî: {{W-|mn|Анкара}}
* {{Z|nds}}: {{W-|nds|Ankara}}
* {{Z|no}}:
*: {{Z|nb}}: {{W+|nb|Ankara|nt}}
* {{Z|ug}}: {{W-|ug|ئەنقەرە}}
* {{Z|uz}}: {{W-|uz|Anqara}}
* {{Z|ps}}: {{W-|ps|انقره|m|tr=anqara}}
* {{Z|fa}}:
*: {{Z|fa-cls}}: {{W-|fa-cls|اَنْقَرَه}}
*: {{Z|prs}}: {{W-|prs|اَنْقَرَه}}
*: {{Z|fa-ira}}: {{W-|fa-ira|آنْکارا}}, {{W-|fa-ira|اَنْگورِیِه}}, {{W-|fa-ira|اَنْگورِه}}
* {{Z|pl}}: {{W+|pl|Ankara|m}}
* {{Z|pt}}: {{W+|pt|Ancara|m}}
* {{Z|kk}}: {{W-|kk|Анкара}}
* {{Z|rhg}}: {{W-|rhg|Añgkera}}
* {{Z|ro}}: {{W+|ro|Ankara|m}}
* {{Z|ru}}: {{W+|ru|Анкара́|m}}
* {{Z|scn}}: {{W-|scn|Àncara|m}}, {{W-|scn|Àncura|m}}
* {{Z|sh}}:
*: Kirîlî: {{W-|sh|А̀нкара|m}}
*: Latînî: {{W+|sh|Ànkara|m}}
* {{Z|sk}}: {{W+|sk|Ankara|m}}
* {{Z|sl}}: {{W-|sl|Ankara|m}}
* {{Z|es}}: {{W+|es|Angora|m}}, {{W+|es|Ankara}}
* {{Z|sv}}: {{W+|sv|Ankara|nt}}
* {{Z|tg}}: {{W-|tg|Анқара}}
* {{Z|tl}}: {{W-|tl|Ankara}}
* {{Z|th}}: {{W-|th|อังการา}}
* {{Z|tt}}: {{W-|tt|Әнкара}}
* {{Z|tr}}: {{W+|tr|Ankara}}
*: {{Z|ota}}: {{W-|ota|آنقاره|tr=Anḳara}}
* {{Z|tk}}: {{W-|tk|Ankara}}
* {{Z|ur}}: {{W-|ur|اَن٘قَرَہ|n}}
* {{Z|uk}}: {{W+|uk|Анкара́|m}}
* {{Z|vi}}: {{W-|vi|Ăng-ca-ra}}
* {{Z|cy}}: {{W-|cy|Ankara}}
* {{Z|km}}: {{W+|km|អង់ការ៉ា}}
* {{Z|yi}}: {{W-|yi|אַנקאַראַ|nt}}
* {{Z|el}}: {{W+|el|Άγκυρα|m}}
*: {{Z|grc}}: {{W-|grc|Ἄγκῡρα|m}}
{{werger-bin}}
:{{werger çavkanî|en|Ankara|beş=Ev qismê Wergerê|oldid=91554692}}
6hff9nfpqohp63tsrhcc2pjc6w8n2pr
6333658
6333655
2026-08-14T15:41:06Z
Balyozbot
7867
[[Special:PermanentLink/6298023|Bot]]: rêzkirina beşan
6333658
wikitext
text/x-wiki
== {{ziman|ku}} ==
=== Bilêvkirin ===
* {{ku-IPA}}
* {{ku-kîte}}
=== Serenav ===
[[Wêne:Ankara_(16290014657).jpg|thumb|Enqere]]
{{serenav|ku|z=m}}
# {{e|ku|bajar}} [[paytext|Paytextê]] [[Tirkiye|Tirkiyê]].
#* {{bêmînak|ku}}
==== Tewandin ====
{{ku-tewîn-nav/nû|mê|guherto=hemû}}
==== Formên alternatîv ====
* {{g|ku|Anqere}}
==== Jê ====
* {{g|ku|enqereyî}}
==== Etîmolojî ====
Ji {{deyn|ota|ku|آنقره|tr=Ankara}}, ji {{ji|gkm|ku|-}} û {{ji|grc|ku|Ἄγκυρα}}, ji {{qal|grc|ἄγκυρα||[[lenger]], [[ankor]]}} ji ber tewîna Çemê [[Çölova]] berî ku bi Çemê [[Cubuk]] bibe yek û di netîceyê de Enqere derdikeve feqat mihtemelen herwiha {{ferhengok|yekser|tercimeyeke yekser}} a navekî mehelî ye ku taliyê ji {{ji|hit|ku|𒌷𒀭𒆪𒉿|tr=Ankuwa}} hatiye dariştin, ew jî taliyê ji {{ji|ine-pro|ku|*h₂enk-||[[enîşk]], [[tewîn]]}}.
==== Bêhtir bixwîne ====
* {{pedia}}
==== Werger ====
{{werger-ser|paytextê Tirkiyeyê}}
* {{Z|af}}: {{W-|af|Ankara}}
* {{Z|sq}}: {{W-|sq|Ankaraja|m}}, {{W-|sq|Ankara|m}}
* {{Z|de}}: {{W+|de|Ankara|nt}}, {{W+|de|Angora|nt}}
* {{Z|am}}: {{W-|am|አንካራ}}
* {{Z|arc}}:
*: {{Z|aii}}: {{W-|aii|ܐܲܢܩܵܪܵܐ|tr=Anqāra|m}}
* {{Z|ast}}: {{W+|ast|Ankara}}, {{W+|ast|Ancara}}
* {{Z|az}}: {{W+|az|Ankara}}
* {{Z|eu}}: {{W+|eu|Ankara}}
* {{Z|be}}: {{W-|be|Анкара́|m}}
* {{Z|bn}}: {{W-|bn|আঙ্কারা}}
* {{Z|bg}}: {{W+|bg|Анка́ра|m}}
* {{Z|my}}: {{W-|my|[[အန်ကာရာ]][[မြို့]]}}
* {{Z|cs}}: {{W+|cs|Ankara|m}}
* {{Z|zh}}:
*: {{Z|yue}}: {{W-|yue|安卡拉|tr=on1 kaa1 laai1}}
*: {{Z|cmn}}: {{W+|cmn|安卡拉|tr=Ānkǎlā}}
* {{Z|da}}: {{W-|da|Ankara|nt}}
* {{Z|id}}: {{W-|id|Ankara}}
* {{Z|ar}}: {{W+|ar|أَنْقَرَة|m}}, {{W-|ar|أَنْكُورِيَة|m}}
*: {{Z|arz}}: {{W-|arz|أنقرة|m|tr=ʔanqara}}
*: {{Z|acw}}: {{W-|acw|أنقرة|m|tr=ʔangara, ʔanqara}}
* {{Z|hy}}: {{W+|hy|Անկարա}}
* {{Z|eo}}: {{W+|eo|Ankara}}, {{W+|eo|Ankaro}}
* {{Z|et}}: {{W+|et|Ankara}}
* {{Z|fi}}: {{W+|fi|Ankara}}
* {{Z|fr}}: {{W+|fr|Ankara|m}}
* {{Z|gl}}: {{W+|gl|Ancara}}
* {{Z|ka}}: {{W+|ka|ანკარა}}
* {{Z|hi}}: {{W-|hi|अंकारा|n}}
* {{Z|nl}}: {{W+|nl|Ankara|nt}}
* {{Z|he}}: {{W-|he|אַנְקָרָה|m|tr=ánkara}}
* {{Z|io}}: {{W-|io|Ankara}}
* {{Z|en}}: {{W+|en|Ankara}}
* {{Z|ia}}: {{W-|ia|Ankara}}
* {{Z|ga}}: {{W-|ga|Ankara}}
* {{Z|it}}: {{W+|it|Ankara|m}}
* {{Z|is}}: {{W-|is|Ankara}}
* {{Z|ja}}: {{W+|ja|アンカラ|tr=Ankara}}
* {{Z|ca}}: {{W+|ca|Ankara|m}}
* {{Z|ky}}: {{W+|ky|Анкара}}
* {{Z|ko}}: {{W+|ko|^앙카라}}
* {{Z|la}}: {{W+|la|Ancyra|m}}
* {{Z|lv}}: {{W+|lv|Ankara|m}}
* {{Z|lo}}: {{W-|lo|ອັງກາລາ}}
* {{Z|lt}}: {{W-|lt|Ankara|m}}
* {{Z|mk}}: {{W-|mk|Анкара|m}}
* {{Z|ms}}: {{W-|ms|Ankara}}
* {{Z|mt}}: {{W-|mt|Ankara}}
* {{Z|mr}}: {{W-|mr|अंकारा|nt}}
* {{Z|hu}}: {{W+|hu|Ankara}}
* {{Z|mn}}:
*: Kirîlî: {{W-|mn|Анкара}}
* {{Z|nds}}: {{W-|nds|Ankara}}
* {{Z|no}}:
*: {{Z|nb}}: {{W+|nb|Ankara|nt}}
* {{Z|ug}}: {{W-|ug|ئەنقەرە}}
* {{Z|uz}}: {{W-|uz|Anqara}}
* {{Z|ps}}: {{W-|ps|انقره|m|tr=anqara}}
* {{Z|fa}}:
*: {{Z|fa-cls}}: {{W-|fa-cls|اَنْقَرَه}}
*: {{Z|prs}}: {{W-|prs|اَنْقَرَه}}
*: {{Z|fa-ira}}: {{W-|fa-ira|آنْکارا}}, {{W-|fa-ira|اَنْگورِیِه}}, {{W-|fa-ira|اَنْگورِه}}
* {{Z|pl}}: {{W+|pl|Ankara|m}}
* {{Z|pt}}: {{W+|pt|Ancara|m}}
* {{Z|kk}}: {{W-|kk|Анкара}}
* {{Z|rhg}}: {{W-|rhg|Añgkera}}
* {{Z|ro}}: {{W+|ro|Ankara|m}}
* {{Z|ru}}: {{W+|ru|Анкара́|m}}
* {{Z|scn}}: {{W-|scn|Àncara|m}}, {{W-|scn|Àncura|m}}
* {{Z|sh}}:
*: Kirîlî: {{W-|sh|А̀нкара|m}}
*: Latînî: {{W+|sh|Ànkara|m}}
* {{Z|sk}}: {{W+|sk|Ankara|m}}
* {{Z|sl}}: {{W-|sl|Ankara|m}}
* {{Z|es}}: {{W+|es|Angora|m}}, {{W+|es|Ankara}}
* {{Z|sv}}: {{W+|sv|Ankara|nt}}
* {{Z|tg}}: {{W-|tg|Анқара}}
* {{Z|tl}}: {{W-|tl|Ankara}}
* {{Z|th}}: {{W-|th|อังการา}}
* {{Z|tt}}: {{W-|tt|Әнкара}}
* {{Z|tr}}: {{W+|tr|Ankara}}
*: {{Z|ota}}: {{W-|ota|آنقاره|tr=Anḳara}}
* {{Z|tk}}: {{W-|tk|Ankara}}
* {{Z|ur}}: {{W-|ur|اَن٘قَرَہ|n}}
* {{Z|uk}}: {{W+|uk|Анкара́|m}}
* {{Z|vi}}: {{W-|vi|Ăng-ca-ra}}
* {{Z|cy}}: {{W-|cy|Ankara}}
* {{Z|km}}: {{W+|km|អង់ការ៉ា}}
* {{Z|yi}}: {{W-|yi|אַנקאַראַ|nt}}
* {{Z|el}}: {{W+|el|Άγκυρα|m}}
*: {{Z|grc}}: {{W-|grc|Ἄγκῡρα|m}}
{{werger-bin}}
:{{werger çavkanî|en|Ankara|beş=Ev qismê Wergerê|oldid=91554692}}
4rct5j1pyvuw95pbpl61doej5tidj1l
enîşk
0
16318
6333643
6306117
2026-08-14T15:07:52Z
Wikihez
7344
/* Formên alternatîv */ bavê min wisa dibêje :D (bi [[MediaWiki:Gadget-AjaxEdit.js|AjaxEdit]]ê re)
6333643
wikitext
text/x-wiki
== {{ziman|ku}} ==
=== Bilêvkirin ===
* {{ku-IPA|'enîşk}}
* {{deng|ku|LL-Q36368 (kur)-Dildadil-enîşk.wav|Deng|dever=Amed}}
** {{deng|ku|LL-Q36163 (kmr)-Ebulfîda-enîşk.wav|dever=Bidlîs}}
* {{ku-kîte}}
=== Navdêr ===
[[Wêne:Elbow coude.JPG|thumb|250px|enîşk]]
{{navdêr|ku|z=m}}
# [[ejnû]], [[aren]], [[arinc]], <br>[[navber]]a [[zend]]ê û [[çengil]]î <br>(ew [[pişk]] ya [[teqrîben]] li [[nîv]]a [[dest]]î ji [[mil]]î ta [[til]]an ya ku [[çemîn|diçeme]] anku [[tewîn|ditewe]])
#* {{bêmînak|ku}}
==== Tewandin ====
{{ku-tewîn-nav/nû|mê}}
====Bi alfabeyên din====
* {{ku-ar|ئهنیشک}}
==== Formên alternatîv ====
* [[anîşk]]
* [[hanîşk]]
* {{hw|ku|henîşk||Riha}}
* [[hinîşk]]
* [[inîşk]]
==== Etîmolojî ====
Ji {{ji|ine-pro|ku|*h₃elen-}}, {{ji|ira-pro|ku|*eresn-}}, [[hevreh]]a avestayî ''ereθnî-'', farisiya kevn ''ereşnî-'', sogdî ''r'ync [arênç/arînç]'', pehlewî ''arêşn'', farisî {{g|fa|آرن|tr=aren}}, {{g|fa|آرنج|tr=arenc}}, {{g|fa|ارش|tr=ereş}}, hewramî [[herejne]], zazakî [[arasna]], [[arisna]], soranî {{g|ckb|ئانیشک|tr=anîşk}}. Kurmancî û soranî bi [[metatez]]ê: -ş-n- --> -n-ş-. Herwiha hevreha sanskrîtî [[अरत्नि]] (eretnî), ermenî [[ուլն]] (uln: [[patik]]), slaviya kevn [[ланита]] (lanîta: [[gep]], [[alek]]), yûnaniya kevn [[ὠλένη]] (ōlenē), îngilîzî [[ell]] û [[elbow]], almanî [[Ellbogen]]...
==== Bide ber ====
* [[enî]]
* [[hînişk]]
==== Werger ====
{{werger-ser}}
* {{Z|ab}}: {{W-|ab|амашьхәылҵ|cuda=а-машьхәы́лҵ}}
* {{Z|aa}}: {{W-|aa|sucúl}}, {{W-|aa|cusul}}
* {{Z|af}}: {{W+|af|elmboog}}
* {{Z|sq}}: {{W+|sq|bërryl|n}}
* {{Z|pdc}}: {{W-|pdc|Ellboge|n}}
* {{Z|de}}: {{W+|de|Ellbogen|n}}
* {{Z|ryn}}: {{W-|ryn|肘|tr=ひじ, hiji}}
* {{Z|ams}}: {{W-|ams|肘|tr=すぃずぃ, sïzï}}
* {{Z|am}}: {{W-|am|ክርን}}
* {{Z|an}}: {{W-|an|codo}}
* {{Z|rup}}: {{W-|rup|cot|nt}}
* {{Z|as}}: {{W-|as|কিলাকুটি}}, {{W-|as|কিল}}
* {{Z|ast}}: {{W+|ast|coldu|n}}
* {{Z|ask}}: {{W-|ask|ořiŋ}}
* {{Z|av}}: {{W-|av|гӏункӏрукъ}}
* {{Z|ay}}: {{W-|ay|mujlli}}
* {{Z|az}}: {{W+|az|dirsək}}
* {{Z|eu}}: {{W+|eu|ukondo}}
* {{Z|ba}}: {{W-|ba|терһәк|sc=Cyrl}}; {{W-|ba|сығанаҡ|sc=Cyrl}}
* {{Z|bbl}}: {{W-|bbl|ოლოკ}}
* {{Z|sne}}: {{W-|sne|siku}}
* {{Z|be}}: {{W-|be|ло́каць|n}}
* {{Z|bn}}: {{W-|bn|বাঁক}}, {{W-|bn|মোড়}}
* {{Z|br}}: {{W+|br|ilin|n}}
* {{Z|bug}}: {{W-|bug|siku}}
* {{Z|bg}}: {{W-|bg|ла́кът|n}}
* {{Z|my}}: {{W+|my|တံတောင်}}
* {{Z|ccc}}: {{W-|ccc|takolo}}
* {{Z|ce}}: {{W-|ce|гола}}
* {{Z|cs}}: {{W+|cs|loket|n}}
* {{Z|ny}}: {{W-|ny|gongono}}
* {{Z|zh}}:
*: {{Z|cmn}}: {{W+|cmn|肘|tr=zhǒu}}, {{W-|cmn|肘部|tr=zhǒubù}}, {{W-|cmn|胳膊肘兒|tr=gēbozhǒur}}, {{W+|cmn|胳膊肘子|tr=gēbozhǒuzi}}
* {{Z|da}}: {{W+|da|albue|g}}
* {{Z|dv}}: {{W-|dv|އުޅަބޮށި}}
* {{Z|id}}: {{W+|id|siku}}
* {{Z|ar}}: {{W-|ar|كُوع|n}}, {{W+|ar|مِرْفَق|n}}
*: {{Z|arz}}: {{W-|arz|كوع|n|tr=kūʕ}}
*: {{Z|acw}}: {{W-|acw|كوع|n|tr=kūʕ}}
*: {{Z|acm}}: {{W-|acm|عكس|n|tr=ʕekes}}
*: {{Z|ary}}: {{W-|ary|مرفق|n|tr=marfaq}}, {{W-|ary|كوع|n|tr=kūʕ}}
* {{Z|hy}}: {{W+|hy|արմունկ}}
*: {{Z|xcl}}: {{W-|xcl|արմուկն}}
* {{Z|eo}}: {{W+|eo|kubuto}}
* {{Z|et}}: {{W+|et|küünarnukk}}
* {{Z|eve}}: {{W-|eve|ечэн}}
* {{Z|evn}}: {{W-|evn|ичэн}}
* {{Z|fa}}: {{W+|fa|آرنج|tr=âranj}}
* {{Z|fo}}: {{W-|fo|albogi}}
* {{Z|fi}}: {{W+|fi|kyynärpää}}
* {{Z|fr}}: {{W+|fr|coude|n}}
* {{Z|fur}}: {{W-|fur|comedon|n}}
* {{Z|frr}}:
*: Föhr: {{W-|frr|eelemböög|n}}
* {{Z|fy}}: {{W-|fy|earmtakke|nt}}
* {{Z|gl}}: {{W+|gl|cóbado|n}}, {{W+|gl|cotobelo|n}}, {{W+|gl|cotomelo|n}}, {{W-|gl|coldo|n}}
* {{Z|ka}}: {{W-|ka|იდაყვი}}
* {{Z|ht}}: {{W-|ht|koud}}
* {{Z|mba}}: {{W-|mba|siku}}
* {{Z|hi}}: {{W+|hi|कुहनी|m}}
* {{Z|hil}}: {{W-|hil|siko}}
* {{Z|mww}}: {{W-|mww|luj tshib}}
* {{Z|nl}}: {{W+|nl|elleboog|n}}
* {{Z|he}}: {{W-|he|מַרְפֵּק|n|tr=marpek}}
* {{Z|io}}: {{W+|io|kudo}}
* {{Z|ilo}}: {{W-|ilo|siko}}
* {{Z|ang}}: {{W-|ang|elnboga|n}}
* {{Z|en}}: {{W+|en|elbow}}
* {{Z|inh}}: {{W-|inh|пхьарса гола}}, {{W-|inh|гола}}
* {{Z|ia}}: {{W-|ia|cubito}}
* {{Z|iu}}: {{W-|iu|ᐁᑯᓯᒃ|sc=Cans}}, {{W-|iu|ᐃᑯᓯᒃ|sc=Cans}}
* {{Z|ga}}: {{W-|ga|uillinn|m}}
* {{Z|ist}}: {{W-|ist|cumio|n}}
* {{Z|it}}: {{W+|it|gomito|n}}
* {{Z|is}}: {{W+|is|olnbogi|n}}
* {{Z|ja}}: {{W+|ja|肘|tr=ひじ, hiji|sc=Jpan}}
* {{Z|kaw}}: {{W-|kaw|siku}}
* {{Z|jv}}: {{W+|jv|sikut}}
* {{Z|bsh}}: {{W-|bsh|āřa}}
* {{Z|kea}}: {{W-|kea|kutubélu}}
* {{Z|ca}}: {{W+|ca|colze|n}}
* {{Z|kzg}}: {{W-|kzg|肘|tr=ぴじ, piji}}
* {{Z|ky}}: {{W+|ky|чыканак|sc=Cyrl}}
* {{Z|ki}}: {{W-|ki|kĩgokora|c7}}
* {{Z|si}}: {{W-|si|වැලමිට}}
* {{Z|rw}}: {{W-|rw|inkokora}}
* {{Z|koi}}: {{W-|koi|гырддза}}
* {{Z|ko}}: {{W+|ko|팔꿈치}}
* {{Z|kw}}: {{W-|kw|elin|n}}, {{W-|kw|elyn}}
* {{Z|crk}}: {{W-|crk|tôskwan}}
* {{Z|xug}}: {{W-|xug|肘|tr=ぴじー, pijī}}
* {{Z|lld}}: {{W-|lld|cumedon|n}}
* {{Z|ltg}}: {{W-|ltg|alkiune|m}}
* {{Z|la}}: {{W-|la|cubitum|nt}}, {{W-|la|cubitus|n}}, {{W-|la|ulna|m}}
* {{Z|lv}}: {{W+|lv|elkonis|n}}
* {{Z|lo}}: {{W+|lo|ສອກ}}
* {{Z|lzz}}: {{W-|lzz|დუყუ}}
* {{Z|lij}}: {{W-|lij|gommio|n}}
* {{Z|li}}: {{W+|li|èllebaog}}
* {{Z|lt}}: {{W-|lt|alkūnė|m}}
* {{Z|lmo}}: {{W-|lmo|gombet}}
* {{Z|khb}}: {{W-|khb|ᦉᦸᧅ}}, {{W-|khb|ᦉᦸᧅᧈ}}
* {{Z|lb}}: {{W+|lb|Ielebou}}
* {{Z|mdh}}: {{W-|mdh|sicu}}
* {{Z|mak}}: {{W-|mak|jiku}}
* {{Z|mk}}: {{W-|mk|лакт|n}}
* {{Z|ms}}: {{W+|ms|siku}}
* {{Z|mnc}}: {{W-|mnc|ᠮᠠᠶᠠᠨ}}
* {{Z|mnk}}: {{W-|mnk|nonkoŋo}}
* {{Z|gv}}: {{W-|gv|uillin}}
* {{Z|msk}}: {{W-|msk|siko}}
* {{Z|mi}}: {{W-|mi|tuke}}
* {{Z|mrw}}: {{W-|mrw|siko}}
* Marî:
*: {{Z|mhr}}: {{W-|mhr|кынервуй}}
*: {{Z|mrj}}: {{W-|mrj|кӹнервуй}}
* {{Z|yua}}: {{W-|yua|kuuk}}
* {{Z|hu}}: {{W+|hu|könyök}}
* {{Z|xmf}}: {{W-|xmf|დუჸი}}
* {{Z|mel}}: {{W-|mel|basikou}}
* {{Z|mvi}}: {{W-|mvi|肘|tr=ぴず, pizu}}
* {{Z|min}}: {{W-|min|siku}}
* {{Z|mn}}: {{W+|mn|тохой}}
* {{Z|nah}}: {{W+|nah|moliktli}}
* {{Z|gld}}: {{W-|gld|хуйчэн}}
* {{Z|nv}}: {{W-|nv|achʼoozhlaaʼ}}
* {{Z|nds}}: {{W-|nds|Ellbaag|n}}
* {{Z|ne}}: {{W-|ne|कुहिनो}}
* {{Z|niv}}: {{W-|niv|тоӈӄ}}
* {{Z|nrf}}: {{W-|nrf|coute|n}}
* {{Z|no}}:
*: {{Z|nb}}: {{W+|nb|albue|n}}
*: {{Z|nn}}: {{W-|nn|olboge|n}}
* {{Z|ood}}: {{W-|ood|sihsh}}
* {{Z|oj}}: {{W-|oj|indooskwan}}
* {{Z|okn}}: {{W-|okn|肘|tr=ひじ, hiji}}
* {{Z|ryu}}: {{W-|ryu|肘|tr=ひじ, hiji}}
* {{Z|oc}}: {{W+|oc|coide|n}}
* {{Z|om}}: {{W-|om|ciqilee}}
* {{Z|os}}: {{W-|os|рӕмбын}}
* {{Z|ota}}: {{W-|ota|دیرسك|tr=dirsek}}, {{W-|ota|مرفق|tr=mirfak}}
* {{Z|ug}}: {{W-|ug|جەينەك}}
* {{Z|uz}}: {{W+|uz|tirsak}}
* {{Z|pag}}: {{W-|pag|sico}}
* {{Z|ps}}: {{W-|ps|څنګل|m|tr=śangël|sc=ps-Arab}}
* {{Z|pms}}: {{W-|pms|gomo|n}}
* {{Z|pdt}}: {{W-|pdt|Alboagen|n}}
* {{Z|pox}}: {{W-|pox|lüťit|n}}
* {{Z|pl}}: {{W+|pl|łokieć|n}}
* {{Z|pt}}: {{W+|pt|cotovelo|n}}
* {{Z|prn}}: {{W-|prn|vuẓo}}
* {{Z|prg}}: {{W-|prg|alkūns}}
* {{Z|kk}}: {{W+|kk|шынтақ}}
* {{Z|cop}}: {{W-|cop|ⲕⲱⲓ|n}}
* {{Z|rgn}}: {{W-|rgn|gòmt|n}}
* {{Z|rm}}: {{W-|rm|cumbel}}, {{W-|rm|cundun}}, {{W-|rm|combel}}, {{W-|rm|chandun}}
* {{Z|rom}}: {{W-|rom|कुनी|tr=kunī|sc=Deva}}
* {{Z|ro}}: {{W+|ro|cot|nt}}
* {{Z|ru}}: {{W-|ru|ло́коть|n}}
* {{Z|ssy}}: {{W-|ssy|xullufta}}
* Samî:
*: {{Z|smn}}: {{W-|smn|käŋŋir}}
*: {{Z|se}}: {{W-|se|gardnjil}}, {{W-|se|gargŋil}}, {{W-|se|gaigŋir}}
*: {{Z|sms}}: {{W-|sms|kõõnjâr}}
* {{Z|sm}}: {{W-|sm|tualima}}
* {{Z|sa}}: {{W+|sa|कूर्पर|n}}
* {{Z|sc}}: {{W-|sc|cuidu}}, {{W-|sc|cuitu}}, {{W-|sc|cúvidu}}, {{W-|sc|guidu}}, {{W-|sc|cuidale}}, {{W-|sc|coidale}}
* {{Z|sib}}: {{W-|sib|cikun}}
* {{Z|ceb}}: {{W-|ceb|siko}}
* {{Z|scn}}: {{W+|scn|gùvitu|n}}, {{W+|scn|ùvitu|n}}
* {{Z|sh}}:
*: Kirîlî: {{W-|sh|ла̏кат|n|sc=Cyrl}}
*: Latînî: {{W+|sh|lȁkat|n}}
* {{Z|sco}}: {{W-|sco|elbae}}
*: {{Z|sco}}: {{W-|sco|elbi}}
* {{Z|cu}}:
*: Kirîlî: {{W-|cu|лакъть|n}}
* {{Z|orv}}: {{W-|orv|локъть|n}}, {{W-|orv|лакъть|n}}
* {{Z|sk}}: {{W+|sk|lakeť|n}}
* {{Z|sl}}: {{W+|sl|komolec|n}}
* {{Z|so}}: {{W-|so|suxul}}
* Sorbî:
*: {{Z|dsb}}: {{W-|dsb|łokś|n}}
*: {{Z|hsb}}: {{W-|hsb|łochć|n}}
* {{Z|nso}}: {{W-|nso|setšu}}
* {{Z|st}}: {{W-|st|setswe}}
* {{Z|es}}: {{W+|es|codo|n}}
* {{Z|xsv}}: {{W-|xsv|alkunas|n}}
* {{Z|sva}}: {{W-|sva|უღუ̂ნა}}
* {{Z|sw}}: {{W-|sw|kisugudi}}, {{W-|sw|kiwiko}}
* {{Z|sv}}: {{W+|sv|armbåge|g}}
* {{Z|xsr}}: {{W-|xsr|གྲེ་མུང|tr=thrimung}}
* {{Z|tg}}: {{W-|tg|оринҷ}}
* {{Z|tl}}: {{W-|tl|sìko}}
* {{Z|ta}}: {{W+|ta|முழங்கை}}
* {{Z|roa-tar}}: {{W-|roa-tar|gomite|n}}
* {{Z|rif}}: {{W-|rif|taɣmart|m}}
* {{Z|tsg}}: {{W-|tsg|siku}}
* {{Z|th}}: {{W+|th|ข้อศอก}}, {{W+|th|ศอก}}
* {{Z|te}}: {{W+|te|మోచేయి}}
* {{Z|tt}}: {{W+|tt|терсәк}}
* {{Z|tet}}: {{W-|tet|sikun}}
* {{Z|ti}}: {{W-|ti|ኩርናዕ}}
* {{Z|tr}}: {{W+|tr|dirsek}}
* {{Z|tk}}: {{W+|tk|tirsek}}
* {{Z|bo}}: {{W-|bo|གྲུ་མོ}}
* {{Z|tpi}}: {{W-|tpi|skru}}, {{W-|tpi|skru bilong han}}
* {{Z|tkn}}: {{W-|tkn|肘|tr=すぃずぃ, sïzï}}
* {{Z|to}}: {{W-|to|tui'inima}}
* {{Z|udi}}: {{W-|udi|сун}}
* {{Z|udm}}: {{W-|udm|гырпум}}
* {{Z|ur}}: {{W-|ur|کہنی|tr=kuhnī|m}}
* {{Z|uk}}: {{W-|uk|лі́коть|n}}
* {{Z|vec}}: {{W-|vec|gùmio|n}}, {{W-|vec|gòmio|n}}, {{W-|vec|gòmbio|n}}, {{W-|vec|comio|n}}, {{W+|vec|comet|n}}
* {{Z|vi}}: {{W-|vi|khuỷu tay}}
* {{Z|vo}}: {{W+|vo|kubit}}
* {{Z|wbk}}: {{W-|wbk|avřa}}
* {{Z|wa}}: {{W+|wa|keute|n}}, {{W+|wa|cotiron|n}}
* {{Z|cy}}: {{W+|cy|penelin|n|m}}
* {{Z|wrh}}: {{W-|wrh|ngunha}}
* {{Z|wym}}: {{W-|wym|ełböga|n}}
* {{Z|win}}: {{W-|win|aišak}}
* {{Z|wo}}: {{W-|wo|cóñcó}}
* {{Z|km}}: {{W+|km|កែង}}, {{W+|km|ដុំដៃ}}, {{W-|km|កែងដៃ}}
* {{Z|xh}}: {{W-|xh|ingqiniba}}
* {{Z|rys}}: {{W-|rys|肘|tr=ぴじぃ, pizï}}
* {{Z|yka}}: {{W-|yka|siku}}
* {{Z|yi}}: {{W-|yi|עלנבויגן|n}}
* {{Z|yoi}}: {{W-|yoi|肘|tr=ひでぃんか, hidinka}}
* {{Z|yox}}: {{W-|yox|肘|tr=ぴじ, piji}}
* {{Z|el}}: {{W+|el|αγκώνας|n}}, {{W+|el|ωλένη|m}}
*: Kevn: {{W-|grc|ἀγκών|n}}, {{W-|grc|ὠλένη|m}}
* {{Z|za}}: {{W-|za|gencueg}}, {{W-|za|genfwngz}}, {{W-|za|doegsok}}
{{werger-bin}}
1rvhhuesfibz89ezstckzyzfc4npvm4
6333653
6333643
2026-08-14T15:36:14Z
Ghybu
1393
/* Bilêvkirin */
6333653
wikitext
text/x-wiki
== {{ziman|ku}} ==
=== Bilêvkirin ===
* {{ku-IPA|'enîşk}}
* {{deng|ku|LL-Q36368 (kur)-Dildadil-enîşk.wav|Deng|dever=Amed}}
* {{deng|ku|LL-Q36163 (kmr)-Ebulfîda-enîşk.wav|dever=Bidlîs}}
* {{ku-kîte}}
=== Navdêr ===
[[Wêne:Elbow coude.JPG|thumb|250px|enîşk]]
{{navdêr|ku|z=m}}
# [[ejnû]], [[aren]], [[arinc]], <br>[[navber]]a [[zend]]ê û [[çengil]]î <br>(ew [[pişk]] ya [[teqrîben]] li [[nîv]]a [[dest]]î ji [[mil]]î ta [[til]]an ya ku [[çemîn|diçeme]] anku [[tewîn|ditewe]])
#* {{bêmînak|ku}}
==== Tewandin ====
{{ku-tewîn-nav/nû|mê}}
====Bi alfabeyên din====
* {{ku-ar|ئهنیشک}}
==== Formên alternatîv ====
* [[anîşk]]
* [[hanîşk]]
* {{hw|ku|henîşk||Riha}}
* [[hinîşk]]
* [[inîşk]]
==== Etîmolojî ====
Ji {{ji|ine-pro|ku|*h₃elen-}}, {{ji|ira-pro|ku|*eresn-}}, [[hevreh]]a avestayî ''ereθnî-'', farisiya kevn ''ereşnî-'', sogdî ''r'ync [arênç/arînç]'', pehlewî ''arêşn'', farisî {{g|fa|آرن|tr=aren}}, {{g|fa|آرنج|tr=arenc}}, {{g|fa|ارش|tr=ereş}}, hewramî [[herejne]], zazakî [[arasna]], [[arisna]], soranî {{g|ckb|ئانیشک|tr=anîşk}}. Kurmancî û soranî bi [[metatez]]ê: -ş-n- --> -n-ş-. Herwiha hevreha sanskrîtî [[अरत्नि]] (eretnî), ermenî [[ուլն]] (uln: [[patik]]), slaviya kevn [[ланита]] (lanîta: [[gep]], [[alek]]), yûnaniya kevn [[ὠλένη]] (ōlenē), îngilîzî [[ell]] û [[elbow]], almanî [[Ellbogen]]...
==== Bide ber ====
* [[enî]]
* [[hînişk]]
==== Werger ====
{{werger-ser}}
* {{Z|ab}}: {{W-|ab|амашьхәылҵ|cuda=а-машьхәы́лҵ}}
* {{Z|aa}}: {{W-|aa|sucúl}}, {{W-|aa|cusul}}
* {{Z|af}}: {{W+|af|elmboog}}
* {{Z|sq}}: {{W+|sq|bërryl|n}}
* {{Z|pdc}}: {{W-|pdc|Ellboge|n}}
* {{Z|de}}: {{W+|de|Ellbogen|n}}
* {{Z|ryn}}: {{W-|ryn|肘|tr=ひじ, hiji}}
* {{Z|ams}}: {{W-|ams|肘|tr=すぃずぃ, sïzï}}
* {{Z|am}}: {{W-|am|ክርን}}
* {{Z|an}}: {{W-|an|codo}}
* {{Z|rup}}: {{W-|rup|cot|nt}}
* {{Z|as}}: {{W-|as|কিলাকুটি}}, {{W-|as|কিল}}
* {{Z|ast}}: {{W+|ast|coldu|n}}
* {{Z|ask}}: {{W-|ask|ořiŋ}}
* {{Z|av}}: {{W-|av|гӏункӏрукъ}}
* {{Z|ay}}: {{W-|ay|mujlli}}
* {{Z|az}}: {{W+|az|dirsək}}
* {{Z|eu}}: {{W+|eu|ukondo}}
* {{Z|ba}}: {{W-|ba|терһәк|sc=Cyrl}}; {{W-|ba|сығанаҡ|sc=Cyrl}}
* {{Z|bbl}}: {{W-|bbl|ოლოკ}}
* {{Z|sne}}: {{W-|sne|siku}}
* {{Z|be}}: {{W-|be|ло́каць|n}}
* {{Z|bn}}: {{W-|bn|বাঁক}}, {{W-|bn|মোড়}}
* {{Z|br}}: {{W+|br|ilin|n}}
* {{Z|bug}}: {{W-|bug|siku}}
* {{Z|bg}}: {{W-|bg|ла́кът|n}}
* {{Z|my}}: {{W+|my|တံတောင်}}
* {{Z|ccc}}: {{W-|ccc|takolo}}
* {{Z|ce}}: {{W-|ce|гола}}
* {{Z|cs}}: {{W+|cs|loket|n}}
* {{Z|ny}}: {{W-|ny|gongono}}
* {{Z|zh}}:
*: {{Z|cmn}}: {{W+|cmn|肘|tr=zhǒu}}, {{W-|cmn|肘部|tr=zhǒubù}}, {{W-|cmn|胳膊肘兒|tr=gēbozhǒur}}, {{W+|cmn|胳膊肘子|tr=gēbozhǒuzi}}
* {{Z|da}}: {{W+|da|albue|g}}
* {{Z|dv}}: {{W-|dv|އުޅަބޮށި}}
* {{Z|id}}: {{W+|id|siku}}
* {{Z|ar}}: {{W-|ar|كُوع|n}}, {{W+|ar|مِرْفَق|n}}
*: {{Z|arz}}: {{W-|arz|كوع|n|tr=kūʕ}}
*: {{Z|acw}}: {{W-|acw|كوع|n|tr=kūʕ}}
*: {{Z|acm}}: {{W-|acm|عكس|n|tr=ʕekes}}
*: {{Z|ary}}: {{W-|ary|مرفق|n|tr=marfaq}}, {{W-|ary|كوع|n|tr=kūʕ}}
* {{Z|hy}}: {{W+|hy|արմունկ}}
*: {{Z|xcl}}: {{W-|xcl|արմուկն}}
* {{Z|eo}}: {{W+|eo|kubuto}}
* {{Z|et}}: {{W+|et|küünarnukk}}
* {{Z|eve}}: {{W-|eve|ечэн}}
* {{Z|evn}}: {{W-|evn|ичэн}}
* {{Z|fa}}: {{W+|fa|آرنج|tr=âranj}}
* {{Z|fo}}: {{W-|fo|albogi}}
* {{Z|fi}}: {{W+|fi|kyynärpää}}
* {{Z|fr}}: {{W+|fr|coude|n}}
* {{Z|fur}}: {{W-|fur|comedon|n}}
* {{Z|frr}}:
*: Föhr: {{W-|frr|eelemböög|n}}
* {{Z|fy}}: {{W-|fy|earmtakke|nt}}
* {{Z|gl}}: {{W+|gl|cóbado|n}}, {{W+|gl|cotobelo|n}}, {{W+|gl|cotomelo|n}}, {{W-|gl|coldo|n}}
* {{Z|ka}}: {{W-|ka|იდაყვი}}
* {{Z|ht}}: {{W-|ht|koud}}
* {{Z|mba}}: {{W-|mba|siku}}
* {{Z|hi}}: {{W+|hi|कुहनी|m}}
* {{Z|hil}}: {{W-|hil|siko}}
* {{Z|mww}}: {{W-|mww|luj tshib}}
* {{Z|nl}}: {{W+|nl|elleboog|n}}
* {{Z|he}}: {{W-|he|מַרְפֵּק|n|tr=marpek}}
* {{Z|io}}: {{W+|io|kudo}}
* {{Z|ilo}}: {{W-|ilo|siko}}
* {{Z|ang}}: {{W-|ang|elnboga|n}}
* {{Z|en}}: {{W+|en|elbow}}
* {{Z|inh}}: {{W-|inh|пхьарса гола}}, {{W-|inh|гола}}
* {{Z|ia}}: {{W-|ia|cubito}}
* {{Z|iu}}: {{W-|iu|ᐁᑯᓯᒃ|sc=Cans}}, {{W-|iu|ᐃᑯᓯᒃ|sc=Cans}}
* {{Z|ga}}: {{W-|ga|uillinn|m}}
* {{Z|ist}}: {{W-|ist|cumio|n}}
* {{Z|it}}: {{W+|it|gomito|n}}
* {{Z|is}}: {{W+|is|olnbogi|n}}
* {{Z|ja}}: {{W+|ja|肘|tr=ひじ, hiji|sc=Jpan}}
* {{Z|kaw}}: {{W-|kaw|siku}}
* {{Z|jv}}: {{W+|jv|sikut}}
* {{Z|bsh}}: {{W-|bsh|āřa}}
* {{Z|kea}}: {{W-|kea|kutubélu}}
* {{Z|ca}}: {{W+|ca|colze|n}}
* {{Z|kzg}}: {{W-|kzg|肘|tr=ぴじ, piji}}
* {{Z|ky}}: {{W+|ky|чыканак|sc=Cyrl}}
* {{Z|ki}}: {{W-|ki|kĩgokora|c7}}
* {{Z|si}}: {{W-|si|වැලමිට}}
* {{Z|rw}}: {{W-|rw|inkokora}}
* {{Z|koi}}: {{W-|koi|гырддза}}
* {{Z|ko}}: {{W+|ko|팔꿈치}}
* {{Z|kw}}: {{W-|kw|elin|n}}, {{W-|kw|elyn}}
* {{Z|crk}}: {{W-|crk|tôskwan}}
* {{Z|xug}}: {{W-|xug|肘|tr=ぴじー, pijī}}
* {{Z|lld}}: {{W-|lld|cumedon|n}}
* {{Z|ltg}}: {{W-|ltg|alkiune|m}}
* {{Z|la}}: {{W-|la|cubitum|nt}}, {{W-|la|cubitus|n}}, {{W-|la|ulna|m}}
* {{Z|lv}}: {{W+|lv|elkonis|n}}
* {{Z|lo}}: {{W+|lo|ສອກ}}
* {{Z|lzz}}: {{W-|lzz|დუყუ}}
* {{Z|lij}}: {{W-|lij|gommio|n}}
* {{Z|li}}: {{W+|li|èllebaog}}
* {{Z|lt}}: {{W-|lt|alkūnė|m}}
* {{Z|lmo}}: {{W-|lmo|gombet}}
* {{Z|khb}}: {{W-|khb|ᦉᦸᧅ}}, {{W-|khb|ᦉᦸᧅᧈ}}
* {{Z|lb}}: {{W+|lb|Ielebou}}
* {{Z|mdh}}: {{W-|mdh|sicu}}
* {{Z|mak}}: {{W-|mak|jiku}}
* {{Z|mk}}: {{W-|mk|лакт|n}}
* {{Z|ms}}: {{W+|ms|siku}}
* {{Z|mnc}}: {{W-|mnc|ᠮᠠᠶᠠᠨ}}
* {{Z|mnk}}: {{W-|mnk|nonkoŋo}}
* {{Z|gv}}: {{W-|gv|uillin}}
* {{Z|msk}}: {{W-|msk|siko}}
* {{Z|mi}}: {{W-|mi|tuke}}
* {{Z|mrw}}: {{W-|mrw|siko}}
* Marî:
*: {{Z|mhr}}: {{W-|mhr|кынервуй}}
*: {{Z|mrj}}: {{W-|mrj|кӹнервуй}}
* {{Z|yua}}: {{W-|yua|kuuk}}
* {{Z|hu}}: {{W+|hu|könyök}}
* {{Z|xmf}}: {{W-|xmf|დუჸი}}
* {{Z|mel}}: {{W-|mel|basikou}}
* {{Z|mvi}}: {{W-|mvi|肘|tr=ぴず, pizu}}
* {{Z|min}}: {{W-|min|siku}}
* {{Z|mn}}: {{W+|mn|тохой}}
* {{Z|nah}}: {{W+|nah|moliktli}}
* {{Z|gld}}: {{W-|gld|хуйчэн}}
* {{Z|nv}}: {{W-|nv|achʼoozhlaaʼ}}
* {{Z|nds}}: {{W-|nds|Ellbaag|n}}
* {{Z|ne}}: {{W-|ne|कुहिनो}}
* {{Z|niv}}: {{W-|niv|тоӈӄ}}
* {{Z|nrf}}: {{W-|nrf|coute|n}}
* {{Z|no}}:
*: {{Z|nb}}: {{W+|nb|albue|n}}
*: {{Z|nn}}: {{W-|nn|olboge|n}}
* {{Z|ood}}: {{W-|ood|sihsh}}
* {{Z|oj}}: {{W-|oj|indooskwan}}
* {{Z|okn}}: {{W-|okn|肘|tr=ひじ, hiji}}
* {{Z|ryu}}: {{W-|ryu|肘|tr=ひじ, hiji}}
* {{Z|oc}}: {{W+|oc|coide|n}}
* {{Z|om}}: {{W-|om|ciqilee}}
* {{Z|os}}: {{W-|os|рӕмбын}}
* {{Z|ota}}: {{W-|ota|دیرسك|tr=dirsek}}, {{W-|ota|مرفق|tr=mirfak}}
* {{Z|ug}}: {{W-|ug|جەينەك}}
* {{Z|uz}}: {{W+|uz|tirsak}}
* {{Z|pag}}: {{W-|pag|sico}}
* {{Z|ps}}: {{W-|ps|څنګل|m|tr=śangël|sc=ps-Arab}}
* {{Z|pms}}: {{W-|pms|gomo|n}}
* {{Z|pdt}}: {{W-|pdt|Alboagen|n}}
* {{Z|pox}}: {{W-|pox|lüťit|n}}
* {{Z|pl}}: {{W+|pl|łokieć|n}}
* {{Z|pt}}: {{W+|pt|cotovelo|n}}
* {{Z|prn}}: {{W-|prn|vuẓo}}
* {{Z|prg}}: {{W-|prg|alkūns}}
* {{Z|kk}}: {{W+|kk|шынтақ}}
* {{Z|cop}}: {{W-|cop|ⲕⲱⲓ|n}}
* {{Z|rgn}}: {{W-|rgn|gòmt|n}}
* {{Z|rm}}: {{W-|rm|cumbel}}, {{W-|rm|cundun}}, {{W-|rm|combel}}, {{W-|rm|chandun}}
* {{Z|rom}}: {{W-|rom|कुनी|tr=kunī|sc=Deva}}
* {{Z|ro}}: {{W+|ro|cot|nt}}
* {{Z|ru}}: {{W-|ru|ло́коть|n}}
* {{Z|ssy}}: {{W-|ssy|xullufta}}
* Samî:
*: {{Z|smn}}: {{W-|smn|käŋŋir}}
*: {{Z|se}}: {{W-|se|gardnjil}}, {{W-|se|gargŋil}}, {{W-|se|gaigŋir}}
*: {{Z|sms}}: {{W-|sms|kõõnjâr}}
* {{Z|sm}}: {{W-|sm|tualima}}
* {{Z|sa}}: {{W+|sa|कूर्पर|n}}
* {{Z|sc}}: {{W-|sc|cuidu}}, {{W-|sc|cuitu}}, {{W-|sc|cúvidu}}, {{W-|sc|guidu}}, {{W-|sc|cuidale}}, {{W-|sc|coidale}}
* {{Z|sib}}: {{W-|sib|cikun}}
* {{Z|ceb}}: {{W-|ceb|siko}}
* {{Z|scn}}: {{W+|scn|gùvitu|n}}, {{W+|scn|ùvitu|n}}
* {{Z|sh}}:
*: Kirîlî: {{W-|sh|ла̏кат|n|sc=Cyrl}}
*: Latînî: {{W+|sh|lȁkat|n}}
* {{Z|sco}}: {{W-|sco|elbae}}
*: {{Z|sco}}: {{W-|sco|elbi}}
* {{Z|cu}}:
*: Kirîlî: {{W-|cu|лакъть|n}}
* {{Z|orv}}: {{W-|orv|локъть|n}}, {{W-|orv|лакъть|n}}
* {{Z|sk}}: {{W+|sk|lakeť|n}}
* {{Z|sl}}: {{W+|sl|komolec|n}}
* {{Z|so}}: {{W-|so|suxul}}
* Sorbî:
*: {{Z|dsb}}: {{W-|dsb|łokś|n}}
*: {{Z|hsb}}: {{W-|hsb|łochć|n}}
* {{Z|nso}}: {{W-|nso|setšu}}
* {{Z|st}}: {{W-|st|setswe}}
* {{Z|es}}: {{W+|es|codo|n}}
* {{Z|xsv}}: {{W-|xsv|alkunas|n}}
* {{Z|sva}}: {{W-|sva|უღუ̂ნა}}
* {{Z|sw}}: {{W-|sw|kisugudi}}, {{W-|sw|kiwiko}}
* {{Z|sv}}: {{W+|sv|armbåge|g}}
* {{Z|xsr}}: {{W-|xsr|གྲེ་མུང|tr=thrimung}}
* {{Z|tg}}: {{W-|tg|оринҷ}}
* {{Z|tl}}: {{W-|tl|sìko}}
* {{Z|ta}}: {{W+|ta|முழங்கை}}
* {{Z|roa-tar}}: {{W-|roa-tar|gomite|n}}
* {{Z|rif}}: {{W-|rif|taɣmart|m}}
* {{Z|tsg}}: {{W-|tsg|siku}}
* {{Z|th}}: {{W+|th|ข้อศอก}}, {{W+|th|ศอก}}
* {{Z|te}}: {{W+|te|మోచేయి}}
* {{Z|tt}}: {{W+|tt|терсәк}}
* {{Z|tet}}: {{W-|tet|sikun}}
* {{Z|ti}}: {{W-|ti|ኩርናዕ}}
* {{Z|tr}}: {{W+|tr|dirsek}}
* {{Z|tk}}: {{W+|tk|tirsek}}
* {{Z|bo}}: {{W-|bo|གྲུ་མོ}}
* {{Z|tpi}}: {{W-|tpi|skru}}, {{W-|tpi|skru bilong han}}
* {{Z|tkn}}: {{W-|tkn|肘|tr=すぃずぃ, sïzï}}
* {{Z|to}}: {{W-|to|tui'inima}}
* {{Z|udi}}: {{W-|udi|сун}}
* {{Z|udm}}: {{W-|udm|гырпум}}
* {{Z|ur}}: {{W-|ur|کہنی|tr=kuhnī|m}}
* {{Z|uk}}: {{W-|uk|лі́коть|n}}
* {{Z|vec}}: {{W-|vec|gùmio|n}}, {{W-|vec|gòmio|n}}, {{W-|vec|gòmbio|n}}, {{W-|vec|comio|n}}, {{W+|vec|comet|n}}
* {{Z|vi}}: {{W-|vi|khuỷu tay}}
* {{Z|vo}}: {{W+|vo|kubit}}
* {{Z|wbk}}: {{W-|wbk|avřa}}
* {{Z|wa}}: {{W+|wa|keute|n}}, {{W+|wa|cotiron|n}}
* {{Z|cy}}: {{W+|cy|penelin|n|m}}
* {{Z|wrh}}: {{W-|wrh|ngunha}}
* {{Z|wym}}: {{W-|wym|ełböga|n}}
* {{Z|win}}: {{W-|win|aišak}}
* {{Z|wo}}: {{W-|wo|cóñcó}}
* {{Z|km}}: {{W+|km|កែង}}, {{W+|km|ដុំដៃ}}, {{W-|km|កែងដៃ}}
* {{Z|xh}}: {{W-|xh|ingqiniba}}
* {{Z|rys}}: {{W-|rys|肘|tr=ぴじぃ, pizï}}
* {{Z|yka}}: {{W-|yka|siku}}
* {{Z|yi}}: {{W-|yi|עלנבויגן|n}}
* {{Z|yoi}}: {{W-|yoi|肘|tr=ひでぃんか, hidinka}}
* {{Z|yox}}: {{W-|yox|肘|tr=ぴじ, piji}}
* {{Z|el}}: {{W+|el|αγκώνας|n}}, {{W+|el|ωλένη|m}}
*: Kevn: {{W-|grc|ἀγκών|n}}, {{W-|grc|ὠλένη|m}}
* {{Z|za}}: {{W-|za|gencueg}}, {{W-|za|genfwngz}}, {{W-|za|doegsok}}
{{werger-bin}}
6587mhjjz2f4r8phyjd55ewnjelauto
6333659
6333653
2026-08-14T15:46:07Z
Ghybu
1393
/* Formên alternatîv */
6333659
wikitext
text/x-wiki
== {{ziman|ku}} ==
=== Bilêvkirin ===
* {{ku-IPA|'enîşk}}
* {{deng|ku|LL-Q36368 (kur)-Dildadil-enîşk.wav|Deng|dever=Amed}}
* {{deng|ku|LL-Q36163 (kmr)-Ebulfîda-enîşk.wav|dever=Bidlîs}}
* {{ku-kîte}}
=== Navdêr ===
[[Wêne:Elbow coude.JPG|thumb|250px|enîşk]]
{{navdêr|ku|z=m}}
# [[ejnû]], [[aren]], [[arinc]], <br>[[navber]]a [[zend]]ê û [[çengil]]î <br>(ew [[pişk]] ya [[teqrîben]] li [[nîv]]a [[dest]]î ji [[mil]]î ta [[til]]an ya ku [[çemîn|diçeme]] anku [[tewîn|ditewe]])
#* {{bêmînak|ku}}
==== Tewandin ====
{{ku-tewîn-nav/nû|mê}}
====Bi alfabeyên din====
* {{ku-ar|ئهنیشک}}
==== Formên alternatîv ====
* [[anîşk]]
* [[hanîşk]]
* {{hw|ku|henîşk||Riha|Dêrsim}}
* [[hinîşk]]
* [[inîşk]]
==== Etîmolojî ====
Ji {{ji|ine-pro|ku|*h₃elen-}}, {{ji|ira-pro|ku|*eresn-}}, [[hevreh]]a avestayî ''ereθnî-'', farisiya kevn ''ereşnî-'', sogdî ''r'ync [arênç/arînç]'', pehlewî ''arêşn'', farisî {{g|fa|آرن|tr=aren}}, {{g|fa|آرنج|tr=arenc}}, {{g|fa|ارش|tr=ereş}}, hewramî [[herejne]], zazakî [[arasna]], [[arisna]], soranî {{g|ckb|ئانیشک|tr=anîşk}}. Kurmancî û soranî bi [[metatez]]ê: -ş-n- --> -n-ş-. Herwiha hevreha sanskrîtî [[अरत्नि]] (eretnî), ermenî [[ուլն]] (uln: [[patik]]), slaviya kevn [[ланита]] (lanîta: [[gep]], [[alek]]), yûnaniya kevn [[ὠλένη]] (ōlenē), îngilîzî [[ell]] û [[elbow]], almanî [[Ellbogen]]...
==== Bide ber ====
* [[enî]]
* [[hînişk]]
==== Werger ====
{{werger-ser}}
* {{Z|ab}}: {{W-|ab|амашьхәылҵ|cuda=а-машьхәы́лҵ}}
* {{Z|aa}}: {{W-|aa|sucúl}}, {{W-|aa|cusul}}
* {{Z|af}}: {{W+|af|elmboog}}
* {{Z|sq}}: {{W+|sq|bërryl|n}}
* {{Z|pdc}}: {{W-|pdc|Ellboge|n}}
* {{Z|de}}: {{W+|de|Ellbogen|n}}
* {{Z|ryn}}: {{W-|ryn|肘|tr=ひじ, hiji}}
* {{Z|ams}}: {{W-|ams|肘|tr=すぃずぃ, sïzï}}
* {{Z|am}}: {{W-|am|ክርን}}
* {{Z|an}}: {{W-|an|codo}}
* {{Z|rup}}: {{W-|rup|cot|nt}}
* {{Z|as}}: {{W-|as|কিলাকুটি}}, {{W-|as|কিল}}
* {{Z|ast}}: {{W+|ast|coldu|n}}
* {{Z|ask}}: {{W-|ask|ořiŋ}}
* {{Z|av}}: {{W-|av|гӏункӏрукъ}}
* {{Z|ay}}: {{W-|ay|mujlli}}
* {{Z|az}}: {{W+|az|dirsək}}
* {{Z|eu}}: {{W+|eu|ukondo}}
* {{Z|ba}}: {{W-|ba|терһәк|sc=Cyrl}}; {{W-|ba|сығанаҡ|sc=Cyrl}}
* {{Z|bbl}}: {{W-|bbl|ოლოკ}}
* {{Z|sne}}: {{W-|sne|siku}}
* {{Z|be}}: {{W-|be|ло́каць|n}}
* {{Z|bn}}: {{W-|bn|বাঁক}}, {{W-|bn|মোড়}}
* {{Z|br}}: {{W+|br|ilin|n}}
* {{Z|bug}}: {{W-|bug|siku}}
* {{Z|bg}}: {{W-|bg|ла́кът|n}}
* {{Z|my}}: {{W+|my|တံတောင်}}
* {{Z|ccc}}: {{W-|ccc|takolo}}
* {{Z|ce}}: {{W-|ce|гола}}
* {{Z|cs}}: {{W+|cs|loket|n}}
* {{Z|ny}}: {{W-|ny|gongono}}
* {{Z|zh}}:
*: {{Z|cmn}}: {{W+|cmn|肘|tr=zhǒu}}, {{W-|cmn|肘部|tr=zhǒubù}}, {{W-|cmn|胳膊肘兒|tr=gēbozhǒur}}, {{W+|cmn|胳膊肘子|tr=gēbozhǒuzi}}
* {{Z|da}}: {{W+|da|albue|g}}
* {{Z|dv}}: {{W-|dv|އުޅަބޮށި}}
* {{Z|id}}: {{W+|id|siku}}
* {{Z|ar}}: {{W-|ar|كُوع|n}}, {{W+|ar|مِرْفَق|n}}
*: {{Z|arz}}: {{W-|arz|كوع|n|tr=kūʕ}}
*: {{Z|acw}}: {{W-|acw|كوع|n|tr=kūʕ}}
*: {{Z|acm}}: {{W-|acm|عكس|n|tr=ʕekes}}
*: {{Z|ary}}: {{W-|ary|مرفق|n|tr=marfaq}}, {{W-|ary|كوع|n|tr=kūʕ}}
* {{Z|hy}}: {{W+|hy|արմունկ}}
*: {{Z|xcl}}: {{W-|xcl|արմուկն}}
* {{Z|eo}}: {{W+|eo|kubuto}}
* {{Z|et}}: {{W+|et|küünarnukk}}
* {{Z|eve}}: {{W-|eve|ечэн}}
* {{Z|evn}}: {{W-|evn|ичэн}}
* {{Z|fa}}: {{W+|fa|آرنج|tr=âranj}}
* {{Z|fo}}: {{W-|fo|albogi}}
* {{Z|fi}}: {{W+|fi|kyynärpää}}
* {{Z|fr}}: {{W+|fr|coude|n}}
* {{Z|fur}}: {{W-|fur|comedon|n}}
* {{Z|frr}}:
*: Föhr: {{W-|frr|eelemböög|n}}
* {{Z|fy}}: {{W-|fy|earmtakke|nt}}
* {{Z|gl}}: {{W+|gl|cóbado|n}}, {{W+|gl|cotobelo|n}}, {{W+|gl|cotomelo|n}}, {{W-|gl|coldo|n}}
* {{Z|ka}}: {{W-|ka|იდაყვი}}
* {{Z|ht}}: {{W-|ht|koud}}
* {{Z|mba}}: {{W-|mba|siku}}
* {{Z|hi}}: {{W+|hi|कुहनी|m}}
* {{Z|hil}}: {{W-|hil|siko}}
* {{Z|mww}}: {{W-|mww|luj tshib}}
* {{Z|nl}}: {{W+|nl|elleboog|n}}
* {{Z|he}}: {{W-|he|מַרְפֵּק|n|tr=marpek}}
* {{Z|io}}: {{W+|io|kudo}}
* {{Z|ilo}}: {{W-|ilo|siko}}
* {{Z|ang}}: {{W-|ang|elnboga|n}}
* {{Z|en}}: {{W+|en|elbow}}
* {{Z|inh}}: {{W-|inh|пхьарса гола}}, {{W-|inh|гола}}
* {{Z|ia}}: {{W-|ia|cubito}}
* {{Z|iu}}: {{W-|iu|ᐁᑯᓯᒃ|sc=Cans}}, {{W-|iu|ᐃᑯᓯᒃ|sc=Cans}}
* {{Z|ga}}: {{W-|ga|uillinn|m}}
* {{Z|ist}}: {{W-|ist|cumio|n}}
* {{Z|it}}: {{W+|it|gomito|n}}
* {{Z|is}}: {{W+|is|olnbogi|n}}
* {{Z|ja}}: {{W+|ja|肘|tr=ひじ, hiji|sc=Jpan}}
* {{Z|kaw}}: {{W-|kaw|siku}}
* {{Z|jv}}: {{W+|jv|sikut}}
* {{Z|bsh}}: {{W-|bsh|āřa}}
* {{Z|kea}}: {{W-|kea|kutubélu}}
* {{Z|ca}}: {{W+|ca|colze|n}}
* {{Z|kzg}}: {{W-|kzg|肘|tr=ぴじ, piji}}
* {{Z|ky}}: {{W+|ky|чыканак|sc=Cyrl}}
* {{Z|ki}}: {{W-|ki|kĩgokora|c7}}
* {{Z|si}}: {{W-|si|වැලමිට}}
* {{Z|rw}}: {{W-|rw|inkokora}}
* {{Z|koi}}: {{W-|koi|гырддза}}
* {{Z|ko}}: {{W+|ko|팔꿈치}}
* {{Z|kw}}: {{W-|kw|elin|n}}, {{W-|kw|elyn}}
* {{Z|crk}}: {{W-|crk|tôskwan}}
* {{Z|xug}}: {{W-|xug|肘|tr=ぴじー, pijī}}
* {{Z|lld}}: {{W-|lld|cumedon|n}}
* {{Z|ltg}}: {{W-|ltg|alkiune|m}}
* {{Z|la}}: {{W-|la|cubitum|nt}}, {{W-|la|cubitus|n}}, {{W-|la|ulna|m}}
* {{Z|lv}}: {{W+|lv|elkonis|n}}
* {{Z|lo}}: {{W+|lo|ສອກ}}
* {{Z|lzz}}: {{W-|lzz|დუყუ}}
* {{Z|lij}}: {{W-|lij|gommio|n}}
* {{Z|li}}: {{W+|li|èllebaog}}
* {{Z|lt}}: {{W-|lt|alkūnė|m}}
* {{Z|lmo}}: {{W-|lmo|gombet}}
* {{Z|khb}}: {{W-|khb|ᦉᦸᧅ}}, {{W-|khb|ᦉᦸᧅᧈ}}
* {{Z|lb}}: {{W+|lb|Ielebou}}
* {{Z|mdh}}: {{W-|mdh|sicu}}
* {{Z|mak}}: {{W-|mak|jiku}}
* {{Z|mk}}: {{W-|mk|лакт|n}}
* {{Z|ms}}: {{W+|ms|siku}}
* {{Z|mnc}}: {{W-|mnc|ᠮᠠᠶᠠᠨ}}
* {{Z|mnk}}: {{W-|mnk|nonkoŋo}}
* {{Z|gv}}: {{W-|gv|uillin}}
* {{Z|msk}}: {{W-|msk|siko}}
* {{Z|mi}}: {{W-|mi|tuke}}
* {{Z|mrw}}: {{W-|mrw|siko}}
* Marî:
*: {{Z|mhr}}: {{W-|mhr|кынервуй}}
*: {{Z|mrj}}: {{W-|mrj|кӹнервуй}}
* {{Z|yua}}: {{W-|yua|kuuk}}
* {{Z|hu}}: {{W+|hu|könyök}}
* {{Z|xmf}}: {{W-|xmf|დუჸი}}
* {{Z|mel}}: {{W-|mel|basikou}}
* {{Z|mvi}}: {{W-|mvi|肘|tr=ぴず, pizu}}
* {{Z|min}}: {{W-|min|siku}}
* {{Z|mn}}: {{W+|mn|тохой}}
* {{Z|nah}}: {{W+|nah|moliktli}}
* {{Z|gld}}: {{W-|gld|хуйчэн}}
* {{Z|nv}}: {{W-|nv|achʼoozhlaaʼ}}
* {{Z|nds}}: {{W-|nds|Ellbaag|n}}
* {{Z|ne}}: {{W-|ne|कुहिनो}}
* {{Z|niv}}: {{W-|niv|тоӈӄ}}
* {{Z|nrf}}: {{W-|nrf|coute|n}}
* {{Z|no}}:
*: {{Z|nb}}: {{W+|nb|albue|n}}
*: {{Z|nn}}: {{W-|nn|olboge|n}}
* {{Z|ood}}: {{W-|ood|sihsh}}
* {{Z|oj}}: {{W-|oj|indooskwan}}
* {{Z|okn}}: {{W-|okn|肘|tr=ひじ, hiji}}
* {{Z|ryu}}: {{W-|ryu|肘|tr=ひじ, hiji}}
* {{Z|oc}}: {{W+|oc|coide|n}}
* {{Z|om}}: {{W-|om|ciqilee}}
* {{Z|os}}: {{W-|os|рӕмбын}}
* {{Z|ota}}: {{W-|ota|دیرسك|tr=dirsek}}, {{W-|ota|مرفق|tr=mirfak}}
* {{Z|ug}}: {{W-|ug|جەينەك}}
* {{Z|uz}}: {{W+|uz|tirsak}}
* {{Z|pag}}: {{W-|pag|sico}}
* {{Z|ps}}: {{W-|ps|څنګل|m|tr=śangël|sc=ps-Arab}}
* {{Z|pms}}: {{W-|pms|gomo|n}}
* {{Z|pdt}}: {{W-|pdt|Alboagen|n}}
* {{Z|pox}}: {{W-|pox|lüťit|n}}
* {{Z|pl}}: {{W+|pl|łokieć|n}}
* {{Z|pt}}: {{W+|pt|cotovelo|n}}
* {{Z|prn}}: {{W-|prn|vuẓo}}
* {{Z|prg}}: {{W-|prg|alkūns}}
* {{Z|kk}}: {{W+|kk|шынтақ}}
* {{Z|cop}}: {{W-|cop|ⲕⲱⲓ|n}}
* {{Z|rgn}}: {{W-|rgn|gòmt|n}}
* {{Z|rm}}: {{W-|rm|cumbel}}, {{W-|rm|cundun}}, {{W-|rm|combel}}, {{W-|rm|chandun}}
* {{Z|rom}}: {{W-|rom|कुनी|tr=kunī|sc=Deva}}
* {{Z|ro}}: {{W+|ro|cot|nt}}
* {{Z|ru}}: {{W-|ru|ло́коть|n}}
* {{Z|ssy}}: {{W-|ssy|xullufta}}
* Samî:
*: {{Z|smn}}: {{W-|smn|käŋŋir}}
*: {{Z|se}}: {{W-|se|gardnjil}}, {{W-|se|gargŋil}}, {{W-|se|gaigŋir}}
*: {{Z|sms}}: {{W-|sms|kõõnjâr}}
* {{Z|sm}}: {{W-|sm|tualima}}
* {{Z|sa}}: {{W+|sa|कूर्पर|n}}
* {{Z|sc}}: {{W-|sc|cuidu}}, {{W-|sc|cuitu}}, {{W-|sc|cúvidu}}, {{W-|sc|guidu}}, {{W-|sc|cuidale}}, {{W-|sc|coidale}}
* {{Z|sib}}: {{W-|sib|cikun}}
* {{Z|ceb}}: {{W-|ceb|siko}}
* {{Z|scn}}: {{W+|scn|gùvitu|n}}, {{W+|scn|ùvitu|n}}
* {{Z|sh}}:
*: Kirîlî: {{W-|sh|ла̏кат|n|sc=Cyrl}}
*: Latînî: {{W+|sh|lȁkat|n}}
* {{Z|sco}}: {{W-|sco|elbae}}
*: {{Z|sco}}: {{W-|sco|elbi}}
* {{Z|cu}}:
*: Kirîlî: {{W-|cu|лакъть|n}}
* {{Z|orv}}: {{W-|orv|локъть|n}}, {{W-|orv|лакъть|n}}
* {{Z|sk}}: {{W+|sk|lakeť|n}}
* {{Z|sl}}: {{W+|sl|komolec|n}}
* {{Z|so}}: {{W-|so|suxul}}
* Sorbî:
*: {{Z|dsb}}: {{W-|dsb|łokś|n}}
*: {{Z|hsb}}: {{W-|hsb|łochć|n}}
* {{Z|nso}}: {{W-|nso|setšu}}
* {{Z|st}}: {{W-|st|setswe}}
* {{Z|es}}: {{W+|es|codo|n}}
* {{Z|xsv}}: {{W-|xsv|alkunas|n}}
* {{Z|sva}}: {{W-|sva|უღუ̂ნა}}
* {{Z|sw}}: {{W-|sw|kisugudi}}, {{W-|sw|kiwiko}}
* {{Z|sv}}: {{W+|sv|armbåge|g}}
* {{Z|xsr}}: {{W-|xsr|གྲེ་མུང|tr=thrimung}}
* {{Z|tg}}: {{W-|tg|оринҷ}}
* {{Z|tl}}: {{W-|tl|sìko}}
* {{Z|ta}}: {{W+|ta|முழங்கை}}
* {{Z|roa-tar}}: {{W-|roa-tar|gomite|n}}
* {{Z|rif}}: {{W-|rif|taɣmart|m}}
* {{Z|tsg}}: {{W-|tsg|siku}}
* {{Z|th}}: {{W+|th|ข้อศอก}}, {{W+|th|ศอก}}
* {{Z|te}}: {{W+|te|మోచేయి}}
* {{Z|tt}}: {{W+|tt|терсәк}}
* {{Z|tet}}: {{W-|tet|sikun}}
* {{Z|ti}}: {{W-|ti|ኩርናዕ}}
* {{Z|tr}}: {{W+|tr|dirsek}}
* {{Z|tk}}: {{W+|tk|tirsek}}
* {{Z|bo}}: {{W-|bo|གྲུ་མོ}}
* {{Z|tpi}}: {{W-|tpi|skru}}, {{W-|tpi|skru bilong han}}
* {{Z|tkn}}: {{W-|tkn|肘|tr=すぃずぃ, sïzï}}
* {{Z|to}}: {{W-|to|tui'inima}}
* {{Z|udi}}: {{W-|udi|сун}}
* {{Z|udm}}: {{W-|udm|гырпум}}
* {{Z|ur}}: {{W-|ur|کہنی|tr=kuhnī|m}}
* {{Z|uk}}: {{W-|uk|лі́коть|n}}
* {{Z|vec}}: {{W-|vec|gùmio|n}}, {{W-|vec|gòmio|n}}, {{W-|vec|gòmbio|n}}, {{W-|vec|comio|n}}, {{W+|vec|comet|n}}
* {{Z|vi}}: {{W-|vi|khuỷu tay}}
* {{Z|vo}}: {{W+|vo|kubit}}
* {{Z|wbk}}: {{W-|wbk|avřa}}
* {{Z|wa}}: {{W+|wa|keute|n}}, {{W+|wa|cotiron|n}}
* {{Z|cy}}: {{W+|cy|penelin|n|m}}
* {{Z|wrh}}: {{W-|wrh|ngunha}}
* {{Z|wym}}: {{W-|wym|ełböga|n}}
* {{Z|win}}: {{W-|win|aišak}}
* {{Z|wo}}: {{W-|wo|cóñcó}}
* {{Z|km}}: {{W+|km|កែង}}, {{W+|km|ដុំដៃ}}, {{W-|km|កែងដៃ}}
* {{Z|xh}}: {{W-|xh|ingqiniba}}
* {{Z|rys}}: {{W-|rys|肘|tr=ぴじぃ, pizï}}
* {{Z|yka}}: {{W-|yka|siku}}
* {{Z|yi}}: {{W-|yi|עלנבויגן|n}}
* {{Z|yoi}}: {{W-|yoi|肘|tr=ひでぃんか, hidinka}}
* {{Z|yox}}: {{W-|yox|肘|tr=ぴじ, piji}}
* {{Z|el}}: {{W+|el|αγκώνας|n}}, {{W+|el|ωλένη|m}}
*: Kevn: {{W-|grc|ἀγκών|n}}, {{W-|grc|ὠλένη|m}}
* {{Z|za}}: {{W-|za|gencueg}}, {{W-|za|genfwngz}}, {{W-|za|doegsok}}
{{werger-bin}}
cm081sggjgtulgrvmuvnam76euti6wt
henîşk
0
16321
6333652
5678642
2026-08-14T15:35:11Z
Ghybu
1393
/* Navdêr */ Ji rûpela [[enîşk]] (oldid=6333643)
6333652
wikitext
text/x-wiki
== {{ziman|ku}} ==
=== Navdêr ===
{{navdêr|ku|z=m}}
# {{e|ku|Riha}} {{guharto|ku|enîşk}}
#* {{bêmînak|ku}}
785mg1vjk01u5wthu2w0s765seslxn2
6333660
6333652
2026-08-14T15:46:30Z
Ghybu
1393
/* Navdêr */
6333660
wikitext
text/x-wiki
== {{ziman|ku}} ==
=== Navdêr ===
{{navdêr|ku|z=m}}
# {{e|ku|Riha|Dêrsim}} {{guharto|ku|enîşk}}
#* {{bêmînak|ku}}
ngjqlnbqoaqa3sjmi9r3z1irn85krfr
fêl
0
23075
6333671
6306919
2026-08-14T16:20:23Z
Wikihez
7344
[[Bikarhêner:Wikihez/templateScript2.js|TS]]: sererastkirin
6333671
wikitext
text/x-wiki
== {{ziman|ku}} ==
=== Bilêvkirin ===
* {{ku-IPA}}
* {{deng|ku|LL-Q36163 (kmr)-Ebulfîda-fêl.wav|dever=Bidlîs}}
* {{ku-kîte}}
=== Navdêr ===
{{navdêr|ku|z=m}}
# [[lêb]], [[hîle]], [[xap]], [[dekûdolab]], [[qîle]], [[fen]], [[xapandin]], [[xirrandin]]
#* {{jêder-kitêb|ku|jêgirtin=Kurik jî '''fêl'''ê xweyî fem dike.|sal=1936|nivîskar=H. Tûmanyan|sernav=Xweyî û Xulam|terciman=Casimê Celîl}}
#* {{bêmînak|ku}}
# [[fîîl]], [[kiryar]], [[kirin]], [[xebat]] (bi taybetî yên xirab)
#* {{jêder|ku|jêgirtin=Gopalê '''fêl''' pê hatibû kirin...|{{Jêgirtin/Robert Louis Stevenson/Meseleya Seyr a Dr. Jekyll û Mr. Hyde|r=32}}}}
# {{f|ku|rêziman}} [[lêker]]
#* {{bêmînak|ku}}
==== Tewandin ====
{{ku-tewîn-nav|mê}}
==== Bi alfabeyên din ====
* {{ku-ar|فێل}}
==== Formên alternatîv ====
{{kol3|ku|cure=Herwiha
|fê'il
|fê'l
|fihl
|fiil
|fi'il
|fi'l
|findûfêl
}}
==== Jê ====
{{kol3|ku|cure=Jê
|fêl kirin|fêl kirin<q:lêker>
|fêlkirin|fêlkirin<q:navdêr>
|fêlkirî<q:rengdêr>
|fêlkar
|fêlkarî
|fêlker
|fêlkerî
|fêlvan
|fêlvanî
|fêlzan
|fêlzanî
|fêlbaz
}}
==== Etîmolojî ====
Ji {{deyn|ar|ku|فعل|tr=fi'l|t=[[kiryar]], [[kirin]], [[kar]]}}{{çp}} ji {{g|ar|فعل|tr=fe'ele|w=[[kirin]]}}. Ji heman rehî: [[fail]], [[fêr]], [[fi'l]], [[mefûl]], [[pale]].
Hevreha {{hv|arc|ܦܥܠܐ}} (pe'ela), {{hv|he|פעל}} (pe'el).
;{{biçûk|Çavkanî:
* {{Ç:Chyet:2003|rûpel=193}}
}}
==== Bide ber ====
* {{g|ku|fal}}
* {{g|ku|fîl}}
==== Werger ====
{{werger-ser}}
* {{Z|ar}}: {{W|ar|مكر}}, {{W|ar|خداع}}
* {{Z|fa}}: {{W+|fa|مکر}}, {{W+|fa|حقه}}, {{W|fa|حیله گری|guman=erê}}, {{W|fa|مکاری|guman=erê}}
* {{Z|fi}}: {{W+|fi|huijaus}}
* {{Z|en}}: {{W+|en|deceit}}, {{W+|en|fraud}}, {{W+|en|cheat}}, {{W+|en|trick}}, {{W+|en|deception}}, {{W+|en|decoy}}, {{W+|en|cheating}}, {{W+|en|canard}}, {{W+|en|artifice}}, {{W+|en|ripoff}}, {{W+|en|magic}}, {{W|en|conspiracy|guman=erê}}, {{W|en|imposition|guman=erê}}, {{W|en|ploy|guman=erê}}, {{W|en|stratagem|guman=erê}}, {{W|en|subterfuge|guman=erê}}, {{W|en|trickery|guman=erê}}, {{W|en|verb|guman=erê}}
* {{Z|tr}}: {{W+|tr|hile}}, {{W|tr|niyet}}
{{werger-bin}}
{{werger-ser}}
* {{Z|de}}: {{W|de|Betrug|m}}, {{W|de|Hinterhalt|m}}, {{W|de|List|m|guman=erê}}, {{W|de|Schlich|m|guman=erê}}, {{W|de|Winkelzug|guman=erê}}
{{werger-bin}}
=== Çavkanî ===
{{çavkanî}}
clkcvhc17oqowwbqgj3vtmij5w28hd4
6333672
6333671
2026-08-14T16:20:37Z
Wikihez
7344
/* Etîmolojî */ (bi [[MediaWiki:Gadget-AjaxEdit.js|AjaxEdit]]ê re)
6333672
wikitext
text/x-wiki
== {{ziman|ku}} ==
=== Bilêvkirin ===
* {{ku-IPA}}
* {{deng|ku|LL-Q36163 (kmr)-Ebulfîda-fêl.wav|dever=Bidlîs}}
* {{ku-kîte}}
=== Navdêr ===
{{navdêr|ku|z=m}}
# [[lêb]], [[hîle]], [[xap]], [[dekûdolab]], [[qîle]], [[fen]], [[xapandin]], [[xirrandin]]
#* {{jêder-kitêb|ku|jêgirtin=Kurik jî '''fêl'''ê xweyî fem dike.|sal=1936|nivîskar=H. Tûmanyan|sernav=Xweyî û Xulam|terciman=Casimê Celîl}}
#* {{bêmînak|ku}}
# [[fîîl]], [[kiryar]], [[kirin]], [[xebat]] (bi taybetî yên xirab)
#* {{jêder|ku|jêgirtin=Gopalê '''fêl''' pê hatibû kirin...|{{Jêgirtin/Robert Louis Stevenson/Meseleya Seyr a Dr. Jekyll û Mr. Hyde|r=32}}}}
# {{f|ku|rêziman}} [[lêker]]
#* {{bêmînak|ku}}
==== Tewandin ====
{{ku-tewîn-nav|mê}}
==== Bi alfabeyên din ====
* {{ku-ar|فێل}}
==== Formên alternatîv ====
{{kol3|ku|cure=Herwiha
|fê'il
|fê'l
|fihl
|fiil
|fi'il
|fi'l
|findûfêl
}}
==== Jê ====
{{kol3|ku|cure=Jê
|fêl kirin|fêl kirin<q:lêker>
|fêlkirin|fêlkirin<q:navdêr>
|fêlkirî<q:rengdêr>
|fêlkar
|fêlkarî
|fêlker
|fêlkerî
|fêlvan
|fêlvanî
|fêlzan
|fêlzanî
|fêlbaz
}}
==== Etîmolojî ====
Ji {{deyn|ar|ku|فعل|tr=fi'l|t=[[kiryar]], [[kirin]], [[kar]]}} ji {{g|ar|فعل|tr=fe'ele|w=[[kirin]]}}. Ji heman rehî: [[fail]], [[fêr]], [[fi'l]], [[mefûl]], [[pale]].
Hevreha {{hv|arc|ܦܥܠܐ}} (pe'ela), {{hv|he|פעל}} (pe'el).
;{{biçûk|Çavkanî:
* {{Ç:Chyet:2003|rûpel=193}}
}}
==== Bide ber ====
* {{g|ku|fal}}
* {{g|ku|fîl}}
==== Werger ====
{{werger-ser}}
* {{Z|ar}}: {{W|ar|مكر}}, {{W|ar|خداع}}
* {{Z|fa}}: {{W+|fa|مکر}}, {{W+|fa|حقه}}, {{W|fa|حیله گری|guman=erê}}, {{W|fa|مکاری|guman=erê}}
* {{Z|fi}}: {{W+|fi|huijaus}}
* {{Z|en}}: {{W+|en|deceit}}, {{W+|en|fraud}}, {{W+|en|cheat}}, {{W+|en|trick}}, {{W+|en|deception}}, {{W+|en|decoy}}, {{W+|en|cheating}}, {{W+|en|canard}}, {{W+|en|artifice}}, {{W+|en|ripoff}}, {{W+|en|magic}}, {{W|en|conspiracy|guman=erê}}, {{W|en|imposition|guman=erê}}, {{W|en|ploy|guman=erê}}, {{W|en|stratagem|guman=erê}}, {{W|en|subterfuge|guman=erê}}, {{W|en|trickery|guman=erê}}, {{W|en|verb|guman=erê}}
* {{Z|tr}}: {{W+|tr|hile}}, {{W|tr|niyet}}
{{werger-bin}}
{{werger-ser}}
* {{Z|de}}: {{W|de|Betrug|m}}, {{W|de|Hinterhalt|m}}, {{W|de|List|m|guman=erê}}, {{W|de|Schlich|m|guman=erê}}, {{W|de|Winkelzug|guman=erê}}
{{werger-bin}}
=== Çavkanî ===
{{çavkanî}}
93z89bu81je0zig9852zanabx6b2pse
6333673
6333672
2026-08-14T16:21:13Z
Wikihez
7344
/* Çavkanî */ (bi [[MediaWiki:Gadget-AjaxEdit.js|AjaxEdit]]ê re)
6333673
wikitext
text/x-wiki
== {{ziman|ku}} ==
=== Bilêvkirin ===
* {{ku-IPA}}
* {{deng|ku|LL-Q36163 (kmr)-Ebulfîda-fêl.wav|dever=Bidlîs}}
* {{ku-kîte}}
=== Navdêr ===
{{navdêr|ku|z=m}}
# [[lêb]], [[hîle]], [[xap]], [[dekûdolab]], [[qîle]], [[fen]], [[xapandin]], [[xirrandin]]
#* {{jêder-kitêb|ku|jêgirtin=Kurik jî '''fêl'''ê xweyî fem dike.|sal=1936|nivîskar=H. Tûmanyan|sernav=Xweyî û Xulam|terciman=Casimê Celîl}}
#* {{bêmînak|ku}}
# [[fîîl]], [[kiryar]], [[kirin]], [[xebat]] (bi taybetî yên xirab)
#* {{jêder|ku|jêgirtin=Gopalê '''fêl''' pê hatibû kirin...|{{Jêgirtin/Robert Louis Stevenson/Meseleya Seyr a Dr. Jekyll û Mr. Hyde|r=32}}}}
# {{f|ku|rêziman}} [[lêker]]
#* {{bêmînak|ku}}
==== Tewandin ====
{{ku-tewîn-nav|mê}}
==== Bi alfabeyên din ====
* {{ku-ar|فێل}}
==== Formên alternatîv ====
{{kol3|ku|cure=Herwiha
|fê'il
|fê'l
|fihl
|fiil
|fi'il
|fi'l
|findûfêl
}}
==== Jê ====
{{kol3|ku|cure=Jê
|fêl kirin|fêl kirin<q:lêker>
|fêlkirin|fêlkirin<q:navdêr>
|fêlkirî<q:rengdêr>
|fêlkar
|fêlkarî
|fêlker
|fêlkerî
|fêlvan
|fêlvanî
|fêlzan
|fêlzanî
|fêlbaz
}}
==== Etîmolojî ====
Ji {{deyn|ar|ku|فعل|tr=fi'l|t=[[kiryar]], [[kirin]], [[kar]]}} ji {{g|ar|فعل|tr=fe'ele|w=[[kirin]]}}. Ji heman rehî: [[fail]], [[fêr]], [[fi'l]], [[mefûl]], [[pale]].
Hevreha {{hv|arc|ܦܥܠܐ}} (pe'ela), {{hv|he|פעל}} (pe'el).
;{{biçûk|Çavkanî:
* {{Ç:Chyet:2003|rûpel=193}}
}}
==== Bide ber ====
* {{g|ku|fal}}
* {{g|ku|fîl}}
==== Werger ====
{{werger-ser}}
* {{Z|ar}}: {{W|ar|مكر}}, {{W|ar|خداع}}
* {{Z|fa}}: {{W+|fa|مکر}}, {{W+|fa|حقه}}, {{W|fa|حیله گری|guman=erê}}, {{W|fa|مکاری|guman=erê}}
* {{Z|fi}}: {{W+|fi|huijaus}}
* {{Z|en}}: {{W+|en|deceit}}, {{W+|en|fraud}}, {{W+|en|cheat}}, {{W+|en|trick}}, {{W+|en|deception}}, {{W+|en|decoy}}, {{W+|en|cheating}}, {{W+|en|canard}}, {{W+|en|artifice}}, {{W+|en|ripoff}}, {{W+|en|magic}}, {{W|en|conspiracy|guman=erê}}, {{W|en|imposition|guman=erê}}, {{W|en|ploy|guman=erê}}, {{W|en|stratagem|guman=erê}}, {{W|en|subterfuge|guman=erê}}, {{W|en|trickery|guman=erê}}, {{W|en|verb|guman=erê}}
* {{Z|tr}}: {{W+|tr|hile}}, {{W|tr|niyet}}
{{werger-bin}}
{{werger-ser}}
* {{Z|de}}: {{W|de|Betrug|m}}, {{W|de|Hinterhalt|m}}, {{W|de|List|m|guman=erê}}, {{W|de|Schlich|m|guman=erê}}, {{W|de|Winkelzug|guman=erê}}
{{werger-bin}}
llub1fgdv7ezr0tepln09o1vuw0g9zn
dûr ketin
0
24384
6333782
6254311
2026-08-15T11:04:27Z
Rewiye tine
7120
Werger: +îngilîzî : [[stay away]]; +îngilîzî : [[stay away]] (bi alîkarî)
6333782
wikitext
text/x-wiki
{{bnr-n|dûrketin}}
== {{ziman|ku}} ==
=== Bilêvkirin ===
* {{ku-kîte}}
=== Lêker ===
{{ku-tewîn-lk|dûr ketin|form=negerguhêz|niha=kev|borî=ket|pêşgir=dûr|valahî=erê}}
{{lêker|ku|c=h-ngh}}
# [[çûn|Çûn]] [[dûr]], [[gihiştin]] [[dûr]], [[qewirîn]]; ber bi [[cih]]ekê dûr çûn.
#* {{jêder|ku|jêgirtin=Bi min re were -were em herin, em ji vir bi '''dûr bikevin'''.|''[[w:Bexçeyê Vîşne|Bexçeyê Vîşne]]'', [[w:Anton Çexov|Anton Çexov]], Weşanên [[w:Nûdem|Nûdem]]}}
==== Bi alfabeyên din ====
* {{ku-ar|دوور کەتن}}
==== Formên alternatîv ====
{{kol3|ku
| bi dûr keftin
| bi dûr ketin
| bi dûr kevtin
| dûr keftin
| dûr kevtin
| bidûrketin
| bidûrkeftin
| bidûrketin
| bidûrkevtin
| dûrkeftin
| dûrkevtin
}}
==== Têkildar ====
* {{g|ku|dûr xistin}}
==== Jê ====
* {{g|ku|dûrketî}}
* {{g|ku|dûrkev}}
* {{g|ku|dûrkevî}}
==== Etîmolojî ====
Ji {{heve|ku|dûr|ketin}}.
==== Bi zaravayên din ====
* {{Z|zza}}: [[dûr kewtene]], [[dûr kewtiş]]
==== Werger ====
{{werger-ser}}
* {{Z|de}}: {{W|de|sich entfernen}}, {{W|de|fortgehen}}, {{W|de|weglaufen}}, {{W|de|wegfahren|guman=erê}}, {{W|de|durchbrennen|guman=erê}}, {{W|de|hinweggehen|guman=erê}}
* {{Z|fa}}: {{W|fa|دور شدن}}
* {{Z|en}}: {{W|en|divergence}}, {{W|en|divergency}}, {{W|en|recede}}, {{W|en|edge away from|guman=erê}}, {{W|en|give a wide berth to|guman=erê}}, {{W|en|divergence, divergency|guman=erê}}, {{W|en|hold aloof|guman=erê}}, {{W+|en|stay away}}
* {{Z|tr}}: {{W|tr|uzak düşmek}}, {{W|tr|açılmak}}, {{W|tr|cicozlamak}}, {{W|tr|uzaklaşmak}}, {{W|tr|ıramak}}
{{werger-bin}}
1urqhfrausgoa6gt3q2zy1r1eeegq52
6333783
6333782
2026-08-15T11:04:57Z
Rewiye tine
7120
Werger: +tirkî : [[uzak kalmak]] (bi alîkarî)
6333783
wikitext
text/x-wiki
{{bnr-n|dûrketin}}
== {{ziman|ku}} ==
=== Bilêvkirin ===
* {{ku-kîte}}
=== Lêker ===
{{ku-tewîn-lk|dûr ketin|form=negerguhêz|niha=kev|borî=ket|pêşgir=dûr|valahî=erê}}
{{lêker|ku|c=h-ngh}}
# [[çûn|Çûn]] [[dûr]], [[gihiştin]] [[dûr]], [[qewirîn]]; ber bi [[cih]]ekê dûr çûn.
#* {{jêder|ku|jêgirtin=Bi min re were -were em herin, em ji vir bi '''dûr bikevin'''.|''[[w:Bexçeyê Vîşne|Bexçeyê Vîşne]]'', [[w:Anton Çexov|Anton Çexov]], Weşanên [[w:Nûdem|Nûdem]]}}
==== Bi alfabeyên din ====
* {{ku-ar|دوور کەتن}}
==== Formên alternatîv ====
{{kol3|ku
| bi dûr keftin
| bi dûr ketin
| bi dûr kevtin
| dûr keftin
| dûr kevtin
| bidûrketin
| bidûrkeftin
| bidûrketin
| bidûrkevtin
| dûrkeftin
| dûrkevtin
}}
==== Têkildar ====
* {{g|ku|dûr xistin}}
==== Jê ====
* {{g|ku|dûrketî}}
* {{g|ku|dûrkev}}
* {{g|ku|dûrkevî}}
==== Etîmolojî ====
Ji {{heve|ku|dûr|ketin}}.
==== Bi zaravayên din ====
* {{Z|zza}}: [[dûr kewtene]], [[dûr kewtiş]]
==== Werger ====
{{werger-ser}}
* {{Z|de}}: {{W|de|sich entfernen}}, {{W|de|fortgehen}}, {{W|de|weglaufen}}, {{W|de|wegfahren|guman=erê}}, {{W|de|durchbrennen|guman=erê}}, {{W|de|hinweggehen|guman=erê}}
* {{Z|fa}}: {{W|fa|دور شدن}}
* {{Z|en}}: {{W|en|divergence}}, {{W|en|divergency}}, {{W|en|recede}}, {{W|en|edge away from|guman=erê}}, {{W|en|give a wide berth to|guman=erê}}, {{W|en|divergence, divergency|guman=erê}}, {{W|en|hold aloof|guman=erê}}, {{W+|en|stay away}}
* {{Z|tr}}: {{W|tr|uzak düşmek}}, {{W|tr|açılmak}}, {{W|tr|cicozlamak}}, {{W|tr|uzaklaşmak}}, {{W|tr|ıramak}}, {{W-|tr|uzak kalmak}}
{{werger-bin}}
aqty5nipquvy6bvueiwslk86pnezdr6
6333786
6333783
2026-08-15T11:41:10Z
Balyozbot
7867
[[Special:PermanentLink/6298023|Bot]]: rêzkirina beşan
6333786
wikitext
text/x-wiki
{{bnr-n|dûrketin}}
== {{ziman|ku}} ==
=== Bilêvkirin ===
* {{ku-kîte}}
=== Lêker ===
{{ku-tewîn-lk|dûr ketin|form=negerguhêz|niha=kev|borî=ket|pêşgir=dûr|valahî=erê}}
{{lêker|ku|c=h-ngh}}
# [[çûn|Çûn]] [[dûr]], [[gihiştin]] [[dûr]], [[qewirîn]]; ber bi [[cih]]ekê dûr çûn.
#* {{jêder|ku|jêgirtin=Bi min re were -were em herin, em ji vir bi '''dûr bikevin'''.|''[[w:Bexçeyê Vîşne|Bexçeyê Vîşne]]'', [[w:Anton Çexov|Anton Çexov]], Weşanên [[w:Nûdem|Nûdem]]}}
==== Bi alfabeyên din ====
* {{ku-ar|دوور کەتن}}
==== Formên alternatîv ====
{{kol3|ku
| bi dûr keftin
| bi dûr ketin
| bi dûr kevtin
| dûr keftin
| dûr kevtin
| bidûrketin
| bidûrkeftin
| bidûrketin
| bidûrkevtin
| dûrkeftin
| dûrkevtin
}}
==== Jê ====
* {{g|ku|dûrketî}}
* {{g|ku|dûrkev}}
* {{g|ku|dûrkevî}}
==== Têkildar ====
* {{g|ku|dûr xistin}}
==== Etîmolojî ====
Ji {{heve|ku|dûr|ketin}}.
==== Bi zaravayên din ====
* {{Z|zza}}: [[dûr kewtene]], [[dûr kewtiş]]
==== Werger ====
{{werger-ser}}
* {{Z|de}}: {{W|de|sich entfernen}}, {{W|de|fortgehen}}, {{W|de|weglaufen}}, {{W|de|wegfahren|guman=erê}}, {{W|de|durchbrennen|guman=erê}}, {{W|de|hinweggehen|guman=erê}}
* {{Z|fa}}: {{W|fa|دور شدن}}
* {{Z|en}}: {{W|en|divergence}}, {{W|en|divergency}}, {{W|en|recede}}, {{W|en|edge away from|guman=erê}}, {{W|en|give a wide berth to|guman=erê}}, {{W|en|divergence, divergency|guman=erê}}, {{W|en|hold aloof|guman=erê}}, {{W+|en|stay away}}
* {{Z|tr}}: {{W|tr|uzak düşmek}}, {{W|tr|açılmak}}, {{W|tr|cicozlamak}}, {{W|tr|uzaklaşmak}}, {{W|tr|ıramak}}, {{W-|tr|uzak kalmak}}
{{werger-bin}}
4179u6eievcfzjkl7me1u4oip5unr4b
herik
0
39068
6333699
6308262
2026-08-14T19:09:13Z
~2026-44842-58
15254
/* Etîmolojî */ Çawa?
6333699
wikitext
text/x-wiki
== {{ziman|ku}} ==
=== Bilêvkirin ===
* {{ku-kîte}}
=== Navdêr ===
{{navdêr|ku|z=m}}, {{r-ya req}}, {{k-ya nerm}}
# tişta/ê ku [[herikîn|diherike]] anku [[livîn|dilive]] anku [[meşîn|dimeşe]]
#* {{bêmînak|ku}}
# [[co]] yan [[robar]] yan [[çem]]
#* {{bêmînak|ku}}
==== Tewandin ====
{{ku-tewîn-nav/nû|mê}}
==== Formên alternatîv ====
* [[herrik]]
* [[herrk]]
* [[herk]]
==== Etîmolojî ====
Ji {{q|ku|herikîn}} ji [[hereket]].
[[Çawa Etîmolojiya [[robar]] ya proto-hindûewropî: *sreu- ("herikîn") û proto-îranî: *hreu- ("herikîn") dibe "Erebî" ya "[[Hereket]]"?]]
[[Bila gotinên we li hev bigirin🤬😡]]
==== Werger ====
{{werger-ser}}
* {{Z|de}}: {{W|de|Strömung|f}}
* {{Z|en}}: {{W+|en|current}}, {{W+|en|flow}}, {{W+|en|stream}}, {{W+|en|rhero-}}
* {{Z|tr}}: {{W+|tr|akım}}
{{werger-bin}}
ej5tvtk6nggst4v9fanzn38xxzlq520
6333700
6333699
2026-08-14T19:14:31Z
Wikihez
7344
/* Etîmolojî */ çavkanî hewce ye (bi [[MediaWiki:Gadget-AjaxEdit.js|AjaxEdit]]ê re)
6333700
wikitext
text/x-wiki
== {{ziman|ku}} ==
=== Bilêvkirin ===
* {{ku-kîte}}
=== Navdêr ===
{{navdêr|ku|z=m}}, {{r-ya req}}, {{k-ya nerm}}
# tişta/ê ku [[herikîn|diherike]] anku [[livîn|dilive]] anku [[meşîn|dimeşe]]
#* {{bêmînak|ku}}
# [[co]] yan [[robar]] yan [[çem]]
#* {{bêmînak|ku}}
==== Tewandin ====
{{ku-tewîn-nav/nû|mê}}
==== Formên alternatîv ====
* [[herrik]]
* [[herrk]]
* [[herk]]
==== Etîmolojî ====
{{ji?|ku}}
==== Werger ====
{{werger-ser}}
* {{Z|de}}: {{W|de|Strömung|f}}
* {{Z|en}}: {{W+|en|current}}, {{W+|en|flow}}, {{W+|en|stream}}, {{W+|en|rhero-}}
* {{Z|tr}}: {{W+|tr|akım}}
{{werger-bin}}
1qzl9djoradel8joo9wpmkzmkksmy4a
boçik
0
41872
6333674
6302338
2026-08-14T16:26:29Z
Wikihez
7344
6333674
wikitext
text/x-wiki
== {{ziman|ku}} ==
=== Bilêvkirin ===
* {{ku-IPA}}
* {{deng|ku|LL-Q36163 (kmr)-Ebulfîda-boçik.wav|Deng|dever=Bidlîs}}
* {{ku-kîte}}
=== Navdêr ===
[[Wêne:Ring tailed lemurs.jpg|thumb|Du heywanên bi '''boçikên''' dirêj.({{sno|ku|dûvika heywanan}})]]
[[Wêne:Gray 111 - Vertebral column-coloured ku.png|thumb|Hestiyê qilênce an '''boçikê''' di diyagrama movikê de li herî dawiyê ye.({{sno|ku|dawiya movikê}})]]
{{navdêr|ku|z=m}}
# {{maneid|ku|dûvika heywanan}} {{f|ku|heywannasî}} [[dav|Dav]]a [[heywan]]an a bi [[derqûn]]ê ve.
#: {{hevmaneyên peyvê|ku|dûvik|kilik|kurîk|doç|dûv|daw}}
#: {{nm|ku|Ker '''boçika''' xwe dihejîne û mêşan pê vedirevîne.}}
#* {{jêder-kovar|ku|jêgirtin=Bi '''boçika''' kerê de tenekeyek bi benekî hatibû girêdan.|kovar=Çira|sernav=Heleb: "Ummuddunya"|nivîskar=Şahînê Bekirê Soreklî|hejmar=5|sal=1996|rûpel=71}}
#* {{jêder-kovar|ku|jêgirtin=Wextê mêrik kevçîkî diduya lê dixe, '''boçika''' masiyan tê xuyanê.|kovar=Kurd'Înalco|sernav=Boçika Cinnê : Boçika Masiyê|url=https://kovarakurdinalco.files.wordpress.com/2020/05/kovara_kurdinalco_hejmara_yekem.pdf|nivîskar=Şevîn Elegez|hejmar=1|sal=2019|rûpel=39}}
#* {{jêder-malper|ku|jêgirtin=Heywanikê carina '''boçika''' xwe hêl dikir û li qûna xwe dixist da ku mêş û mozan ji xwe biqewitîne.|url=https://www.salomecizrawi.com/kera-qocin.htm|sernav=Kêra Qoçîn|malper=salomecizrawi.com|nivîskar=Ferhadê Mihemed|sal=2019}}
# {{maneid|ku|dawiya movikê}} {{f|ku|anatomî}} [[hestî|Hestiyê]] li dawiya [[movik]]ê.<ref>{{mustafa gazî|r=19}}</ref><ref>{{Musa Anter|r=26}}</ref>
#: {{hevmaneyên peyvê|ku|qilênce|kilêjî}}
#: {{jornav|ku|hestî}}
#* {{jêder-pirtûk|ku|jêgirtin=Marîpişta mirovan ji 24 parçe hestîyan pêk hatiye. 7 ji wana li berê marîpişta histti, 12 li marîpişta sîng, 5 li marîpişta navpiştê, 5 li marîpişta runiştekê û 3-5 marîpişta '''boçikê''' hatine avakirin.|nivîskar=Hüseyin Bektaş|sernav=Anatomîya Bedena Mirovan|weşanxane=Weşanên Deng|sal=2004|rûpel=18|isbn=975-7011-32-0}}
#* {{jêder-malper|ku|jêgirtin=Tiştê baş serê min li erdê neket û neşikiya, lê ji ber ku ez pir xerab ketim, ez boçikî bûm. Do ez bi kûtanî çûm Newrozê. Li ser kursiya hişk, bi saetan rûniştan jî pir zor bû. Lê kêfxweşiya temaşekirina govenda kurdan ya bi sedan kesî, pir hindik êşa '''boçikê''' bi min dida jibîrkirin.|nivîskar=Zinarê Xamo|sernav=Min zivistana îsal bi selametî xelas nekir|url=https://zinarexamo.blogspot.com/2013/03/min-zivistana-isal-bi-selameti-xelas.html?m=1|malper=zinarexamo.blogspot.com|sal=2013}}
# {{maneid|ku|Beşa ku fêkiyê bi şaxê ve girêdide}} {{f|ku|riweknasî}} [[beş|Beşeke]] [[nebat]]an a [[tenik]] ku [[kulîlk]] an [[fêkî|fêkiyê]] bi [[şax]]ê ve [[girêdan|girêdide]].
#* {{jêder|ku|jêgirtin=Remezan bi '''boçika''' hêjîra zipîzer î girover û mezin girtibû, pêşî li xweşikbûna wê nihêrîbû bi dû re jî bi derbekê re heta boçikê xistibû devê xwe, xwaribû.|{{Jêgirtin/Mîran Janbar/Qolyeya Cecileê|r=38}}}}
# {{maneid|ku|cigareya xilasbûyî}} [[cigare|Cigareya]] ku hatiye kişandin.
#: {{hevmaneyên peyvê|ku|qopik|id1=cigareya xilasbûyî|qotik|id2=cigareya xilasbûyî|doçik|seroke|binik|quncik}}
#* {{jêder-malper|ku|jêgirtin=Tê gotin ku li temamê Portekîzê di her deqîqeyek de 7 hezar '''boçikên''' cixareyê diavêjin erdê.|sernav=Ji bo boçika cixareyê 250 Euro ceza didin|url=https://diyarname.com/news.php?Idx=36774|malper=diyarname.com|sal=2019}}
#* {{jêder-malper|ku|jêgirtin=Cotkarê bi navê Heme Mûstleg jî dibêje, "Bi xwedê em ji agir ditirsin, rêyeke sereke belkî kesek bi enqest yan ne enqset '''boçika''' çixara xwe bavêje û agir pêkeve, gelek kes deyindar in û çavê wan li vî mûsimî ye.(...)"|sernav=Asayişê ji bo parastina genimê cotkaran xalên çavdêriyê danîn|url=http://www.rupelanu.com/asayise-ji-bo-parastina-genime-cotkaran-xalen-cavderiye-danin-11267h.htm|malper=rupelanu.com|sal=2020}}
#* {{jêder-malper|ku|jêgirtin=Di rewşên weha de di navbera hebûn û nebûnê de meriv xwe bêqîmet dihesibîne mîna '''boçika''' cixareyê. |nivîskar=|sernav=cizb|url=http://devliken.blogspot.com/2021/03/cizb.html|malper=devliken.blogspot.com|sal=2021}}
==== Tewandin ====
{{ku-tewîn-nav/nû|mê}}
==== Bi alfabeyên din ====
* {{ku-ar|بۆچک}}
* {{ku-kr|бочьк}}
==== Formên alternatîv ====
* {{g|ku|boç}}
* {{g|ku|boçk}}
==== Jê ====
{{kol3|ku|
| biboçik
| bêboçik
| boçiksor
| boçikî bûyîn
| hestiyê boçikê
| bi boçikê girtin
| boçik lê ricifîn
| boçik kirin sing
| boçika xwe rep kirin
| boçik pê ve girêdan
| boçika xwe bilind girtin
| boçik li ba kirin
| li ser boçika xwe rûniştin
| boçika wî ketîye qûnê
| boçik bi davikê xistin
}}
==== Etîmolojî ====
Ji {{deyn|hy|ku|պոչիկ|w=dav}}, ji {{qertaf|hy|պոչ|-իկ|nekat=1}}. {{anlz|ku|boç|-ik}}.
==== Werger ====
{{werger-ser|dawa heywanan|1}}
* {{Z|ab}}: {{W-|ab|аҵыхәа}}
* {{Z|ace}}: {{W-|ace|iku}}
* {{Z|af}}: {{W+|af|stert}}
* {{Z|aho}}: {{W-|aho|𑜍𑜂𑜫}}
* {{Z|sq}}: {{W+|sq|bisht|n}}
* {{Z|de}}: {{W+|de|Schwanz|n}}, {{W+|de|Schweif|n}}, {{W+|de|Sterz|n}}, {{W+|de|Stert|n}}, {{W+|de|Zagel|n}}, {{W+|de|Bürzel|n}}, {{W+|de|Rute|m}}, {{W+|de|Schwänzchen|nt}}, {{W-|de|Schwänzlein|nt}}
* {{Z|am}}: {{W-|am|ጅራት}}
* {{Z|apn}}: {{W-|apn|jamy}}
* {{Z|an}}: {{W-|an|coda|m}}
* {{Z|rup}}: {{W-|rup|coadã}}
* {{Z|as}}: {{W-|as|নেজ}}, {{W-|as|নেগুৰ}}
* {{Z|ast}}: {{W+|ast|rabu|n}}
* {{Z|av}}: {{W-|av|рачӏчӏ}}
* {{Z|az}}: {{W+|az|quyruq}}
* {{Z|bdr}}: {{W-|bdr|engko}}
* {{Z|ban}}: {{W-|ban|buntut}}, {{W-|ban|hikuh}}
* {{Z|bjn}}: {{W-|bjn|buntut}}, {{W-|bjn|ikung}}
* {{Z|eu}}: {{W-|eu|buztan}}
* {{Z|ba}}: {{W-|ba|ҡойроҡ}}
* {{Z|sne}}: {{W-|sne|kuon}}
* {{Z|be}}: {{W-|be|хвост|n}}
* {{Z|bal}}: {{W-|bal|دمب|tr=dumb}}
* {{Z|bn}}: {{W+|bn|লেজ}}
* {{Z|bcl}}: {{W-|bcl|ikog}}
* {{Z|kxd}}: {{W-|kxd|ikung}}
* {{Z|bg}}: {{W-|bg|опа́шка|m}}
* {{Z|my}}: {{W+|my|အမြီး|sc=Mymr}}
* {{Z|bua}}: {{W-|bua|һүүл}}
* {{Z|cjm}}: {{W-|cjm|ꨁꨆꨭꨩ|tr=iku'}}
* {{Z|ce}}: {{W-|ce|цӏога}}
* {{Z|cs}}: {{W+|cs|ocas|n}}, {{W+|cs|chvost|n}}, {{W+|cs|ohon|n}}
* {{Z|cdm}}: {{W-|cdm|मेः}}
* {{Z|ny}}: {{W-|ny|mchira}}
* {{Z|zh}}:
*: {{Z|yue}}: {{W-|yue|尾|tr=mei5|sc=Hani}}
*: {{Z|dng}}: {{W-|dng|йиба}}
*: {{Z|gan}}: {{W-|gan|尾巴|tr=ui3 ba / mi3 bang}}
*: {{Z|hak}}: {{W-|hak|尾|tr=mî|sc=Hani}}, {{W-|hak|尾巴|tr=mi1 ba1}}
*: {{Z|cjy}}: {{W-|cjy|尾巴|tr=i2 ba1}}
*: {{Z|cmn}}: {{W+|cmn|尾巴|tr=wěibā|sc=Hani}}
*: {{Z|cdo}}: {{W-|cdo|尾|tr=muōi}}
*: {{Z|nan}}: {{W+|nan|尾|tr=bóe, bé|sc=Hani}}, {{W+|nan|尾仔|tr=bóe-á, bé-á|sc=Hani}}
*: {{Z|wuu}}: {{W-|wuu|尾巴|tr=nyi po}}
*: {{Z|hsn}}: {{W-|hsn|尾巴|tr=uei3 ba1}}
* {{Z|cv}}: {{W-|cv|хӳре}}
* {{Z|dlm}}: {{W-|dlm|cauda|m}}
* {{Z|da}}: {{W+|da|hale|g}}
* {{Z|avd}}: {{W-|avd|دمب|tr=domb}}
* {{Z|id}}: {{W+|id|ekor}}, {{W+|id|buntut}}
* {{Z|ar}}: {{W-|ar|ذَنَب|n}}, {{W-|ar|ذَيْل|n}}
*: {{Z|ary}}: {{W-|ary|ديل|n|tr=dīl}}, {{W-|ary|زنطيط|n|tr=zanṭīṭ}}, {{W-|ary|قزيبة|m|tr=qazzība}}, {{W-|ary|شوال|n|tr=šwāl}}
*: {{Z|arz}}: {{W-|arz|ديل|n|tr=dél|sc=Arab}}
* {{Z|xcl}}: {{W-|xcl|ագի}}, {{W-|xcl|պոչ}}, {{W-|xcl|ձետ}}
* {{Z|hy}}: {{W+|hy|պոչ}}
* {{Z|myv}}: {{W-|myv|пуло}}
* {{Z|eo}}: {{W+|eo|vosto}}
* {{Z|et}}: {{W+|et|saba}}
* {{Z|evn}}: {{W-|evn|ирги|tr=irgi}}
* {{Z|fa}}: {{W+|fa|دم|tr=dom|sc=fa-Arab}}, {{W+|fa|دنب|tr=domb|sc=fa-Arab}}
* {{Z|fi}}: {{W+|fi|häntä}}, {{W+|fi|pyrstö}}, {{W+|fi|saparo}}
* {{Z|fr}}: {{W+|fr|queue|m}}
* {{Z|fur}}: {{W-|fur|code|m}}
* {{Z|fy}}: {{W-|fy|sturt}}
* {{Z|gd}}: {{W-|gd|earball|n}}, {{W-|gd|eàrr|n|m}}
* {{Z|gl}}: {{W+|gl|rabo}}, {{W+|gl|cauda|m}},{{W-|gl|tomadía|m}}, {{W+|gl|cola|m}}
* {{Z|ka}}: {{W+|ka|კუდი|sc=Geor}}
* {{Z|gue}}: {{W-|gue|jawurd}}
* {{Z|ht}}: {{W-|ht|ke|}}, {{W-|ht|tche|}}
* {{Z|ha}}: {{W-|ha|wutsiya}}
* {{Z|hi}}: {{W-|hi|पूंछ|m}}, {{W+|hi|पूँछ|m}}, {{W+|hi|दुम|m}}
* {{Z|mww}}: {{W-|mww|tw}}
* {{Z|nl}}: {{W+|nl|staart|n}}
* {{Z|he}}: {{W+|he|זָנָב|n|tr=zanáv}}
* {{Z|io}}: {{W+|io|kaudo}}
* {{Z|ang}}: {{W-|ang|tæġl|n}}, {{W-|ang|steort|n}}
* {{Z|en}}: {{W+|en|tail}}
* {{Z|ga}}: {{W+|ga|eireaball|n}}
* {{Z|it}}: {{W+|it|coda|m}}
* {{Z|ium}}: {{W-|ium|dueiv}}
* {{Z|is}}: {{W+|is|hali|n}}, {{W+|is|skott|nt}} or {{W+|is|rófa|m}}, {{W+|is|tagl}}, {{W+|is|dindill|n}}, {{W+|is|stél|nt}}, {{W+|is|sporður|n}}
* {{Z|ja}}: {{W+|ja|尻尾|tr=しっぽ, shippo|sc=Jpan}}, {{W+|ja|しっぽ|tr=shippo|sc=Jpan}}, {{W+|ja|尾|tr=お, o|sc=Jpan}}, {{W-|ja|尾っぽ|tr=oppo}}
* {{Z|jv}}: {{W+|jv|buntut}}
* {{Z|xal}}: {{W-|xal|сүл}}
* {{Z|kmc}}: {{W-|kmc|sedl}}
* {{Z|ram}}: {{W-|ram|japy}}
* {{Z|csb}}: {{W-|csb|ògón|n}}
* {{Z|ca}}: {{W+|ca|cua|m}}
* {{Z|txu}}: {{W-|txu|jamy}}, {{W-|txu|tey}}
* {{Z|kgp}}: {{W-|kgp|my}}
* {{Z|qu}}: {{W-|qu|cupa}}
* {{Z|kzi}}: {{W-|kzi|iur}}
* {{Z|ky}}: {{W+|ky|куйрук}}, {{W+|ky|дүм}}
* {{Z|ki}}: {{W-|ki|mũcuthĩ|c3}}
* {{Z|kqr}}: {{W-|kqr|noinan}}
* {{Z|si}}: {{W-|si|අවර|sc=Sinh}}
* {{Z|koi}}: {{W-|koi|бӧж}}
* {{Z|ko}}: {{W+|ko|꼬리}}
* {{Z|xra}}: {{W-|xra|japy}}
* {{Z|rop}}: {{W-|rop|teil}}
* {{Z|cuk}}: {{W-|cuk|bunnu}}
* {{Z|lmy}}: {{W-|lmy|kiku}}
* {{Z|ltg}}: {{W-|ltg|aste|m}}
* {{Z|la}}: {{W-|la|cauda}}
* {{Z|lv}}: {{W+|lv|aste|m}}
* {{Z|lo}}: {{W+|lo|ຫາງ}}
* {{Z|lt}}: {{W+|lt|uodega}}
* {{Z|liv}}: {{W-|liv|tabār }}, {{W-|liv|tabārd }}
* {{Z|khb}}: {{W-|khb|ᦠᦱᧂ}}
* {{Z|mk}}: {{W-|mk|опашка|m}}
* {{Z|mg}}: {{W+|mg|rambo}}
* {{Z|ml}}: {{W-|ml|വാല്}}
* {{Z|ms}}: {{W+|ms|ekor}}, {{W+|ms|buntut}}
* {{Z|mt}}: {{W-|mt|denb|n}}
* {{Z|gv}}: {{W-|gv|arbyl|n}}, {{W-|gv|famman|n}}
* {{Z|mi}}: {{W-|mi|hiore}}, {{W-|mi|whiore}}, {{W-|mi|waero}}, {{W-|mi|hiku}}, {{W-|mi|kapu}}
* {{Z|mhr}}: {{W-|mhr|поч}}
* {{Z|hu}}: {{W+|hu|farok}}
* {{Z|mel}}: {{W-|mel|ikiu}}
* {{Z|mdf}}: {{W-|mdf|пула}}
* {{Z|mn}}: {{W+|mn|сүүл}}
* {{Z|mtq}}: {{W-|mtq|tuôi}}
* {{Z|nv}}: {{W-|nv|atseeʼ}}
* {{Z|nds}}: {{W+|nds|Steert|n}}
* {{Z|ne}}: {{W-|ne|पुच्छर}}
* {{Z|nio}}: {{W-|nio|тәйбу}}
* {{Z|nrf}}: {{W-|nrf|coue|m}}
* {{Z|no}}:
*: {{Z|nb}}: {{W+|nb|hale|n}}, {{W-|nb|stjert|n}}
*: {{Z|nn}}: {{W-|nn|hale|n}}, {{W-|nn|stjert|n}}
* {{Z|cst}}: {{W-|cst|tú̄pui}}
* Ojibwe: {{W-|oj|ozow}}
* {{Z|oc}}: {{W+|oc|coa|m}}
* {{Z|om}}: {{W-|om|eegee}}
* {{Z|orh}}: {{W-|orh|irgi}}
* {{Z|os}}: {{W-|os|дымӕг}}, {{W-|os|къӕдзил}}, {{W-|os|къуди}}
* {{Z|ota}}: {{W-|ota|قویروق|tr=quyruq}}
* {{Z|ug}}: {{W-|ug|قۇيرۇق}}
* {{Z|uz}}: {{W+|uz|dum}}, {{W+|uz|ket}}, {{W+|uz|quyruq}}
* {{Z|pwn}}: {{W-|pwn|iku}}
* {{Z|kre}}: {{W-|kre|sãnpy}}
* {{Z|pag}}: {{W-|pag|ikol}}
* {{Z|pap}}: {{W-|pap|rabo}}, {{W-|pap|rabu}}
* {{Z|gvp}}: {{W-|gvp|japy}}
* {{Z|pdt}}: {{W-|pdt|Zoagel|n}}
* {{Z|pl}}: {{W+|pl|ogon|n}}, {{W+|pl|chwost|n}}
* {{Z|pt}}: {{W+|pt|rabo|n}}, {{W+|pt|cauda|m}}
* {{Z|pa}}: {{W-|pa|ਪੂਸ਼}}, {{W-|pa|ਦੁਮ}}, {{W-|pa|ਦੁੰਬ}}
* {{Z|sai-pyk}}: {{W-|sai-pyk|japyyh}}
* {{Z|kk}}: {{W+|kk|құйрық}}
* {{Z|rm}}: {{W-|rm|cua}}
* {{Z|ro}}: {{W+|ro|coadă}}
* {{Z|ru}}: {{W+|ru|хвост|n}}
* {{Z|rue}}: {{W-|rue|хвост|n}}
* {{Z|sm}}: {{W-|sm|i‘u}}
* {{Z|ceb}}: {{W-|ceb|ikog}}
* {{Z|scn}}: {{W+|scn|cuda}}
* {{Z|szl}}: {{W-|szl|szwanc|n}}
* {{Z|sh}}: {{W-|sh|ре̑п|n}}, {{W+|sh|rȇp|n}}
* {{Z|cu}}: {{W-|cu|хвостъ}}
* {{Z|orv}}: {{W-|orv|хвостъ|n}}
* {{Z|sk}}: {{W-|sk|chvost|n}}
* {{Z|sl}}: {{W+|sl|rep|n}}
* {{Z|dsb}}: {{W-|dsb|wogon|n}}
* {{Z|es}}: {{W+|es|cola|m}}, {{W+|es|rabo|n}}
* {{Z|su}}: {{W-|su|ᮘᮥᮔ᮪ᮒᮥᮒ᮪}}
* {{Z|suy}}: {{W-|suy|mby}}
* {{Z|sw}}: {{W+|sw|mkia|c3|c4}}
* {{Z|sv}}: {{W+|sv|svans|g}}, {{W+|sv|stjärt|g}}
* {{Z|shn}}: {{W-|shn|ႁၢင်|sc=Mymr}}
* {{Z|zdj}}: {{W-|zdj|utsungo|c11|c10a}}
* {{Z|cjs}}: {{W-|cjs|қузуруқ|tr=quzuruq}}
* {{Z|tg}}: {{W+|tg|дум}}
* {{Z|mvv}}: {{W-|mvv|iku'}}
* {{Z|tl}}: {{W+|tl|buntot|nt}}
* {{Z|ta}}: {{W+|ta|வால்}}
* {{Z|twf}}: {{W-|twf|xwę́na}}
* {{Z|sai-tap}}: {{W-|sai-tap|wy}}
* {{Z|tsg}}: {{W-|tsg|ikug}}
* {{Z|nod}}: {{W-|nod|ᩉᩣ᩠ᨦ}}
* {{Z|th}}: {{W+|th|หาง}}
* {{Z|te}}: {{W+|te|తోక}}
* {{Z|tt}}: {{W+|tt|койрык}}
* {{Z|tet}}: {{W-|tet|ikun}}
* {{Z|ti}}: {{W-|ti|ጭራ}}
* {{Z|otk}}: {{W-|otk|𐰴𐰆𐰑𐰺𐰆𐰸|tr=qudruq}}
* {{Z|tr}}: {{W+|tr|kuyruk}}
* {{Z|tk}}: {{W-|tk|guýruk}}
* {{Z|tiw}}: {{W-|tiw|tuwara}}, {{W-|tiw|putupwarra}}, {{W-|tiw|kimarra}}
* {{Z|bo}}: {{W-|bo|གཞུག་གུ}}, {{W-|bo|མཇུག་མ}}
* {{Z|to}}: {{W-|to|iku}}
* {{Z|txb}}: {{W-|txb|pako}}
* {{Z|tyv}}: {{W-|tyv|кудурук}}
* {{Z|ude}}: {{W-|ude|иги }}
* {{Z|udm}}: {{W-|udm|быж}}
* {{Z|uga}}: {{W-|uga|𐎏𐎐𐎁}}
* {{Z|ulc}}: {{W-|ulc|худю }}
* {{Z|ur}}: {{W-|ur|دم|m|tr=dum|sc=ur-Arab}}, {{W-|ur|پونچھ|m|tr=pū̃ch|sc=ur-Arab}}
* {{Z|uk}}: {{W+|uk|хвіст|n}}
* {{Z|vec}}: {{W+|vec|coa|m}}
* {{Z|vi}}: {{W+|vi|đuôi}}
* {{Z|vo}}: {{W+|vo|göb}}, {{W-|vo|göbil}}
* {{Z|wa}}: {{W+|wa|cawe|m}}
* {{Z|wrr}}: {{W-|wrr|mordorl}}
* {{Z|wbp}}: {{W-|wbp|ngirnti}}, {{W-|wbp|wipi}}
* {{Z|cy}}: {{W+|cy|cynffon|m}}
* {{Z|kjh}}: {{W-|kjh|хузурух}}
* {{Z|xav}}: {{W-|xav|bö}}
* {{Z|xer}}: {{W-|xer|bâ}}
* {{Z|km}}: {{W+|km|កន្ទុយ}}
* {{Z|xok}}: {{W-|xok|my}}
* {{Z|yai}}: {{W-|yai|дум}}
* {{Z|yka}}: {{W-|yka|engko}}
* {{Z|sah}}: {{W-|sah|кутурук}}
* {{Z|yi}}: {{W-|yi|וויידל|n}}, {{W-|yi|שוואַנץ|n}}
* {{Z|ii}}: {{W-|ii|ꁍꎼ}}, {{W-|ii|ꂪ}}
* {{Z|el}}: {{W+|el|ουρά|m}}
*: {{Z|grc}}: {{W-|grc|οὐρά|m}}, {{W-|grc|κέρκος|m}}
* {{Z|zea}}: {{W-|zea|staert|n}}
* {{Z|za}}: {{W-|za|rieng}}
* {{Z|zu}}: {{W-|zu|umsila|c3|c4}}
{{werger-bin}}
{{werger-ser|hestiya li dawiya movikê|2}}
* {{Z|de}}: {{W-|de|Coccyx|n}} ; {{W+|de|Steißbein|nt}}
* {{Z|bdr}}: {{W-|bdr|sengkurung}}
* {{Z|be}}: {{W-|be|хвастцо́вая косць|m}}, {{W-|be|хвасце́ц|n}}
* {{Z|bg}}: {{W-|bg|опашна кост}}
* {{Z|cs}}: {{W+|cs|kostrč|m}}
* {{Z|da}}: {{W+|da|haleben|nt}}
* {{Z|id}}: {{W+|id|tulang sulbi}}, {{W+|id|tulang ekor}}, {{W+|id|tulang tongkeng}}, {{W-|id|koksiks}}
* {{Z|ar}}: {{W-|ar|عُصُص|n}}, {{W-|ar|عُصْعُص|n}}
*: {{Z|arz}}: {{W-|arz|عصعص|n|tr=ʿúṣʿuṣ}}
* {{Z|hy}}: {{W+|hy|պոչուկ}}
* {{Z|eo}}: {{W-|eo|kokcigo}}
* {{Z|fa}}: {{W+|fa|دنبالچه|tr=donbâlče}}
* {{Z|fo}}: {{W-|fo|halabein|nt}}
* {{Z|fi}}: {{W+|fi|häntäluu}}
* {{Z|fr}}: {{W+|fr|coccyx|n}}
* {{Z|gl}}: {{W+|gl|cóccix|n}}
* {{Z|hil}}: {{W-|hil|pigtot}}
* {{Z|nl}}: {{W+|nl|staartbeen}}, {{W+|nl|stuitje|nt}}
* {{Z|ilo}}: {{W-|ilo|kimmol}}
* {{Z|en}}: {{W+|en|coccyx}}, {{W+|en|tailbone}}
* {{Z|it}}: {{W+|it|coccige}}
* {{Z|is}}: {{W+|is|rófubein}}
* {{Z|ja}}: {{W+|ja|尾骨|tr=びこつ, bikotsu}}, {{W-|ja|尾骶骨|tr=びていこつ, biteikotsu}}, {{W-|ja|尾閭骨|tr=びりょこつ, biryokotsu}}
* {{Z|pam}}: {{W-|pam|kaikut}}, {{W-|pam|kayikut}}
* {{Z|ca}}: {{W+|ca|còccix|n}}
* {{Z|ko}}: {{W-|ko|꼬리뼈}}
* {{Z|lt}}: {{W-|lt|uodegikaulis}}
* {{Z|ms}}: {{W-|ms|tulang sulbi}}, {{W-|ms|tulang ekor}}, {{W-|ms|tulang cenonot}}, {{W-|ms|tulang kongkeng}}, {{W-|ms|tulang tongkeng}}, {{W-|ms|koksiks}}
* {{Z|cmn}}: {{W+|cmn|尾骨|tr=wěigǔ}}, {{W+|cmn|尾骶骨|tr=wěidǐgǔ}}, {{W-|cmn|尾閭骨}}, {{W+|cmn|尾闾骨|tr=wěilǘgǔ}}
* {{Z|mi}}: {{W-|mi|timu}}
* {{Z|hu}}: {{W+|hu|farkcsont}}, {{W+|hu|farokcsont}}
* {{Z|mel}}: {{W-|mel|tuleang kelebik}}, {{W-|mel|kubin}}
* {{Z|nv}}: {{W-|nv|atseeʼ}}
* {{Z|no}}:
*: {{Z|nb}}: {{W-|nb|haleben|nt}}, {{W-|nb|halebein|nt}}
*: {{Z|nn}}: {{W-|nn|halebein|nt}}
* {{Z|pl}}: {{W+|pl|kość guziczna|m}}
* {{Z|pt}}: {{W+|pt|cóccix|n}}, {{W-|pt|mucumbu|n}}, {{W-|pt|curanchim|n}}
* {{Z|kk}}: {{W-|kk|құймышақ}}
* {{Z|ru}}: {{W+|ru|ко́пчик|n}}
* {{Z|bsy}}: {{W-|bsy|saligi'}}
* {{Z|ceb}}: {{W-|ceb|bangkawbangkaw}}
* {{Z|sh}}: {{W+|sh|trtica|m}}, {{W-|sh|trtičnjača|m}}
* {{Z|sco}}: {{W-|sco|rumple-bane}}
* {{Z|sk}}: {{W+|sk|kostrč|m}}
* {{Z|sl}}: {{W+|sl|trtica|m}}
* {{Z|es}}: {{W+|es|cóccix|n}}, {{W+|es|coxis|n}}
* {{Z|sv}}: {{W-|sv|korsben|g}}
* {{Z|mvv}}: {{W-|mvv|kalut}}
* {{Z|tl}}: {{W-|tl|puil}}, {{W-|tl|tulatod}}
* {{Z|th}}: {{W+|th|ก้นกบ}}
* {{Z|crh}}: {{W-|crh|quyruq kemigi}}
* {{Z|tr}}: {{W+|tr|kuyruk sokumu}}
* {{Z|uk}}: {{W-|uk|ку́прик|n}}
* {{Z|vi}}: {{W-|vi|xương cụt}} ({{W-|vi|𩩫𥐒}})
* {{Z|grc}}: {{W-|grc|κόκκυξ|n}}
{{werger-bin}}
{{werger-ser|beşeke nebatan|3}}
* {{Z|tr}}: {{W+|tr|sap}}
{{werger-bin}}
{{werger-bnr-h|cigareya ku hatiye kişandin|4|qopik|id=cigareya xilasbûyî}}
* {{Z|de}}: {{W+|de|Stummel|n}}, {{W+|de|Zigarettenstummel|n}}, {{W+|de|Kippe|m}}, {{W-|de|Zigarettenkippe|m}}
* {{Z|ar}}: {{W-|ar|عَقْب سِيجَارَة}}
* {{Z|fi}}: {{W+|fi|natsa}}, {{W+|fi|tumppi}}, {{W+|fi|tupakantumppi}}
* {{Z|fr}}: {{W+|fr|mégot|n}}
* {{Z|en}}: {{W+|en|butt}}
* {{Z|es}}: {{W+|es|colilla|m}}, {{W+|es|bacha|m}}, {{W+|es|calilla|m}}, {{W-|es|chenca|m}}, {{W+|es|chicote|n}}, {{W+|es|chinga|m}}, {{W+|es|chiva|m}}, {{W+|es|pava|m}}, {{W+|es|pucho|n}}
* {{Z|tr}}: {{W+|tr|izmarit}}
{{werger-bin}}
=== Çavkanî ===
{{çavkanî}}
== {{ziman|zza}} ==
=== Navdêr ===
{{navdêr|zza|z=}}
# {{g|ku|boçik|id=dawiya movikê}} (serê movika piştê ku tête ser devêqunê)<ref>http://www.kovarabir.com/wp-content/uploads/Ferheng%C3%AA-Dimil%C3%AE-%C3%BB-Kurmanc%C3%AE-B-b.pdf</ref>
==== Etîmolojî ====
Ji {{deyn|hy|zza|պոչիկ}}.
=== Çavkanî ===
{{çavkanî}}
nycfogyuaw3iw2fuqtaulww7yd8pkvz
6333682
6333674
2026-08-14T18:12:07Z
Balyozbot
7867
Bot: Paqijiyên kozmetîk (Lînk paqij kir, --Valahiyên nehewce.)
6333682
wikitext
text/x-wiki
== {{ziman|ku}} ==
=== Bilêvkirin ===
* {{ku-IPA}}
* {{deng|ku|LL-Q36163 (kmr)-Ebulfîda-boçik.wav|Deng|dever=Bidlîs}}
* {{ku-kîte}}
=== Navdêr ===
[[Wêne:Ring tailed lemurs.jpg|thumb|Du heywanên bi '''boçikên''' dirêj.({{sno|ku|dûvika heywanan}})]]
[[Wêne:Gray 111 - Vertebral column-coloured ku.png|thumb|Hestiyê qilênce an '''boçikê''' di diyagrama movikê de li herî dawiyê ye.({{sno|ku|dawiya movikê}})]]
{{navdêr|ku|z=m}}
# {{maneid|ku|dûvika heywanan}} {{f|ku|heywannasî}} [[dav|Dava]] [[heywan]]an a bi [[derqûn]]ê ve.
#: {{hevmaneyên peyvê|ku|dûvik|kilik|kurîk|doç|dûv|daw}}
#: {{nm|ku|Ker '''boçika''' xwe dihejîne û mêşan pê vedirevîne.}}
#* {{jêder-kovar|ku|jêgirtin=Bi '''boçika''' kerê de tenekeyek bi benekî hatibû girêdan.|kovar=Çira|sernav=Heleb: "Ummuddunya"|nivîskar=Şahînê Bekirê Soreklî|hejmar=5|sal=1996|rûpel=71}}
#* {{jêder-kovar|ku|jêgirtin=Wextê mêrik kevçîkî diduya lê dixe, '''boçika''' masiyan tê xuyanê.|kovar=Kurd'Înalco|sernav=Boçika Cinnê : Boçika Masiyê|url=https://kovarakurdinalco.files.wordpress.com/2020/05/kovara_kurdinalco_hejmara_yekem.pdf|nivîskar=Şevîn Elegez|hejmar=1|sal=2019|rûpel=39}}
#* {{jêder-malper|ku|jêgirtin=Heywanikê carina '''boçika''' xwe hêl dikir û li qûna xwe dixist da ku mêş û mozan ji xwe biqewitîne.|url=https://www.salomecizrawi.com/kera-qocin.htm|sernav=Kêra Qoçîn|malper=salomecizrawi.com|nivîskar=Ferhadê Mihemed|sal=2019}}
# {{maneid|ku|dawiya movikê}} {{f|ku|anatomî}} [[hestî|Hestiyê]] li dawiya [[movik]]ê.<ref>{{mustafa gazî|r=19}}</ref><ref>{{Musa Anter|r=26}}</ref>
#: {{hevmaneyên peyvê|ku|qilênce|kilêjî}}
#: {{jornav|ku|hestî}}
#* {{jêder-pirtûk|ku|jêgirtin=Marîpişta mirovan ji 24 parçe hestîyan pêk hatiye. 7 ji wana li berê marîpişta histti, 12 li marîpişta sîng, 5 li marîpişta navpiştê, 5 li marîpişta runiştekê û 3-5 marîpişta '''boçikê''' hatine avakirin.|nivîskar=Hüseyin Bektaş|sernav=Anatomîya Bedena Mirovan|weşanxane=Weşanên Deng|sal=2004|rûpel=18|isbn=975-7011-32-0}}
#* {{jêder-malper|ku|jêgirtin=Tiştê baş serê min li erdê neket û neşikiya, lê ji ber ku ez pir xerab ketim, ez boçikî bûm. Do ez bi kûtanî çûm Newrozê. Li ser kursiya hişk, bi saetan rûniştan jî pir zor bû. Lê kêfxweşiya temaşekirina govenda kurdan ya bi sedan kesî, pir hindik êşa '''boçikê''' bi min dida jibîrkirin.|nivîskar=Zinarê Xamo|sernav=Min zivistana îsal bi selametî xelas nekir|url=https://zinarexamo.blogspot.com/2013/03/min-zivistana-isal-bi-selameti-xelas.html?m=1|malper=zinarexamo.blogspot.com|sal=2013}}
# {{maneid|ku|Beşa ku fêkiyê bi şaxê ve girêdide}} {{f|ku|riweknasî}} [[beş|Beşeke]] [[nebat]]an a [[tenik]] ku [[kulîlk]] an [[fêkî|fêkiyê]] bi [[şax]]ê ve [[girêdan|girêdide]].
#* {{jêder|ku|jêgirtin=Remezan bi '''boçika''' hêjîra zipîzer î girover û mezin girtibû, pêşî li xweşikbûna wê nihêrîbû bi dû re jî bi derbekê re heta boçikê xistibû devê xwe, xwaribû.|{{Jêgirtin/Mîran Janbar/Qolyeya Cecileê|r=38}}}}
# {{maneid|ku|cigareya xilasbûyî}} [[cigare|Cigareya]] ku hatiye kişandin.
#: {{hevmaneyên peyvê|ku|qopik|id1=cigareya xilasbûyî|qotik|id2=cigareya xilasbûyî|doçik|seroke|binik|quncik}}
#* {{jêder-malper|ku|jêgirtin=Tê gotin ku li temamê Portekîzê di her deqîqeyek de 7 hezar '''boçikên''' cixareyê diavêjin erdê.|sernav=Ji bo boçika cixareyê 250 Euro ceza didin|url=https://diyarname.com/news.php?Idx=36774|malper=diyarname.com|sal=2019}}
#* {{jêder-malper|ku|jêgirtin=Cotkarê bi navê Heme Mûstleg jî dibêje, "Bi xwedê em ji agir ditirsin, rêyeke sereke belkî kesek bi enqest yan ne enqset '''boçika''' çixara xwe bavêje û agir pêkeve, gelek kes deyindar in û çavê wan li vî mûsimî ye.(...)"|sernav=Asayişê ji bo parastina genimê cotkaran xalên çavdêriyê danîn|url=http://www.rupelanu.com/asayise-ji-bo-parastina-genime-cotkaran-xalen-cavderiye-danin-11267h.htm|malper=rupelanu.com|sal=2020}}
#* {{jêder-malper|ku|jêgirtin=Di rewşên weha de di navbera hebûn û nebûnê de meriv xwe bêqîmet dihesibîne mîna '''boçika''' cixareyê. |nivîskar=|sernav=cizb|url=http://devliken.blogspot.com/2021/03/cizb.html|malper=devliken.blogspot.com|sal=2021}}
==== Tewandin ====
{{ku-tewîn-nav/nû|mê}}
==== Bi alfabeyên din ====
* {{ku-ar|بۆچک}}
* {{ku-kr|бочьк}}
==== Formên alternatîv ====
* {{g|ku|boç}}
* {{g|ku|boçk}}
==== Jê ====
{{kol3|ku|
| biboçik
| bêboçik
| boçiksor
| boçikî bûyîn
| hestiyê boçikê
| bi boçikê girtin
| boçik lê ricifîn
| boçik kirin sing
| boçika xwe rep kirin
| boçik pê ve girêdan
| boçika xwe bilind girtin
| boçik li ba kirin
| li ser boçika xwe rûniştin
| boçika wî ketîye qûnê
| boçik bi davikê xistin
}}
==== Etîmolojî ====
Ji {{deyn|hy|ku|պոչիկ|w=dav}}, ji {{qertaf|hy|պոչ|-իկ|nekat=1}}. {{anlz|ku|boç|-ik}}.
==== Werger ====
{{werger-ser|dawa heywanan|1}}
* {{Z|ab}}: {{W-|ab|аҵыхәа}}
* {{Z|ace}}: {{W-|ace|iku}}
* {{Z|af}}: {{W+|af|stert}}
* {{Z|aho}}: {{W-|aho|𑜍𑜂𑜫}}
* {{Z|sq}}: {{W+|sq|bisht|n}}
* {{Z|de}}: {{W+|de|Schwanz|n}}, {{W+|de|Schweif|n}}, {{W+|de|Sterz|n}}, {{W+|de|Stert|n}}, {{W+|de|Zagel|n}}, {{W+|de|Bürzel|n}}, {{W+|de|Rute|m}}, {{W+|de|Schwänzchen|nt}}, {{W-|de|Schwänzlein|nt}}
* {{Z|am}}: {{W-|am|ጅራት}}
* {{Z|apn}}: {{W-|apn|jamy}}
* {{Z|an}}: {{W-|an|coda|m}}
* {{Z|rup}}: {{W-|rup|coadã}}
* {{Z|as}}: {{W-|as|নেজ}}, {{W-|as|নেগুৰ}}
* {{Z|ast}}: {{W+|ast|rabu|n}}
* {{Z|av}}: {{W-|av|рачӏчӏ}}
* {{Z|az}}: {{W+|az|quyruq}}
* {{Z|bdr}}: {{W-|bdr|engko}}
* {{Z|ban}}: {{W-|ban|buntut}}, {{W-|ban|hikuh}}
* {{Z|bjn}}: {{W-|bjn|buntut}}, {{W-|bjn|ikung}}
* {{Z|eu}}: {{W-|eu|buztan}}
* {{Z|ba}}: {{W-|ba|ҡойроҡ}}
* {{Z|sne}}: {{W-|sne|kuon}}
* {{Z|be}}: {{W-|be|хвост|n}}
* {{Z|bal}}: {{W-|bal|دمب|tr=dumb}}
* {{Z|bn}}: {{W+|bn|লেজ}}
* {{Z|bcl}}: {{W-|bcl|ikog}}
* {{Z|kxd}}: {{W-|kxd|ikung}}
* {{Z|bg}}: {{W-|bg|опа́шка|m}}
* {{Z|my}}: {{W+|my|အမြီး|sc=Mymr}}
* {{Z|bua}}: {{W-|bua|һүүл}}
* {{Z|cjm}}: {{W-|cjm|ꨁꨆꨭꨩ|tr=iku'}}
* {{Z|ce}}: {{W-|ce|цӏога}}
* {{Z|cs}}: {{W+|cs|ocas|n}}, {{W+|cs|chvost|n}}, {{W+|cs|ohon|n}}
* {{Z|cdm}}: {{W-|cdm|मेः}}
* {{Z|ny}}: {{W-|ny|mchira}}
* {{Z|zh}}:
*: {{Z|yue}}: {{W-|yue|尾|tr=mei5|sc=Hani}}
*: {{Z|dng}}: {{W-|dng|йиба}}
*: {{Z|gan}}: {{W-|gan|尾巴|tr=ui3 ba / mi3 bang}}
*: {{Z|hak}}: {{W-|hak|尾|tr=mî|sc=Hani}}, {{W-|hak|尾巴|tr=mi1 ba1}}
*: {{Z|cjy}}: {{W-|cjy|尾巴|tr=i2 ba1}}
*: {{Z|cmn}}: {{W+|cmn|尾巴|tr=wěibā|sc=Hani}}
*: {{Z|cdo}}: {{W-|cdo|尾|tr=muōi}}
*: {{Z|nan}}: {{W+|nan|尾|tr=bóe, bé|sc=Hani}}, {{W+|nan|尾仔|tr=bóe-á, bé-á|sc=Hani}}
*: {{Z|wuu}}: {{W-|wuu|尾巴|tr=nyi po}}
*: {{Z|hsn}}: {{W-|hsn|尾巴|tr=uei3 ba1}}
* {{Z|cv}}: {{W-|cv|хӳре}}
* {{Z|dlm}}: {{W-|dlm|cauda|m}}
* {{Z|da}}: {{W+|da|hale|g}}
* {{Z|avd}}: {{W-|avd|دمب|tr=domb}}
* {{Z|id}}: {{W+|id|ekor}}, {{W+|id|buntut}}
* {{Z|ar}}: {{W-|ar|ذَنَب|n}}, {{W-|ar|ذَيْل|n}}
*: {{Z|ary}}: {{W-|ary|ديل|n|tr=dīl}}, {{W-|ary|زنطيط|n|tr=zanṭīṭ}}, {{W-|ary|قزيبة|m|tr=qazzība}}, {{W-|ary|شوال|n|tr=šwāl}}
*: {{Z|arz}}: {{W-|arz|ديل|n|tr=dél|sc=Arab}}
* {{Z|xcl}}: {{W-|xcl|ագի}}, {{W-|xcl|պոչ}}, {{W-|xcl|ձետ}}
* {{Z|hy}}: {{W+|hy|պոչ}}
* {{Z|myv}}: {{W-|myv|пуло}}
* {{Z|eo}}: {{W+|eo|vosto}}
* {{Z|et}}: {{W+|et|saba}}
* {{Z|evn}}: {{W-|evn|ирги|tr=irgi}}
* {{Z|fa}}: {{W+|fa|دم|tr=dom|sc=fa-Arab}}, {{W+|fa|دنب|tr=domb|sc=fa-Arab}}
* {{Z|fi}}: {{W+|fi|häntä}}, {{W+|fi|pyrstö}}, {{W+|fi|saparo}}
* {{Z|fr}}: {{W+|fr|queue|m}}
* {{Z|fur}}: {{W-|fur|code|m}}
* {{Z|fy}}: {{W-|fy|sturt}}
* {{Z|gd}}: {{W-|gd|earball|n}}, {{W-|gd|eàrr|n|m}}
* {{Z|gl}}: {{W+|gl|rabo}}, {{W+|gl|cauda|m}},{{W-|gl|tomadía|m}}, {{W+|gl|cola|m}}
* {{Z|ka}}: {{W+|ka|კუდი|sc=Geor}}
* {{Z|gue}}: {{W-|gue|jawurd}}
* {{Z|ht}}: {{W-|ht|ke|}}, {{W-|ht|tche|}}
* {{Z|ha}}: {{W-|ha|wutsiya}}
* {{Z|hi}}: {{W-|hi|पूंछ|m}}, {{W+|hi|पूँछ|m}}, {{W+|hi|दुम|m}}
* {{Z|mww}}: {{W-|mww|tw}}
* {{Z|nl}}: {{W+|nl|staart|n}}
* {{Z|he}}: {{W+|he|זָנָב|n|tr=zanáv}}
* {{Z|io}}: {{W+|io|kaudo}}
* {{Z|ang}}: {{W-|ang|tæġl|n}}, {{W-|ang|steort|n}}
* {{Z|en}}: {{W+|en|tail}}
* {{Z|ga}}: {{W+|ga|eireaball|n}}
* {{Z|it}}: {{W+|it|coda|m}}
* {{Z|ium}}: {{W-|ium|dueiv}}
* {{Z|is}}: {{W+|is|hali|n}}, {{W+|is|skott|nt}} or {{W+|is|rófa|m}}, {{W+|is|tagl}}, {{W+|is|dindill|n}}, {{W+|is|stél|nt}}, {{W+|is|sporður|n}}
* {{Z|ja}}: {{W+|ja|尻尾|tr=しっぽ, shippo|sc=Jpan}}, {{W+|ja|しっぽ|tr=shippo|sc=Jpan}}, {{W+|ja|尾|tr=お, o|sc=Jpan}}, {{W-|ja|尾っぽ|tr=oppo}}
* {{Z|jv}}: {{W+|jv|buntut}}
* {{Z|xal}}: {{W-|xal|сүл}}
* {{Z|kmc}}: {{W-|kmc|sedl}}
* {{Z|ram}}: {{W-|ram|japy}}
* {{Z|csb}}: {{W-|csb|ògón|n}}
* {{Z|ca}}: {{W+|ca|cua|m}}
* {{Z|txu}}: {{W-|txu|jamy}}, {{W-|txu|tey}}
* {{Z|kgp}}: {{W-|kgp|my}}
* {{Z|qu}}: {{W-|qu|cupa}}
* {{Z|kzi}}: {{W-|kzi|iur}}
* {{Z|ky}}: {{W+|ky|куйрук}}, {{W+|ky|дүм}}
* {{Z|ki}}: {{W-|ki|mũcuthĩ|c3}}
* {{Z|kqr}}: {{W-|kqr|noinan}}
* {{Z|si}}: {{W-|si|අවර|sc=Sinh}}
* {{Z|koi}}: {{W-|koi|бӧж}}
* {{Z|ko}}: {{W+|ko|꼬리}}
* {{Z|xra}}: {{W-|xra|japy}}
* {{Z|rop}}: {{W-|rop|teil}}
* {{Z|cuk}}: {{W-|cuk|bunnu}}
* {{Z|lmy}}: {{W-|lmy|kiku}}
* {{Z|ltg}}: {{W-|ltg|aste|m}}
* {{Z|la}}: {{W-|la|cauda}}
* {{Z|lv}}: {{W+|lv|aste|m}}
* {{Z|lo}}: {{W+|lo|ຫາງ}}
* {{Z|lt}}: {{W+|lt|uodega}}
* {{Z|liv}}: {{W-|liv|tabār }}, {{W-|liv|tabārd }}
* {{Z|khb}}: {{W-|khb|ᦠᦱᧂ}}
* {{Z|mk}}: {{W-|mk|опашка|m}}
* {{Z|mg}}: {{W+|mg|rambo}}
* {{Z|ml}}: {{W-|ml|വാല്}}
* {{Z|ms}}: {{W+|ms|ekor}}, {{W+|ms|buntut}}
* {{Z|mt}}: {{W-|mt|denb|n}}
* {{Z|gv}}: {{W-|gv|arbyl|n}}, {{W-|gv|famman|n}}
* {{Z|mi}}: {{W-|mi|hiore}}, {{W-|mi|whiore}}, {{W-|mi|waero}}, {{W-|mi|hiku}}, {{W-|mi|kapu}}
* {{Z|mhr}}: {{W-|mhr|поч}}
* {{Z|hu}}: {{W+|hu|farok}}
* {{Z|mel}}: {{W-|mel|ikiu}}
* {{Z|mdf}}: {{W-|mdf|пула}}
* {{Z|mn}}: {{W+|mn|сүүл}}
* {{Z|mtq}}: {{W-|mtq|tuôi}}
* {{Z|nv}}: {{W-|nv|atseeʼ}}
* {{Z|nds}}: {{W+|nds|Steert|n}}
* {{Z|ne}}: {{W-|ne|पुच्छर}}
* {{Z|nio}}: {{W-|nio|тәйбу}}
* {{Z|nrf}}: {{W-|nrf|coue|m}}
* {{Z|no}}:
*: {{Z|nb}}: {{W+|nb|hale|n}}, {{W-|nb|stjert|n}}
*: {{Z|nn}}: {{W-|nn|hale|n}}, {{W-|nn|stjert|n}}
* {{Z|cst}}: {{W-|cst|tú̄pui}}
* Ojibwe: {{W-|oj|ozow}}
* {{Z|oc}}: {{W+|oc|coa|m}}
* {{Z|om}}: {{W-|om|eegee}}
* {{Z|orh}}: {{W-|orh|irgi}}
* {{Z|os}}: {{W-|os|дымӕг}}, {{W-|os|къӕдзил}}, {{W-|os|къуди}}
* {{Z|ota}}: {{W-|ota|قویروق|tr=quyruq}}
* {{Z|ug}}: {{W-|ug|قۇيرۇق}}
* {{Z|uz}}: {{W+|uz|dum}}, {{W+|uz|ket}}, {{W+|uz|quyruq}}
* {{Z|pwn}}: {{W-|pwn|iku}}
* {{Z|kre}}: {{W-|kre|sãnpy}}
* {{Z|pag}}: {{W-|pag|ikol}}
* {{Z|pap}}: {{W-|pap|rabo}}, {{W-|pap|rabu}}
* {{Z|gvp}}: {{W-|gvp|japy}}
* {{Z|pdt}}: {{W-|pdt|Zoagel|n}}
* {{Z|pl}}: {{W+|pl|ogon|n}}, {{W+|pl|chwost|n}}
* {{Z|pt}}: {{W+|pt|rabo|n}}, {{W+|pt|cauda|m}}
* {{Z|pa}}: {{W-|pa|ਪੂਸ਼}}, {{W-|pa|ਦੁਮ}}, {{W-|pa|ਦੁੰਬ}}
* {{Z|sai-pyk}}: {{W-|sai-pyk|japyyh}}
* {{Z|kk}}: {{W+|kk|құйрық}}
* {{Z|rm}}: {{W-|rm|cua}}
* {{Z|ro}}: {{W+|ro|coadă}}
* {{Z|ru}}: {{W+|ru|хвост|n}}
* {{Z|rue}}: {{W-|rue|хвост|n}}
* {{Z|sm}}: {{W-|sm|i‘u}}
* {{Z|ceb}}: {{W-|ceb|ikog}}
* {{Z|scn}}: {{W+|scn|cuda}}
* {{Z|szl}}: {{W-|szl|szwanc|n}}
* {{Z|sh}}: {{W-|sh|ре̑п|n}}, {{W+|sh|rȇp|n}}
* {{Z|cu}}: {{W-|cu|хвостъ}}
* {{Z|orv}}: {{W-|orv|хвостъ|n}}
* {{Z|sk}}: {{W-|sk|chvost|n}}
* {{Z|sl}}: {{W+|sl|rep|n}}
* {{Z|dsb}}: {{W-|dsb|wogon|n}}
* {{Z|es}}: {{W+|es|cola|m}}, {{W+|es|rabo|n}}
* {{Z|su}}: {{W-|su|ᮘᮥᮔ᮪ᮒᮥᮒ᮪}}
* {{Z|suy}}: {{W-|suy|mby}}
* {{Z|sw}}: {{W+|sw|mkia|c3|c4}}
* {{Z|sv}}: {{W+|sv|svans|g}}, {{W+|sv|stjärt|g}}
* {{Z|shn}}: {{W-|shn|ႁၢင်|sc=Mymr}}
* {{Z|zdj}}: {{W-|zdj|utsungo|c11|c10a}}
* {{Z|cjs}}: {{W-|cjs|қузуруқ|tr=quzuruq}}
* {{Z|tg}}: {{W+|tg|дум}}
* {{Z|mvv}}: {{W-|mvv|iku'}}
* {{Z|tl}}: {{W+|tl|buntot|nt}}
* {{Z|ta}}: {{W+|ta|வால்}}
* {{Z|twf}}: {{W-|twf|xwę́na}}
* {{Z|sai-tap}}: {{W-|sai-tap|wy}}
* {{Z|tsg}}: {{W-|tsg|ikug}}
* {{Z|nod}}: {{W-|nod|ᩉᩣ᩠ᨦ}}
* {{Z|th}}: {{W+|th|หาง}}
* {{Z|te}}: {{W+|te|తోక}}
* {{Z|tt}}: {{W+|tt|койрык}}
* {{Z|tet}}: {{W-|tet|ikun}}
* {{Z|ti}}: {{W-|ti|ጭራ}}
* {{Z|otk}}: {{W-|otk|𐰴𐰆𐰑𐰺𐰆𐰸|tr=qudruq}}
* {{Z|tr}}: {{W+|tr|kuyruk}}
* {{Z|tk}}: {{W-|tk|guýruk}}
* {{Z|tiw}}: {{W-|tiw|tuwara}}, {{W-|tiw|putupwarra}}, {{W-|tiw|kimarra}}
* {{Z|bo}}: {{W-|bo|གཞུག་གུ}}, {{W-|bo|མཇུག་མ}}
* {{Z|to}}: {{W-|to|iku}}
* {{Z|txb}}: {{W-|txb|pako}}
* {{Z|tyv}}: {{W-|tyv|кудурук}}
* {{Z|ude}}: {{W-|ude|иги }}
* {{Z|udm}}: {{W-|udm|быж}}
* {{Z|uga}}: {{W-|uga|𐎏𐎐𐎁}}
* {{Z|ulc}}: {{W-|ulc|худю }}
* {{Z|ur}}: {{W-|ur|دم|m|tr=dum|sc=ur-Arab}}, {{W-|ur|پونچھ|m|tr=pū̃ch|sc=ur-Arab}}
* {{Z|uk}}: {{W+|uk|хвіст|n}}
* {{Z|vec}}: {{W+|vec|coa|m}}
* {{Z|vi}}: {{W+|vi|đuôi}}
* {{Z|vo}}: {{W+|vo|göb}}, {{W-|vo|göbil}}
* {{Z|wa}}: {{W+|wa|cawe|m}}
* {{Z|wrr}}: {{W-|wrr|mordorl}}
* {{Z|wbp}}: {{W-|wbp|ngirnti}}, {{W-|wbp|wipi}}
* {{Z|cy}}: {{W+|cy|cynffon|m}}
* {{Z|kjh}}: {{W-|kjh|хузурух}}
* {{Z|xav}}: {{W-|xav|bö}}
* {{Z|xer}}: {{W-|xer|bâ}}
* {{Z|km}}: {{W+|km|កន្ទុយ}}
* {{Z|xok}}: {{W-|xok|my}}
* {{Z|yai}}: {{W-|yai|дум}}
* {{Z|yka}}: {{W-|yka|engko}}
* {{Z|sah}}: {{W-|sah|кутурук}}
* {{Z|yi}}: {{W-|yi|וויידל|n}}, {{W-|yi|שוואַנץ|n}}
* {{Z|ii}}: {{W-|ii|ꁍꎼ}}, {{W-|ii|ꂪ}}
* {{Z|el}}: {{W+|el|ουρά|m}}
*: {{Z|grc}}: {{W-|grc|οὐρά|m}}, {{W-|grc|κέρκος|m}}
* {{Z|zea}}: {{W-|zea|staert|n}}
* {{Z|za}}: {{W-|za|rieng}}
* {{Z|zu}}: {{W-|zu|umsila|c3|c4}}
{{werger-bin}}
{{werger-ser|hestiya li dawiya movikê|2}}
* {{Z|de}}: {{W-|de|Coccyx|n}} ; {{W+|de|Steißbein|nt}}
* {{Z|bdr}}: {{W-|bdr|sengkurung}}
* {{Z|be}}: {{W-|be|хвастцо́вая косць|m}}, {{W-|be|хвасце́ц|n}}
* {{Z|bg}}: {{W-|bg|опашна кост}}
* {{Z|cs}}: {{W+|cs|kostrč|m}}
* {{Z|da}}: {{W+|da|haleben|nt}}
* {{Z|id}}: {{W+|id|tulang sulbi}}, {{W+|id|tulang ekor}}, {{W+|id|tulang tongkeng}}, {{W-|id|koksiks}}
* {{Z|ar}}: {{W-|ar|عُصُص|n}}, {{W-|ar|عُصْعُص|n}}
*: {{Z|arz}}: {{W-|arz|عصعص|n|tr=ʿúṣʿuṣ}}
* {{Z|hy}}: {{W+|hy|պոչուկ}}
* {{Z|eo}}: {{W-|eo|kokcigo}}
* {{Z|fa}}: {{W+|fa|دنبالچه|tr=donbâlče}}
* {{Z|fo}}: {{W-|fo|halabein|nt}}
* {{Z|fi}}: {{W+|fi|häntäluu}}
* {{Z|fr}}: {{W+|fr|coccyx|n}}
* {{Z|gl}}: {{W+|gl|cóccix|n}}
* {{Z|hil}}: {{W-|hil|pigtot}}
* {{Z|nl}}: {{W+|nl|staartbeen}}, {{W+|nl|stuitje|nt}}
* {{Z|ilo}}: {{W-|ilo|kimmol}}
* {{Z|en}}: {{W+|en|coccyx}}, {{W+|en|tailbone}}
* {{Z|it}}: {{W+|it|coccige}}
* {{Z|is}}: {{W+|is|rófubein}}
* {{Z|ja}}: {{W+|ja|尾骨|tr=びこつ, bikotsu}}, {{W-|ja|尾骶骨|tr=びていこつ, biteikotsu}}, {{W-|ja|尾閭骨|tr=びりょこつ, biryokotsu}}
* {{Z|pam}}: {{W-|pam|kaikut}}, {{W-|pam|kayikut}}
* {{Z|ca}}: {{W+|ca|còccix|n}}
* {{Z|ko}}: {{W-|ko|꼬리뼈}}
* {{Z|lt}}: {{W-|lt|uodegikaulis}}
* {{Z|ms}}: {{W-|ms|tulang sulbi}}, {{W-|ms|tulang ekor}}, {{W-|ms|tulang cenonot}}, {{W-|ms|tulang kongkeng}}, {{W-|ms|tulang tongkeng}}, {{W-|ms|koksiks}}
* {{Z|cmn}}: {{W+|cmn|尾骨|tr=wěigǔ}}, {{W+|cmn|尾骶骨|tr=wěidǐgǔ}}, {{W-|cmn|尾閭骨}}, {{W+|cmn|尾闾骨|tr=wěilǘgǔ}}
* {{Z|mi}}: {{W-|mi|timu}}
* {{Z|hu}}: {{W+|hu|farkcsont}}, {{W+|hu|farokcsont}}
* {{Z|mel}}: {{W-|mel|tuleang kelebik}}, {{W-|mel|kubin}}
* {{Z|nv}}: {{W-|nv|atseeʼ}}
* {{Z|no}}:
*: {{Z|nb}}: {{W-|nb|haleben|nt}}, {{W-|nb|halebein|nt}}
*: {{Z|nn}}: {{W-|nn|halebein|nt}}
* {{Z|pl}}: {{W+|pl|kość guziczna|m}}
* {{Z|pt}}: {{W+|pt|cóccix|n}}, {{W-|pt|mucumbu|n}}, {{W-|pt|curanchim|n}}
* {{Z|kk}}: {{W-|kk|құймышақ}}
* {{Z|ru}}: {{W+|ru|ко́пчик|n}}
* {{Z|bsy}}: {{W-|bsy|saligi'}}
* {{Z|ceb}}: {{W-|ceb|bangkawbangkaw}}
* {{Z|sh}}: {{W+|sh|trtica|m}}, {{W-|sh|trtičnjača|m}}
* {{Z|sco}}: {{W-|sco|rumple-bane}}
* {{Z|sk}}: {{W+|sk|kostrč|m}}
* {{Z|sl}}: {{W+|sl|trtica|m}}
* {{Z|es}}: {{W+|es|cóccix|n}}, {{W+|es|coxis|n}}
* {{Z|sv}}: {{W-|sv|korsben|g}}
* {{Z|mvv}}: {{W-|mvv|kalut}}
* {{Z|tl}}: {{W-|tl|puil}}, {{W-|tl|tulatod}}
* {{Z|th}}: {{W+|th|ก้นกบ}}
* {{Z|crh}}: {{W-|crh|quyruq kemigi}}
* {{Z|tr}}: {{W+|tr|kuyruk sokumu}}
* {{Z|uk}}: {{W-|uk|ку́прик|n}}
* {{Z|vi}}: {{W-|vi|xương cụt}} ({{W-|vi|𩩫𥐒}})
* {{Z|grc}}: {{W-|grc|κόκκυξ|n}}
{{werger-bin}}
{{werger-ser|beşeke nebatan|3}}
* {{Z|tr}}: {{W+|tr|sap}}
{{werger-bin}}
{{werger-bnr-h|cigareya ku hatiye kişandin|4|qopik|id=cigareya xilasbûyî}}
* {{Z|de}}: {{W+|de|Stummel|n}}, {{W+|de|Zigarettenstummel|n}}, {{W+|de|Kippe|m}}, {{W-|de|Zigarettenkippe|m}}
* {{Z|ar}}: {{W-|ar|عَقْب سِيجَارَة}}
* {{Z|fi}}: {{W+|fi|natsa}}, {{W+|fi|tumppi}}, {{W+|fi|tupakantumppi}}
* {{Z|fr}}: {{W+|fr|mégot|n}}
* {{Z|en}}: {{W+|en|butt}}
* {{Z|es}}: {{W+|es|colilla|m}}, {{W+|es|bacha|m}}, {{W+|es|calilla|m}}, {{W-|es|chenca|m}}, {{W+|es|chicote|n}}, {{W+|es|chinga|m}}, {{W+|es|chiva|m}}, {{W+|es|pava|m}}, {{W+|es|pucho|n}}
* {{Z|tr}}: {{W+|tr|izmarit}}
{{werger-bin}}
=== Çavkanî ===
{{çavkanî}}
== {{ziman|zza}} ==
=== Navdêr ===
{{navdêr|zza|z=}}
# {{g|ku|boçik|id=dawiya movikê}} (serê movika piştê ku tête ser devêqunê)<ref>http://www.kovarabir.com/wp-content/uploads/Ferheng%C3%AA-Dimil%C3%AE-%C3%BB-Kurmanc%C3%AE-B-b.pdf</ref>
==== Etîmolojî ====
Ji {{deyn|hy|zza|պոչիկ}}.
=== Çavkanî ===
{{çavkanî}}
saaujas9sn0aabcnxu1pspcazmuwvqk
mehîr
0
48828
6333710
6311859
2026-08-14T19:41:43Z
~2026-40975-00
15164
We mehîr, wek ji şîr û birincê çêdibe nivîsandiye, navê wêya şorbeşîr e, ne mehîr e.
6333710
wikitext
text/x-wiki
{{bnr-h|mehir|mêhir}}
== {{ziman|ku}} ==
=== Bilêvkirin ===
* {{ku-kîte}}
=== Navdêr Mehîr ji mast yan dew çêdibe ===
{{navdêr|ku|z=m}}
# {{f|ku|xwarin}} [[şorbe|Şorbe]]ya ku ji [[şîr]]î û [[birinc]]ê tê çêkirin.
#* {{jêder|ku|jêgirtin=Lotikvana xwînşîrîn, bedewa axirzemana, Alessandra Ambrosio ya ku bi xweşikbûna xwe jina min li ber çavê min reş kiriye, salê 5 milyon dolar ji şîrketa Victorias Secret distîne. Malxerabê ewqasî li ber dilê min şîrîn e ku, ez dikarim ji bo xatirê lotikek wê xwarina '''mehîrê''' jî li dê û bavê xwe heram bikim ellawekîl! Offffffffffff, belkî hûn bawer nekin, lê gava ez çav li wê bêbavê dikevim, yekser xwêdan bi min dikeve û dikevim taya mirinê.|Lotikxane.com, 2/2008}}
==== Tewandin ====
{{ku-tewîn-nav/nû|mê}}
==== Hevmane ====
* [[dewîn]]
==== Etîmolojî ====
{{bêetîmolojî|ku}}
==== Werger ====
{{werger-ser}}
* {{Z|fa}}: {{W+|fa|شیربرنج}}
* {{Z|en}}: {{W|en|crushed grain|guman=erê}}
* {{Z|tr}}: {{W+|tr|ayran çorbası}}
{{werger-bin}}
i2t8as9cgmu5oeil8jdvb4nzyphym3w
6333718
6333710
2026-08-14T19:52:05Z
Wikihez
7344
Guhartinên [[Special:Contributions/~2026-40975-00|~2026-40975-00]] ([[User talk:~2026-40975-00|gotûbêj]]) hatine betalkirin, vegerand guhartoya dawî ya [[User:Balyozbot|Balyozbot]]
6311859
wikitext
text/x-wiki
{{bnr-h|mehir|mêhir}}
== {{ziman|ku}} ==
=== Bilêvkirin ===
* {{ku-kîte}}
=== Navdêr ===
{{navdêr|ku|z=m}}
# {{f|ku|xwarin}} [[şorbe|Şorbe]]ya ku ji [[şîr]]î û [[birinc]]ê tê çêkirin.
#* {{jêder|ku|jêgirtin=Lotikvana xwînşîrîn, bedewa axirzemana, Alessandra Ambrosio ya ku bi xweşikbûna xwe jina min li ber çavê min reş kiriye, salê 5 milyon dolar ji şîrketa Victorias Secret distîne. Malxerabê ewqasî li ber dilê min şîrîn e ku, ez dikarim ji bo xatirê lotikek wê xwarina '''mehîrê''' jî li dê û bavê xwe heram bikim ellawekîl! Offffffffffff, belkî hûn bawer nekin, lê gava ez çav li wê bêbavê dikevim, yekser xwêdan bi min dikeve û dikevim taya mirinê.|Lotikxane.com, 2/2008}}
==== Tewandin ====
{{ku-tewîn-nav/nû|mê}}
==== Hevmane ====
* [[dewîn]]
==== Etîmolojî ====
{{bêetîmolojî|ku}}
==== Werger ====
{{werger-ser}}
* {{Z|fa}}: {{W+|fa|شیربرنج}}
* {{Z|en}}: {{W|en|crushed grain|guman=erê}}
* {{Z|tr}}: {{W+|tr|ayran çorbası}}
{{werger-bin}}
1qjesn0y1qiqxxnyecpwzeso0lfct3w
6333733
6333718
2026-08-14T21:12:06Z
Balyozbot
7867
Bot: Paqijiyên kozmetîk (Lînk paqij kir.)
6333733
wikitext
text/x-wiki
{{bnr-h|mehir|mêhir}}
== {{ziman|ku}} ==
=== Bilêvkirin ===
* {{ku-kîte}}
=== Navdêr ===
{{navdêr|ku|z=m}}
# {{f|ku|xwarin}} [[şorbe|Şorbeya]] ku ji [[şîr]]î û [[birinc]]ê tê çêkirin.
#* {{jêder|ku|jêgirtin=Lotikvana xwînşîrîn, bedewa axirzemana, Alessandra Ambrosio ya ku bi xweşikbûna xwe jina min li ber çavê min reş kiriye, salê 5 milyon dolar ji şîrketa Victorias Secret distîne. Malxerabê ewqasî li ber dilê min şîrîn e ku, ez dikarim ji bo xatirê lotikek wê xwarina '''mehîrê''' jî li dê û bavê xwe heram bikim ellawekîl! Offffffffffff, belkî hûn bawer nekin, lê gava ez çav li wê bêbavê dikevim, yekser xwêdan bi min dikeve û dikevim taya mirinê.|Lotikxane.com, 2/2008}}
==== Tewandin ====
{{ku-tewîn-nav/nû|mê}}
==== Hevmane ====
* [[dewîn]]
==== Etîmolojî ====
{{bêetîmolojî|ku}}
==== Werger ====
{{werger-ser}}
* {{Z|fa}}: {{W+|fa|شیربرنج}}
* {{Z|en}}: {{W|en|crushed grain|guman=erê}}
* {{Z|tr}}: {{W+|tr|ayran çorbası}}
{{werger-bin}}
h87z30a0jmfi88rcp9bgfj9vogpjkq2
MediaWiki:Gadgets-definition
8
118586
6333715
6329712
2026-08-14T19:49:36Z
Bikarhêner
3719
6333715
wikitext
text/x-wiki
Binêre [[Taybet:Gadgets]] ji bo belgekirina amûrên li jêr.
* LegacyScripts[ResourceLoader|default|dependencies=site,mediawiki.util,mediawiki.cookie,ext.gadget.LegacyScriptsNewNode,ext.gadget.StorageUtils|type=general]|legacy.js
==Rû==
* LiveClock[ResourceLoader|dependencies=mediawiki.util]|LiveClock.js
* charinsert-styles[ResourceLoader|hidden|type=styles]|charinsert-styles.css
* LanguagesAndScripts[ResourceLoader|default]|LanguagesAndScripts.css
* jeder[ResourceLoader|dependencies=ext.gadget.VisibilityToggles|default]|jeder.css|jeder.js
* CodeLinks[ResourceLoader|default|dependencies=site,mediawiki.util]|CodeLinks.js
* Tabset[ResourceLoader|default]|Tabset.js|Tabset.css
* kuTewandin[ResourceLoader|default]|kuTewandin.js
==AmûrênGuhartinê==
* wikEd[ResourceLoader]|wikEd.js
* charinsert[ResourceLoader|default|peers=charinsert-styles]|charinsert.js
* translation_editor[ResourceLoader|default|dependencies=mediawiki.notification|type=general]|silent_fail_storage.js|editor.js|translation_editor.js|translation_editor.css
* QQ[ResourceLoader|dependencies=mediawiki.util,oojs-ui-core,oojs-ui-widgets|type=general]|QQ.js|QQ.css
* WiktAccFormCreation[ResourceLoader|dependencies=mediawiki.util]|WiktAccFormCreation.js
* AjaxEdit[ResourceLoader|dependencies=mediawiki.util,mediawiki.user,mediawiki.api]|AjaxEdit.js
* aWa[ResourceLoader|rights=autoconfirmed|dependencies=mediawiki.util,mediawiki.api,mediawiki.user,user.options,mediawiki.Title|type=general]|aWa.js|aWa.css
* purgetab[ResourceLoader|dependencies=mediawiki.api,mediawiki.util]|purgetab.js
* start[ResourceLoader|default|package|dependencies=mediawiki.util,ext.gadget.StorageUtils,ext.gadget.citoid-helper,oojs-ui-core,oojs-ui-widgets,oojs-ui-windows]|start.js|start.css|start/data.json
* wikt.add-examples[ResourceLoader|dependencies=oojs,oojs-ui,ext.gadget.citoid-helper,ext.gadget.StorageUtils|default]|wikt.add-examples.js|wikt.add-examples.css
* linkify[ResourceLoader|default|dependencies=mediawiki.api,jquery.textSelection,ext.wikiEditor]|linkify.js
==Kategorî==
* HotCat[ResourceLoader]|HotCat.js
* Cat-a-lot[ResourceLoader|rights=autoconfirmed]|Cat-a-lot.css|Cat-a-lot.js
==AmûrênVeşartî==
* LegacyScriptsNewNode[ResourceLoader|hidden|targets=desktop,mobile]|LegacyScriptsNewNode.js
* StorageUtils[ResourceLoader|hidden|dependencies=mediawiki.cookie,mediawiki.storage]|StorageUtils.js
* charinsert-core[ResourceLoader|hidden|dependencies=jquery.textSelection,user,mediawiki.storage]|charinsert-core.js
* VisibilityToggles[ResourceLoader|hidden|targets=desktop,mobile|dependencies=user,mediawiki.cookie]|VisibilityToggles.js
* defaultVisibilityToggles[ResourceLoader|hidden|default|targets=desktop,mobile|dependencies=ext.gadget.VisibilityToggles]|defaultVisibilityToggles.js
* Site[ResourceLoader|hidden|default]|Site.css
* catfix[ResourceLoader|hidden|default|dependencies=mediawiki.Title|categories=Pages using catfix]|catfix.js
* Palette[ResourceLoader|hidden|default]|Palette.css
* citoid-helper[ResourceLoader|hidden|default|dependencies=mediawiki.util]|citoid-helper.js
* test[ResourceLoader|hidden|rights=autoconfirmed]|test.js
5vlk46sm39f658s9ov9cmgn4wewaatr
6333719
6333715
2026-08-14T19:52:53Z
Bikarhêner
3719
6333719
wikitext
text/x-wiki
Binêre [[Taybet:Gadgets]] ji bo belgekirina amûrên li jêr.
* LegacyScripts[ResourceLoader|default|dependencies=site,mediawiki.util,mediawiki.cookie,ext.gadget.LegacyScriptsNewNode,ext.gadget.StorageUtils|type=general]|legacy.js
==Rû==
* LiveClock[ResourceLoader|dependencies=mediawiki.util]|LiveClock.js
* charinsert-styles[ResourceLoader|hidden|type=styles]|charinsert-styles.css
* LanguagesAndScripts[ResourceLoader|default]|LanguagesAndScripts.css
* jeder[ResourceLoader|dependencies=ext.gadget.VisibilityToggles|default]|jeder.css|jeder.js
* CodeLinks[ResourceLoader|default|dependencies=site,mediawiki.util]|CodeLinks.js
* Tabset[ResourceLoader|default]|Tabset.js|Tabset.css
* kuTewandin[ResourceLoader|default]|kuTewandin.js
==AmûrênGuhartinê==
* wikEd[ResourceLoader]|wikEd.js
* charinsert[ResourceLoader|default|peers=charinsert-styles]|charinsert.js
* translation_editor[ResourceLoader|default|dependencies=mediawiki.notification|type=general]|silent_fail_storage.js|editor.js|translation_editor.js|translation_editor.css
* QQ[ResourceLoader|dependencies=mediawiki.util,oojs-ui-core,oojs-ui-widgets|type=general]|QQ.js|QQ.css
* WiktAccFormCreation[ResourceLoader|dependencies=mediawiki.util]|WiktAccFormCreation.js
* AjaxEdit[ResourceLoader|dependencies=mediawiki.util,mediawiki.user,mediawiki.api]|AjaxEdit.js
* aWa[ResourceLoader|rights=autoconfirmed|dependencies=mediawiki.util,mediawiki.api,mediawiki.user,user.options,mediawiki.Title|type=general]|aWa.js|aWa.css
* purgetab[ResourceLoader|dependencies=mediawiki.api,mediawiki.util]|purgetab.js
* start[ResourceLoader|default|package|dependencies=mediawiki.util,ext.gadget.StorageUtils,ext.gadget.citoid-helper,oojs-ui-core,oojs-ui-widgets,oojs-ui-windows]|start.js|start.css|start/data.json
* wikt.add-examples[ResourceLoader|dependencies=oojs,oojs-ui,ext.gadget.citoid-helper,ext.gadget.StorageUtils|default]|wikt.add-examples.js|wikt.add-examples.css
* linkify[ResourceLoader|default|dependencies=mediawiki.api,jquery.textSelection,ext.wikiEditor]|linkify.js
==Kategorî==
* HotCat[ResourceLoader]|HotCat.js
* Cat-a-lot[ResourceLoader|rights=autoconfirmed]|Cat-a-lot.css|Cat-a-lot.js
==AmûrênVeşartî==
* LegacyScriptsNewNode[ResourceLoader|hidden|targets=desktop,mobile]|LegacyScriptsNewNode.js
* StorageUtils[ResourceLoader|hidden|dependencies=mediawiki.cookie,mediawiki.storage]|StorageUtils.js
* charinsert-core[ResourceLoader|hidden|dependencies=jquery.textSelection,user,mediawiki.storage]|charinsert-core.js
* VisibilityToggles[ResourceLoader|hidden|targets=desktop,mobile|dependencies=user,mediawiki.cookie]|VisibilityToggles.js
* defaultVisibilityToggles[ResourceLoader|hidden|default|targets=desktop,mobile|dependencies=ext.gadget.VisibilityToggles]|defaultVisibilityToggles.js
* Site[ResourceLoader|hidden|default]|Site.css
* catfix[ResourceLoader|hidden|default|dependencies=mediawiki.Title|categories=Pages using catfix]|catfix.js
* Palette[ResourceLoader|hidden|default]|Palette.css
* citoid-helper[ResourceLoader|hidden|default|dependencies=mediawiki.util]|citoid-helper.js
* test[ResourceLoader|rights=autoconfirmed]|test.js
qorqh9fq32vtilku46qlnoo1r8608au
hevşî
0
120461
6333635
6333526
2026-08-14T14:46:11Z
Balyozbot
7867
Bot: Sererastkirina şablonan û koda zimên
6333635
wikitext
text/x-wiki
== {{ziman|ku}} ==
=== Bilêvkirin ===
* {{ku-IPA}}
* {{ku-kîte}}
=== Navdêr ===
{{navdêr|ku|z=m}}
# Cihekê [[sînc]]kirî ye ku [[pez]] û [[dewar]] li [[havîn]] û [[bihar]]an tê ve tên [[xwedî kirin|xwedîkirin]], [[axil]], [[kotan]]a pezî.
==== Tewandin ====
{{ku-tewîn-nav/nû|mê}}
==== Bi alfabeyên din ====
* {{ku-ar|هەڤشی}}
==== Formên alternatîv ====
* {{hw|ku|hevşîk}}
* {{hw|ku|hewşe}}
==== Hevmane ====
* {{g|ku|axur}}
==== Etîmolojî ====
{{bêetîmolojî|ku}}
==== Werger ====
{{werger-ser}}
* {{Z|ar}}: {{W+|ar|حظيرة}}, {{W+|ar|زريبة}}
* {{Z|fa}}: {{W+|fa|حیات خانه}}
* {{Z|en}}: {{W|en|pen}}, {{W+|en|stockade}}, {{W+|en|warren}}, {{W+|en|stockyard}}, {{W+|en|corral|guman=erê}}, {{W+|en|enclosure|guman=erê}}, {{W|en|coon|guman=erê}}, {{W|en|cote|guman=erê}}, {{W|en|kraal|guman=erê}}
* {{Z|tr}}: {{W+|tr|ağıl}}
{{werger-bin}}
38gbxfkae444im7ov4buyf6cvl3fcpw
ستاندن
0
297560
6333657
4585130
2026-08-14T15:39:28Z
Ghybu
1393
/* Lêker */
6333657
wikitext
text/x-wiki
== {{ziman|fa}} ==
=== Lêker ===
{{lêker|fa|tr=setândan}}
# [[standin]], [[wergirtin]]
a3rudapq3loecd8jib1kpj7v3zgqx6d
Ankara
0
309667
6333638
6333594
2026-08-14T15:01:52Z
Wikihez
7344
[[Special:PermanentLink/6333593]] ([[m:Special:MyLanguage/User:Jon Harald Søby/diffedit|diffedit]])
6333638
wikitext
text/x-wiki
== {{ziman|de}} ==
=== Bilêvkirin ===
* {{deng|de|De-Ankara.ogg}}
=== Navdêr ===
{{navdêr|de|z=nt}}
# [[Enqere]]
e2dej6c1o25w8ilipubr1osj62ceun8
6333640
6333638
2026-08-14T15:03:41Z
Wikihez
7344
([[Mediawiki:Gadget-start.js|WF:NÛ]] v.2.0) +tr:serenav:Enqere {{îzah|paytextê Tirkiyeyê}}
6333640
wikitext
text/x-wiki
== {{ziman|de}} ==
=== Bilêvkirin ===
* {{deng|de|De-Ankara.ogg}}
=== Navdêr ===
{{navdêr|de|z=nt}}
# [[Enqere]]
== {{ziman|tr}} ==
=== Serenav ===
[[Wêne:Ankara_(16290014657).jpg|thumb|alt=bajarê Enqerê bi şev|{{zim|tr|Ankara}}]]
{{serenav|tr}}
# {{e|tr|bajar|paytext}} [[Enqere|Enqere]] {{îzah|[[paytext|paytextê]] [[Tirkiyeyê|Tirkiyeyê]]}}
#* {{nimûne?|tr}}
==== Etîmolojî ====
{{ji?|tr}}
jfz4jtk2607qw9v8zydf0dy5xxtxwpv
6333670
6333640
2026-08-14T16:12:06Z
Balyozbot
7867
Bot: Paqijiyên kozmetîk (Lînk paqij kir.)
6333670
wikitext
text/x-wiki
== {{ziman|de}} ==
=== Bilêvkirin ===
* {{deng|de|De-Ankara.ogg}}
=== Navdêr ===
{{navdêr|de|z=nt}}
# [[Enqere]]
== {{ziman|tr}} ==
=== Serenav ===
[[Wêne:Ankara_(16290014657).jpg|thumb|alt=bajarê Enqerê bi şev|{{zim|tr|Ankara}}]]
{{serenav|tr}}
# {{e|tr|bajar|paytext}} [[Enqere]] {{îzah|[[paytext]]ê [[Tirkiyeyê]]}}
#* {{nimûne?|tr}}
==== Etîmolojî ====
{{ji?|tr}}
if71x3blkd3a5ax0a89tl3jq4ajo6pl
Alîkarî:Tablo
12
517697
6333612
6034850
2026-08-14T13:23:27Z
Ghybu
1393
Ghybuî/ê navê [[Alîkarî:NavFrame]] weke [[Alîkarî:Tablo]] guhart
6034850
wikitext
text/x-wiki
== Bikaranîn ==
'''Mezin:'''
<syntaxhighlight lang="html4strict" style="width:30em;"><div class="NavFrame">
<div class="NavHead">[... Sernav ...]</div>
<div class="NavContent">
[... Naverok ...]
</div>
</div></syntaxhighlight>
<div class="NavFrame">
<div class="NavHead">[... Sernav ...]</div>
<div class="NavContent">
[... Nevrok ...]
</div>
</div>
'''Biçûk''':
<syntaxhighlight lang="html4strict" style="width:30em;">
<div style="width: 20em">
<div class="NavFrame">
<div class="NavHead">[... Sernav ...]</div>
<div class="NavContent">
[... Naverok ...]
</div>
</div>
</div></syntaxhighlight >
<div style="width: 20em">
<div class="NavFrame">
<div class="NavHead">[... Sernav ...]</div>
<div class="NavContent">
[... Naverok ...]
</div>
</div>
</div>
== Binêre jî ==
* [[:mw:Manual:Collapsible elements]] <small>(MediaWiki: [[MediaWiki:Collapsible-expand|Collapsible-expand]] / [[MediaWiki:Collapsible-collapse|Collapsible-collapse]])</small>
* [[:en:w:Wikipedia:NavFrame]]
[[Kategorî:Alîkarî]]
rkfsy4c6cyqno2w80ngrnz4f16w8iig
6333614
6333612
2026-08-14T13:36:17Z
Ghybu
1393
/* Bikaranîn */
6333614
wikitext
text/x-wiki
== NavFrame ==
'''Mezin:'''
<syntaxhighlight lang="html4strict" style="width:30em;"><div class="NavFrame">
<div class="NavHead">[... Sernav ...]</div>
<div class="NavContent">
[... Naverok ...]
</div>
</div></syntaxhighlight>
<div class="NavFrame">
<div class="NavHead">[... Sernav ...]</div>
<div class="NavContent">
[... Nevrok ...]
</div>
</div>
'''Biçûk''':
<syntaxhighlight lang="html4strict" style="width:30em;">
<div style="width: 20em">
<div class="NavFrame">
<div class="NavHead">[... Sernav ...]</div>
<div class="NavContent">
[... Naverok ...]
</div>
</div>
</div></syntaxhighlight >
<div style="width: 20em">
<div class="NavFrame">
<div class="NavHead">[... Sernav ...]</div>
<div class="NavContent">
[... Naverok ...]
</div>
</div>
</div>
== Şablon ==
Binêre '''{{ş|tabloya-tewandinê-ser}}'''
== Bi ''Class''-an ==
: => Bi ''Class''-ên {{kod|mw-collapsible mw-collapsed}}
:: Binêre '''[[:mw:Manual:Collapsible elements]]'''
: => Bi ''Class''-ên {{kod|vsSwitcher}}, {{kod|vsToggleElement}} û {{kod|vsHide}}
<syntaxhighlight lang="wikitext" style="width:30em;">
{| class="vsSwitcher wikitable"
|-
! colspan=3 class="vsToggleElement" | Sernav
|- class="vsHide"
! Header text !! Header text !! Header text
|- class="vsHide"
| Mînak || Mînak || Mînak
|- class="vsHide"
| Mînak || Mînak || Mînak
|- class="vsHide"
| Mînak || Mînak || Mînak
|}
</syntaxhighlight>
{| class="vsSwitcher wikitable"
|-
! colspan=3 class="vsToggleElement" | Sernav
|- class="vsHide"
! Header text !! Header text !! Header text
|- class="vsHide"
| Mînak || Mînak || Mînak
|- class="vsHide"
| Mînak || Mînak || Mînak
|- class="vsHide"
| Mînak || Mînak || Mînak
|}
== Binêre jî ==
* [[:mw:Manual:Collapsible elements]] <small>(MediaWiki: [[MediaWiki:Collapsible-expand|Collapsible-expand]] / [[MediaWiki:Collapsible-collapse|Collapsible-collapse]])</small>
* [[:en:w:Wikipedia:NavFrame]]
[[Kategorî:Alîkarî]]
tpu37dnqe1apwn95ektxhy2j2eomgr7
6333615
6333614
2026-08-14T13:44:14Z
Ghybu
1393
6333615
wikitext
text/x-wiki
== Tabloyên vekirî-girtî ==
=== NavFrame ===
'''Mezin:'''
<syntaxhighlight lang="html4strict" style="width:30em;"><div class="NavFrame">
<div class="NavHead">[... Sernav ...]</div>
<div class="NavContent">
[... Naverok ...]
</div>
</div></syntaxhighlight>
<div class="NavFrame">
<div class="NavHead">[... Sernav ...]</div>
<div class="NavContent">
[... Nevrok ...]
</div>
</div>
'''Biçûk''':
<syntaxhighlight lang="html4strict" style="width:30em;">
<div style="width: 20em">
<div class="NavFrame">
<div class="NavHead">[... Sernav ...]</div>
<div class="NavContent">
[... Naverok ...]
</div>
</div>
</div></syntaxhighlight >
<div style="width: 20em">
<div class="NavFrame">
<div class="NavHead">[... Sernav ...]</div>
<div class="NavContent">
[... Naverok ...]
</div>
</div>
</div>
=== Şablon ===
Binêre '''{{ş|tabloya-tewandinê-ser}}'''
=== Bi ''Class''-an ===
: => Bi ''Class''-ên {{kod|mw-collapsible mw-collapsed}}
:: Binêre '''[[:mw:Manual:Collapsible elements]]'''
: => Bi ''Class''-ên {{kod|vsSwitcher}}, {{kod|vsToggleElement}} û {{kod|vsHide}}
<syntaxhighlight lang="wikitext" style="width:30em;">
{| class="vsSwitcher wikitable"
|-
! colspan=3 class="vsToggleElement" | Sernav
|- class="vsHide"
! Header text !! Header text !! Header text
|- class="vsHide"
| Mînak || Mînak || Mînak
|- class="vsHide"
| Mînak || Mînak || Mînak
|- class="vsHide"
| Mînak || Mînak || Mînak
|}
</syntaxhighlight>
{| class="vsSwitcher wikitable"
|-
! colspan=3 class="vsToggleElement" | Sernav
|- class="vsHide"
! Header text !! Header text !! Header text
|- class="vsHide"
| Mînak || Mînak || Mînak
|- class="vsHide"
| Mînak || Mînak || Mînak
|- class="vsHide"
| Mînak || Mînak || Mînak
|}
== Binêre jî ==
* [[:mw:Manual:Collapsible elements]] <small>(MediaWiki: [[MediaWiki:Collapsible-expand|Collapsible-expand]] / [[MediaWiki:Collapsible-collapse|Collapsible-collapse]])</small>
* [[:en:w:Wikipedia:NavFrame]]
[[Kategorî:Alîkarî]]
6zn4h8p0934xhbgsz4ulptr0vwtybmu
6333617
6333615
2026-08-14T13:49:30Z
Ghybu
1393
/* Bi Class-an */
6333617
wikitext
text/x-wiki
== Tabloyên vekirî-girtî ==
=== NavFrame ===
'''Mezin:'''
<syntaxhighlight lang="html4strict" style="width:30em;"><div class="NavFrame">
<div class="NavHead">[... Sernav ...]</div>
<div class="NavContent">
[... Naverok ...]
</div>
</div></syntaxhighlight>
<div class="NavFrame">
<div class="NavHead">[... Sernav ...]</div>
<div class="NavContent">
[... Nevrok ...]
</div>
</div>
'''Biçûk''':
<syntaxhighlight lang="html4strict" style="width:30em;">
<div style="width: 20em">
<div class="NavFrame">
<div class="NavHead">[... Sernav ...]</div>
<div class="NavContent">
[... Naverok ...]
</div>
</div>
</div></syntaxhighlight >
<div style="width: 20em">
<div class="NavFrame">
<div class="NavHead">[... Sernav ...]</div>
<div class="NavContent">
[... Naverok ...]
</div>
</div>
</div>
=== Şablon ===
Binêre '''{{ş|tabloya-tewandinê-ser}}'''
=== Bi ''Class''-ên din ===
: => Bi ''Class''-ên {{kod|mw-collapsible mw-collapsed}}
:: Binêre '''[[:mw:Manual:Collapsible elements]]'''
: => Bi ''Class''-ên {{kod|vsSwitcher}}, {{kod|vsToggleElement}} û {{kod|vsHide}}
<syntaxhighlight lang="wikitext" style="width:30em;">
{| class="vsSwitcher wikitable"
|-
! colspan=3 class="vsToggleElement" | Sernav
|- class="vsHide"
! Header text !! Header text !! Header text
|- class="vsHide"
| Mînak || Mînak || Mînak
|- class="vsHide"
| Mînak || Mînak || Mînak
|- class="vsHide"
| Mînak || Mînak || Mînak
|}
</syntaxhighlight>
{| class="vsSwitcher wikitable"
|-
! colspan=3 class="vsToggleElement" | Sernav
|- class="vsHide"
! Header text !! Header text !! Header text
|- class="vsHide"
| Mînak || Mînak || Mînak
|- class="vsHide"
| Mînak || Mînak || Mînak
|- class="vsHide"
| Mînak || Mînak || Mînak
|}
== Binêre jî ==
* [[:mw:Manual:Collapsible elements]] <small>(MediaWiki: [[MediaWiki:Collapsible-expand|Collapsible-expand]] / [[MediaWiki:Collapsible-collapse|Collapsible-collapse]])</small>
* [[:en:w:Wikipedia:NavFrame]]
[[Kategorî:Alîkarî]]
kw8nvw6s5kfhku5f5pidolw17l9allw
6333618
6333617
2026-08-14T13:51:29Z
Ghybu
1393
/* Tabloyên vekirî-girtî */
6333618
wikitext
text/x-wiki
== Tabloyên vekirî-girtî ==
=== NavFrame ===
<syntaxhighlight lang="html4strict" style="width:30em;">
<div style="width: 20em">
<div class="NavFrame">
<div class="NavHead">[... Sernav ...]</div>
<div class="NavContent">
[... Naverok ...]
</div>
</div>
</div></syntaxhighlight >
<div style="width: 20em">
<div class="NavFrame">
<div class="NavHead">[... Sernav ...]</div>
<div class="NavContent">
[... Naverok ...]
</div>
</div>
</div>
=== Şablon ===
Binêre '''{{ş|tabloya-tewandinê-ser}}'''
=== Bi ''Class''-ên din ===
: => Bi ''Class''-ên {{kod|mw-collapsible mw-collapsed}}
:: Binêre '''[[:mw:Manual:Collapsible elements]]'''
: => Bi ''Class''-ên {{kod|vsSwitcher}}, {{kod|vsToggleElement}} û {{kod|vsHide}}
<syntaxhighlight lang="wikitext" style="width:30em;">
{| class="vsSwitcher wikitable"
|-
! colspan=3 class="vsToggleElement" | Sernav
|- class="vsHide"
! Header text !! Header text !! Header text
|- class="vsHide"
| Mînak || Mînak || Mînak
|- class="vsHide"
| Mînak || Mînak || Mînak
|- class="vsHide"
| Mînak || Mînak || Mînak
|}
</syntaxhighlight>
{| class="vsSwitcher wikitable"
|-
! colspan=3 class="vsToggleElement" | Sernav
|- class="vsHide"
! Header text !! Header text !! Header text
|- class="vsHide"
| Mînak || Mînak || Mînak
|- class="vsHide"
| Mînak || Mînak || Mînak
|- class="vsHide"
| Mînak || Mînak || Mînak
|}
== Binêre jî ==
* [[:mw:Manual:Collapsible elements]] <small>(MediaWiki: [[MediaWiki:Collapsible-expand|Collapsible-expand]] / [[MediaWiki:Collapsible-collapse|Collapsible-collapse]])</small>
* [[:en:w:Wikipedia:NavFrame]]
[[Kategorî:Alîkarî]]
2ohhn8j5i1xvnfisvdkydzmwhnhsjz6
6333619
6333618
2026-08-14T13:52:12Z
Ghybu
1393
/* Tabloyên vekirî-girtî */
6333619
wikitext
text/x-wiki
== Tabloyên vekirî-girtî ==
=== Şablon ===
Binêre '''{{ş|tabloya-tewandinê-ser}}'''
=== NavFrame ===
<syntaxhighlight lang="html4strict" style="width:30em;">
<div style="width: 20em">
<div class="NavFrame">
<div class="NavHead">[... Sernav ...]</div>
<div class="NavContent">
[... Naverok ...]
</div>
</div>
</div></syntaxhighlight >
<div style="width: 20em">
<div class="NavFrame">
<div class="NavHead">[... Sernav ...]</div>
<div class="NavContent">
[... Naverok ...]
</div>
</div>
</div>
=== Bi ''Class''-ên din ===
: => Bi ''Class''-ên {{kod|mw-collapsible mw-collapsed}}
:: Binêre '''[[:mw:Manual:Collapsible elements]]'''
: => Bi ''Class''-ên {{kod|vsSwitcher}}, {{kod|vsToggleElement}} û {{kod|vsHide}}
<syntaxhighlight lang="wikitext" style="width:30em;">
{| class="vsSwitcher wikitable"
|-
! colspan=3 class="vsToggleElement" | Sernav
|- class="vsHide"
! Header text !! Header text !! Header text
|- class="vsHide"
| Mînak || Mînak || Mînak
|- class="vsHide"
| Mînak || Mînak || Mînak
|- class="vsHide"
| Mînak || Mînak || Mînak
|}
</syntaxhighlight>
{| class="vsSwitcher wikitable"
|-
! colspan=3 class="vsToggleElement" | Sernav
|- class="vsHide"
! Header text !! Header text !! Header text
|- class="vsHide"
| Mînak || Mînak || Mînak
|- class="vsHide"
| Mînak || Mînak || Mînak
|- class="vsHide"
| Mînak || Mînak || Mînak
|}
== Binêre jî ==
* [[:mw:Manual:Collapsible elements]] <small>(MediaWiki: [[MediaWiki:Collapsible-expand|Collapsible-expand]] / [[MediaWiki:Collapsible-collapse|Collapsible-collapse]])</small>
* [[:en:w:Wikipedia:NavFrame]]
[[Kategorî:Alîkarî]]
137vgugm08dn6d0ybp3s94x2645n0ip
6333620
6333619
2026-08-14T13:53:59Z
Ghybu
1393
/* Şablon */
6333620
wikitext
text/x-wiki
== Tabloyên vekirî-girtî ==
=== Şablon ===
Binêre:
* {{ş|tabloya-tewandinê-ser}}
* {{veşêre-ser}}
=== NavFrame ===
<syntaxhighlight lang="html4strict" style="width:30em;">
<div style="width: 20em">
<div class="NavFrame">
<div class="NavHead">[... Sernav ...]</div>
<div class="NavContent">
[... Naverok ...]
</div>
</div>
</div></syntaxhighlight >
<div style="width: 20em">
<div class="NavFrame">
<div class="NavHead">[... Sernav ...]</div>
<div class="NavContent">
[... Naverok ...]
</div>
</div>
</div>
=== Bi ''Class''-ên din ===
: => Bi ''Class''-ên {{kod|mw-collapsible mw-collapsed}}
:: Binêre '''[[:mw:Manual:Collapsible elements]]'''
: => Bi ''Class''-ên {{kod|vsSwitcher}}, {{kod|vsToggleElement}} û {{kod|vsHide}}
<syntaxhighlight lang="wikitext" style="width:30em;">
{| class="vsSwitcher wikitable"
|-
! colspan=3 class="vsToggleElement" | Sernav
|- class="vsHide"
! Header text !! Header text !! Header text
|- class="vsHide"
| Mînak || Mînak || Mînak
|- class="vsHide"
| Mînak || Mînak || Mînak
|- class="vsHide"
| Mînak || Mînak || Mînak
|}
</syntaxhighlight>
{| class="vsSwitcher wikitable"
|-
! colspan=3 class="vsToggleElement" | Sernav
|- class="vsHide"
! Header text !! Header text !! Header text
|- class="vsHide"
| Mînak || Mînak || Mînak
|- class="vsHide"
| Mînak || Mînak || Mînak
|- class="vsHide"
| Mînak || Mînak || Mînak
|}
== Binêre jî ==
* [[:mw:Manual:Collapsible elements]] <small>(MediaWiki: [[MediaWiki:Collapsible-expand|Collapsible-expand]] / [[MediaWiki:Collapsible-collapse|Collapsible-collapse]])</small>
* [[:en:w:Wikipedia:NavFrame]]
[[Kategorî:Alîkarî]]
rwpdsyq543owp48jf24oivojypmuihf
6333621
6333620
2026-08-14T13:54:14Z
Ghybu
1393
/* Tabloyên vekirî-girtî */
6333621
wikitext
text/x-wiki
== Tabloyên vekirî-girtî ==
=== Şablon ===
Binêre:
* {{ş|tabloya-tewandinê-ser}}
* {{ş|veşêre-ser}}
=== NavFrame ===
<syntaxhighlight lang="html4strict" style="width:30em;">
<div style="width: 20em">
<div class="NavFrame">
<div class="NavHead">[... Sernav ...]</div>
<div class="NavContent">
[... Naverok ...]
</div>
</div>
</div></syntaxhighlight >
<div style="width: 20em">
<div class="NavFrame">
<div class="NavHead">[... Sernav ...]</div>
<div class="NavContent">
[... Naverok ...]
</div>
</div>
</div>
=== Bi ''Class''-ên din ===
: => Bi ''Class''-ên {{kod|mw-collapsible mw-collapsed}}
:: Binêre '''[[:mw:Manual:Collapsible elements]]'''
: => Bi ''Class''-ên {{kod|vsSwitcher}}, {{kod|vsToggleElement}} û {{kod|vsHide}}
<syntaxhighlight lang="wikitext" style="width:30em;">
{| class="vsSwitcher wikitable"
|-
! colspan=3 class="vsToggleElement" | Sernav
|- class="vsHide"
! Header text !! Header text !! Header text
|- class="vsHide"
| Mînak || Mînak || Mînak
|- class="vsHide"
| Mînak || Mînak || Mînak
|- class="vsHide"
| Mînak || Mînak || Mînak
|}
</syntaxhighlight>
{| class="vsSwitcher wikitable"
|-
! colspan=3 class="vsToggleElement" | Sernav
|- class="vsHide"
! Header text !! Header text !! Header text
|- class="vsHide"
| Mînak || Mînak || Mînak
|- class="vsHide"
| Mînak || Mînak || Mînak
|- class="vsHide"
| Mînak || Mînak || Mînak
|}
== Binêre jî ==
* [[:mw:Manual:Collapsible elements]] <small>(MediaWiki: [[MediaWiki:Collapsible-expand|Collapsible-expand]] / [[MediaWiki:Collapsible-collapse|Collapsible-collapse]])</small>
* [[:en:w:Wikipedia:NavFrame]]
[[Kategorî:Alîkarî]]
cspy092c0rg7jz85r165qxm1hmhhq9q
6333622
6333621
2026-08-14T13:55:11Z
Ghybu
1393
/* Binêre jî */
6333622
wikitext
text/x-wiki
== Tabloyên vekirî-girtî ==
=== Şablon ===
Binêre:
* {{ş|tabloya-tewandinê-ser}}
* {{ş|veşêre-ser}}
=== NavFrame ===
<syntaxhighlight lang="html4strict" style="width:30em;">
<div style="width: 20em">
<div class="NavFrame">
<div class="NavHead">[... Sernav ...]</div>
<div class="NavContent">
[... Naverok ...]
</div>
</div>
</div></syntaxhighlight >
<div style="width: 20em">
<div class="NavFrame">
<div class="NavHead">[... Sernav ...]</div>
<div class="NavContent">
[... Naverok ...]
</div>
</div>
</div>
=== Bi ''Class''-ên din ===
: => Bi ''Class''-ên {{kod|mw-collapsible mw-collapsed}}
:: Binêre '''[[:mw:Manual:Collapsible elements]]'''
: => Bi ''Class''-ên {{kod|vsSwitcher}}, {{kod|vsToggleElement}} û {{kod|vsHide}}
<syntaxhighlight lang="wikitext" style="width:30em;">
{| class="vsSwitcher wikitable"
|-
! colspan=3 class="vsToggleElement" | Sernav
|- class="vsHide"
! Header text !! Header text !! Header text
|- class="vsHide"
| Mînak || Mînak || Mînak
|- class="vsHide"
| Mînak || Mînak || Mînak
|- class="vsHide"
| Mînak || Mînak || Mînak
|}
</syntaxhighlight>
{| class="vsSwitcher wikitable"
|-
! colspan=3 class="vsToggleElement" | Sernav
|- class="vsHide"
! Header text !! Header text !! Header text
|- class="vsHide"
| Mînak || Mînak || Mînak
|- class="vsHide"
| Mînak || Mînak || Mînak
|- class="vsHide"
| Mînak || Mînak || Mînak
|}
== Binêre ==
* [[:mw:Manual:Collapsible elements]] <small>(MediaWiki: [[MediaWiki:Collapsible-expand|Collapsible-expand]] / [[MediaWiki:Collapsible-collapse|Collapsible-collapse]])</small>
* [[:en:w:Wikipedia:NavFrame]]
[[Kategorî:Alîkarî]]
o21x4vajaym847cpelly5bkp6t7nem6
6333623
6333622
2026-08-14T13:56:45Z
Ghybu
1393
/* Şablon */
6333623
wikitext
text/x-wiki
== Tabloyên vekirî-girtî ==
=== Şablon ===
Binêre:
* {{ş|tabloya-tewandinê-ser}}
=== NavFrame ===
<syntaxhighlight lang="html4strict" style="width:30em;">
<div style="width: 20em">
<div class="NavFrame">
<div class="NavHead">[... Sernav ...]</div>
<div class="NavContent">
[... Naverok ...]
</div>
</div>
</div></syntaxhighlight >
<div style="width: 20em">
<div class="NavFrame">
<div class="NavHead">[... Sernav ...]</div>
<div class="NavContent">
[... Naverok ...]
</div>
</div>
</div>
=== Bi ''Class''-ên din ===
: => Bi ''Class''-ên {{kod|mw-collapsible mw-collapsed}}
:: Binêre '''[[:mw:Manual:Collapsible elements]]'''
: => Bi ''Class''-ên {{kod|vsSwitcher}}, {{kod|vsToggleElement}} û {{kod|vsHide}}
<syntaxhighlight lang="wikitext" style="width:30em;">
{| class="vsSwitcher wikitable"
|-
! colspan=3 class="vsToggleElement" | Sernav
|- class="vsHide"
! Header text !! Header text !! Header text
|- class="vsHide"
| Mînak || Mînak || Mînak
|- class="vsHide"
| Mînak || Mînak || Mînak
|- class="vsHide"
| Mînak || Mînak || Mînak
|}
</syntaxhighlight>
{| class="vsSwitcher wikitable"
|-
! colspan=3 class="vsToggleElement" | Sernav
|- class="vsHide"
! Header text !! Header text !! Header text
|- class="vsHide"
| Mînak || Mînak || Mînak
|- class="vsHide"
| Mînak || Mînak || Mînak
|- class="vsHide"
| Mînak || Mînak || Mînak
|}
== Binêre ==
* [[:mw:Manual:Collapsible elements]] <small>(MediaWiki: [[MediaWiki:Collapsible-expand|Collapsible-expand]] / [[MediaWiki:Collapsible-collapse|Collapsible-collapse]])</small>
* [[:en:w:Wikipedia:NavFrame]]
[[Kategorî:Alîkarî]]
ai6p0v7enpxng4mas6stm6xvhibcgxo
6333624
6333623
2026-08-14T13:57:16Z
Ghybu
1393
/* NavFrame */
6333624
wikitext
text/x-wiki
== Tabloyên vekirî-girtî ==
=== Şablon ===
Binêre:
* {{ş|tabloya-tewandinê-ser}}
=== NavFrame ===
<syntaxhighlight lang="html4strict" style="width:30em;">
<div style="width: 20em">
<div class="NavFrame">
<div class="NavHead">[... Sernav ...]</div>
<div class="NavContent">
[... Tablo ...]
</div>
</div>
</div></syntaxhighlight >
<div style="width: 20em">
<div class="NavFrame">
<div class="NavHead">[... Sernav ...]</div>
<div class="NavContent">
[... Tablo ...]
</div>
</div>
</div>
=== Bi ''Class''-ên din ===
: => Bi ''Class''-ên {{kod|mw-collapsible mw-collapsed}}
:: Binêre '''[[:mw:Manual:Collapsible elements]]'''
: => Bi ''Class''-ên {{kod|vsSwitcher}}, {{kod|vsToggleElement}} û {{kod|vsHide}}
<syntaxhighlight lang="wikitext" style="width:30em;">
{| class="vsSwitcher wikitable"
|-
! colspan=3 class="vsToggleElement" | Sernav
|- class="vsHide"
! Header text !! Header text !! Header text
|- class="vsHide"
| Mînak || Mînak || Mînak
|- class="vsHide"
| Mînak || Mînak || Mînak
|- class="vsHide"
| Mînak || Mînak || Mînak
|}
</syntaxhighlight>
{| class="vsSwitcher wikitable"
|-
! colspan=3 class="vsToggleElement" | Sernav
|- class="vsHide"
! Header text !! Header text !! Header text
|- class="vsHide"
| Mînak || Mînak || Mînak
|- class="vsHide"
| Mînak || Mînak || Mînak
|- class="vsHide"
| Mînak || Mînak || Mînak
|}
== Binêre ==
* [[:mw:Manual:Collapsible elements]] <small>(MediaWiki: [[MediaWiki:Collapsible-expand|Collapsible-expand]] / [[MediaWiki:Collapsible-collapse|Collapsible-collapse]])</small>
* [[:en:w:Wikipedia:NavFrame]]
[[Kategorî:Alîkarî]]
6gdlk3sxqerh1642zp8cg1oucqog0lm
6333625
6333624
2026-08-14T14:05:28Z
Ghybu
1393
6333625
wikitext
text/x-wiki
Binêre: [[:en:w:Help:Table]]
== Tabloyên vekirî-girtî ==
=== Şablon ===
Binêre:
* {{ş|tabloya-tewandinê-ser}}
=== NavFrame ===
<syntaxhighlight lang="html4strict" style="width:30em;">
<div style="width: 20em">
<div class="NavFrame">
<div class="NavHead">[... Sernav ...]</div>
<div class="NavContent">
[... Tablo ...]
</div>
</div>
</div></syntaxhighlight >
<div style="width: 20em">
<div class="NavFrame">
<div class="NavHead">[... Sernav ...]</div>
<div class="NavContent">
[... Tablo ...]
</div>
</div>
</div>
=== Bi ''Class''-ên din ===
: => Bi ''Class''-ên {{kod|mw-collapsible mw-collapsed}}
:: Binêre '''[[:mw:Manual:Collapsible elements]]'''
: => Bi ''Class''-ên {{kod|vsSwitcher}}, {{kod|vsToggleElement}} û {{kod|vsHide}}
<syntaxhighlight lang="wikitext" style="width:30em;">
{| class="vsSwitcher wikitable"
|-
! colspan=3 class="vsToggleElement" | Sernav
|- class="vsHide"
! Header text !! Header text !! Header text
|- class="vsHide"
| Mînak || Mînak || Mînak
|- class="vsHide"
| Mînak || Mînak || Mînak
|- class="vsHide"
| Mînak || Mînak || Mînak
|}
</syntaxhighlight>
{| class="vsSwitcher wikitable"
|-
! colspan=3 class="vsToggleElement" | Sernav
|- class="vsHide"
! Header text !! Header text !! Header text
|- class="vsHide"
| Mînak || Mînak || Mînak
|- class="vsHide"
| Mînak || Mînak || Mînak
|- class="vsHide"
| Mînak || Mînak || Mînak
|}
== Binêre ==
* [[:mw:Manual:Collapsible elements]] <small>(MediaWiki: [[MediaWiki:Collapsible-expand|Collapsible-expand]] / [[MediaWiki:Collapsible-collapse|Collapsible-collapse]])</small>
* [[:en:w:Wikipedia:NavFrame]]
[[Kategorî:Alîkarî]]
3l8trludb0y5eqsydh3p45l8he9p7iy
6333629
6333625
2026-08-14T14:14:53Z
Ghybu
1393
6333629
wikitext
text/x-wiki
Binêre: [[:en:w:Help:Table]]
== Tabloyên vekirî-girtî ==
=== Şablon ===
Binêre:
* {{ş|tabloya-tewandinê-ser}}
=== NavFrame ===
<syntaxhighlight lang="html4strict" style="width:30em;">
<div style="width: 20em">
<div class="NavFrame">
<div class="NavHead">[... Sernav ...]</div>
<div class="NavContent">
[... Tablo ...]
</div>
</div>
</div></syntaxhighlight >
<div style="width: 20em">
<div class="NavFrame">
<div class="NavHead">[... Sernav ...]</div>
<div class="NavContent">
[... Tablo ...]
</div>
</div>
</div>
: ''Binêre'': [[:en:w:Wikipedia:NavFrame]]
=== Bi ''Class''-ên din ===
: {{reng2|green|2='''=>'''}} Bi ''Class''-ên {{kod|mw-collapsible mw-collapsed}}
:: Binêre '''[[:mw:Manual:Collapsible elements]]'''
::: <small>(MediaWiki: [[MediaWiki:Collapsible-expand|Collapsible-expand]] / [[MediaWiki:Collapsible-collapse|Collapsible-collapse]])</small>
: {{reng2|green|2='''=>'''}} Bi ''Class''-ên {{kod|vsSwitcher}}, {{kod|vsToggleElement}} û {{kod|vsHide}}
<syntaxhighlight lang="wikitext" style="width:30em;">
{| class="vsSwitcher wikitable"
|-
! colspan=3 class="vsToggleElement" | Sernav
|- class="vsHide"
! Header text !! Header text !! Header text
|- class="vsHide"
| Mînak || Mînak || Mînak
|- class="vsHide"
| Mînak || Mînak || Mînak
|- class="vsHide"
| Mînak || Mînak || Mînak
|}
</syntaxhighlight>
{| class="vsSwitcher wikitable"
|-
! colspan=3 class="vsToggleElement" | Sernav
|- class="vsHide"
! Header text !! Header text !! Header text
|- class="vsHide"
| Mînak || Mînak || Mînak
|- class="vsHide"
| Mînak || Mînak || Mînak
|- class="vsHide"
| Mînak || Mînak || Mînak
|}
[[Kategorî:Alîkarî]]
f0evlpreo1g2qkoigktpom9yud360e5
6333630
6333629
2026-08-14T14:20:40Z
Ghybu
1393
6333630
wikitext
text/x-wiki
: {{reng2|green|2='''=>'''}} ''Binêre:'' '''[[:en:w:Help:Table]]'''
== Tabloyên vekirî-girtî ==
=== Şablon ===
Binêre:
* {{ş|tabloya-tewandinê-ser}}
=== NavFrame ===
<syntaxhighlight lang="html4strict" style="width:30em;">
<div style="width: 20em">
<div class="NavFrame">
<div class="NavHead">[... Sernav ...]</div>
<div class="NavContent">
[... Tablo ...]
</div>
</div>
</div></syntaxhighlight >
<div style="width: 20em">
<div class="NavFrame">
<div class="NavHead">[... Sernav ...]</div>
<div class="NavContent">
[... Tablo ...]
</div>
</div>
</div>
: ''Binêre'': [[:en:w:Wikipedia:NavFrame]]
=== Bi ''Class''-ên din ===
: {{reng2|green|2='''=>'''}} Bi ''Class''-ên {{kod|mw-collapsible mw-collapsed}}
:: Binêre '''[[:mw:Manual:Collapsible elements]]'''
::: <small>(MediaWiki: [[MediaWiki:Collapsible-expand|Collapsible-expand]] / [[MediaWiki:Collapsible-collapse|Collapsible-collapse]])</small>
: {{reng2|green|2='''=>'''}} Bi ''Class''-ên {{kod|vsSwitcher}}, {{kod|vsToggleElement}} û {{kod|vsHide}}
<syntaxhighlight lang="wikitext" style="width:30em;">
{| class="vsSwitcher wikitable"
|-
! colspan=3 class="vsToggleElement" | Sernav
|- class="vsHide"
! Header text !! Header text !! Header text
|- class="vsHide"
| Mînak || Mînak || Mînak
|- class="vsHide"
| Mînak || Mînak || Mînak
|- class="vsHide"
| Mînak || Mînak || Mînak
|}
</syntaxhighlight>
{| class="vsSwitcher wikitable"
|-
! colspan=3 class="vsToggleElement" | Sernav
|- class="vsHide"
! Header text !! Header text !! Header text
|- class="vsHide"
| Mînak || Mînak || Mînak
|- class="vsHide"
| Mînak || Mînak || Mînak
|- class="vsHide"
| Mînak || Mînak || Mînak
|}
[[Kategorî:Alîkarî]]
osucfb03vs250q1n4v8etz6820cxd99
pûskebeq
0
540333
6333774
6329223
2026-08-15T10:26:01Z
Dûrzan
875
6333774
wikitext
text/x-wiki
== {{ziman|ku}} ==
=== Bilêvkirin ===
* {{ku-kîte}}
=== Navdêr ===
[[Wêne:Sympetrum depressusculum 08-09-28 IMG 5990.jpg|thumb|pûskebeq]]
{{navdêr|ku|z=}}
# {{e|ku|zoolojî}} Ji [[binemal]]a odonatayê [[celeb]]ek kêzik a ku xwediyê [[per]]ên [[zirav]] û [[dirêj]] e.
#: {{hevmane|ku|zeleqûnk|serteşî|qûnteşî|lûrteşî|dûvteşî|moza zêrrîn}}
==== Bi alfabeyên din ====
* {{ku-ar|پووسکەبەق}}
==== Navê zanistî ====
* {{g|ku|anisoptera}}
==== Etîmolojî ====
{{bêetîmolojî|ku}}
==== Werger ====
{{werger-ser}}
* {{Z|ar}}: {{W-|ar|اليعسوب}}
* {{Z|en}}: {{W+|en|dragonfly}}
* {{Z|tr}}: {{W+|tr|yusufçuk}}
{{werger-bin}}
sp3ota302j2its5k6m31w4oh0ty784i
Bikarhêner:Ghybu/common.css
2
770387
6333636
6333590
2026-08-14T14:59:17Z
Ghybu
1393
6333636
css
text/css
/* Add X icon after links to X. */
.mw-parser-output a[href*="twitter.com"].external,
.mw-parser-output a[href*="x.com"].external {
background: url("//upload.wikimedia.org/wikipedia/commons/c/ce/X_logo_2023.svg") no-repeat right;
background-size: auto;
padding: 8px 15px 8px 0;
background-size: 12px;
}
llnuab214yuedk15t26b6e5p6sdcbf4
6333641
6333636
2026-08-14T15:05:19Z
Ghybu
1393
6333641
css
text/css
/* Add X icon after links to X. */
.mw-parser-output a[href*="twitter.com"].external,
.mw-parser-output a[href*="://x.com"].external {
background: url("//upload.wikimedia.org/wikipedia/commons/c/ce/X_logo_2023.svg") no-repeat right;
background-size: auto;
padding: 8px 15px 8px 0;
background-size: 12px;
}
a5a52cb1lxcmmfi6udkuw59irk4w83t
6333642
6333641
2026-08-14T15:06:50Z
Ghybu
1393
6333642
css
text/css
/* Add X icon after links to X. */
.mw-parser-output a[href*="twitter.com"].external,
.mw-parser-output a[href*="//x.com"].external {
background: url("//upload.wikimedia.org/wikipedia/commons/c/ce/X_logo_2023.svg") no-repeat right;
background-size: auto;
padding: 8px 15px 8px 0;
background-size: 12px;
}
9v2v85dcq6rworjvzmwzbueng357rd6
6333646
6333642
2026-08-14T15:18:36Z
Ghybu
1393
6333646
css
text/css
/* Add X icon after links to X. */
.mw-parser-output a[href*="twitter.com"].external,
.mw-parser-output a[href*="://x.com/"].external {
background: url("//upload.wikimedia.org/wikipedia/commons/c/ce/X_logo_2023.svg") no-repeat right;
background-size: auto;
padding: 8px 15px 8px 0;
background-size: 12px;
}
c381xgygmqucdgrwsq7quka4mnpaguh
6333647
6333646
2026-08-14T15:19:48Z
Ghybu
1393
6333647
css
text/css
/* Add X icon after links to X. */
.mw-parser-output a[href*="twitter.com"].external,
.mw-parser-output a[href*="://x.com"].external {
background: url("//upload.wikimedia.org/wikipedia/commons/c/ce/X_logo_2023.svg") no-repeat right;
background-size: auto;
padding: 8px 15px 8px 0;
background-size: 12px;
}
a5a52cb1lxcmmfi6udkuw59irk4w83t
Gotûbêja bikarhêner:Rewiye tine
3
825946
6333626
6029358
2026-08-14T14:12:10Z
Wikihez
7344
/* WF:Nû */ beşeke nû
6333626
wikitext
text/x-wiki
{{xêrhatin}}
== Xêrhatin ==
Merheba bikarhênerê me yê hêja: ''Rewiye tine'',
Bi xêr hatî ferhenga kurdî-kurdî WÎKÎFERHENGê {{=)}}
Em hêvîdar in ku tu jî di avakirina vê ferhengê de alîkariya me bikî.
Eger pirsên te hebin, xêra xwe ji me re binivîse.
Xebatxweş.
:::::: -- [[Bikarhêner:Bikarhêner|Bikarhêner]] ([[Gotûbêja bikarhêner:Bikarhêner|gotûbêj]]) 14:38, 29 çiriya pêşîn 2019 (UTC)
== Bikarhêner:Rewiye tine/Peyvên min yên bêçavkanî û bêwate ==
Silav bira, dikarî vê lîsteyê mezintir bikî, heta ku em Pêvekek ji bo peyvên bêçavkanî çêkin. [[Bikarhêner:Rewiye tine/Peyvên min yên bêçavkanî û bêwate]] Qewet be!--[[Bikarhêner:Balyozxane|Balyozxane]] ([[Gotûbêja bikarhêner:Balyozxane|gotûbêj]]) 17:21, 2 tebax 2020 (UTC)
[[Bikarhêner:Rewiye tine]]Bêguman ez ê zêde bikim. Peyvên xerîb bala min dikişînin:). Zor spas dikim.
== [[Wîkîferheng:Tomarkirina peyvên ji wêjeya kurdî|Jêgirtinekê tomar bike]] ==
Silav. Ji bo peyvên ku wateyên wan tu nizanî, dewsa çêkirina gotaran gelo dikarî li '''[[Wîkîferheng:Tomarkirina peyvên ji wêjeya kurdî|Jêgirtinekê tomar bike]]''' zêde bikî? Bi vî sayî hem ez dikarim kengî wexta min hebe wan kontrol bikim û bi awayekî baştir lê zêde bikim hem jî karê me hêsantir û hindiktir be. Dibe? --[[Bikarhêner:Balyozxane|Balyozxane]] ([[Gotûbêja bikarhêner:Balyozxane|gotûbêj]]) 11:58, 4 îlon 2020 (UTC)
:{{r|Balyozxane}}Merhaba keko. Ji xwe destê min vî avayî hin peyv hebûn xeynî min zêdekirî. Eger peyv binîre tunebe ez lê dernexim wek te got ez ê jorê zêde bikim. Min jî dixesta bi te re vê meseleyê axivim. Gelek baş çebû. Mala te ava.[[Bikarhêner:Rewiye tine|Rewiye tine]] ([[Gotûbêja bikarhêner:Rewiye tine#top|gotûbêj]]) 18:12, 4 îlon 2020 (UTC)
::A te avatir :) Qewet be! --[[Bikarhêner:Balyozxane|Balyozxane]] ([[Gotûbêja bikarhêner:Balyozxane|gotûbêj]]) 18:21, 4 îlon 2020 (UTC)
:::Te got tu yê li jor lê zêde bikî hingê ew [[hela hela kirin]] çi ye {{=D}} --[[Bikarhêner:Balyozxane|Balyozxane]] ([[Gotûbêja bikarhêner:Balyozxane|gotûbêj]]) 18:49, 4 îlon 2020 (UTC)
:::{{r|Balyozxane}} Brako biya min dibe nebe ev peyv biwej e. Ma bihele em jî hinek hela hela bikin :D.<br>Henek dikim. Mesele ji bo '''xwewxe'' qet fikra min tune bû. Min jor zêde kir. Lê hela hela kirin :D<br>ihtimalek mêzin biwêj e biya min. [[Bikarhêner:Rewiye tine|Rewiye tine]] ([[Gotûbêja bikarhêner:Rewiye tine#top|gotûbêj]]) 18:55, 4 îlon 2020 (UTC)
::::Min gotibû hemû peyvên ku maneyên wan tu nizanî lê zêde neke heta em dikarin wateyekê jê re bibînin. Tenê cûreyê peyvê ne bes e. :/ --[[Bikarhêner:Balyozxane|Balyozxane]] ([[Gotûbêja bikarhêner:Balyozxane|gotûbêj]]) 19:02, 4 îlon 2020 (UTC)
{{r|Balyozxane}} Ez dê binêrim balyoz :D. hela hela :D
{{r|Balyozxane}} Keko bi rastî min dixwest karê te hesan bikim. Lê wisa ez kêf nastînim. Ez dînamîk şol dikim. Ez hez sûrat dikim. Ev tişt min disekînîne. Ji xwe nîve kitêb çû. Tu min bibore. Ez ê wek xwe dewam bikim çêtir e. Vî avayî ez xwe pêş dixim. Mesela hin paragraf hene ji xwe mane peyvê diyar e. Lê ewê ecêb ez dê jor parve bikim. Tu çi dibêjî? Binêr piştî te got ez sekînim. Ez her deqqe zêde dikim normalê.[[Bikarhêner:Rewiye tine|Rewiye tine]] ([[Gotûbêja bikarhêner:Rewiye tine#top|gotûbêj]]) 20:47, 4 îlon 2020 (UTC)
:Bira, ez ji bo peyvekê nîv saetek carina saetek çavkaniyan û wateyên cûda digerim. Armanca me '''ne''' çêkirina gelek peyvên bêwate ye loma bila hindik be rindik be :) Tu yê dest ji vî karî bernedî, piştî kitêb xilas bû, ne wisa? :D --[[Bikarhêner:Balyozxane|Balyozxane]] ([[Gotûbêja bikarhêner:Balyozxane|gotûbêj]]) 20:53, 4 îlon 2020 (UTC)
::Tu dîsa şablona jêgirtin/mela bazîdî bi kar bîne. Ez ê dûre stûnên din mîna "navê pirtûkê" û hwd binivîsim. --[[Bikarhêner:Balyozxane|Balyozxane]] ([[Gotûbêja bikarhêner:Balyozxane|gotûbêj]]) 20:55, 4 îlon 2020 (UTC)
{{r|Balyozxane}} Keko heta hetaye ez van dera me. quwet be[[Bikarhêner:Rewiye tine|Rewiye tine]] ([[Gotûbêja bikarhêner:Rewiye tine#top|gotûbêj]]) 08:11, 6 îlon 2020 (UTC)
== frankî ==
Silav, Te li vir [https://ku.wiktionary.org/w/index.php?title=cure&diff=4738684&oldid=4738683] wek frankî lê zêde kiribû lê ew rast e an divê fransî be? Koda fransî <code>fr</code> ye.--[[Bikarhêner:Balyozxane|Balyozxane]] ([[Gotûbêja bikarhêner:Balyozxane|gotûbêj]]) 21:45, 20 çiriya pêşîn 2020 (UTC)
:{{r|Balyozxane}}Baş e. Spas dikim. Min ferq nekirîbû. Min rast kir--[[Bikarhêner:Rewiye tine|Rewiye tine]] ([[Gotûbêja bikarhêner:Rewiye tine#top|gotûbêj]]) 10:57, 21 çiriya pêşîn 2020 (UTC)
::Destxweş! :) --[[Bikarhêner:Balyozxane|Balyozxane]] ([[Gotûbêja bikarhêner:Balyozxane|gotûbêj]]) 14:04, 21 çiriya pêşîn 2020 (UTC)
== Ferhenga Mehmet Bozarslan ==
Bira te ferhenga vî pir cara bi kar tînî, lê ew dibe îxlalê mafê telîfê. Tu dikarî li binê rûpelê de navê ferhengê binivîsî wek çavkanî lê agahiyan ji vê ferhengê rasterast kopî neke jkx. Herwiha min şablona wikipedia sererast kir. --[[Bikarhêner:Balyozxane|Balyozxane]] ([[Gotûbêja bikarhêner:Balyozxane|gotûbêj]]) 22:32, 6 çiriya paşîn 2020 (UTC)
== At last ==
dembaş, keko 'axirkê' bi wateya at least nayê [[Bikarhêner:Keyomerd|Keyomerd]] ([[Gotûbêja bikarhêner:Keyomerd|gotûbêj]]) 10:17, 26 adar 2021 (UTC)
:: {{r|Keyomerd}} merhaba ji te re. 'at last' li vir binêre [[https://www.thekurdishdictionary.com/en/search/english/kurmanci/at%20last]]--[[Bikarhêner:Rewiye tine|Rewiye tine]] ([[Gotûbêja bikarhêner:Rewiye tine#top|gotûbêj]]) 10:29, 26 adar 2021 (UTC)
== Arşîvkirin ==
Silav bira, kodek heye ji bo arşîvkirina rûpelan. Gelek bi kêr tê. Heke dixwazî bi kar bînî pêşî koda li jêr li [[Bikarhêner:Rewiye tine/common.js]] zêde bike
<syntaxhighlight lang="JavaScript">
mw.loader.load('//ku.wiktionary.org/w/index.php?title=Bikarhêner:Balyozxane/Gadget-aWa.js&action=raw&ctype=text/javascript');
</syntaxhighlight>
Dûre koda li vir [[Bikarhêner:Balyozxane/barkirin.css]] li rûpela xwe ya [[Bikarhêner:Rewiye tine/common.css]] kopî bike. Dûre dikarî li vir [[Wîkîferheng:ceribandin/aWa]] biceribînî. [[Bikarhêner:Balyozxane|Balyozxane]] ([[Gotûbêja bikarhêner:Balyozxane|gotûbêj]]) 16:06, 30 adar 2021 (UTC)
== Çima? ==
Silav @[[Bikarhêner:Rewiye tine|Rewiye tine]]. Te çima li hemû rûpelan Ziman "Kurmancî" hilbijart? Ma ev [[التنفس]] ne peyveke erebî ye? Ev [[هەناسەدان]] jî ne soranî ye? --[[Bikarhêner:Balyozxane|Balyozxane]] ([[Gotûbêja bikarhêner:Balyozxane|gotûbêj]]) 20:26, 21 kanûna pêşîn 2023 (UTC)
:xeletî çebûye. [[Bikarhêner:Rewiye tine|Rewiye tine]] ([[Gotûbêja bikarhêner:Rewiye tine#top|gotûbêj]]) 13:37, 22 kanûna pêşîn 2023 (UTC)
== Çawa yî? ==
Merheba bira, tu çawa yî? Tu wekî berê naxebitî êdî. Gelo çi bû? [[Bikarhêner:Balyozxane|Balyozxane]] ([[Gotûbêja bikarhêner:Balyozxane|gotûbêj]]) 21:53, 21 sibat 2024 (UTC)
:Merhaba ji te re jî. Hin projeyê min hene bi wan re mijûlîm. Karê standîsazyon giran bû. Ji min hew hat :D. Nîyeta min heye ferhengek fenî çêbikim. Ji bo vê yêke niha li vir zêdeyî kelîmeyên fenî zêde dikim. [[Bikarhêner:Rewiye tine|Rewiye tine]] ([[Gotûbêja bikarhêner:Rewiye tine#top|gotûbêj]]) 16:59, 22 sibat 2024 (UTC)
::@[[Bikarhêner:Rewiye tine|Rewiye tine]] Bi rastî di destpêkê de diviya me tenê ji bo kelîmeyên nîqaşbar li ferhengan din binêrin lê şûnda wê me ji bo hemû kelîme dinihêrt. Ew jî gelek em westandin. Niha eger ti kes îtîraz neke (jixwe ti kes naxebite) em forma ferhenga rastnivîsînê wekî standard nîşan didin.
::Min ê ji te re bigota komeke me ya aplîkasyonekê heye. Ez û çend hevalên ji Wîkîferhengê tê de ne. Gelo dixwazî beşdar bibî? Em sihbetên gelemper li ser ziman dikin. Eger bixwazî, dikarî ji min re e-maîlekê bişînî. [[Bikarhêner:Balyozxane|Balyozxane]] ([[Gotûbêja bikarhêner:Balyozxane|gotûbêj]]) 19:44, 22 sibat 2024 (UTC)
:::Dibe.Meîl? [[Bikarhêner:Rewiye tine|Rewiye tine]] ([[Gotûbêja bikarhêner:Rewiye tine#top|gotûbêj]]) 18:52, 6 kanûna pêşîn 2024 (UTC)
== [[WF:Nû]] ==
Merheba bira, min fam nekir te çima tiştekî wisa [https://ku.wiktionary.org/w/index.php?title=di%C4%9Fer_yandan&oldid=6333604] kiriye, problemek bi forma madeyan nû heye? Em çawa dikarin vê formê baştir bikin? Yan jî çi were îzah kirin da ku bikaranîn hêsantir be? [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 14:12, 14 tebax 2026 (UTC)
9jfvrsja9902s1yb1eqr8fggf81076u
6333651
6333626
2026-08-14T15:32:36Z
Rewiye tine
7120
/* WF:Nû */ Bersiv
6333651
wikitext
text/x-wiki
{{xêrhatin}}
== Xêrhatin ==
Merheba bikarhênerê me yê hêja: ''Rewiye tine'',
Bi xêr hatî ferhenga kurdî-kurdî WÎKÎFERHENGê {{=)}}
Em hêvîdar in ku tu jî di avakirina vê ferhengê de alîkariya me bikî.
Eger pirsên te hebin, xêra xwe ji me re binivîse.
Xebatxweş.
:::::: -- [[Bikarhêner:Bikarhêner|Bikarhêner]] ([[Gotûbêja bikarhêner:Bikarhêner|gotûbêj]]) 14:38, 29 çiriya pêşîn 2019 (UTC)
== Bikarhêner:Rewiye tine/Peyvên min yên bêçavkanî û bêwate ==
Silav bira, dikarî vê lîsteyê mezintir bikî, heta ku em Pêvekek ji bo peyvên bêçavkanî çêkin. [[Bikarhêner:Rewiye tine/Peyvên min yên bêçavkanî û bêwate]] Qewet be!--[[Bikarhêner:Balyozxane|Balyozxane]] ([[Gotûbêja bikarhêner:Balyozxane|gotûbêj]]) 17:21, 2 tebax 2020 (UTC)
[[Bikarhêner:Rewiye tine]]Bêguman ez ê zêde bikim. Peyvên xerîb bala min dikişînin:). Zor spas dikim.
== [[Wîkîferheng:Tomarkirina peyvên ji wêjeya kurdî|Jêgirtinekê tomar bike]] ==
Silav. Ji bo peyvên ku wateyên wan tu nizanî, dewsa çêkirina gotaran gelo dikarî li '''[[Wîkîferheng:Tomarkirina peyvên ji wêjeya kurdî|Jêgirtinekê tomar bike]]''' zêde bikî? Bi vî sayî hem ez dikarim kengî wexta min hebe wan kontrol bikim û bi awayekî baştir lê zêde bikim hem jî karê me hêsantir û hindiktir be. Dibe? --[[Bikarhêner:Balyozxane|Balyozxane]] ([[Gotûbêja bikarhêner:Balyozxane|gotûbêj]]) 11:58, 4 îlon 2020 (UTC)
:{{r|Balyozxane}}Merhaba keko. Ji xwe destê min vî avayî hin peyv hebûn xeynî min zêdekirî. Eger peyv binîre tunebe ez lê dernexim wek te got ez ê jorê zêde bikim. Min jî dixesta bi te re vê meseleyê axivim. Gelek baş çebû. Mala te ava.[[Bikarhêner:Rewiye tine|Rewiye tine]] ([[Gotûbêja bikarhêner:Rewiye tine#top|gotûbêj]]) 18:12, 4 îlon 2020 (UTC)
::A te avatir :) Qewet be! --[[Bikarhêner:Balyozxane|Balyozxane]] ([[Gotûbêja bikarhêner:Balyozxane|gotûbêj]]) 18:21, 4 îlon 2020 (UTC)
:::Te got tu yê li jor lê zêde bikî hingê ew [[hela hela kirin]] çi ye {{=D}} --[[Bikarhêner:Balyozxane|Balyozxane]] ([[Gotûbêja bikarhêner:Balyozxane|gotûbêj]]) 18:49, 4 îlon 2020 (UTC)
:::{{r|Balyozxane}} Brako biya min dibe nebe ev peyv biwej e. Ma bihele em jî hinek hela hela bikin :D.<br>Henek dikim. Mesele ji bo '''xwewxe'' qet fikra min tune bû. Min jor zêde kir. Lê hela hela kirin :D<br>ihtimalek mêzin biwêj e biya min. [[Bikarhêner:Rewiye tine|Rewiye tine]] ([[Gotûbêja bikarhêner:Rewiye tine#top|gotûbêj]]) 18:55, 4 îlon 2020 (UTC)
::::Min gotibû hemû peyvên ku maneyên wan tu nizanî lê zêde neke heta em dikarin wateyekê jê re bibînin. Tenê cûreyê peyvê ne bes e. :/ --[[Bikarhêner:Balyozxane|Balyozxane]] ([[Gotûbêja bikarhêner:Balyozxane|gotûbêj]]) 19:02, 4 îlon 2020 (UTC)
{{r|Balyozxane}} Ez dê binêrim balyoz :D. hela hela :D
{{r|Balyozxane}} Keko bi rastî min dixwest karê te hesan bikim. Lê wisa ez kêf nastînim. Ez dînamîk şol dikim. Ez hez sûrat dikim. Ev tişt min disekînîne. Ji xwe nîve kitêb çû. Tu min bibore. Ez ê wek xwe dewam bikim çêtir e. Vî avayî ez xwe pêş dixim. Mesela hin paragraf hene ji xwe mane peyvê diyar e. Lê ewê ecêb ez dê jor parve bikim. Tu çi dibêjî? Binêr piştî te got ez sekînim. Ez her deqqe zêde dikim normalê.[[Bikarhêner:Rewiye tine|Rewiye tine]] ([[Gotûbêja bikarhêner:Rewiye tine#top|gotûbêj]]) 20:47, 4 îlon 2020 (UTC)
:Bira, ez ji bo peyvekê nîv saetek carina saetek çavkaniyan û wateyên cûda digerim. Armanca me '''ne''' çêkirina gelek peyvên bêwate ye loma bila hindik be rindik be :) Tu yê dest ji vî karî bernedî, piştî kitêb xilas bû, ne wisa? :D --[[Bikarhêner:Balyozxane|Balyozxane]] ([[Gotûbêja bikarhêner:Balyozxane|gotûbêj]]) 20:53, 4 îlon 2020 (UTC)
::Tu dîsa şablona jêgirtin/mela bazîdî bi kar bîne. Ez ê dûre stûnên din mîna "navê pirtûkê" û hwd binivîsim. --[[Bikarhêner:Balyozxane|Balyozxane]] ([[Gotûbêja bikarhêner:Balyozxane|gotûbêj]]) 20:55, 4 îlon 2020 (UTC)
{{r|Balyozxane}} Keko heta hetaye ez van dera me. quwet be[[Bikarhêner:Rewiye tine|Rewiye tine]] ([[Gotûbêja bikarhêner:Rewiye tine#top|gotûbêj]]) 08:11, 6 îlon 2020 (UTC)
== frankî ==
Silav, Te li vir [https://ku.wiktionary.org/w/index.php?title=cure&diff=4738684&oldid=4738683] wek frankî lê zêde kiribû lê ew rast e an divê fransî be? Koda fransî <code>fr</code> ye.--[[Bikarhêner:Balyozxane|Balyozxane]] ([[Gotûbêja bikarhêner:Balyozxane|gotûbêj]]) 21:45, 20 çiriya pêşîn 2020 (UTC)
:{{r|Balyozxane}}Baş e. Spas dikim. Min ferq nekirîbû. Min rast kir--[[Bikarhêner:Rewiye tine|Rewiye tine]] ([[Gotûbêja bikarhêner:Rewiye tine#top|gotûbêj]]) 10:57, 21 çiriya pêşîn 2020 (UTC)
::Destxweş! :) --[[Bikarhêner:Balyozxane|Balyozxane]] ([[Gotûbêja bikarhêner:Balyozxane|gotûbêj]]) 14:04, 21 çiriya pêşîn 2020 (UTC)
== Ferhenga Mehmet Bozarslan ==
Bira te ferhenga vî pir cara bi kar tînî, lê ew dibe îxlalê mafê telîfê. Tu dikarî li binê rûpelê de navê ferhengê binivîsî wek çavkanî lê agahiyan ji vê ferhengê rasterast kopî neke jkx. Herwiha min şablona wikipedia sererast kir. --[[Bikarhêner:Balyozxane|Balyozxane]] ([[Gotûbêja bikarhêner:Balyozxane|gotûbêj]]) 22:32, 6 çiriya paşîn 2020 (UTC)
== At last ==
dembaş, keko 'axirkê' bi wateya at least nayê [[Bikarhêner:Keyomerd|Keyomerd]] ([[Gotûbêja bikarhêner:Keyomerd|gotûbêj]]) 10:17, 26 adar 2021 (UTC)
:: {{r|Keyomerd}} merhaba ji te re. 'at last' li vir binêre [[https://www.thekurdishdictionary.com/en/search/english/kurmanci/at%20last]]--[[Bikarhêner:Rewiye tine|Rewiye tine]] ([[Gotûbêja bikarhêner:Rewiye tine#top|gotûbêj]]) 10:29, 26 adar 2021 (UTC)
== Arşîvkirin ==
Silav bira, kodek heye ji bo arşîvkirina rûpelan. Gelek bi kêr tê. Heke dixwazî bi kar bînî pêşî koda li jêr li [[Bikarhêner:Rewiye tine/common.js]] zêde bike
<syntaxhighlight lang="JavaScript">
mw.loader.load('//ku.wiktionary.org/w/index.php?title=Bikarhêner:Balyozxane/Gadget-aWa.js&action=raw&ctype=text/javascript');
</syntaxhighlight>
Dûre koda li vir [[Bikarhêner:Balyozxane/barkirin.css]] li rûpela xwe ya [[Bikarhêner:Rewiye tine/common.css]] kopî bike. Dûre dikarî li vir [[Wîkîferheng:ceribandin/aWa]] biceribînî. [[Bikarhêner:Balyozxane|Balyozxane]] ([[Gotûbêja bikarhêner:Balyozxane|gotûbêj]]) 16:06, 30 adar 2021 (UTC)
== Çima? ==
Silav @[[Bikarhêner:Rewiye tine|Rewiye tine]]. Te çima li hemû rûpelan Ziman "Kurmancî" hilbijart? Ma ev [[التنفس]] ne peyveke erebî ye? Ev [[هەناسەدان]] jî ne soranî ye? --[[Bikarhêner:Balyozxane|Balyozxane]] ([[Gotûbêja bikarhêner:Balyozxane|gotûbêj]]) 20:26, 21 kanûna pêşîn 2023 (UTC)
:xeletî çebûye. [[Bikarhêner:Rewiye tine|Rewiye tine]] ([[Gotûbêja bikarhêner:Rewiye tine#top|gotûbêj]]) 13:37, 22 kanûna pêşîn 2023 (UTC)
== Çawa yî? ==
Merheba bira, tu çawa yî? Tu wekî berê naxebitî êdî. Gelo çi bû? [[Bikarhêner:Balyozxane|Balyozxane]] ([[Gotûbêja bikarhêner:Balyozxane|gotûbêj]]) 21:53, 21 sibat 2024 (UTC)
:Merhaba ji te re jî. Hin projeyê min hene bi wan re mijûlîm. Karê standîsazyon giran bû. Ji min hew hat :D. Nîyeta min heye ferhengek fenî çêbikim. Ji bo vê yêke niha li vir zêdeyî kelîmeyên fenî zêde dikim. [[Bikarhêner:Rewiye tine|Rewiye tine]] ([[Gotûbêja bikarhêner:Rewiye tine#top|gotûbêj]]) 16:59, 22 sibat 2024 (UTC)
::@[[Bikarhêner:Rewiye tine|Rewiye tine]] Bi rastî di destpêkê de diviya me tenê ji bo kelîmeyên nîqaşbar li ferhengan din binêrin lê şûnda wê me ji bo hemû kelîme dinihêrt. Ew jî gelek em westandin. Niha eger ti kes îtîraz neke (jixwe ti kes naxebite) em forma ferhenga rastnivîsînê wekî standard nîşan didin.
::Min ê ji te re bigota komeke me ya aplîkasyonekê heye. Ez û çend hevalên ji Wîkîferhengê tê de ne. Gelo dixwazî beşdar bibî? Em sihbetên gelemper li ser ziman dikin. Eger bixwazî, dikarî ji min re e-maîlekê bişînî. [[Bikarhêner:Balyozxane|Balyozxane]] ([[Gotûbêja bikarhêner:Balyozxane|gotûbêj]]) 19:44, 22 sibat 2024 (UTC)
:::Dibe.Meîl? [[Bikarhêner:Rewiye tine|Rewiye tine]] ([[Gotûbêja bikarhêner:Rewiye tine#top|gotûbêj]]) 18:52, 6 kanûna pêşîn 2024 (UTC)
== [[WF:Nû]] ==
Merheba bira, min fam nekir te çima tiştekî wisa [https://ku.wiktionary.org/w/index.php?title=di%C4%9Fer_yandan&oldid=6333604] kiriye, problemek bi forma madeyan nû heye? Em çawa dikarin vê formê baştir bikin? Yan jî çi were îzah kirin da ku bikaranîn hêsantir be? [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 14:12, 14 tebax 2026 (UTC)
:Merhaba ji te re jî, hin qalib hene nakevin tu forma. An jî ez nizanim. Min jî girêdek hilbijart. Hin qalib hene di paragrafa de hevokan hev û du girê dide; weki ''ote yandan''. Bîya min divê ev qalib jî hebin. Lê ez ne pisporê vê karî me. Hûn dizanin, biryar ya we ye. [[Bikarhêner:Rewiye tine|Rewiye tine]] ([[Gotûbêja bikarhêner:Rewiye tine#top|gotûbêj]]) 15:32, 14 tebax 2026 (UTC)
6pkg4iisj9nomqaysnrljzn0r40rpuu
6333654
6333651
2026-08-14T15:37:11Z
Wikihez
7344
/* WF:Nû */ Bersiv
6333654
wikitext
text/x-wiki
{{xêrhatin}}
== Xêrhatin ==
Merheba bikarhênerê me yê hêja: ''Rewiye tine'',
Bi xêr hatî ferhenga kurdî-kurdî WÎKÎFERHENGê {{=)}}
Em hêvîdar in ku tu jî di avakirina vê ferhengê de alîkariya me bikî.
Eger pirsên te hebin, xêra xwe ji me re binivîse.
Xebatxweş.
:::::: -- [[Bikarhêner:Bikarhêner|Bikarhêner]] ([[Gotûbêja bikarhêner:Bikarhêner|gotûbêj]]) 14:38, 29 çiriya pêşîn 2019 (UTC)
== Bikarhêner:Rewiye tine/Peyvên min yên bêçavkanî û bêwate ==
Silav bira, dikarî vê lîsteyê mezintir bikî, heta ku em Pêvekek ji bo peyvên bêçavkanî çêkin. [[Bikarhêner:Rewiye tine/Peyvên min yên bêçavkanî û bêwate]] Qewet be!--[[Bikarhêner:Balyozxane|Balyozxane]] ([[Gotûbêja bikarhêner:Balyozxane|gotûbêj]]) 17:21, 2 tebax 2020 (UTC)
[[Bikarhêner:Rewiye tine]]Bêguman ez ê zêde bikim. Peyvên xerîb bala min dikişînin:). Zor spas dikim.
== [[Wîkîferheng:Tomarkirina peyvên ji wêjeya kurdî|Jêgirtinekê tomar bike]] ==
Silav. Ji bo peyvên ku wateyên wan tu nizanî, dewsa çêkirina gotaran gelo dikarî li '''[[Wîkîferheng:Tomarkirina peyvên ji wêjeya kurdî|Jêgirtinekê tomar bike]]''' zêde bikî? Bi vî sayî hem ez dikarim kengî wexta min hebe wan kontrol bikim û bi awayekî baştir lê zêde bikim hem jî karê me hêsantir û hindiktir be. Dibe? --[[Bikarhêner:Balyozxane|Balyozxane]] ([[Gotûbêja bikarhêner:Balyozxane|gotûbêj]]) 11:58, 4 îlon 2020 (UTC)
:{{r|Balyozxane}}Merhaba keko. Ji xwe destê min vî avayî hin peyv hebûn xeynî min zêdekirî. Eger peyv binîre tunebe ez lê dernexim wek te got ez ê jorê zêde bikim. Min jî dixesta bi te re vê meseleyê axivim. Gelek baş çebû. Mala te ava.[[Bikarhêner:Rewiye tine|Rewiye tine]] ([[Gotûbêja bikarhêner:Rewiye tine#top|gotûbêj]]) 18:12, 4 îlon 2020 (UTC)
::A te avatir :) Qewet be! --[[Bikarhêner:Balyozxane|Balyozxane]] ([[Gotûbêja bikarhêner:Balyozxane|gotûbêj]]) 18:21, 4 îlon 2020 (UTC)
:::Te got tu yê li jor lê zêde bikî hingê ew [[hela hela kirin]] çi ye {{=D}} --[[Bikarhêner:Balyozxane|Balyozxane]] ([[Gotûbêja bikarhêner:Balyozxane|gotûbêj]]) 18:49, 4 îlon 2020 (UTC)
:::{{r|Balyozxane}} Brako biya min dibe nebe ev peyv biwej e. Ma bihele em jî hinek hela hela bikin :D.<br>Henek dikim. Mesele ji bo '''xwewxe'' qet fikra min tune bû. Min jor zêde kir. Lê hela hela kirin :D<br>ihtimalek mêzin biwêj e biya min. [[Bikarhêner:Rewiye tine|Rewiye tine]] ([[Gotûbêja bikarhêner:Rewiye tine#top|gotûbêj]]) 18:55, 4 îlon 2020 (UTC)
::::Min gotibû hemû peyvên ku maneyên wan tu nizanî lê zêde neke heta em dikarin wateyekê jê re bibînin. Tenê cûreyê peyvê ne bes e. :/ --[[Bikarhêner:Balyozxane|Balyozxane]] ([[Gotûbêja bikarhêner:Balyozxane|gotûbêj]]) 19:02, 4 îlon 2020 (UTC)
{{r|Balyozxane}} Ez dê binêrim balyoz :D. hela hela :D
{{r|Balyozxane}} Keko bi rastî min dixwest karê te hesan bikim. Lê wisa ez kêf nastînim. Ez dînamîk şol dikim. Ez hez sûrat dikim. Ev tişt min disekînîne. Ji xwe nîve kitêb çû. Tu min bibore. Ez ê wek xwe dewam bikim çêtir e. Vî avayî ez xwe pêş dixim. Mesela hin paragraf hene ji xwe mane peyvê diyar e. Lê ewê ecêb ez dê jor parve bikim. Tu çi dibêjî? Binêr piştî te got ez sekînim. Ez her deqqe zêde dikim normalê.[[Bikarhêner:Rewiye tine|Rewiye tine]] ([[Gotûbêja bikarhêner:Rewiye tine#top|gotûbêj]]) 20:47, 4 îlon 2020 (UTC)
:Bira, ez ji bo peyvekê nîv saetek carina saetek çavkaniyan û wateyên cûda digerim. Armanca me '''ne''' çêkirina gelek peyvên bêwate ye loma bila hindik be rindik be :) Tu yê dest ji vî karî bernedî, piştî kitêb xilas bû, ne wisa? :D --[[Bikarhêner:Balyozxane|Balyozxane]] ([[Gotûbêja bikarhêner:Balyozxane|gotûbêj]]) 20:53, 4 îlon 2020 (UTC)
::Tu dîsa şablona jêgirtin/mela bazîdî bi kar bîne. Ez ê dûre stûnên din mîna "navê pirtûkê" û hwd binivîsim. --[[Bikarhêner:Balyozxane|Balyozxane]] ([[Gotûbêja bikarhêner:Balyozxane|gotûbêj]]) 20:55, 4 îlon 2020 (UTC)
{{r|Balyozxane}} Keko heta hetaye ez van dera me. quwet be[[Bikarhêner:Rewiye tine|Rewiye tine]] ([[Gotûbêja bikarhêner:Rewiye tine#top|gotûbêj]]) 08:11, 6 îlon 2020 (UTC)
== frankî ==
Silav, Te li vir [https://ku.wiktionary.org/w/index.php?title=cure&diff=4738684&oldid=4738683] wek frankî lê zêde kiribû lê ew rast e an divê fransî be? Koda fransî <code>fr</code> ye.--[[Bikarhêner:Balyozxane|Balyozxane]] ([[Gotûbêja bikarhêner:Balyozxane|gotûbêj]]) 21:45, 20 çiriya pêşîn 2020 (UTC)
:{{r|Balyozxane}}Baş e. Spas dikim. Min ferq nekirîbû. Min rast kir--[[Bikarhêner:Rewiye tine|Rewiye tine]] ([[Gotûbêja bikarhêner:Rewiye tine#top|gotûbêj]]) 10:57, 21 çiriya pêşîn 2020 (UTC)
::Destxweş! :) --[[Bikarhêner:Balyozxane|Balyozxane]] ([[Gotûbêja bikarhêner:Balyozxane|gotûbêj]]) 14:04, 21 çiriya pêşîn 2020 (UTC)
== Ferhenga Mehmet Bozarslan ==
Bira te ferhenga vî pir cara bi kar tînî, lê ew dibe îxlalê mafê telîfê. Tu dikarî li binê rûpelê de navê ferhengê binivîsî wek çavkanî lê agahiyan ji vê ferhengê rasterast kopî neke jkx. Herwiha min şablona wikipedia sererast kir. --[[Bikarhêner:Balyozxane|Balyozxane]] ([[Gotûbêja bikarhêner:Balyozxane|gotûbêj]]) 22:32, 6 çiriya paşîn 2020 (UTC)
== At last ==
dembaş, keko 'axirkê' bi wateya at least nayê [[Bikarhêner:Keyomerd|Keyomerd]] ([[Gotûbêja bikarhêner:Keyomerd|gotûbêj]]) 10:17, 26 adar 2021 (UTC)
:: {{r|Keyomerd}} merhaba ji te re. 'at last' li vir binêre [[https://www.thekurdishdictionary.com/en/search/english/kurmanci/at%20last]]--[[Bikarhêner:Rewiye tine|Rewiye tine]] ([[Gotûbêja bikarhêner:Rewiye tine#top|gotûbêj]]) 10:29, 26 adar 2021 (UTC)
== Arşîvkirin ==
Silav bira, kodek heye ji bo arşîvkirina rûpelan. Gelek bi kêr tê. Heke dixwazî bi kar bînî pêşî koda li jêr li [[Bikarhêner:Rewiye tine/common.js]] zêde bike
<syntaxhighlight lang="JavaScript">
mw.loader.load('//ku.wiktionary.org/w/index.php?title=Bikarhêner:Balyozxane/Gadget-aWa.js&action=raw&ctype=text/javascript');
</syntaxhighlight>
Dûre koda li vir [[Bikarhêner:Balyozxane/barkirin.css]] li rûpela xwe ya [[Bikarhêner:Rewiye tine/common.css]] kopî bike. Dûre dikarî li vir [[Wîkîferheng:ceribandin/aWa]] biceribînî. [[Bikarhêner:Balyozxane|Balyozxane]] ([[Gotûbêja bikarhêner:Balyozxane|gotûbêj]]) 16:06, 30 adar 2021 (UTC)
== Çima? ==
Silav @[[Bikarhêner:Rewiye tine|Rewiye tine]]. Te çima li hemû rûpelan Ziman "Kurmancî" hilbijart? Ma ev [[التنفس]] ne peyveke erebî ye? Ev [[هەناسەدان]] jî ne soranî ye? --[[Bikarhêner:Balyozxane|Balyozxane]] ([[Gotûbêja bikarhêner:Balyozxane|gotûbêj]]) 20:26, 21 kanûna pêşîn 2023 (UTC)
:xeletî çebûye. [[Bikarhêner:Rewiye tine|Rewiye tine]] ([[Gotûbêja bikarhêner:Rewiye tine#top|gotûbêj]]) 13:37, 22 kanûna pêşîn 2023 (UTC)
== Çawa yî? ==
Merheba bira, tu çawa yî? Tu wekî berê naxebitî êdî. Gelo çi bû? [[Bikarhêner:Balyozxane|Balyozxane]] ([[Gotûbêja bikarhêner:Balyozxane|gotûbêj]]) 21:53, 21 sibat 2024 (UTC)
:Merhaba ji te re jî. Hin projeyê min hene bi wan re mijûlîm. Karê standîsazyon giran bû. Ji min hew hat :D. Nîyeta min heye ferhengek fenî çêbikim. Ji bo vê yêke niha li vir zêdeyî kelîmeyên fenî zêde dikim. [[Bikarhêner:Rewiye tine|Rewiye tine]] ([[Gotûbêja bikarhêner:Rewiye tine#top|gotûbêj]]) 16:59, 22 sibat 2024 (UTC)
::@[[Bikarhêner:Rewiye tine|Rewiye tine]] Bi rastî di destpêkê de diviya me tenê ji bo kelîmeyên nîqaşbar li ferhengan din binêrin lê şûnda wê me ji bo hemû kelîme dinihêrt. Ew jî gelek em westandin. Niha eger ti kes îtîraz neke (jixwe ti kes naxebite) em forma ferhenga rastnivîsînê wekî standard nîşan didin.
::Min ê ji te re bigota komeke me ya aplîkasyonekê heye. Ez û çend hevalên ji Wîkîferhengê tê de ne. Gelo dixwazî beşdar bibî? Em sihbetên gelemper li ser ziman dikin. Eger bixwazî, dikarî ji min re e-maîlekê bişînî. [[Bikarhêner:Balyozxane|Balyozxane]] ([[Gotûbêja bikarhêner:Balyozxane|gotûbêj]]) 19:44, 22 sibat 2024 (UTC)
:::Dibe.Meîl? [[Bikarhêner:Rewiye tine|Rewiye tine]] ([[Gotûbêja bikarhêner:Rewiye tine#top|gotûbêj]]) 18:52, 6 kanûna pêşîn 2024 (UTC)
== [[WF:Nû]] ==
Merheba bira, min fam nekir te çima tiştekî wisa [https://ku.wiktionary.org/w/index.php?title=di%C4%9Fer_yandan&oldid=6333604] kiriye, problemek bi forma madeyan nû heye? Em çawa dikarin vê formê baştir bikin? Yan jî çi were îzah kirin da ku bikaranîn hêsantir be? [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 14:12, 14 tebax 2026 (UTC)
:Merhaba ji te re jî, hin qalib hene nakevin tu forma. An jî ez nizanim. Min jî girêdek hilbijart. Hin qalib hene di paragrafa de hevokan hev û du girê dide; weki ''ote yandan''. Bîya min divê ev qalib jî hebin. Lê ez ne pisporê vê karî me. Hûn dizanin, biryar ya we ye. [[Bikarhêner:Rewiye tine|Rewiye tine]] ([[Gotûbêja bikarhêner:Rewiye tine#top|gotûbêj]]) 15:32, 14 tebax 2026 (UTC)
::Na, ez behsa formata wîkîtekstê dikim. Tu li qismê nimûneyê nivisandiye, li şûna ku li qutiya "Tercimeyên rasterast ên kurmancî..." binivîsî, [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 15:37, 14 tebax 2026 (UTC)
mqatg4g5kcweudlelk2umjewmn6oz8a
6333661
6333654
2026-08-14T15:49:36Z
Rewiye tine
7120
/* WF:Nû */ Bersiv
6333661
wikitext
text/x-wiki
{{xêrhatin}}
== Xêrhatin ==
Merheba bikarhênerê me yê hêja: ''Rewiye tine'',
Bi xêr hatî ferhenga kurdî-kurdî WÎKÎFERHENGê {{=)}}
Em hêvîdar in ku tu jî di avakirina vê ferhengê de alîkariya me bikî.
Eger pirsên te hebin, xêra xwe ji me re binivîse.
Xebatxweş.
:::::: -- [[Bikarhêner:Bikarhêner|Bikarhêner]] ([[Gotûbêja bikarhêner:Bikarhêner|gotûbêj]]) 14:38, 29 çiriya pêşîn 2019 (UTC)
== Bikarhêner:Rewiye tine/Peyvên min yên bêçavkanî û bêwate ==
Silav bira, dikarî vê lîsteyê mezintir bikî, heta ku em Pêvekek ji bo peyvên bêçavkanî çêkin. [[Bikarhêner:Rewiye tine/Peyvên min yên bêçavkanî û bêwate]] Qewet be!--[[Bikarhêner:Balyozxane|Balyozxane]] ([[Gotûbêja bikarhêner:Balyozxane|gotûbêj]]) 17:21, 2 tebax 2020 (UTC)
[[Bikarhêner:Rewiye tine]]Bêguman ez ê zêde bikim. Peyvên xerîb bala min dikişînin:). Zor spas dikim.
== [[Wîkîferheng:Tomarkirina peyvên ji wêjeya kurdî|Jêgirtinekê tomar bike]] ==
Silav. Ji bo peyvên ku wateyên wan tu nizanî, dewsa çêkirina gotaran gelo dikarî li '''[[Wîkîferheng:Tomarkirina peyvên ji wêjeya kurdî|Jêgirtinekê tomar bike]]''' zêde bikî? Bi vî sayî hem ez dikarim kengî wexta min hebe wan kontrol bikim û bi awayekî baştir lê zêde bikim hem jî karê me hêsantir û hindiktir be. Dibe? --[[Bikarhêner:Balyozxane|Balyozxane]] ([[Gotûbêja bikarhêner:Balyozxane|gotûbêj]]) 11:58, 4 îlon 2020 (UTC)
:{{r|Balyozxane}}Merhaba keko. Ji xwe destê min vî avayî hin peyv hebûn xeynî min zêdekirî. Eger peyv binîre tunebe ez lê dernexim wek te got ez ê jorê zêde bikim. Min jî dixesta bi te re vê meseleyê axivim. Gelek baş çebû. Mala te ava.[[Bikarhêner:Rewiye tine|Rewiye tine]] ([[Gotûbêja bikarhêner:Rewiye tine#top|gotûbêj]]) 18:12, 4 îlon 2020 (UTC)
::A te avatir :) Qewet be! --[[Bikarhêner:Balyozxane|Balyozxane]] ([[Gotûbêja bikarhêner:Balyozxane|gotûbêj]]) 18:21, 4 îlon 2020 (UTC)
:::Te got tu yê li jor lê zêde bikî hingê ew [[hela hela kirin]] çi ye {{=D}} --[[Bikarhêner:Balyozxane|Balyozxane]] ([[Gotûbêja bikarhêner:Balyozxane|gotûbêj]]) 18:49, 4 îlon 2020 (UTC)
:::{{r|Balyozxane}} Brako biya min dibe nebe ev peyv biwej e. Ma bihele em jî hinek hela hela bikin :D.<br>Henek dikim. Mesele ji bo '''xwewxe'' qet fikra min tune bû. Min jor zêde kir. Lê hela hela kirin :D<br>ihtimalek mêzin biwêj e biya min. [[Bikarhêner:Rewiye tine|Rewiye tine]] ([[Gotûbêja bikarhêner:Rewiye tine#top|gotûbêj]]) 18:55, 4 îlon 2020 (UTC)
::::Min gotibû hemû peyvên ku maneyên wan tu nizanî lê zêde neke heta em dikarin wateyekê jê re bibînin. Tenê cûreyê peyvê ne bes e. :/ --[[Bikarhêner:Balyozxane|Balyozxane]] ([[Gotûbêja bikarhêner:Balyozxane|gotûbêj]]) 19:02, 4 îlon 2020 (UTC)
{{r|Balyozxane}} Ez dê binêrim balyoz :D. hela hela :D
{{r|Balyozxane}} Keko bi rastî min dixwest karê te hesan bikim. Lê wisa ez kêf nastînim. Ez dînamîk şol dikim. Ez hez sûrat dikim. Ev tişt min disekînîne. Ji xwe nîve kitêb çû. Tu min bibore. Ez ê wek xwe dewam bikim çêtir e. Vî avayî ez xwe pêş dixim. Mesela hin paragraf hene ji xwe mane peyvê diyar e. Lê ewê ecêb ez dê jor parve bikim. Tu çi dibêjî? Binêr piştî te got ez sekînim. Ez her deqqe zêde dikim normalê.[[Bikarhêner:Rewiye tine|Rewiye tine]] ([[Gotûbêja bikarhêner:Rewiye tine#top|gotûbêj]]) 20:47, 4 îlon 2020 (UTC)
:Bira, ez ji bo peyvekê nîv saetek carina saetek çavkaniyan û wateyên cûda digerim. Armanca me '''ne''' çêkirina gelek peyvên bêwate ye loma bila hindik be rindik be :) Tu yê dest ji vî karî bernedî, piştî kitêb xilas bû, ne wisa? :D --[[Bikarhêner:Balyozxane|Balyozxane]] ([[Gotûbêja bikarhêner:Balyozxane|gotûbêj]]) 20:53, 4 îlon 2020 (UTC)
::Tu dîsa şablona jêgirtin/mela bazîdî bi kar bîne. Ez ê dûre stûnên din mîna "navê pirtûkê" û hwd binivîsim. --[[Bikarhêner:Balyozxane|Balyozxane]] ([[Gotûbêja bikarhêner:Balyozxane|gotûbêj]]) 20:55, 4 îlon 2020 (UTC)
{{r|Balyozxane}} Keko heta hetaye ez van dera me. quwet be[[Bikarhêner:Rewiye tine|Rewiye tine]] ([[Gotûbêja bikarhêner:Rewiye tine#top|gotûbêj]]) 08:11, 6 îlon 2020 (UTC)
== frankî ==
Silav, Te li vir [https://ku.wiktionary.org/w/index.php?title=cure&diff=4738684&oldid=4738683] wek frankî lê zêde kiribû lê ew rast e an divê fransî be? Koda fransî <code>fr</code> ye.--[[Bikarhêner:Balyozxane|Balyozxane]] ([[Gotûbêja bikarhêner:Balyozxane|gotûbêj]]) 21:45, 20 çiriya pêşîn 2020 (UTC)
:{{r|Balyozxane}}Baş e. Spas dikim. Min ferq nekirîbû. Min rast kir--[[Bikarhêner:Rewiye tine|Rewiye tine]] ([[Gotûbêja bikarhêner:Rewiye tine#top|gotûbêj]]) 10:57, 21 çiriya pêşîn 2020 (UTC)
::Destxweş! :) --[[Bikarhêner:Balyozxane|Balyozxane]] ([[Gotûbêja bikarhêner:Balyozxane|gotûbêj]]) 14:04, 21 çiriya pêşîn 2020 (UTC)
== Ferhenga Mehmet Bozarslan ==
Bira te ferhenga vî pir cara bi kar tînî, lê ew dibe îxlalê mafê telîfê. Tu dikarî li binê rûpelê de navê ferhengê binivîsî wek çavkanî lê agahiyan ji vê ferhengê rasterast kopî neke jkx. Herwiha min şablona wikipedia sererast kir. --[[Bikarhêner:Balyozxane|Balyozxane]] ([[Gotûbêja bikarhêner:Balyozxane|gotûbêj]]) 22:32, 6 çiriya paşîn 2020 (UTC)
== At last ==
dembaş, keko 'axirkê' bi wateya at least nayê [[Bikarhêner:Keyomerd|Keyomerd]] ([[Gotûbêja bikarhêner:Keyomerd|gotûbêj]]) 10:17, 26 adar 2021 (UTC)
:: {{r|Keyomerd}} merhaba ji te re. 'at last' li vir binêre [[https://www.thekurdishdictionary.com/en/search/english/kurmanci/at%20last]]--[[Bikarhêner:Rewiye tine|Rewiye tine]] ([[Gotûbêja bikarhêner:Rewiye tine#top|gotûbêj]]) 10:29, 26 adar 2021 (UTC)
== Arşîvkirin ==
Silav bira, kodek heye ji bo arşîvkirina rûpelan. Gelek bi kêr tê. Heke dixwazî bi kar bînî pêşî koda li jêr li [[Bikarhêner:Rewiye tine/common.js]] zêde bike
<syntaxhighlight lang="JavaScript">
mw.loader.load('//ku.wiktionary.org/w/index.php?title=Bikarhêner:Balyozxane/Gadget-aWa.js&action=raw&ctype=text/javascript');
</syntaxhighlight>
Dûre koda li vir [[Bikarhêner:Balyozxane/barkirin.css]] li rûpela xwe ya [[Bikarhêner:Rewiye tine/common.css]] kopî bike. Dûre dikarî li vir [[Wîkîferheng:ceribandin/aWa]] biceribînî. [[Bikarhêner:Balyozxane|Balyozxane]] ([[Gotûbêja bikarhêner:Balyozxane|gotûbêj]]) 16:06, 30 adar 2021 (UTC)
== Çima? ==
Silav @[[Bikarhêner:Rewiye tine|Rewiye tine]]. Te çima li hemû rûpelan Ziman "Kurmancî" hilbijart? Ma ev [[التنفس]] ne peyveke erebî ye? Ev [[هەناسەدان]] jî ne soranî ye? --[[Bikarhêner:Balyozxane|Balyozxane]] ([[Gotûbêja bikarhêner:Balyozxane|gotûbêj]]) 20:26, 21 kanûna pêşîn 2023 (UTC)
:xeletî çebûye. [[Bikarhêner:Rewiye tine|Rewiye tine]] ([[Gotûbêja bikarhêner:Rewiye tine#top|gotûbêj]]) 13:37, 22 kanûna pêşîn 2023 (UTC)
== Çawa yî? ==
Merheba bira, tu çawa yî? Tu wekî berê naxebitî êdî. Gelo çi bû? [[Bikarhêner:Balyozxane|Balyozxane]] ([[Gotûbêja bikarhêner:Balyozxane|gotûbêj]]) 21:53, 21 sibat 2024 (UTC)
:Merhaba ji te re jî. Hin projeyê min hene bi wan re mijûlîm. Karê standîsazyon giran bû. Ji min hew hat :D. Nîyeta min heye ferhengek fenî çêbikim. Ji bo vê yêke niha li vir zêdeyî kelîmeyên fenî zêde dikim. [[Bikarhêner:Rewiye tine|Rewiye tine]] ([[Gotûbêja bikarhêner:Rewiye tine#top|gotûbêj]]) 16:59, 22 sibat 2024 (UTC)
::@[[Bikarhêner:Rewiye tine|Rewiye tine]] Bi rastî di destpêkê de diviya me tenê ji bo kelîmeyên nîqaşbar li ferhengan din binêrin lê şûnda wê me ji bo hemû kelîme dinihêrt. Ew jî gelek em westandin. Niha eger ti kes îtîraz neke (jixwe ti kes naxebite) em forma ferhenga rastnivîsînê wekî standard nîşan didin.
::Min ê ji te re bigota komeke me ya aplîkasyonekê heye. Ez û çend hevalên ji Wîkîferhengê tê de ne. Gelo dixwazî beşdar bibî? Em sihbetên gelemper li ser ziman dikin. Eger bixwazî, dikarî ji min re e-maîlekê bişînî. [[Bikarhêner:Balyozxane|Balyozxane]] ([[Gotûbêja bikarhêner:Balyozxane|gotûbêj]]) 19:44, 22 sibat 2024 (UTC)
:::Dibe.Meîl? [[Bikarhêner:Rewiye tine|Rewiye tine]] ([[Gotûbêja bikarhêner:Rewiye tine#top|gotûbêj]]) 18:52, 6 kanûna pêşîn 2024 (UTC)
== [[WF:Nû]] ==
Merheba bira, min fam nekir te çima tiştekî wisa [https://ku.wiktionary.org/w/index.php?title=di%C4%9Fer_yandan&oldid=6333604] kiriye, problemek bi forma madeyan nû heye? Em çawa dikarin vê formê baştir bikin? Yan jî çi were îzah kirin da ku bikaranîn hêsantir be? [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 14:12, 14 tebax 2026 (UTC)
:Merhaba ji te re jî, hin qalib hene nakevin tu forma. An jî ez nizanim. Min jî girêdek hilbijart. Hin qalib hene di paragrafa de hevokan hev û du girê dide; weki ''ote yandan''. Bîya min divê ev qalib jî hebin. Lê ez ne pisporê vê karî me. Hûn dizanin, biryar ya we ye. [[Bikarhêner:Rewiye tine|Rewiye tine]] ([[Gotûbêja bikarhêner:Rewiye tine#top|gotûbêj]]) 15:32, 14 tebax 2026 (UTC)
::Na, ez behsa formata wîkîtekstê dikim. Tu li qismê nimûneyê nivisandiye, li şûna ku li qutiya "Tercimeyên rasterast ên kurmancî..." binivîsî, [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 15:37, 14 tebax 2026 (UTC)
:::Keko bi rastî min fam nekir. Bibore. Lê ji bo ku peyv tirkî bû min zêde li ser nesekînî. Peyv kurdî bûya heya ji min bihata min rind çêkira. [[Bikarhêner:Rewiye tine|Rewiye tine]] ([[Gotûbêja bikarhêner:Rewiye tine#top|gotûbêj]]) 15:49, 14 tebax 2026 (UTC)
4vpp7mfgo5wj3ikmac6mb13ak61bah6
6333662
6333661
2026-08-14T16:00:59Z
Wikihez
7344
/* WF:Nû */ Bersiv
6333662
wikitext
text/x-wiki
{{xêrhatin}}
== Xêrhatin ==
Merheba bikarhênerê me yê hêja: ''Rewiye tine'',
Bi xêr hatî ferhenga kurdî-kurdî WÎKÎFERHENGê {{=)}}
Em hêvîdar in ku tu jî di avakirina vê ferhengê de alîkariya me bikî.
Eger pirsên te hebin, xêra xwe ji me re binivîse.
Xebatxweş.
:::::: -- [[Bikarhêner:Bikarhêner|Bikarhêner]] ([[Gotûbêja bikarhêner:Bikarhêner|gotûbêj]]) 14:38, 29 çiriya pêşîn 2019 (UTC)
== Bikarhêner:Rewiye tine/Peyvên min yên bêçavkanî û bêwate ==
Silav bira, dikarî vê lîsteyê mezintir bikî, heta ku em Pêvekek ji bo peyvên bêçavkanî çêkin. [[Bikarhêner:Rewiye tine/Peyvên min yên bêçavkanî û bêwate]] Qewet be!--[[Bikarhêner:Balyozxane|Balyozxane]] ([[Gotûbêja bikarhêner:Balyozxane|gotûbêj]]) 17:21, 2 tebax 2020 (UTC)
[[Bikarhêner:Rewiye tine]]Bêguman ez ê zêde bikim. Peyvên xerîb bala min dikişînin:). Zor spas dikim.
== [[Wîkîferheng:Tomarkirina peyvên ji wêjeya kurdî|Jêgirtinekê tomar bike]] ==
Silav. Ji bo peyvên ku wateyên wan tu nizanî, dewsa çêkirina gotaran gelo dikarî li '''[[Wîkîferheng:Tomarkirina peyvên ji wêjeya kurdî|Jêgirtinekê tomar bike]]''' zêde bikî? Bi vî sayî hem ez dikarim kengî wexta min hebe wan kontrol bikim û bi awayekî baştir lê zêde bikim hem jî karê me hêsantir û hindiktir be. Dibe? --[[Bikarhêner:Balyozxane|Balyozxane]] ([[Gotûbêja bikarhêner:Balyozxane|gotûbêj]]) 11:58, 4 îlon 2020 (UTC)
:{{r|Balyozxane}}Merhaba keko. Ji xwe destê min vî avayî hin peyv hebûn xeynî min zêdekirî. Eger peyv binîre tunebe ez lê dernexim wek te got ez ê jorê zêde bikim. Min jî dixesta bi te re vê meseleyê axivim. Gelek baş çebû. Mala te ava.[[Bikarhêner:Rewiye tine|Rewiye tine]] ([[Gotûbêja bikarhêner:Rewiye tine#top|gotûbêj]]) 18:12, 4 îlon 2020 (UTC)
::A te avatir :) Qewet be! --[[Bikarhêner:Balyozxane|Balyozxane]] ([[Gotûbêja bikarhêner:Balyozxane|gotûbêj]]) 18:21, 4 îlon 2020 (UTC)
:::Te got tu yê li jor lê zêde bikî hingê ew [[hela hela kirin]] çi ye {{=D}} --[[Bikarhêner:Balyozxane|Balyozxane]] ([[Gotûbêja bikarhêner:Balyozxane|gotûbêj]]) 18:49, 4 îlon 2020 (UTC)
:::{{r|Balyozxane}} Brako biya min dibe nebe ev peyv biwej e. Ma bihele em jî hinek hela hela bikin :D.<br>Henek dikim. Mesele ji bo '''xwewxe'' qet fikra min tune bû. Min jor zêde kir. Lê hela hela kirin :D<br>ihtimalek mêzin biwêj e biya min. [[Bikarhêner:Rewiye tine|Rewiye tine]] ([[Gotûbêja bikarhêner:Rewiye tine#top|gotûbêj]]) 18:55, 4 îlon 2020 (UTC)
::::Min gotibû hemû peyvên ku maneyên wan tu nizanî lê zêde neke heta em dikarin wateyekê jê re bibînin. Tenê cûreyê peyvê ne bes e. :/ --[[Bikarhêner:Balyozxane|Balyozxane]] ([[Gotûbêja bikarhêner:Balyozxane|gotûbêj]]) 19:02, 4 îlon 2020 (UTC)
{{r|Balyozxane}} Ez dê binêrim balyoz :D. hela hela :D
{{r|Balyozxane}} Keko bi rastî min dixwest karê te hesan bikim. Lê wisa ez kêf nastînim. Ez dînamîk şol dikim. Ez hez sûrat dikim. Ev tişt min disekînîne. Ji xwe nîve kitêb çû. Tu min bibore. Ez ê wek xwe dewam bikim çêtir e. Vî avayî ez xwe pêş dixim. Mesela hin paragraf hene ji xwe mane peyvê diyar e. Lê ewê ecêb ez dê jor parve bikim. Tu çi dibêjî? Binêr piştî te got ez sekînim. Ez her deqqe zêde dikim normalê.[[Bikarhêner:Rewiye tine|Rewiye tine]] ([[Gotûbêja bikarhêner:Rewiye tine#top|gotûbêj]]) 20:47, 4 îlon 2020 (UTC)
:Bira, ez ji bo peyvekê nîv saetek carina saetek çavkaniyan û wateyên cûda digerim. Armanca me '''ne''' çêkirina gelek peyvên bêwate ye loma bila hindik be rindik be :) Tu yê dest ji vî karî bernedî, piştî kitêb xilas bû, ne wisa? :D --[[Bikarhêner:Balyozxane|Balyozxane]] ([[Gotûbêja bikarhêner:Balyozxane|gotûbêj]]) 20:53, 4 îlon 2020 (UTC)
::Tu dîsa şablona jêgirtin/mela bazîdî bi kar bîne. Ez ê dûre stûnên din mîna "navê pirtûkê" û hwd binivîsim. --[[Bikarhêner:Balyozxane|Balyozxane]] ([[Gotûbêja bikarhêner:Balyozxane|gotûbêj]]) 20:55, 4 îlon 2020 (UTC)
{{r|Balyozxane}} Keko heta hetaye ez van dera me. quwet be[[Bikarhêner:Rewiye tine|Rewiye tine]] ([[Gotûbêja bikarhêner:Rewiye tine#top|gotûbêj]]) 08:11, 6 îlon 2020 (UTC)
== frankî ==
Silav, Te li vir [https://ku.wiktionary.org/w/index.php?title=cure&diff=4738684&oldid=4738683] wek frankî lê zêde kiribû lê ew rast e an divê fransî be? Koda fransî <code>fr</code> ye.--[[Bikarhêner:Balyozxane|Balyozxane]] ([[Gotûbêja bikarhêner:Balyozxane|gotûbêj]]) 21:45, 20 çiriya pêşîn 2020 (UTC)
:{{r|Balyozxane}}Baş e. Spas dikim. Min ferq nekirîbû. Min rast kir--[[Bikarhêner:Rewiye tine|Rewiye tine]] ([[Gotûbêja bikarhêner:Rewiye tine#top|gotûbêj]]) 10:57, 21 çiriya pêşîn 2020 (UTC)
::Destxweş! :) --[[Bikarhêner:Balyozxane|Balyozxane]] ([[Gotûbêja bikarhêner:Balyozxane|gotûbêj]]) 14:04, 21 çiriya pêşîn 2020 (UTC)
== Ferhenga Mehmet Bozarslan ==
Bira te ferhenga vî pir cara bi kar tînî, lê ew dibe îxlalê mafê telîfê. Tu dikarî li binê rûpelê de navê ferhengê binivîsî wek çavkanî lê agahiyan ji vê ferhengê rasterast kopî neke jkx. Herwiha min şablona wikipedia sererast kir. --[[Bikarhêner:Balyozxane|Balyozxane]] ([[Gotûbêja bikarhêner:Balyozxane|gotûbêj]]) 22:32, 6 çiriya paşîn 2020 (UTC)
== At last ==
dembaş, keko 'axirkê' bi wateya at least nayê [[Bikarhêner:Keyomerd|Keyomerd]] ([[Gotûbêja bikarhêner:Keyomerd|gotûbêj]]) 10:17, 26 adar 2021 (UTC)
:: {{r|Keyomerd}} merhaba ji te re. 'at last' li vir binêre [[https://www.thekurdishdictionary.com/en/search/english/kurmanci/at%20last]]--[[Bikarhêner:Rewiye tine|Rewiye tine]] ([[Gotûbêja bikarhêner:Rewiye tine#top|gotûbêj]]) 10:29, 26 adar 2021 (UTC)
== Arşîvkirin ==
Silav bira, kodek heye ji bo arşîvkirina rûpelan. Gelek bi kêr tê. Heke dixwazî bi kar bînî pêşî koda li jêr li [[Bikarhêner:Rewiye tine/common.js]] zêde bike
<syntaxhighlight lang="JavaScript">
mw.loader.load('//ku.wiktionary.org/w/index.php?title=Bikarhêner:Balyozxane/Gadget-aWa.js&action=raw&ctype=text/javascript');
</syntaxhighlight>
Dûre koda li vir [[Bikarhêner:Balyozxane/barkirin.css]] li rûpela xwe ya [[Bikarhêner:Rewiye tine/common.css]] kopî bike. Dûre dikarî li vir [[Wîkîferheng:ceribandin/aWa]] biceribînî. [[Bikarhêner:Balyozxane|Balyozxane]] ([[Gotûbêja bikarhêner:Balyozxane|gotûbêj]]) 16:06, 30 adar 2021 (UTC)
== Çima? ==
Silav @[[Bikarhêner:Rewiye tine|Rewiye tine]]. Te çima li hemû rûpelan Ziman "Kurmancî" hilbijart? Ma ev [[التنفس]] ne peyveke erebî ye? Ev [[هەناسەدان]] jî ne soranî ye? --[[Bikarhêner:Balyozxane|Balyozxane]] ([[Gotûbêja bikarhêner:Balyozxane|gotûbêj]]) 20:26, 21 kanûna pêşîn 2023 (UTC)
:xeletî çebûye. [[Bikarhêner:Rewiye tine|Rewiye tine]] ([[Gotûbêja bikarhêner:Rewiye tine#top|gotûbêj]]) 13:37, 22 kanûna pêşîn 2023 (UTC)
== Çawa yî? ==
Merheba bira, tu çawa yî? Tu wekî berê naxebitî êdî. Gelo çi bû? [[Bikarhêner:Balyozxane|Balyozxane]] ([[Gotûbêja bikarhêner:Balyozxane|gotûbêj]]) 21:53, 21 sibat 2024 (UTC)
:Merhaba ji te re jî. Hin projeyê min hene bi wan re mijûlîm. Karê standîsazyon giran bû. Ji min hew hat :D. Nîyeta min heye ferhengek fenî çêbikim. Ji bo vê yêke niha li vir zêdeyî kelîmeyên fenî zêde dikim. [[Bikarhêner:Rewiye tine|Rewiye tine]] ([[Gotûbêja bikarhêner:Rewiye tine#top|gotûbêj]]) 16:59, 22 sibat 2024 (UTC)
::@[[Bikarhêner:Rewiye tine|Rewiye tine]] Bi rastî di destpêkê de diviya me tenê ji bo kelîmeyên nîqaşbar li ferhengan din binêrin lê şûnda wê me ji bo hemû kelîme dinihêrt. Ew jî gelek em westandin. Niha eger ti kes îtîraz neke (jixwe ti kes naxebite) em forma ferhenga rastnivîsînê wekî standard nîşan didin.
::Min ê ji te re bigota komeke me ya aplîkasyonekê heye. Ez û çend hevalên ji Wîkîferhengê tê de ne. Gelo dixwazî beşdar bibî? Em sihbetên gelemper li ser ziman dikin. Eger bixwazî, dikarî ji min re e-maîlekê bişînî. [[Bikarhêner:Balyozxane|Balyozxane]] ([[Gotûbêja bikarhêner:Balyozxane|gotûbêj]]) 19:44, 22 sibat 2024 (UTC)
:::Dibe.Meîl? [[Bikarhêner:Rewiye tine|Rewiye tine]] ([[Gotûbêja bikarhêner:Rewiye tine#top|gotûbêj]]) 18:52, 6 kanûna pêşîn 2024 (UTC)
== [[WF:Nû]] ==
Merheba bira, min fam nekir te çima tiştekî wisa [https://ku.wiktionary.org/w/index.php?title=di%C4%9Fer_yandan&oldid=6333604] kiriye, problemek bi forma madeyan nû heye? Em çawa dikarin vê formê baştir bikin? Yan jî çi were îzah kirin da ku bikaranîn hêsantir be? [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 14:12, 14 tebax 2026 (UTC)
:Merhaba ji te re jî, hin qalib hene nakevin tu forma. An jî ez nizanim. Min jî girêdek hilbijart. Hin qalib hene di paragrafa de hevokan hev û du girê dide; weki ''ote yandan''. Bîya min divê ev qalib jî hebin. Lê ez ne pisporê vê karî me. Hûn dizanin, biryar ya we ye. [[Bikarhêner:Rewiye tine|Rewiye tine]] ([[Gotûbêja bikarhêner:Rewiye tine#top|gotûbêj]]) 15:32, 14 tebax 2026 (UTC)
::Na, ez behsa formata wîkîtekstê dikim. Tu li qismê nimûneyê nivisandiye, li şûna ku li qutiya "Tercimeyên rasterast ên kurmancî..." binivîsî, [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 15:37, 14 tebax 2026 (UTC)
:::Keko bi rastî min fam nekir. Bibore. Lê ji bo ku peyv tirkî bû min zêde li ser nesekînî. Peyv kurdî bûya heya ji min bihata min rind çêkira. [[Bikarhêner:Rewiye tine|Rewiye tine]] ([[Gotûbêja bikarhêner:Rewiye tine#top|gotûbêj]]) 15:49, 14 tebax 2026 (UTC)
::::Yaw bira, Wextê sayfeyekî nû çêdikî, formek tê li pêşberî te. Ziman û dûre Cureyê rêzimanî hildibijêrî, ez dibêjim em çawa dikarin vê formê baştir bikin. Fikrên te hene? Tu li şûna ku formê bi kar bînî, rasterast diçî ser "Edîtorê". Min gelek li ser çêkirina vê "formê" xebitiye. Dixwazim însanên din jî bi hêsanî bi kar bînin. Tiştekî heye ku em dikarin rast bikin? Yan jî îlawe bikin? [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:00, 14 tebax 2026 (UTC)
drq47e5y4ldf4oixw4uho7ulgt7wcs3
6333675
6333662
2026-08-14T16:36:21Z
Rewiye tine
7120
/* WF:Nû */ Bersiv
6333675
wikitext
text/x-wiki
{{xêrhatin}}
== Xêrhatin ==
Merheba bikarhênerê me yê hêja: ''Rewiye tine'',
Bi xêr hatî ferhenga kurdî-kurdî WÎKÎFERHENGê {{=)}}
Em hêvîdar in ku tu jî di avakirina vê ferhengê de alîkariya me bikî.
Eger pirsên te hebin, xêra xwe ji me re binivîse.
Xebatxweş.
:::::: -- [[Bikarhêner:Bikarhêner|Bikarhêner]] ([[Gotûbêja bikarhêner:Bikarhêner|gotûbêj]]) 14:38, 29 çiriya pêşîn 2019 (UTC)
== Bikarhêner:Rewiye tine/Peyvên min yên bêçavkanî û bêwate ==
Silav bira, dikarî vê lîsteyê mezintir bikî, heta ku em Pêvekek ji bo peyvên bêçavkanî çêkin. [[Bikarhêner:Rewiye tine/Peyvên min yên bêçavkanî û bêwate]] Qewet be!--[[Bikarhêner:Balyozxane|Balyozxane]] ([[Gotûbêja bikarhêner:Balyozxane|gotûbêj]]) 17:21, 2 tebax 2020 (UTC)
[[Bikarhêner:Rewiye tine]]Bêguman ez ê zêde bikim. Peyvên xerîb bala min dikişînin:). Zor spas dikim.
== [[Wîkîferheng:Tomarkirina peyvên ji wêjeya kurdî|Jêgirtinekê tomar bike]] ==
Silav. Ji bo peyvên ku wateyên wan tu nizanî, dewsa çêkirina gotaran gelo dikarî li '''[[Wîkîferheng:Tomarkirina peyvên ji wêjeya kurdî|Jêgirtinekê tomar bike]]''' zêde bikî? Bi vî sayî hem ez dikarim kengî wexta min hebe wan kontrol bikim û bi awayekî baştir lê zêde bikim hem jî karê me hêsantir û hindiktir be. Dibe? --[[Bikarhêner:Balyozxane|Balyozxane]] ([[Gotûbêja bikarhêner:Balyozxane|gotûbêj]]) 11:58, 4 îlon 2020 (UTC)
:{{r|Balyozxane}}Merhaba keko. Ji xwe destê min vî avayî hin peyv hebûn xeynî min zêdekirî. Eger peyv binîre tunebe ez lê dernexim wek te got ez ê jorê zêde bikim. Min jî dixesta bi te re vê meseleyê axivim. Gelek baş çebû. Mala te ava.[[Bikarhêner:Rewiye tine|Rewiye tine]] ([[Gotûbêja bikarhêner:Rewiye tine#top|gotûbêj]]) 18:12, 4 îlon 2020 (UTC)
::A te avatir :) Qewet be! --[[Bikarhêner:Balyozxane|Balyozxane]] ([[Gotûbêja bikarhêner:Balyozxane|gotûbêj]]) 18:21, 4 îlon 2020 (UTC)
:::Te got tu yê li jor lê zêde bikî hingê ew [[hela hela kirin]] çi ye {{=D}} --[[Bikarhêner:Balyozxane|Balyozxane]] ([[Gotûbêja bikarhêner:Balyozxane|gotûbêj]]) 18:49, 4 îlon 2020 (UTC)
:::{{r|Balyozxane}} Brako biya min dibe nebe ev peyv biwej e. Ma bihele em jî hinek hela hela bikin :D.<br>Henek dikim. Mesele ji bo '''xwewxe'' qet fikra min tune bû. Min jor zêde kir. Lê hela hela kirin :D<br>ihtimalek mêzin biwêj e biya min. [[Bikarhêner:Rewiye tine|Rewiye tine]] ([[Gotûbêja bikarhêner:Rewiye tine#top|gotûbêj]]) 18:55, 4 îlon 2020 (UTC)
::::Min gotibû hemû peyvên ku maneyên wan tu nizanî lê zêde neke heta em dikarin wateyekê jê re bibînin. Tenê cûreyê peyvê ne bes e. :/ --[[Bikarhêner:Balyozxane|Balyozxane]] ([[Gotûbêja bikarhêner:Balyozxane|gotûbêj]]) 19:02, 4 îlon 2020 (UTC)
{{r|Balyozxane}} Ez dê binêrim balyoz :D. hela hela :D
{{r|Balyozxane}} Keko bi rastî min dixwest karê te hesan bikim. Lê wisa ez kêf nastînim. Ez dînamîk şol dikim. Ez hez sûrat dikim. Ev tişt min disekînîne. Ji xwe nîve kitêb çû. Tu min bibore. Ez ê wek xwe dewam bikim çêtir e. Vî avayî ez xwe pêş dixim. Mesela hin paragraf hene ji xwe mane peyvê diyar e. Lê ewê ecêb ez dê jor parve bikim. Tu çi dibêjî? Binêr piştî te got ez sekînim. Ez her deqqe zêde dikim normalê.[[Bikarhêner:Rewiye tine|Rewiye tine]] ([[Gotûbêja bikarhêner:Rewiye tine#top|gotûbêj]]) 20:47, 4 îlon 2020 (UTC)
:Bira, ez ji bo peyvekê nîv saetek carina saetek çavkaniyan û wateyên cûda digerim. Armanca me '''ne''' çêkirina gelek peyvên bêwate ye loma bila hindik be rindik be :) Tu yê dest ji vî karî bernedî, piştî kitêb xilas bû, ne wisa? :D --[[Bikarhêner:Balyozxane|Balyozxane]] ([[Gotûbêja bikarhêner:Balyozxane|gotûbêj]]) 20:53, 4 îlon 2020 (UTC)
::Tu dîsa şablona jêgirtin/mela bazîdî bi kar bîne. Ez ê dûre stûnên din mîna "navê pirtûkê" û hwd binivîsim. --[[Bikarhêner:Balyozxane|Balyozxane]] ([[Gotûbêja bikarhêner:Balyozxane|gotûbêj]]) 20:55, 4 îlon 2020 (UTC)
{{r|Balyozxane}} Keko heta hetaye ez van dera me. quwet be[[Bikarhêner:Rewiye tine|Rewiye tine]] ([[Gotûbêja bikarhêner:Rewiye tine#top|gotûbêj]]) 08:11, 6 îlon 2020 (UTC)
== frankî ==
Silav, Te li vir [https://ku.wiktionary.org/w/index.php?title=cure&diff=4738684&oldid=4738683] wek frankî lê zêde kiribû lê ew rast e an divê fransî be? Koda fransî <code>fr</code> ye.--[[Bikarhêner:Balyozxane|Balyozxane]] ([[Gotûbêja bikarhêner:Balyozxane|gotûbêj]]) 21:45, 20 çiriya pêşîn 2020 (UTC)
:{{r|Balyozxane}}Baş e. Spas dikim. Min ferq nekirîbû. Min rast kir--[[Bikarhêner:Rewiye tine|Rewiye tine]] ([[Gotûbêja bikarhêner:Rewiye tine#top|gotûbêj]]) 10:57, 21 çiriya pêşîn 2020 (UTC)
::Destxweş! :) --[[Bikarhêner:Balyozxane|Balyozxane]] ([[Gotûbêja bikarhêner:Balyozxane|gotûbêj]]) 14:04, 21 çiriya pêşîn 2020 (UTC)
== Ferhenga Mehmet Bozarslan ==
Bira te ferhenga vî pir cara bi kar tînî, lê ew dibe îxlalê mafê telîfê. Tu dikarî li binê rûpelê de navê ferhengê binivîsî wek çavkanî lê agahiyan ji vê ferhengê rasterast kopî neke jkx. Herwiha min şablona wikipedia sererast kir. --[[Bikarhêner:Balyozxane|Balyozxane]] ([[Gotûbêja bikarhêner:Balyozxane|gotûbêj]]) 22:32, 6 çiriya paşîn 2020 (UTC)
== At last ==
dembaş, keko 'axirkê' bi wateya at least nayê [[Bikarhêner:Keyomerd|Keyomerd]] ([[Gotûbêja bikarhêner:Keyomerd|gotûbêj]]) 10:17, 26 adar 2021 (UTC)
:: {{r|Keyomerd}} merhaba ji te re. 'at last' li vir binêre [[https://www.thekurdishdictionary.com/en/search/english/kurmanci/at%20last]]--[[Bikarhêner:Rewiye tine|Rewiye tine]] ([[Gotûbêja bikarhêner:Rewiye tine#top|gotûbêj]]) 10:29, 26 adar 2021 (UTC)
== Arşîvkirin ==
Silav bira, kodek heye ji bo arşîvkirina rûpelan. Gelek bi kêr tê. Heke dixwazî bi kar bînî pêşî koda li jêr li [[Bikarhêner:Rewiye tine/common.js]] zêde bike
<syntaxhighlight lang="JavaScript">
mw.loader.load('//ku.wiktionary.org/w/index.php?title=Bikarhêner:Balyozxane/Gadget-aWa.js&action=raw&ctype=text/javascript');
</syntaxhighlight>
Dûre koda li vir [[Bikarhêner:Balyozxane/barkirin.css]] li rûpela xwe ya [[Bikarhêner:Rewiye tine/common.css]] kopî bike. Dûre dikarî li vir [[Wîkîferheng:ceribandin/aWa]] biceribînî. [[Bikarhêner:Balyozxane|Balyozxane]] ([[Gotûbêja bikarhêner:Balyozxane|gotûbêj]]) 16:06, 30 adar 2021 (UTC)
== Çima? ==
Silav @[[Bikarhêner:Rewiye tine|Rewiye tine]]. Te çima li hemû rûpelan Ziman "Kurmancî" hilbijart? Ma ev [[التنفس]] ne peyveke erebî ye? Ev [[هەناسەدان]] jî ne soranî ye? --[[Bikarhêner:Balyozxane|Balyozxane]] ([[Gotûbêja bikarhêner:Balyozxane|gotûbêj]]) 20:26, 21 kanûna pêşîn 2023 (UTC)
:xeletî çebûye. [[Bikarhêner:Rewiye tine|Rewiye tine]] ([[Gotûbêja bikarhêner:Rewiye tine#top|gotûbêj]]) 13:37, 22 kanûna pêşîn 2023 (UTC)
== Çawa yî? ==
Merheba bira, tu çawa yî? Tu wekî berê naxebitî êdî. Gelo çi bû? [[Bikarhêner:Balyozxane|Balyozxane]] ([[Gotûbêja bikarhêner:Balyozxane|gotûbêj]]) 21:53, 21 sibat 2024 (UTC)
:Merhaba ji te re jî. Hin projeyê min hene bi wan re mijûlîm. Karê standîsazyon giran bû. Ji min hew hat :D. Nîyeta min heye ferhengek fenî çêbikim. Ji bo vê yêke niha li vir zêdeyî kelîmeyên fenî zêde dikim. [[Bikarhêner:Rewiye tine|Rewiye tine]] ([[Gotûbêja bikarhêner:Rewiye tine#top|gotûbêj]]) 16:59, 22 sibat 2024 (UTC)
::@[[Bikarhêner:Rewiye tine|Rewiye tine]] Bi rastî di destpêkê de diviya me tenê ji bo kelîmeyên nîqaşbar li ferhengan din binêrin lê şûnda wê me ji bo hemû kelîme dinihêrt. Ew jî gelek em westandin. Niha eger ti kes îtîraz neke (jixwe ti kes naxebite) em forma ferhenga rastnivîsînê wekî standard nîşan didin.
::Min ê ji te re bigota komeke me ya aplîkasyonekê heye. Ez û çend hevalên ji Wîkîferhengê tê de ne. Gelo dixwazî beşdar bibî? Em sihbetên gelemper li ser ziman dikin. Eger bixwazî, dikarî ji min re e-maîlekê bişînî. [[Bikarhêner:Balyozxane|Balyozxane]] ([[Gotûbêja bikarhêner:Balyozxane|gotûbêj]]) 19:44, 22 sibat 2024 (UTC)
:::Dibe.Meîl? [[Bikarhêner:Rewiye tine|Rewiye tine]] ([[Gotûbêja bikarhêner:Rewiye tine#top|gotûbêj]]) 18:52, 6 kanûna pêşîn 2024 (UTC)
== [[WF:Nû]] ==
Merheba bira, min fam nekir te çima tiştekî wisa [https://ku.wiktionary.org/w/index.php?title=di%C4%9Fer_yandan&oldid=6333604] kiriye, problemek bi forma madeyan nû heye? Em çawa dikarin vê formê baştir bikin? Yan jî çi were îzah kirin da ku bikaranîn hêsantir be? [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 14:12, 14 tebax 2026 (UTC)
:Merhaba ji te re jî, hin qalib hene nakevin tu forma. An jî ez nizanim. Min jî girêdek hilbijart. Hin qalib hene di paragrafa de hevokan hev û du girê dide; weki ''ote yandan''. Bîya min divê ev qalib jî hebin. Lê ez ne pisporê vê karî me. Hûn dizanin, biryar ya we ye. [[Bikarhêner:Rewiye tine|Rewiye tine]] ([[Gotûbêja bikarhêner:Rewiye tine#top|gotûbêj]]) 15:32, 14 tebax 2026 (UTC)
::Na, ez behsa formata wîkîtekstê dikim. Tu li qismê nimûneyê nivisandiye, li şûna ku li qutiya "Tercimeyên rasterast ên kurmancî..." binivîsî, [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 15:37, 14 tebax 2026 (UTC)
:::Keko bi rastî min fam nekir. Bibore. Lê ji bo ku peyv tirkî bû min zêde li ser nesekînî. Peyv kurdî bûya heya ji min bihata min rind çêkira. [[Bikarhêner:Rewiye tine|Rewiye tine]] ([[Gotûbêja bikarhêner:Rewiye tine#top|gotûbêj]]) 15:49, 14 tebax 2026 (UTC)
::::Yaw bira, Wextê sayfeyekî nû çêdikî, formek tê li pêşberî te. Ziman û dûre Cureyê rêzimanî hildibijêrî, ez dibêjim em çawa dikarin vê formê baştir bikin. Fikrên te hene? Tu li şûna ku formê bi kar bînî, rasterast diçî ser "Edîtorê". Min gelek li ser çêkirina vê "formê" xebitiye. Dixwazim însanên din jî bi hêsanî bi kar bînin. Tiştekî heye ku em dikarin rast bikin? Yan jî îlawe bikin? [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:00, 14 tebax 2026 (UTC)
:::::Binêre herwiha (bnr-), bîya min ev serê yekî dibe ku tevlîhev bike. Li herî jor e, yê ku cara ewil bixwaze tiştek zêde bike yê wî bitirsîne. Gelo em nikarin danin li derekî jêr? Berê bilêvkirin otomatîk çêdibû. Niha bêhtir zehmet buye ji bo yekî nezan. Gelek şablon hene. Mirov kîjan şablonê divê hilbijire? Tu dikarî wekî sembolek soru îşaretî danî li wir hinek rave bikî. An jî dikarî lînkek danî ku here rûpelek din û li vir rave bixwîne. Şablonên mana jî dikare serê yekî tevlîhev bike. Guherto?, kevnbûyî? Ku-latn? Awayekî din? Paşnav? Şaşnivîs? Famkirina van zehmet e. Bîya min tu lînkek danî li serî û di rupelek de mînakan bidî. Çiqas varyasyonên mînakan zêde bin kesek bêhtir mesele fem bike. Xelet fem neke, bi rastî jî şahane çêbûye. Tiştekî pîroz e. Mala te ava. Ez şablonê fam dikim. Ne ji bo xwe dibêjim. Lê ji bo ew e cara yekemîn bikarbînin dibe ku ji wan re zehmet be. Rastî ev şablon karê me yê gelek hêsan bike lê gelek detay hene. Dibe ku mirov ji van detayan bitirse. [[Bikarhêner:Rewiye tine|Rewiye tine]] ([[Gotûbêja bikarhêner:Rewiye tine#top|gotûbêj]]) 16:36, 14 tebax 2026 (UTC)
t4z2vtuog8gf11nfwny2812v8y8ex99
6333678
6333675
2026-08-14T16:41:45Z
Rewiye tine
7120
/* WF:Nû */ Bersiv
6333678
wikitext
text/x-wiki
{{xêrhatin}}
== Xêrhatin ==
Merheba bikarhênerê me yê hêja: ''Rewiye tine'',
Bi xêr hatî ferhenga kurdî-kurdî WÎKÎFERHENGê {{=)}}
Em hêvîdar in ku tu jî di avakirina vê ferhengê de alîkariya me bikî.
Eger pirsên te hebin, xêra xwe ji me re binivîse.
Xebatxweş.
:::::: -- [[Bikarhêner:Bikarhêner|Bikarhêner]] ([[Gotûbêja bikarhêner:Bikarhêner|gotûbêj]]) 14:38, 29 çiriya pêşîn 2019 (UTC)
== Bikarhêner:Rewiye tine/Peyvên min yên bêçavkanî û bêwate ==
Silav bira, dikarî vê lîsteyê mezintir bikî, heta ku em Pêvekek ji bo peyvên bêçavkanî çêkin. [[Bikarhêner:Rewiye tine/Peyvên min yên bêçavkanî û bêwate]] Qewet be!--[[Bikarhêner:Balyozxane|Balyozxane]] ([[Gotûbêja bikarhêner:Balyozxane|gotûbêj]]) 17:21, 2 tebax 2020 (UTC)
[[Bikarhêner:Rewiye tine]]Bêguman ez ê zêde bikim. Peyvên xerîb bala min dikişînin:). Zor spas dikim.
== [[Wîkîferheng:Tomarkirina peyvên ji wêjeya kurdî|Jêgirtinekê tomar bike]] ==
Silav. Ji bo peyvên ku wateyên wan tu nizanî, dewsa çêkirina gotaran gelo dikarî li '''[[Wîkîferheng:Tomarkirina peyvên ji wêjeya kurdî|Jêgirtinekê tomar bike]]''' zêde bikî? Bi vî sayî hem ez dikarim kengî wexta min hebe wan kontrol bikim û bi awayekî baştir lê zêde bikim hem jî karê me hêsantir û hindiktir be. Dibe? --[[Bikarhêner:Balyozxane|Balyozxane]] ([[Gotûbêja bikarhêner:Balyozxane|gotûbêj]]) 11:58, 4 îlon 2020 (UTC)
:{{r|Balyozxane}}Merhaba keko. Ji xwe destê min vî avayî hin peyv hebûn xeynî min zêdekirî. Eger peyv binîre tunebe ez lê dernexim wek te got ez ê jorê zêde bikim. Min jî dixesta bi te re vê meseleyê axivim. Gelek baş çebû. Mala te ava.[[Bikarhêner:Rewiye tine|Rewiye tine]] ([[Gotûbêja bikarhêner:Rewiye tine#top|gotûbêj]]) 18:12, 4 îlon 2020 (UTC)
::A te avatir :) Qewet be! --[[Bikarhêner:Balyozxane|Balyozxane]] ([[Gotûbêja bikarhêner:Balyozxane|gotûbêj]]) 18:21, 4 îlon 2020 (UTC)
:::Te got tu yê li jor lê zêde bikî hingê ew [[hela hela kirin]] çi ye {{=D}} --[[Bikarhêner:Balyozxane|Balyozxane]] ([[Gotûbêja bikarhêner:Balyozxane|gotûbêj]]) 18:49, 4 îlon 2020 (UTC)
:::{{r|Balyozxane}} Brako biya min dibe nebe ev peyv biwej e. Ma bihele em jî hinek hela hela bikin :D.<br>Henek dikim. Mesele ji bo '''xwewxe'' qet fikra min tune bû. Min jor zêde kir. Lê hela hela kirin :D<br>ihtimalek mêzin biwêj e biya min. [[Bikarhêner:Rewiye tine|Rewiye tine]] ([[Gotûbêja bikarhêner:Rewiye tine#top|gotûbêj]]) 18:55, 4 îlon 2020 (UTC)
::::Min gotibû hemû peyvên ku maneyên wan tu nizanî lê zêde neke heta em dikarin wateyekê jê re bibînin. Tenê cûreyê peyvê ne bes e. :/ --[[Bikarhêner:Balyozxane|Balyozxane]] ([[Gotûbêja bikarhêner:Balyozxane|gotûbêj]]) 19:02, 4 îlon 2020 (UTC)
{{r|Balyozxane}} Ez dê binêrim balyoz :D. hela hela :D
{{r|Balyozxane}} Keko bi rastî min dixwest karê te hesan bikim. Lê wisa ez kêf nastînim. Ez dînamîk şol dikim. Ez hez sûrat dikim. Ev tişt min disekînîne. Ji xwe nîve kitêb çû. Tu min bibore. Ez ê wek xwe dewam bikim çêtir e. Vî avayî ez xwe pêş dixim. Mesela hin paragraf hene ji xwe mane peyvê diyar e. Lê ewê ecêb ez dê jor parve bikim. Tu çi dibêjî? Binêr piştî te got ez sekînim. Ez her deqqe zêde dikim normalê.[[Bikarhêner:Rewiye tine|Rewiye tine]] ([[Gotûbêja bikarhêner:Rewiye tine#top|gotûbêj]]) 20:47, 4 îlon 2020 (UTC)
:Bira, ez ji bo peyvekê nîv saetek carina saetek çavkaniyan û wateyên cûda digerim. Armanca me '''ne''' çêkirina gelek peyvên bêwate ye loma bila hindik be rindik be :) Tu yê dest ji vî karî bernedî, piştî kitêb xilas bû, ne wisa? :D --[[Bikarhêner:Balyozxane|Balyozxane]] ([[Gotûbêja bikarhêner:Balyozxane|gotûbêj]]) 20:53, 4 îlon 2020 (UTC)
::Tu dîsa şablona jêgirtin/mela bazîdî bi kar bîne. Ez ê dûre stûnên din mîna "navê pirtûkê" û hwd binivîsim. --[[Bikarhêner:Balyozxane|Balyozxane]] ([[Gotûbêja bikarhêner:Balyozxane|gotûbêj]]) 20:55, 4 îlon 2020 (UTC)
{{r|Balyozxane}} Keko heta hetaye ez van dera me. quwet be[[Bikarhêner:Rewiye tine|Rewiye tine]] ([[Gotûbêja bikarhêner:Rewiye tine#top|gotûbêj]]) 08:11, 6 îlon 2020 (UTC)
== frankî ==
Silav, Te li vir [https://ku.wiktionary.org/w/index.php?title=cure&diff=4738684&oldid=4738683] wek frankî lê zêde kiribû lê ew rast e an divê fransî be? Koda fransî <code>fr</code> ye.--[[Bikarhêner:Balyozxane|Balyozxane]] ([[Gotûbêja bikarhêner:Balyozxane|gotûbêj]]) 21:45, 20 çiriya pêşîn 2020 (UTC)
:{{r|Balyozxane}}Baş e. Spas dikim. Min ferq nekirîbû. Min rast kir--[[Bikarhêner:Rewiye tine|Rewiye tine]] ([[Gotûbêja bikarhêner:Rewiye tine#top|gotûbêj]]) 10:57, 21 çiriya pêşîn 2020 (UTC)
::Destxweş! :) --[[Bikarhêner:Balyozxane|Balyozxane]] ([[Gotûbêja bikarhêner:Balyozxane|gotûbêj]]) 14:04, 21 çiriya pêşîn 2020 (UTC)
== Ferhenga Mehmet Bozarslan ==
Bira te ferhenga vî pir cara bi kar tînî, lê ew dibe îxlalê mafê telîfê. Tu dikarî li binê rûpelê de navê ferhengê binivîsî wek çavkanî lê agahiyan ji vê ferhengê rasterast kopî neke jkx. Herwiha min şablona wikipedia sererast kir. --[[Bikarhêner:Balyozxane|Balyozxane]] ([[Gotûbêja bikarhêner:Balyozxane|gotûbêj]]) 22:32, 6 çiriya paşîn 2020 (UTC)
== At last ==
dembaş, keko 'axirkê' bi wateya at least nayê [[Bikarhêner:Keyomerd|Keyomerd]] ([[Gotûbêja bikarhêner:Keyomerd|gotûbêj]]) 10:17, 26 adar 2021 (UTC)
:: {{r|Keyomerd}} merhaba ji te re. 'at last' li vir binêre [[https://www.thekurdishdictionary.com/en/search/english/kurmanci/at%20last]]--[[Bikarhêner:Rewiye tine|Rewiye tine]] ([[Gotûbêja bikarhêner:Rewiye tine#top|gotûbêj]]) 10:29, 26 adar 2021 (UTC)
== Arşîvkirin ==
Silav bira, kodek heye ji bo arşîvkirina rûpelan. Gelek bi kêr tê. Heke dixwazî bi kar bînî pêşî koda li jêr li [[Bikarhêner:Rewiye tine/common.js]] zêde bike
<syntaxhighlight lang="JavaScript">
mw.loader.load('//ku.wiktionary.org/w/index.php?title=Bikarhêner:Balyozxane/Gadget-aWa.js&action=raw&ctype=text/javascript');
</syntaxhighlight>
Dûre koda li vir [[Bikarhêner:Balyozxane/barkirin.css]] li rûpela xwe ya [[Bikarhêner:Rewiye tine/common.css]] kopî bike. Dûre dikarî li vir [[Wîkîferheng:ceribandin/aWa]] biceribînî. [[Bikarhêner:Balyozxane|Balyozxane]] ([[Gotûbêja bikarhêner:Balyozxane|gotûbêj]]) 16:06, 30 adar 2021 (UTC)
== Çima? ==
Silav @[[Bikarhêner:Rewiye tine|Rewiye tine]]. Te çima li hemû rûpelan Ziman "Kurmancî" hilbijart? Ma ev [[التنفس]] ne peyveke erebî ye? Ev [[هەناسەدان]] jî ne soranî ye? --[[Bikarhêner:Balyozxane|Balyozxane]] ([[Gotûbêja bikarhêner:Balyozxane|gotûbêj]]) 20:26, 21 kanûna pêşîn 2023 (UTC)
:xeletî çebûye. [[Bikarhêner:Rewiye tine|Rewiye tine]] ([[Gotûbêja bikarhêner:Rewiye tine#top|gotûbêj]]) 13:37, 22 kanûna pêşîn 2023 (UTC)
== Çawa yî? ==
Merheba bira, tu çawa yî? Tu wekî berê naxebitî êdî. Gelo çi bû? [[Bikarhêner:Balyozxane|Balyozxane]] ([[Gotûbêja bikarhêner:Balyozxane|gotûbêj]]) 21:53, 21 sibat 2024 (UTC)
:Merhaba ji te re jî. Hin projeyê min hene bi wan re mijûlîm. Karê standîsazyon giran bû. Ji min hew hat :D. Nîyeta min heye ferhengek fenî çêbikim. Ji bo vê yêke niha li vir zêdeyî kelîmeyên fenî zêde dikim. [[Bikarhêner:Rewiye tine|Rewiye tine]] ([[Gotûbêja bikarhêner:Rewiye tine#top|gotûbêj]]) 16:59, 22 sibat 2024 (UTC)
::@[[Bikarhêner:Rewiye tine|Rewiye tine]] Bi rastî di destpêkê de diviya me tenê ji bo kelîmeyên nîqaşbar li ferhengan din binêrin lê şûnda wê me ji bo hemû kelîme dinihêrt. Ew jî gelek em westandin. Niha eger ti kes îtîraz neke (jixwe ti kes naxebite) em forma ferhenga rastnivîsînê wekî standard nîşan didin.
::Min ê ji te re bigota komeke me ya aplîkasyonekê heye. Ez û çend hevalên ji Wîkîferhengê tê de ne. Gelo dixwazî beşdar bibî? Em sihbetên gelemper li ser ziman dikin. Eger bixwazî, dikarî ji min re e-maîlekê bişînî. [[Bikarhêner:Balyozxane|Balyozxane]] ([[Gotûbêja bikarhêner:Balyozxane|gotûbêj]]) 19:44, 22 sibat 2024 (UTC)
:::Dibe.Meîl? [[Bikarhêner:Rewiye tine|Rewiye tine]] ([[Gotûbêja bikarhêner:Rewiye tine#top|gotûbêj]]) 18:52, 6 kanûna pêşîn 2024 (UTC)
== [[WF:Nû]] ==
Merheba bira, min fam nekir te çima tiştekî wisa [https://ku.wiktionary.org/w/index.php?title=di%C4%9Fer_yandan&oldid=6333604] kiriye, problemek bi forma madeyan nû heye? Em çawa dikarin vê formê baştir bikin? Yan jî çi were îzah kirin da ku bikaranîn hêsantir be? [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 14:12, 14 tebax 2026 (UTC)
:Merhaba ji te re jî, hin qalib hene nakevin tu forma. An jî ez nizanim. Min jî girêdek hilbijart. Hin qalib hene di paragrafa de hevokan hev û du girê dide; weki ''ote yandan''. Bîya min divê ev qalib jî hebin. Lê ez ne pisporê vê karî me. Hûn dizanin, biryar ya we ye. [[Bikarhêner:Rewiye tine|Rewiye tine]] ([[Gotûbêja bikarhêner:Rewiye tine#top|gotûbêj]]) 15:32, 14 tebax 2026 (UTC)
::Na, ez behsa formata wîkîtekstê dikim. Tu li qismê nimûneyê nivisandiye, li şûna ku li qutiya "Tercimeyên rasterast ên kurmancî..." binivîsî, [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 15:37, 14 tebax 2026 (UTC)
:::Keko bi rastî min fam nekir. Bibore. Lê ji bo ku peyv tirkî bû min zêde li ser nesekînî. Peyv kurdî bûya heya ji min bihata min rind çêkira. [[Bikarhêner:Rewiye tine|Rewiye tine]] ([[Gotûbêja bikarhêner:Rewiye tine#top|gotûbêj]]) 15:49, 14 tebax 2026 (UTC)
::::Yaw bira, Wextê sayfeyekî nû çêdikî, formek tê li pêşberî te. Ziman û dûre Cureyê rêzimanî hildibijêrî, ez dibêjim em çawa dikarin vê formê baştir bikin. Fikrên te hene? Tu li şûna ku formê bi kar bînî, rasterast diçî ser "Edîtorê". Min gelek li ser çêkirina vê "formê" xebitiye. Dixwazim însanên din jî bi hêsanî bi kar bînin. Tiştekî heye ku em dikarin rast bikin? Yan jî îlawe bikin? [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:00, 14 tebax 2026 (UTC)
:::::Binêre herwiha (bnr-), bîya min ev serê yekî dibe ku tevlîhev bike. Li herî jor e, yê ku cara ewil bixwaze tiştek zêde bike yê wî bitirsîne. Gelo em nikarin danin li derekî jêr? Berê bilêvkirin otomatîk çêdibû. Niha bêhtir zehmet buye ji bo yekî nezan. Gelek şablon hene. Mirov kîjan şablonê divê hilbijire? Tu dikarî wekî sembolek soru îşaretî danî li wir hinek rave bikî. An jî dikarî lînkek danî ku here rûpelek din û li vir rave bixwîne. Şablonên mana jî dikare serê yekî tevlîhev bike. Guherto?, kevnbûyî? Ku-latn? Awayekî din? Paşnav? Şaşnivîs? Famkirina van zehmet e. Bîya min tu lînkek danî li serî û di rupelek de mînakan bidî. Çiqas varyasyonên mînakan zêde bin kesek bêhtir mesele fem bike. Xelet fem neke, bi rastî jî şahane çêbûye. Tiştekî pîroz e. Mala te ava. Ez şablonê fam dikim. Ne ji bo xwe dibêjim. Lê ji bo ew e cara yekemîn bikarbînin dibe ku ji wan re zehmet be. Rastî ev şablon karê me yê gelek hêsan bike lê gelek detay hene. Dibe ku mirov ji van detayan bitirse. [[Bikarhêner:Rewiye tine|Rewiye tine]] ([[Gotûbêja bikarhêner:Rewiye tine#top|gotûbêj]]) 16:36, 14 tebax 2026 (UTC)
::::::@[[Bikarhêner:Wikihez|Wikihez]] Ew derên mecburî were tijî kirin mirov sor çêke çawa ye? Çimkî dibe ku bejin qey dive hemû rupelê tijî bikin. Heçko punto jî biçûk in, xwendina wan hinek zehmet e. Divê alîyê famkirinê de hinek li ser were xebitandin. [[Bikarhêner:Rewiye tine|Rewiye tine]] ([[Gotûbêja bikarhêner:Rewiye tine#top|gotûbêj]]) 16:41, 14 tebax 2026 (UTC)
b4roi4z152fv2jp5egfb3p8mb2acy3h
6333679
6333678
2026-08-14T16:45:52Z
Rewiye tine
7120
/* WF:Nû */ Bersiv
6333679
wikitext
text/x-wiki
{{xêrhatin}}
== Xêrhatin ==
Merheba bikarhênerê me yê hêja: ''Rewiye tine'',
Bi xêr hatî ferhenga kurdî-kurdî WÎKÎFERHENGê {{=)}}
Em hêvîdar in ku tu jî di avakirina vê ferhengê de alîkariya me bikî.
Eger pirsên te hebin, xêra xwe ji me re binivîse.
Xebatxweş.
:::::: -- [[Bikarhêner:Bikarhêner|Bikarhêner]] ([[Gotûbêja bikarhêner:Bikarhêner|gotûbêj]]) 14:38, 29 çiriya pêşîn 2019 (UTC)
== Bikarhêner:Rewiye tine/Peyvên min yên bêçavkanî û bêwate ==
Silav bira, dikarî vê lîsteyê mezintir bikî, heta ku em Pêvekek ji bo peyvên bêçavkanî çêkin. [[Bikarhêner:Rewiye tine/Peyvên min yên bêçavkanî û bêwate]] Qewet be!--[[Bikarhêner:Balyozxane|Balyozxane]] ([[Gotûbêja bikarhêner:Balyozxane|gotûbêj]]) 17:21, 2 tebax 2020 (UTC)
[[Bikarhêner:Rewiye tine]]Bêguman ez ê zêde bikim. Peyvên xerîb bala min dikişînin:). Zor spas dikim.
== [[Wîkîferheng:Tomarkirina peyvên ji wêjeya kurdî|Jêgirtinekê tomar bike]] ==
Silav. Ji bo peyvên ku wateyên wan tu nizanî, dewsa çêkirina gotaran gelo dikarî li '''[[Wîkîferheng:Tomarkirina peyvên ji wêjeya kurdî|Jêgirtinekê tomar bike]]''' zêde bikî? Bi vî sayî hem ez dikarim kengî wexta min hebe wan kontrol bikim û bi awayekî baştir lê zêde bikim hem jî karê me hêsantir û hindiktir be. Dibe? --[[Bikarhêner:Balyozxane|Balyozxane]] ([[Gotûbêja bikarhêner:Balyozxane|gotûbêj]]) 11:58, 4 îlon 2020 (UTC)
:{{r|Balyozxane}}Merhaba keko. Ji xwe destê min vî avayî hin peyv hebûn xeynî min zêdekirî. Eger peyv binîre tunebe ez lê dernexim wek te got ez ê jorê zêde bikim. Min jî dixesta bi te re vê meseleyê axivim. Gelek baş çebû. Mala te ava.[[Bikarhêner:Rewiye tine|Rewiye tine]] ([[Gotûbêja bikarhêner:Rewiye tine#top|gotûbêj]]) 18:12, 4 îlon 2020 (UTC)
::A te avatir :) Qewet be! --[[Bikarhêner:Balyozxane|Balyozxane]] ([[Gotûbêja bikarhêner:Balyozxane|gotûbêj]]) 18:21, 4 îlon 2020 (UTC)
:::Te got tu yê li jor lê zêde bikî hingê ew [[hela hela kirin]] çi ye {{=D}} --[[Bikarhêner:Balyozxane|Balyozxane]] ([[Gotûbêja bikarhêner:Balyozxane|gotûbêj]]) 18:49, 4 îlon 2020 (UTC)
:::{{r|Balyozxane}} Brako biya min dibe nebe ev peyv biwej e. Ma bihele em jî hinek hela hela bikin :D.<br>Henek dikim. Mesele ji bo '''xwewxe'' qet fikra min tune bû. Min jor zêde kir. Lê hela hela kirin :D<br>ihtimalek mêzin biwêj e biya min. [[Bikarhêner:Rewiye tine|Rewiye tine]] ([[Gotûbêja bikarhêner:Rewiye tine#top|gotûbêj]]) 18:55, 4 îlon 2020 (UTC)
::::Min gotibû hemû peyvên ku maneyên wan tu nizanî lê zêde neke heta em dikarin wateyekê jê re bibînin. Tenê cûreyê peyvê ne bes e. :/ --[[Bikarhêner:Balyozxane|Balyozxane]] ([[Gotûbêja bikarhêner:Balyozxane|gotûbêj]]) 19:02, 4 îlon 2020 (UTC)
{{r|Balyozxane}} Ez dê binêrim balyoz :D. hela hela :D
{{r|Balyozxane}} Keko bi rastî min dixwest karê te hesan bikim. Lê wisa ez kêf nastînim. Ez dînamîk şol dikim. Ez hez sûrat dikim. Ev tişt min disekînîne. Ji xwe nîve kitêb çû. Tu min bibore. Ez ê wek xwe dewam bikim çêtir e. Vî avayî ez xwe pêş dixim. Mesela hin paragraf hene ji xwe mane peyvê diyar e. Lê ewê ecêb ez dê jor parve bikim. Tu çi dibêjî? Binêr piştî te got ez sekînim. Ez her deqqe zêde dikim normalê.[[Bikarhêner:Rewiye tine|Rewiye tine]] ([[Gotûbêja bikarhêner:Rewiye tine#top|gotûbêj]]) 20:47, 4 îlon 2020 (UTC)
:Bira, ez ji bo peyvekê nîv saetek carina saetek çavkaniyan û wateyên cûda digerim. Armanca me '''ne''' çêkirina gelek peyvên bêwate ye loma bila hindik be rindik be :) Tu yê dest ji vî karî bernedî, piştî kitêb xilas bû, ne wisa? :D --[[Bikarhêner:Balyozxane|Balyozxane]] ([[Gotûbêja bikarhêner:Balyozxane|gotûbêj]]) 20:53, 4 îlon 2020 (UTC)
::Tu dîsa şablona jêgirtin/mela bazîdî bi kar bîne. Ez ê dûre stûnên din mîna "navê pirtûkê" û hwd binivîsim. --[[Bikarhêner:Balyozxane|Balyozxane]] ([[Gotûbêja bikarhêner:Balyozxane|gotûbêj]]) 20:55, 4 îlon 2020 (UTC)
{{r|Balyozxane}} Keko heta hetaye ez van dera me. quwet be[[Bikarhêner:Rewiye tine|Rewiye tine]] ([[Gotûbêja bikarhêner:Rewiye tine#top|gotûbêj]]) 08:11, 6 îlon 2020 (UTC)
== frankî ==
Silav, Te li vir [https://ku.wiktionary.org/w/index.php?title=cure&diff=4738684&oldid=4738683] wek frankî lê zêde kiribû lê ew rast e an divê fransî be? Koda fransî <code>fr</code> ye.--[[Bikarhêner:Balyozxane|Balyozxane]] ([[Gotûbêja bikarhêner:Balyozxane|gotûbêj]]) 21:45, 20 çiriya pêşîn 2020 (UTC)
:{{r|Balyozxane}}Baş e. Spas dikim. Min ferq nekirîbû. Min rast kir--[[Bikarhêner:Rewiye tine|Rewiye tine]] ([[Gotûbêja bikarhêner:Rewiye tine#top|gotûbêj]]) 10:57, 21 çiriya pêşîn 2020 (UTC)
::Destxweş! :) --[[Bikarhêner:Balyozxane|Balyozxane]] ([[Gotûbêja bikarhêner:Balyozxane|gotûbêj]]) 14:04, 21 çiriya pêşîn 2020 (UTC)
== Ferhenga Mehmet Bozarslan ==
Bira te ferhenga vî pir cara bi kar tînî, lê ew dibe îxlalê mafê telîfê. Tu dikarî li binê rûpelê de navê ferhengê binivîsî wek çavkanî lê agahiyan ji vê ferhengê rasterast kopî neke jkx. Herwiha min şablona wikipedia sererast kir. --[[Bikarhêner:Balyozxane|Balyozxane]] ([[Gotûbêja bikarhêner:Balyozxane|gotûbêj]]) 22:32, 6 çiriya paşîn 2020 (UTC)
== At last ==
dembaş, keko 'axirkê' bi wateya at least nayê [[Bikarhêner:Keyomerd|Keyomerd]] ([[Gotûbêja bikarhêner:Keyomerd|gotûbêj]]) 10:17, 26 adar 2021 (UTC)
:: {{r|Keyomerd}} merhaba ji te re. 'at last' li vir binêre [[https://www.thekurdishdictionary.com/en/search/english/kurmanci/at%20last]]--[[Bikarhêner:Rewiye tine|Rewiye tine]] ([[Gotûbêja bikarhêner:Rewiye tine#top|gotûbêj]]) 10:29, 26 adar 2021 (UTC)
== Arşîvkirin ==
Silav bira, kodek heye ji bo arşîvkirina rûpelan. Gelek bi kêr tê. Heke dixwazî bi kar bînî pêşî koda li jêr li [[Bikarhêner:Rewiye tine/common.js]] zêde bike
<syntaxhighlight lang="JavaScript">
mw.loader.load('//ku.wiktionary.org/w/index.php?title=Bikarhêner:Balyozxane/Gadget-aWa.js&action=raw&ctype=text/javascript');
</syntaxhighlight>
Dûre koda li vir [[Bikarhêner:Balyozxane/barkirin.css]] li rûpela xwe ya [[Bikarhêner:Rewiye tine/common.css]] kopî bike. Dûre dikarî li vir [[Wîkîferheng:ceribandin/aWa]] biceribînî. [[Bikarhêner:Balyozxane|Balyozxane]] ([[Gotûbêja bikarhêner:Balyozxane|gotûbêj]]) 16:06, 30 adar 2021 (UTC)
== Çima? ==
Silav @[[Bikarhêner:Rewiye tine|Rewiye tine]]. Te çima li hemû rûpelan Ziman "Kurmancî" hilbijart? Ma ev [[التنفس]] ne peyveke erebî ye? Ev [[هەناسەدان]] jî ne soranî ye? --[[Bikarhêner:Balyozxane|Balyozxane]] ([[Gotûbêja bikarhêner:Balyozxane|gotûbêj]]) 20:26, 21 kanûna pêşîn 2023 (UTC)
:xeletî çebûye. [[Bikarhêner:Rewiye tine|Rewiye tine]] ([[Gotûbêja bikarhêner:Rewiye tine#top|gotûbêj]]) 13:37, 22 kanûna pêşîn 2023 (UTC)
== Çawa yî? ==
Merheba bira, tu çawa yî? Tu wekî berê naxebitî êdî. Gelo çi bû? [[Bikarhêner:Balyozxane|Balyozxane]] ([[Gotûbêja bikarhêner:Balyozxane|gotûbêj]]) 21:53, 21 sibat 2024 (UTC)
:Merhaba ji te re jî. Hin projeyê min hene bi wan re mijûlîm. Karê standîsazyon giran bû. Ji min hew hat :D. Nîyeta min heye ferhengek fenî çêbikim. Ji bo vê yêke niha li vir zêdeyî kelîmeyên fenî zêde dikim. [[Bikarhêner:Rewiye tine|Rewiye tine]] ([[Gotûbêja bikarhêner:Rewiye tine#top|gotûbêj]]) 16:59, 22 sibat 2024 (UTC)
::@[[Bikarhêner:Rewiye tine|Rewiye tine]] Bi rastî di destpêkê de diviya me tenê ji bo kelîmeyên nîqaşbar li ferhengan din binêrin lê şûnda wê me ji bo hemû kelîme dinihêrt. Ew jî gelek em westandin. Niha eger ti kes îtîraz neke (jixwe ti kes naxebite) em forma ferhenga rastnivîsînê wekî standard nîşan didin.
::Min ê ji te re bigota komeke me ya aplîkasyonekê heye. Ez û çend hevalên ji Wîkîferhengê tê de ne. Gelo dixwazî beşdar bibî? Em sihbetên gelemper li ser ziman dikin. Eger bixwazî, dikarî ji min re e-maîlekê bişînî. [[Bikarhêner:Balyozxane|Balyozxane]] ([[Gotûbêja bikarhêner:Balyozxane|gotûbêj]]) 19:44, 22 sibat 2024 (UTC)
:::Dibe.Meîl? [[Bikarhêner:Rewiye tine|Rewiye tine]] ([[Gotûbêja bikarhêner:Rewiye tine#top|gotûbêj]]) 18:52, 6 kanûna pêşîn 2024 (UTC)
== [[WF:Nû]] ==
Merheba bira, min fam nekir te çima tiştekî wisa [https://ku.wiktionary.org/w/index.php?title=di%C4%9Fer_yandan&oldid=6333604] kiriye, problemek bi forma madeyan nû heye? Em çawa dikarin vê formê baştir bikin? Yan jî çi were îzah kirin da ku bikaranîn hêsantir be? [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 14:12, 14 tebax 2026 (UTC)
:Merhaba ji te re jî, hin qalib hene nakevin tu forma. An jî ez nizanim. Min jî girêdek hilbijart. Hin qalib hene di paragrafa de hevokan hev û du girê dide; weki ''ote yandan''. Bîya min divê ev qalib jî hebin. Lê ez ne pisporê vê karî me. Hûn dizanin, biryar ya we ye. [[Bikarhêner:Rewiye tine|Rewiye tine]] ([[Gotûbêja bikarhêner:Rewiye tine#top|gotûbêj]]) 15:32, 14 tebax 2026 (UTC)
::Na, ez behsa formata wîkîtekstê dikim. Tu li qismê nimûneyê nivisandiye, li şûna ku li qutiya "Tercimeyên rasterast ên kurmancî..." binivîsî, [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 15:37, 14 tebax 2026 (UTC)
:::Keko bi rastî min fam nekir. Bibore. Lê ji bo ku peyv tirkî bû min zêde li ser nesekînî. Peyv kurdî bûya heya ji min bihata min rind çêkira. [[Bikarhêner:Rewiye tine|Rewiye tine]] ([[Gotûbêja bikarhêner:Rewiye tine#top|gotûbêj]]) 15:49, 14 tebax 2026 (UTC)
::::Yaw bira, Wextê sayfeyekî nû çêdikî, formek tê li pêşberî te. Ziman û dûre Cureyê rêzimanî hildibijêrî, ez dibêjim em çawa dikarin vê formê baştir bikin. Fikrên te hene? Tu li şûna ku formê bi kar bînî, rasterast diçî ser "Edîtorê". Min gelek li ser çêkirina vê "formê" xebitiye. Dixwazim însanên din jî bi hêsanî bi kar bînin. Tiştekî heye ku em dikarin rast bikin? Yan jî îlawe bikin? [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:00, 14 tebax 2026 (UTC)
:::::Binêre herwiha (bnr-), bîya min ev serê yekî dibe ku tevlîhev bike. Li herî jor e, yê ku cara ewil bixwaze tiştek zêde bike yê wî bitirsîne. Gelo em nikarin danin li derekî jêr? Berê bilêvkirin otomatîk çêdibû. Niha bêhtir zehmet buye ji bo yekî nezan. Gelek şablon hene. Mirov kîjan şablonê divê hilbijire? Tu dikarî wekî sembolek soru îşaretî danî li wir hinek rave bikî. An jî dikarî lînkek danî ku here rûpelek din û li vir rave bixwîne. Şablonên mana jî dikare serê yekî tevlîhev bike. Guherto?, kevnbûyî? Ku-latn? Awayekî din? Paşnav? Şaşnivîs? Famkirina van zehmet e. Bîya min tu lînkek danî li serî û di rupelek de mînakan bidî. Çiqas varyasyonên mînakan zêde bin kesek bêhtir mesele fem bike. Xelet fem neke, bi rastî jî şahane çêbûye. Tiştekî pîroz e. Mala te ava. Ez şablonê fam dikim. Ne ji bo xwe dibêjim. Lê ji bo ew e cara yekemîn bikarbînin dibe ku ji wan re zehmet be. Rastî ev şablon karê me yê gelek hêsan bike lê gelek detay hene. Dibe ku mirov ji van detayan bitirse. [[Bikarhêner:Rewiye tine|Rewiye tine]] ([[Gotûbêja bikarhêner:Rewiye tine#top|gotûbêj]]) 16:36, 14 tebax 2026 (UTC)
::::::@[[Bikarhêner:Wikihez|Wikihez]] Ew derên mecburî were tijî kirin mirov sor çêke çawa ye? Çimkî dibe ku bejin qey dive hemû rupelê tijî bikin. Heçko punto jî biçûk in, xwendina wan hinek zehmet e. Divê alîyê famkirinê de hinek li ser were xebitandin. [[Bikarhêner:Rewiye tine|Rewiye tine]] ([[Gotûbêja bikarhêner:Rewiye tine#top|gotûbêj]]) 16:41, 14 tebax 2026 (UTC)
:::::::@[[Bikarhêner:Wikihez|Wikihez]] Tu dikarî ji min pirsî, înş ez ê bersiva te bidim. Behna min vekirîye. [[Bikarhêner:Rewiye tine|Rewiye tine]] ([[Gotûbêja bikarhêner:Rewiye tine#top|gotûbêj]]) 16:45, 14 tebax 2026 (UTC)
or7o7pcd401erc5zwukujjvdv58cjzk
6333680
6333679
2026-08-14T17:07:04Z
Wikihez
7344
/* WF:Nû */ Bersiv
6333680
wikitext
text/x-wiki
{{xêrhatin}}
== Xêrhatin ==
Merheba bikarhênerê me yê hêja: ''Rewiye tine'',
Bi xêr hatî ferhenga kurdî-kurdî WÎKÎFERHENGê {{=)}}
Em hêvîdar in ku tu jî di avakirina vê ferhengê de alîkariya me bikî.
Eger pirsên te hebin, xêra xwe ji me re binivîse.
Xebatxweş.
:::::: -- [[Bikarhêner:Bikarhêner|Bikarhêner]] ([[Gotûbêja bikarhêner:Bikarhêner|gotûbêj]]) 14:38, 29 çiriya pêşîn 2019 (UTC)
== Bikarhêner:Rewiye tine/Peyvên min yên bêçavkanî û bêwate ==
Silav bira, dikarî vê lîsteyê mezintir bikî, heta ku em Pêvekek ji bo peyvên bêçavkanî çêkin. [[Bikarhêner:Rewiye tine/Peyvên min yên bêçavkanî û bêwate]] Qewet be!--[[Bikarhêner:Balyozxane|Balyozxane]] ([[Gotûbêja bikarhêner:Balyozxane|gotûbêj]]) 17:21, 2 tebax 2020 (UTC)
[[Bikarhêner:Rewiye tine]]Bêguman ez ê zêde bikim. Peyvên xerîb bala min dikişînin:). Zor spas dikim.
== [[Wîkîferheng:Tomarkirina peyvên ji wêjeya kurdî|Jêgirtinekê tomar bike]] ==
Silav. Ji bo peyvên ku wateyên wan tu nizanî, dewsa çêkirina gotaran gelo dikarî li '''[[Wîkîferheng:Tomarkirina peyvên ji wêjeya kurdî|Jêgirtinekê tomar bike]]''' zêde bikî? Bi vî sayî hem ez dikarim kengî wexta min hebe wan kontrol bikim û bi awayekî baştir lê zêde bikim hem jî karê me hêsantir û hindiktir be. Dibe? --[[Bikarhêner:Balyozxane|Balyozxane]] ([[Gotûbêja bikarhêner:Balyozxane|gotûbêj]]) 11:58, 4 îlon 2020 (UTC)
:{{r|Balyozxane}}Merhaba keko. Ji xwe destê min vî avayî hin peyv hebûn xeynî min zêdekirî. Eger peyv binîre tunebe ez lê dernexim wek te got ez ê jorê zêde bikim. Min jî dixesta bi te re vê meseleyê axivim. Gelek baş çebû. Mala te ava.[[Bikarhêner:Rewiye tine|Rewiye tine]] ([[Gotûbêja bikarhêner:Rewiye tine#top|gotûbêj]]) 18:12, 4 îlon 2020 (UTC)
::A te avatir :) Qewet be! --[[Bikarhêner:Balyozxane|Balyozxane]] ([[Gotûbêja bikarhêner:Balyozxane|gotûbêj]]) 18:21, 4 îlon 2020 (UTC)
:::Te got tu yê li jor lê zêde bikî hingê ew [[hela hela kirin]] çi ye {{=D}} --[[Bikarhêner:Balyozxane|Balyozxane]] ([[Gotûbêja bikarhêner:Balyozxane|gotûbêj]]) 18:49, 4 îlon 2020 (UTC)
:::{{r|Balyozxane}} Brako biya min dibe nebe ev peyv biwej e. Ma bihele em jî hinek hela hela bikin :D.<br>Henek dikim. Mesele ji bo '''xwewxe'' qet fikra min tune bû. Min jor zêde kir. Lê hela hela kirin :D<br>ihtimalek mêzin biwêj e biya min. [[Bikarhêner:Rewiye tine|Rewiye tine]] ([[Gotûbêja bikarhêner:Rewiye tine#top|gotûbêj]]) 18:55, 4 îlon 2020 (UTC)
::::Min gotibû hemû peyvên ku maneyên wan tu nizanî lê zêde neke heta em dikarin wateyekê jê re bibînin. Tenê cûreyê peyvê ne bes e. :/ --[[Bikarhêner:Balyozxane|Balyozxane]] ([[Gotûbêja bikarhêner:Balyozxane|gotûbêj]]) 19:02, 4 îlon 2020 (UTC)
{{r|Balyozxane}} Ez dê binêrim balyoz :D. hela hela :D
{{r|Balyozxane}} Keko bi rastî min dixwest karê te hesan bikim. Lê wisa ez kêf nastînim. Ez dînamîk şol dikim. Ez hez sûrat dikim. Ev tişt min disekînîne. Ji xwe nîve kitêb çû. Tu min bibore. Ez ê wek xwe dewam bikim çêtir e. Vî avayî ez xwe pêş dixim. Mesela hin paragraf hene ji xwe mane peyvê diyar e. Lê ewê ecêb ez dê jor parve bikim. Tu çi dibêjî? Binêr piştî te got ez sekînim. Ez her deqqe zêde dikim normalê.[[Bikarhêner:Rewiye tine|Rewiye tine]] ([[Gotûbêja bikarhêner:Rewiye tine#top|gotûbêj]]) 20:47, 4 îlon 2020 (UTC)
:Bira, ez ji bo peyvekê nîv saetek carina saetek çavkaniyan û wateyên cûda digerim. Armanca me '''ne''' çêkirina gelek peyvên bêwate ye loma bila hindik be rindik be :) Tu yê dest ji vî karî bernedî, piştî kitêb xilas bû, ne wisa? :D --[[Bikarhêner:Balyozxane|Balyozxane]] ([[Gotûbêja bikarhêner:Balyozxane|gotûbêj]]) 20:53, 4 îlon 2020 (UTC)
::Tu dîsa şablona jêgirtin/mela bazîdî bi kar bîne. Ez ê dûre stûnên din mîna "navê pirtûkê" û hwd binivîsim. --[[Bikarhêner:Balyozxane|Balyozxane]] ([[Gotûbêja bikarhêner:Balyozxane|gotûbêj]]) 20:55, 4 îlon 2020 (UTC)
{{r|Balyozxane}} Keko heta hetaye ez van dera me. quwet be[[Bikarhêner:Rewiye tine|Rewiye tine]] ([[Gotûbêja bikarhêner:Rewiye tine#top|gotûbêj]]) 08:11, 6 îlon 2020 (UTC)
== frankî ==
Silav, Te li vir [https://ku.wiktionary.org/w/index.php?title=cure&diff=4738684&oldid=4738683] wek frankî lê zêde kiribû lê ew rast e an divê fransî be? Koda fransî <code>fr</code> ye.--[[Bikarhêner:Balyozxane|Balyozxane]] ([[Gotûbêja bikarhêner:Balyozxane|gotûbêj]]) 21:45, 20 çiriya pêşîn 2020 (UTC)
:{{r|Balyozxane}}Baş e. Spas dikim. Min ferq nekirîbû. Min rast kir--[[Bikarhêner:Rewiye tine|Rewiye tine]] ([[Gotûbêja bikarhêner:Rewiye tine#top|gotûbêj]]) 10:57, 21 çiriya pêşîn 2020 (UTC)
::Destxweş! :) --[[Bikarhêner:Balyozxane|Balyozxane]] ([[Gotûbêja bikarhêner:Balyozxane|gotûbêj]]) 14:04, 21 çiriya pêşîn 2020 (UTC)
== Ferhenga Mehmet Bozarslan ==
Bira te ferhenga vî pir cara bi kar tînî, lê ew dibe îxlalê mafê telîfê. Tu dikarî li binê rûpelê de navê ferhengê binivîsî wek çavkanî lê agahiyan ji vê ferhengê rasterast kopî neke jkx. Herwiha min şablona wikipedia sererast kir. --[[Bikarhêner:Balyozxane|Balyozxane]] ([[Gotûbêja bikarhêner:Balyozxane|gotûbêj]]) 22:32, 6 çiriya paşîn 2020 (UTC)
== At last ==
dembaş, keko 'axirkê' bi wateya at least nayê [[Bikarhêner:Keyomerd|Keyomerd]] ([[Gotûbêja bikarhêner:Keyomerd|gotûbêj]]) 10:17, 26 adar 2021 (UTC)
:: {{r|Keyomerd}} merhaba ji te re. 'at last' li vir binêre [[https://www.thekurdishdictionary.com/en/search/english/kurmanci/at%20last]]--[[Bikarhêner:Rewiye tine|Rewiye tine]] ([[Gotûbêja bikarhêner:Rewiye tine#top|gotûbêj]]) 10:29, 26 adar 2021 (UTC)
== Arşîvkirin ==
Silav bira, kodek heye ji bo arşîvkirina rûpelan. Gelek bi kêr tê. Heke dixwazî bi kar bînî pêşî koda li jêr li [[Bikarhêner:Rewiye tine/common.js]] zêde bike
<syntaxhighlight lang="JavaScript">
mw.loader.load('//ku.wiktionary.org/w/index.php?title=Bikarhêner:Balyozxane/Gadget-aWa.js&action=raw&ctype=text/javascript');
</syntaxhighlight>
Dûre koda li vir [[Bikarhêner:Balyozxane/barkirin.css]] li rûpela xwe ya [[Bikarhêner:Rewiye tine/common.css]] kopî bike. Dûre dikarî li vir [[Wîkîferheng:ceribandin/aWa]] biceribînî. [[Bikarhêner:Balyozxane|Balyozxane]] ([[Gotûbêja bikarhêner:Balyozxane|gotûbêj]]) 16:06, 30 adar 2021 (UTC)
== Çima? ==
Silav @[[Bikarhêner:Rewiye tine|Rewiye tine]]. Te çima li hemû rûpelan Ziman "Kurmancî" hilbijart? Ma ev [[التنفس]] ne peyveke erebî ye? Ev [[هەناسەدان]] jî ne soranî ye? --[[Bikarhêner:Balyozxane|Balyozxane]] ([[Gotûbêja bikarhêner:Balyozxane|gotûbêj]]) 20:26, 21 kanûna pêşîn 2023 (UTC)
:xeletî çebûye. [[Bikarhêner:Rewiye tine|Rewiye tine]] ([[Gotûbêja bikarhêner:Rewiye tine#top|gotûbêj]]) 13:37, 22 kanûna pêşîn 2023 (UTC)
== Çawa yî? ==
Merheba bira, tu çawa yî? Tu wekî berê naxebitî êdî. Gelo çi bû? [[Bikarhêner:Balyozxane|Balyozxane]] ([[Gotûbêja bikarhêner:Balyozxane|gotûbêj]]) 21:53, 21 sibat 2024 (UTC)
:Merhaba ji te re jî. Hin projeyê min hene bi wan re mijûlîm. Karê standîsazyon giran bû. Ji min hew hat :D. Nîyeta min heye ferhengek fenî çêbikim. Ji bo vê yêke niha li vir zêdeyî kelîmeyên fenî zêde dikim. [[Bikarhêner:Rewiye tine|Rewiye tine]] ([[Gotûbêja bikarhêner:Rewiye tine#top|gotûbêj]]) 16:59, 22 sibat 2024 (UTC)
::@[[Bikarhêner:Rewiye tine|Rewiye tine]] Bi rastî di destpêkê de diviya me tenê ji bo kelîmeyên nîqaşbar li ferhengan din binêrin lê şûnda wê me ji bo hemû kelîme dinihêrt. Ew jî gelek em westandin. Niha eger ti kes îtîraz neke (jixwe ti kes naxebite) em forma ferhenga rastnivîsînê wekî standard nîşan didin.
::Min ê ji te re bigota komeke me ya aplîkasyonekê heye. Ez û çend hevalên ji Wîkîferhengê tê de ne. Gelo dixwazî beşdar bibî? Em sihbetên gelemper li ser ziman dikin. Eger bixwazî, dikarî ji min re e-maîlekê bişînî. [[Bikarhêner:Balyozxane|Balyozxane]] ([[Gotûbêja bikarhêner:Balyozxane|gotûbêj]]) 19:44, 22 sibat 2024 (UTC)
:::Dibe.Meîl? [[Bikarhêner:Rewiye tine|Rewiye tine]] ([[Gotûbêja bikarhêner:Rewiye tine#top|gotûbêj]]) 18:52, 6 kanûna pêşîn 2024 (UTC)
== [[WF:Nû]] ==
Merheba bira, min fam nekir te çima tiştekî wisa [https://ku.wiktionary.org/w/index.php?title=di%C4%9Fer_yandan&oldid=6333604] kiriye, problemek bi forma madeyan nû heye? Em çawa dikarin vê formê baştir bikin? Yan jî çi were îzah kirin da ku bikaranîn hêsantir be? [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 14:12, 14 tebax 2026 (UTC)
:Merhaba ji te re jî, hin qalib hene nakevin tu forma. An jî ez nizanim. Min jî girêdek hilbijart. Hin qalib hene di paragrafa de hevokan hev û du girê dide; weki ''ote yandan''. Bîya min divê ev qalib jî hebin. Lê ez ne pisporê vê karî me. Hûn dizanin, biryar ya we ye. [[Bikarhêner:Rewiye tine|Rewiye tine]] ([[Gotûbêja bikarhêner:Rewiye tine#top|gotûbêj]]) 15:32, 14 tebax 2026 (UTC)
::Na, ez behsa formata wîkîtekstê dikim. Tu li qismê nimûneyê nivisandiye, li şûna ku li qutiya "Tercimeyên rasterast ên kurmancî..." binivîsî, [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 15:37, 14 tebax 2026 (UTC)
:::Keko bi rastî min fam nekir. Bibore. Lê ji bo ku peyv tirkî bû min zêde li ser nesekînî. Peyv kurdî bûya heya ji min bihata min rind çêkira. [[Bikarhêner:Rewiye tine|Rewiye tine]] ([[Gotûbêja bikarhêner:Rewiye tine#top|gotûbêj]]) 15:49, 14 tebax 2026 (UTC)
::::Yaw bira, Wextê sayfeyekî nû çêdikî, formek tê li pêşberî te. Ziman û dûre Cureyê rêzimanî hildibijêrî, ez dibêjim em çawa dikarin vê formê baştir bikin. Fikrên te hene? Tu li şûna ku formê bi kar bînî, rasterast diçî ser "Edîtorê". Min gelek li ser çêkirina vê "formê" xebitiye. Dixwazim însanên din jî bi hêsanî bi kar bînin. Tiştekî heye ku em dikarin rast bikin? Yan jî îlawe bikin? [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:00, 14 tebax 2026 (UTC)
:::::Binêre herwiha (bnr-), bîya min ev serê yekî dibe ku tevlîhev bike. Li herî jor e, yê ku cara ewil bixwaze tiştek zêde bike yê wî bitirsîne. Gelo em nikarin danin li derekî jêr? Berê bilêvkirin otomatîk çêdibû. Niha bêhtir zehmet buye ji bo yekî nezan. Gelek şablon hene. Mirov kîjan şablonê divê hilbijire? Tu dikarî wekî sembolek soru îşaretî danî li wir hinek rave bikî. An jî dikarî lînkek danî ku here rûpelek din û li vir rave bixwîne. Şablonên mana jî dikare serê yekî tevlîhev bike. Guherto?, kevnbûyî? Ku-latn? Awayekî din? Paşnav? Şaşnivîs? Famkirina van zehmet e. Bîya min tu lînkek danî li serî û di rupelek de mînakan bidî. Çiqas varyasyonên mînakan zêde bin kesek bêhtir mesele fem bike. Xelet fem neke, bi rastî jî şahane çêbûye. Tiştekî pîroz e. Mala te ava. Ez şablonê fam dikim. Ne ji bo xwe dibêjim. Lê ji bo ew e cara yekemîn bikarbînin dibe ku ji wan re zehmet be. Rastî ev şablon karê me yê gelek hêsan bike lê gelek detay hene. Dibe ku mirov ji van detayan bitirse. [[Bikarhêner:Rewiye tine|Rewiye tine]] ([[Gotûbêja bikarhêner:Rewiye tine#top|gotûbêj]]) 16:36, 14 tebax 2026 (UTC)
::::::@[[Bikarhêner:Wikihez|Wikihez]] Ew derên mecburî were tijî kirin mirov sor çêke çawa ye? Çimkî dibe ku bejin qey dive hemû rupelê tijî bikin. Heçko punto jî biçûk in, xwendina wan hinek zehmet e. Divê alîyê famkirinê de hinek li ser were xebitandin. [[Bikarhêner:Rewiye tine|Rewiye tine]] ([[Gotûbêja bikarhêner:Rewiye tine#top|gotûbêj]]) 16:41, 14 tebax 2026 (UTC)
:::::::@[[Bikarhêner:Wikihez|Wikihez]] Tu dikarî ji min pirsî, înş ez ê bersiva te bidim. Behna min vekirîye. [[Bikarhêner:Rewiye tine|Rewiye tine]] ([[Gotûbêja bikarhêner:Rewiye tine#top|gotûbêj]]) 16:45, 14 tebax 2026 (UTC)
::::::::Mala te ava, nîyeta min jî hebû bila du form hebe yekî kurt yekî pêşketî, pêşî bila bi ya kurt dest pê bike, dûre ê ku dixwaze ya pêşketî bi kar bîne. Hinek karên din xilas bibin ez ê li ser wan xisûsan bixebitim înşellah [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 17:07, 14 tebax 2026 (UTC)
c2x5cteia6uun232nlelry8fej9i8nj
6333681
6333680
2026-08-14T18:09:58Z
Ghybu
1393
/* WF:Nû */ Bersiv
6333681
wikitext
text/x-wiki
{{xêrhatin}}
== Xêrhatin ==
Merheba bikarhênerê me yê hêja: ''Rewiye tine'',
Bi xêr hatî ferhenga kurdî-kurdî WÎKÎFERHENGê {{=)}}
Em hêvîdar in ku tu jî di avakirina vê ferhengê de alîkariya me bikî.
Eger pirsên te hebin, xêra xwe ji me re binivîse.
Xebatxweş.
:::::: -- [[Bikarhêner:Bikarhêner|Bikarhêner]] ([[Gotûbêja bikarhêner:Bikarhêner|gotûbêj]]) 14:38, 29 çiriya pêşîn 2019 (UTC)
== Bikarhêner:Rewiye tine/Peyvên min yên bêçavkanî û bêwate ==
Silav bira, dikarî vê lîsteyê mezintir bikî, heta ku em Pêvekek ji bo peyvên bêçavkanî çêkin. [[Bikarhêner:Rewiye tine/Peyvên min yên bêçavkanî û bêwate]] Qewet be!--[[Bikarhêner:Balyozxane|Balyozxane]] ([[Gotûbêja bikarhêner:Balyozxane|gotûbêj]]) 17:21, 2 tebax 2020 (UTC)
[[Bikarhêner:Rewiye tine]]Bêguman ez ê zêde bikim. Peyvên xerîb bala min dikişînin:). Zor spas dikim.
== [[Wîkîferheng:Tomarkirina peyvên ji wêjeya kurdî|Jêgirtinekê tomar bike]] ==
Silav. Ji bo peyvên ku wateyên wan tu nizanî, dewsa çêkirina gotaran gelo dikarî li '''[[Wîkîferheng:Tomarkirina peyvên ji wêjeya kurdî|Jêgirtinekê tomar bike]]''' zêde bikî? Bi vî sayî hem ez dikarim kengî wexta min hebe wan kontrol bikim û bi awayekî baştir lê zêde bikim hem jî karê me hêsantir û hindiktir be. Dibe? --[[Bikarhêner:Balyozxane|Balyozxane]] ([[Gotûbêja bikarhêner:Balyozxane|gotûbêj]]) 11:58, 4 îlon 2020 (UTC)
:{{r|Balyozxane}}Merhaba keko. Ji xwe destê min vî avayî hin peyv hebûn xeynî min zêdekirî. Eger peyv binîre tunebe ez lê dernexim wek te got ez ê jorê zêde bikim. Min jî dixesta bi te re vê meseleyê axivim. Gelek baş çebû. Mala te ava.[[Bikarhêner:Rewiye tine|Rewiye tine]] ([[Gotûbêja bikarhêner:Rewiye tine#top|gotûbêj]]) 18:12, 4 îlon 2020 (UTC)
::A te avatir :) Qewet be! --[[Bikarhêner:Balyozxane|Balyozxane]] ([[Gotûbêja bikarhêner:Balyozxane|gotûbêj]]) 18:21, 4 îlon 2020 (UTC)
:::Te got tu yê li jor lê zêde bikî hingê ew [[hela hela kirin]] çi ye {{=D}} --[[Bikarhêner:Balyozxane|Balyozxane]] ([[Gotûbêja bikarhêner:Balyozxane|gotûbêj]]) 18:49, 4 îlon 2020 (UTC)
:::{{r|Balyozxane}} Brako biya min dibe nebe ev peyv biwej e. Ma bihele em jî hinek hela hela bikin :D.<br>Henek dikim. Mesele ji bo '''xwewxe'' qet fikra min tune bû. Min jor zêde kir. Lê hela hela kirin :D<br>ihtimalek mêzin biwêj e biya min. [[Bikarhêner:Rewiye tine|Rewiye tine]] ([[Gotûbêja bikarhêner:Rewiye tine#top|gotûbêj]]) 18:55, 4 îlon 2020 (UTC)
::::Min gotibû hemû peyvên ku maneyên wan tu nizanî lê zêde neke heta em dikarin wateyekê jê re bibînin. Tenê cûreyê peyvê ne bes e. :/ --[[Bikarhêner:Balyozxane|Balyozxane]] ([[Gotûbêja bikarhêner:Balyozxane|gotûbêj]]) 19:02, 4 îlon 2020 (UTC)
{{r|Balyozxane}} Ez dê binêrim balyoz :D. hela hela :D
{{r|Balyozxane}} Keko bi rastî min dixwest karê te hesan bikim. Lê wisa ez kêf nastînim. Ez dînamîk şol dikim. Ez hez sûrat dikim. Ev tişt min disekînîne. Ji xwe nîve kitêb çû. Tu min bibore. Ez ê wek xwe dewam bikim çêtir e. Vî avayî ez xwe pêş dixim. Mesela hin paragraf hene ji xwe mane peyvê diyar e. Lê ewê ecêb ez dê jor parve bikim. Tu çi dibêjî? Binêr piştî te got ez sekînim. Ez her deqqe zêde dikim normalê.[[Bikarhêner:Rewiye tine|Rewiye tine]] ([[Gotûbêja bikarhêner:Rewiye tine#top|gotûbêj]]) 20:47, 4 îlon 2020 (UTC)
:Bira, ez ji bo peyvekê nîv saetek carina saetek çavkaniyan û wateyên cûda digerim. Armanca me '''ne''' çêkirina gelek peyvên bêwate ye loma bila hindik be rindik be :) Tu yê dest ji vî karî bernedî, piştî kitêb xilas bû, ne wisa? :D --[[Bikarhêner:Balyozxane|Balyozxane]] ([[Gotûbêja bikarhêner:Balyozxane|gotûbêj]]) 20:53, 4 îlon 2020 (UTC)
::Tu dîsa şablona jêgirtin/mela bazîdî bi kar bîne. Ez ê dûre stûnên din mîna "navê pirtûkê" û hwd binivîsim. --[[Bikarhêner:Balyozxane|Balyozxane]] ([[Gotûbêja bikarhêner:Balyozxane|gotûbêj]]) 20:55, 4 îlon 2020 (UTC)
{{r|Balyozxane}} Keko heta hetaye ez van dera me. quwet be[[Bikarhêner:Rewiye tine|Rewiye tine]] ([[Gotûbêja bikarhêner:Rewiye tine#top|gotûbêj]]) 08:11, 6 îlon 2020 (UTC)
== frankî ==
Silav, Te li vir [https://ku.wiktionary.org/w/index.php?title=cure&diff=4738684&oldid=4738683] wek frankî lê zêde kiribû lê ew rast e an divê fransî be? Koda fransî <code>fr</code> ye.--[[Bikarhêner:Balyozxane|Balyozxane]] ([[Gotûbêja bikarhêner:Balyozxane|gotûbêj]]) 21:45, 20 çiriya pêşîn 2020 (UTC)
:{{r|Balyozxane}}Baş e. Spas dikim. Min ferq nekirîbû. Min rast kir--[[Bikarhêner:Rewiye tine|Rewiye tine]] ([[Gotûbêja bikarhêner:Rewiye tine#top|gotûbêj]]) 10:57, 21 çiriya pêşîn 2020 (UTC)
::Destxweş! :) --[[Bikarhêner:Balyozxane|Balyozxane]] ([[Gotûbêja bikarhêner:Balyozxane|gotûbêj]]) 14:04, 21 çiriya pêşîn 2020 (UTC)
== Ferhenga Mehmet Bozarslan ==
Bira te ferhenga vî pir cara bi kar tînî, lê ew dibe îxlalê mafê telîfê. Tu dikarî li binê rûpelê de navê ferhengê binivîsî wek çavkanî lê agahiyan ji vê ferhengê rasterast kopî neke jkx. Herwiha min şablona wikipedia sererast kir. --[[Bikarhêner:Balyozxane|Balyozxane]] ([[Gotûbêja bikarhêner:Balyozxane|gotûbêj]]) 22:32, 6 çiriya paşîn 2020 (UTC)
== At last ==
dembaş, keko 'axirkê' bi wateya at least nayê [[Bikarhêner:Keyomerd|Keyomerd]] ([[Gotûbêja bikarhêner:Keyomerd|gotûbêj]]) 10:17, 26 adar 2021 (UTC)
:: {{r|Keyomerd}} merhaba ji te re. 'at last' li vir binêre [[https://www.thekurdishdictionary.com/en/search/english/kurmanci/at%20last]]--[[Bikarhêner:Rewiye tine|Rewiye tine]] ([[Gotûbêja bikarhêner:Rewiye tine#top|gotûbêj]]) 10:29, 26 adar 2021 (UTC)
== Arşîvkirin ==
Silav bira, kodek heye ji bo arşîvkirina rûpelan. Gelek bi kêr tê. Heke dixwazî bi kar bînî pêşî koda li jêr li [[Bikarhêner:Rewiye tine/common.js]] zêde bike
<syntaxhighlight lang="JavaScript">
mw.loader.load('//ku.wiktionary.org/w/index.php?title=Bikarhêner:Balyozxane/Gadget-aWa.js&action=raw&ctype=text/javascript');
</syntaxhighlight>
Dûre koda li vir [[Bikarhêner:Balyozxane/barkirin.css]] li rûpela xwe ya [[Bikarhêner:Rewiye tine/common.css]] kopî bike. Dûre dikarî li vir [[Wîkîferheng:ceribandin/aWa]] biceribînî. [[Bikarhêner:Balyozxane|Balyozxane]] ([[Gotûbêja bikarhêner:Balyozxane|gotûbêj]]) 16:06, 30 adar 2021 (UTC)
== Çima? ==
Silav @[[Bikarhêner:Rewiye tine|Rewiye tine]]. Te çima li hemû rûpelan Ziman "Kurmancî" hilbijart? Ma ev [[التنفس]] ne peyveke erebî ye? Ev [[هەناسەدان]] jî ne soranî ye? --[[Bikarhêner:Balyozxane|Balyozxane]] ([[Gotûbêja bikarhêner:Balyozxane|gotûbêj]]) 20:26, 21 kanûna pêşîn 2023 (UTC)
:xeletî çebûye. [[Bikarhêner:Rewiye tine|Rewiye tine]] ([[Gotûbêja bikarhêner:Rewiye tine#top|gotûbêj]]) 13:37, 22 kanûna pêşîn 2023 (UTC)
== Çawa yî? ==
Merheba bira, tu çawa yî? Tu wekî berê naxebitî êdî. Gelo çi bû? [[Bikarhêner:Balyozxane|Balyozxane]] ([[Gotûbêja bikarhêner:Balyozxane|gotûbêj]]) 21:53, 21 sibat 2024 (UTC)
:Merhaba ji te re jî. Hin projeyê min hene bi wan re mijûlîm. Karê standîsazyon giran bû. Ji min hew hat :D. Nîyeta min heye ferhengek fenî çêbikim. Ji bo vê yêke niha li vir zêdeyî kelîmeyên fenî zêde dikim. [[Bikarhêner:Rewiye tine|Rewiye tine]] ([[Gotûbêja bikarhêner:Rewiye tine#top|gotûbêj]]) 16:59, 22 sibat 2024 (UTC)
::@[[Bikarhêner:Rewiye tine|Rewiye tine]] Bi rastî di destpêkê de diviya me tenê ji bo kelîmeyên nîqaşbar li ferhengan din binêrin lê şûnda wê me ji bo hemû kelîme dinihêrt. Ew jî gelek em westandin. Niha eger ti kes îtîraz neke (jixwe ti kes naxebite) em forma ferhenga rastnivîsînê wekî standard nîşan didin.
::Min ê ji te re bigota komeke me ya aplîkasyonekê heye. Ez û çend hevalên ji Wîkîferhengê tê de ne. Gelo dixwazî beşdar bibî? Em sihbetên gelemper li ser ziman dikin. Eger bixwazî, dikarî ji min re e-maîlekê bişînî. [[Bikarhêner:Balyozxane|Balyozxane]] ([[Gotûbêja bikarhêner:Balyozxane|gotûbêj]]) 19:44, 22 sibat 2024 (UTC)
:::Dibe.Meîl? [[Bikarhêner:Rewiye tine|Rewiye tine]] ([[Gotûbêja bikarhêner:Rewiye tine#top|gotûbêj]]) 18:52, 6 kanûna pêşîn 2024 (UTC)
== [[WF:Nû]] ==
Merheba bira, min fam nekir te çima tiştekî wisa [https://ku.wiktionary.org/w/index.php?title=di%C4%9Fer_yandan&oldid=6333604] kiriye, problemek bi forma madeyan nû heye? Em çawa dikarin vê formê baştir bikin? Yan jî çi were îzah kirin da ku bikaranîn hêsantir be? [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 14:12, 14 tebax 2026 (UTC)
:Merhaba ji te re jî, hin qalib hene nakevin tu forma. An jî ez nizanim. Min jî girêdek hilbijart. Hin qalib hene di paragrafa de hevokan hev û du girê dide; weki ''ote yandan''. Bîya min divê ev qalib jî hebin. Lê ez ne pisporê vê karî me. Hûn dizanin, biryar ya we ye. [[Bikarhêner:Rewiye tine|Rewiye tine]] ([[Gotûbêja bikarhêner:Rewiye tine#top|gotûbêj]]) 15:32, 14 tebax 2026 (UTC)
::Na, ez behsa formata wîkîtekstê dikim. Tu li qismê nimûneyê nivisandiye, li şûna ku li qutiya "Tercimeyên rasterast ên kurmancî..." binivîsî, [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 15:37, 14 tebax 2026 (UTC)
:::Keko bi rastî min fam nekir. Bibore. Lê ji bo ku peyv tirkî bû min zêde li ser nesekînî. Peyv kurdî bûya heya ji min bihata min rind çêkira. [[Bikarhêner:Rewiye tine|Rewiye tine]] ([[Gotûbêja bikarhêner:Rewiye tine#top|gotûbêj]]) 15:49, 14 tebax 2026 (UTC)
::::Yaw bira, Wextê sayfeyekî nû çêdikî, formek tê li pêşberî te. Ziman û dûre Cureyê rêzimanî hildibijêrî, ez dibêjim em çawa dikarin vê formê baştir bikin. Fikrên te hene? Tu li şûna ku formê bi kar bînî, rasterast diçî ser "Edîtorê". Min gelek li ser çêkirina vê "formê" xebitiye. Dixwazim însanên din jî bi hêsanî bi kar bînin. Tiştekî heye ku em dikarin rast bikin? Yan jî îlawe bikin? [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:00, 14 tebax 2026 (UTC)
:::::Binêre herwiha (bnr-), bîya min ev serê yekî dibe ku tevlîhev bike. Li herî jor e, yê ku cara ewil bixwaze tiştek zêde bike yê wî bitirsîne. Gelo em nikarin danin li derekî jêr? Berê bilêvkirin otomatîk çêdibû. Niha bêhtir zehmet buye ji bo yekî nezan. Gelek şablon hene. Mirov kîjan şablonê divê hilbijire? Tu dikarî wekî sembolek soru îşaretî danî li wir hinek rave bikî. An jî dikarî lînkek danî ku here rûpelek din û li vir rave bixwîne. Şablonên mana jî dikare serê yekî tevlîhev bike. Guherto?, kevnbûyî? Ku-latn? Awayekî din? Paşnav? Şaşnivîs? Famkirina van zehmet e. Bîya min tu lînkek danî li serî û di rupelek de mînakan bidî. Çiqas varyasyonên mînakan zêde bin kesek bêhtir mesele fem bike. Xelet fem neke, bi rastî jî şahane çêbûye. Tiştekî pîroz e. Mala te ava. Ez şablonê fam dikim. Ne ji bo xwe dibêjim. Lê ji bo ew e cara yekemîn bikarbînin dibe ku ji wan re zehmet be. Rastî ev şablon karê me yê gelek hêsan bike lê gelek detay hene. Dibe ku mirov ji van detayan bitirse. [[Bikarhêner:Rewiye tine|Rewiye tine]] ([[Gotûbêja bikarhêner:Rewiye tine#top|gotûbêj]]) 16:36, 14 tebax 2026 (UTC)
::::::@[[Bikarhêner:Wikihez|Wikihez]] Ew derên mecburî were tijî kirin mirov sor çêke çawa ye? Çimkî dibe ku bejin qey dive hemû rupelê tijî bikin. Heçko punto jî biçûk in, xwendina wan hinek zehmet e. Divê alîyê famkirinê de hinek li ser were xebitandin. [[Bikarhêner:Rewiye tine|Rewiye tine]] ([[Gotûbêja bikarhêner:Rewiye tine#top|gotûbêj]]) 16:41, 14 tebax 2026 (UTC)
:::::::@[[Bikarhêner:Wikihez|Wikihez]] Tu dikarî ji min pirsî, înş ez ê bersiva te bidim. Behna min vekirîye. [[Bikarhêner:Rewiye tine|Rewiye tine]] ([[Gotûbêja bikarhêner:Rewiye tine#top|gotûbêj]]) 16:45, 14 tebax 2026 (UTC)
::::::::Mala te ava, nîyeta min jî hebû bila du form hebe yekî kurt yekî pêşketî, pêşî bila bi ya kurt dest pê bike, dûre ê ku dixwaze ya pêşketî bi kar bîne. Hinek karên din xilas bibin ez ê li ser wan xisûsan bixebitim înşellah [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 17:07, 14 tebax 2026 (UTC)
:::::::::# (ne hewce ye) "bnr-h" were rakirin
:::::::::# (ne hewce ye) Wêne (resim) were rakirin (li jêr were nivîsandin)
:::::::::# (ne hewce ye) "Bilêvkirin" bin beşa Ziman û ser "Cureyê rêzimanî" hatiye nivîsandin: ne baş e. Bin beşa "Cureyê peyvê" were nivîsandin. Cem "Mane" li aliyê rast wekî "tab" (ji ber ku nivîsandin ne hewce ye)
:::::::::# (hewce ye) "Cureyê rêzimanî" û "Parametreyên cureyê rêzimanî" (hewce ye) cem hev werin nivîsandin. Nivîsa "Parametreyên ..." ne baş e :) Tenê "Cins/zayend" ji bo navdêran bes e. Ji bo lêkeran jî "Cureyê lêkerê" (di nav de: rehê dema niha, ...). Tenê rêzek...
:::::::::# "Bikaranîn" û "Bilêvkirin, hevmane, jê, alt., .." wekî "tab" cem "Mane"
:::::::::# (ne hewce ne) Beşên din jî li jêr di bin beşa "Bilêvkirin, hevmane, jê, alt, .."
:::::::::Nizanim tiştên ku min nivîsand tên fêm kirin an na? :) [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 18:09, 14 tebax 2026 (UTC)
be4bz6u9ncdlps8g3vq6o7xjknvlkd4
6333683
6333681
2026-08-14T18:16:31Z
Ghybu
1393
/* WF:Nû */ Bersiv
6333683
wikitext
text/x-wiki
{{xêrhatin}}
== Xêrhatin ==
Merheba bikarhênerê me yê hêja: ''Rewiye tine'',
Bi xêr hatî ferhenga kurdî-kurdî WÎKÎFERHENGê {{=)}}
Em hêvîdar in ku tu jî di avakirina vê ferhengê de alîkariya me bikî.
Eger pirsên te hebin, xêra xwe ji me re binivîse.
Xebatxweş.
:::::: -- [[Bikarhêner:Bikarhêner|Bikarhêner]] ([[Gotûbêja bikarhêner:Bikarhêner|gotûbêj]]) 14:38, 29 çiriya pêşîn 2019 (UTC)
== Bikarhêner:Rewiye tine/Peyvên min yên bêçavkanî û bêwate ==
Silav bira, dikarî vê lîsteyê mezintir bikî, heta ku em Pêvekek ji bo peyvên bêçavkanî çêkin. [[Bikarhêner:Rewiye tine/Peyvên min yên bêçavkanî û bêwate]] Qewet be!--[[Bikarhêner:Balyozxane|Balyozxane]] ([[Gotûbêja bikarhêner:Balyozxane|gotûbêj]]) 17:21, 2 tebax 2020 (UTC)
[[Bikarhêner:Rewiye tine]]Bêguman ez ê zêde bikim. Peyvên xerîb bala min dikişînin:). Zor spas dikim.
== [[Wîkîferheng:Tomarkirina peyvên ji wêjeya kurdî|Jêgirtinekê tomar bike]] ==
Silav. Ji bo peyvên ku wateyên wan tu nizanî, dewsa çêkirina gotaran gelo dikarî li '''[[Wîkîferheng:Tomarkirina peyvên ji wêjeya kurdî|Jêgirtinekê tomar bike]]''' zêde bikî? Bi vî sayî hem ez dikarim kengî wexta min hebe wan kontrol bikim û bi awayekî baştir lê zêde bikim hem jî karê me hêsantir û hindiktir be. Dibe? --[[Bikarhêner:Balyozxane|Balyozxane]] ([[Gotûbêja bikarhêner:Balyozxane|gotûbêj]]) 11:58, 4 îlon 2020 (UTC)
:{{r|Balyozxane}}Merhaba keko. Ji xwe destê min vî avayî hin peyv hebûn xeynî min zêdekirî. Eger peyv binîre tunebe ez lê dernexim wek te got ez ê jorê zêde bikim. Min jî dixesta bi te re vê meseleyê axivim. Gelek baş çebû. Mala te ava.[[Bikarhêner:Rewiye tine|Rewiye tine]] ([[Gotûbêja bikarhêner:Rewiye tine#top|gotûbêj]]) 18:12, 4 îlon 2020 (UTC)
::A te avatir :) Qewet be! --[[Bikarhêner:Balyozxane|Balyozxane]] ([[Gotûbêja bikarhêner:Balyozxane|gotûbêj]]) 18:21, 4 îlon 2020 (UTC)
:::Te got tu yê li jor lê zêde bikî hingê ew [[hela hela kirin]] çi ye {{=D}} --[[Bikarhêner:Balyozxane|Balyozxane]] ([[Gotûbêja bikarhêner:Balyozxane|gotûbêj]]) 18:49, 4 îlon 2020 (UTC)
:::{{r|Balyozxane}} Brako biya min dibe nebe ev peyv biwej e. Ma bihele em jî hinek hela hela bikin :D.<br>Henek dikim. Mesele ji bo '''xwewxe'' qet fikra min tune bû. Min jor zêde kir. Lê hela hela kirin :D<br>ihtimalek mêzin biwêj e biya min. [[Bikarhêner:Rewiye tine|Rewiye tine]] ([[Gotûbêja bikarhêner:Rewiye tine#top|gotûbêj]]) 18:55, 4 îlon 2020 (UTC)
::::Min gotibû hemû peyvên ku maneyên wan tu nizanî lê zêde neke heta em dikarin wateyekê jê re bibînin. Tenê cûreyê peyvê ne bes e. :/ --[[Bikarhêner:Balyozxane|Balyozxane]] ([[Gotûbêja bikarhêner:Balyozxane|gotûbêj]]) 19:02, 4 îlon 2020 (UTC)
{{r|Balyozxane}} Ez dê binêrim balyoz :D. hela hela :D
{{r|Balyozxane}} Keko bi rastî min dixwest karê te hesan bikim. Lê wisa ez kêf nastînim. Ez dînamîk şol dikim. Ez hez sûrat dikim. Ev tişt min disekînîne. Ji xwe nîve kitêb çû. Tu min bibore. Ez ê wek xwe dewam bikim çêtir e. Vî avayî ez xwe pêş dixim. Mesela hin paragraf hene ji xwe mane peyvê diyar e. Lê ewê ecêb ez dê jor parve bikim. Tu çi dibêjî? Binêr piştî te got ez sekînim. Ez her deqqe zêde dikim normalê.[[Bikarhêner:Rewiye tine|Rewiye tine]] ([[Gotûbêja bikarhêner:Rewiye tine#top|gotûbêj]]) 20:47, 4 îlon 2020 (UTC)
:Bira, ez ji bo peyvekê nîv saetek carina saetek çavkaniyan û wateyên cûda digerim. Armanca me '''ne''' çêkirina gelek peyvên bêwate ye loma bila hindik be rindik be :) Tu yê dest ji vî karî bernedî, piştî kitêb xilas bû, ne wisa? :D --[[Bikarhêner:Balyozxane|Balyozxane]] ([[Gotûbêja bikarhêner:Balyozxane|gotûbêj]]) 20:53, 4 îlon 2020 (UTC)
::Tu dîsa şablona jêgirtin/mela bazîdî bi kar bîne. Ez ê dûre stûnên din mîna "navê pirtûkê" û hwd binivîsim. --[[Bikarhêner:Balyozxane|Balyozxane]] ([[Gotûbêja bikarhêner:Balyozxane|gotûbêj]]) 20:55, 4 îlon 2020 (UTC)
{{r|Balyozxane}} Keko heta hetaye ez van dera me. quwet be[[Bikarhêner:Rewiye tine|Rewiye tine]] ([[Gotûbêja bikarhêner:Rewiye tine#top|gotûbêj]]) 08:11, 6 îlon 2020 (UTC)
== frankî ==
Silav, Te li vir [https://ku.wiktionary.org/w/index.php?title=cure&diff=4738684&oldid=4738683] wek frankî lê zêde kiribû lê ew rast e an divê fransî be? Koda fransî <code>fr</code> ye.--[[Bikarhêner:Balyozxane|Balyozxane]] ([[Gotûbêja bikarhêner:Balyozxane|gotûbêj]]) 21:45, 20 çiriya pêşîn 2020 (UTC)
:{{r|Balyozxane}}Baş e. Spas dikim. Min ferq nekirîbû. Min rast kir--[[Bikarhêner:Rewiye tine|Rewiye tine]] ([[Gotûbêja bikarhêner:Rewiye tine#top|gotûbêj]]) 10:57, 21 çiriya pêşîn 2020 (UTC)
::Destxweş! :) --[[Bikarhêner:Balyozxane|Balyozxane]] ([[Gotûbêja bikarhêner:Balyozxane|gotûbêj]]) 14:04, 21 çiriya pêşîn 2020 (UTC)
== Ferhenga Mehmet Bozarslan ==
Bira te ferhenga vî pir cara bi kar tînî, lê ew dibe îxlalê mafê telîfê. Tu dikarî li binê rûpelê de navê ferhengê binivîsî wek çavkanî lê agahiyan ji vê ferhengê rasterast kopî neke jkx. Herwiha min şablona wikipedia sererast kir. --[[Bikarhêner:Balyozxane|Balyozxane]] ([[Gotûbêja bikarhêner:Balyozxane|gotûbêj]]) 22:32, 6 çiriya paşîn 2020 (UTC)
== At last ==
dembaş, keko 'axirkê' bi wateya at least nayê [[Bikarhêner:Keyomerd|Keyomerd]] ([[Gotûbêja bikarhêner:Keyomerd|gotûbêj]]) 10:17, 26 adar 2021 (UTC)
:: {{r|Keyomerd}} merhaba ji te re. 'at last' li vir binêre [[https://www.thekurdishdictionary.com/en/search/english/kurmanci/at%20last]]--[[Bikarhêner:Rewiye tine|Rewiye tine]] ([[Gotûbêja bikarhêner:Rewiye tine#top|gotûbêj]]) 10:29, 26 adar 2021 (UTC)
== Arşîvkirin ==
Silav bira, kodek heye ji bo arşîvkirina rûpelan. Gelek bi kêr tê. Heke dixwazî bi kar bînî pêşî koda li jêr li [[Bikarhêner:Rewiye tine/common.js]] zêde bike
<syntaxhighlight lang="JavaScript">
mw.loader.load('//ku.wiktionary.org/w/index.php?title=Bikarhêner:Balyozxane/Gadget-aWa.js&action=raw&ctype=text/javascript');
</syntaxhighlight>
Dûre koda li vir [[Bikarhêner:Balyozxane/barkirin.css]] li rûpela xwe ya [[Bikarhêner:Rewiye tine/common.css]] kopî bike. Dûre dikarî li vir [[Wîkîferheng:ceribandin/aWa]] biceribînî. [[Bikarhêner:Balyozxane|Balyozxane]] ([[Gotûbêja bikarhêner:Balyozxane|gotûbêj]]) 16:06, 30 adar 2021 (UTC)
== Çima? ==
Silav @[[Bikarhêner:Rewiye tine|Rewiye tine]]. Te çima li hemû rûpelan Ziman "Kurmancî" hilbijart? Ma ev [[التنفس]] ne peyveke erebî ye? Ev [[هەناسەدان]] jî ne soranî ye? --[[Bikarhêner:Balyozxane|Balyozxane]] ([[Gotûbêja bikarhêner:Balyozxane|gotûbêj]]) 20:26, 21 kanûna pêşîn 2023 (UTC)
:xeletî çebûye. [[Bikarhêner:Rewiye tine|Rewiye tine]] ([[Gotûbêja bikarhêner:Rewiye tine#top|gotûbêj]]) 13:37, 22 kanûna pêşîn 2023 (UTC)
== Çawa yî? ==
Merheba bira, tu çawa yî? Tu wekî berê naxebitî êdî. Gelo çi bû? [[Bikarhêner:Balyozxane|Balyozxane]] ([[Gotûbêja bikarhêner:Balyozxane|gotûbêj]]) 21:53, 21 sibat 2024 (UTC)
:Merhaba ji te re jî. Hin projeyê min hene bi wan re mijûlîm. Karê standîsazyon giran bû. Ji min hew hat :D. Nîyeta min heye ferhengek fenî çêbikim. Ji bo vê yêke niha li vir zêdeyî kelîmeyên fenî zêde dikim. [[Bikarhêner:Rewiye tine|Rewiye tine]] ([[Gotûbêja bikarhêner:Rewiye tine#top|gotûbêj]]) 16:59, 22 sibat 2024 (UTC)
::@[[Bikarhêner:Rewiye tine|Rewiye tine]] Bi rastî di destpêkê de diviya me tenê ji bo kelîmeyên nîqaşbar li ferhengan din binêrin lê şûnda wê me ji bo hemû kelîme dinihêrt. Ew jî gelek em westandin. Niha eger ti kes îtîraz neke (jixwe ti kes naxebite) em forma ferhenga rastnivîsînê wekî standard nîşan didin.
::Min ê ji te re bigota komeke me ya aplîkasyonekê heye. Ez û çend hevalên ji Wîkîferhengê tê de ne. Gelo dixwazî beşdar bibî? Em sihbetên gelemper li ser ziman dikin. Eger bixwazî, dikarî ji min re e-maîlekê bişînî. [[Bikarhêner:Balyozxane|Balyozxane]] ([[Gotûbêja bikarhêner:Balyozxane|gotûbêj]]) 19:44, 22 sibat 2024 (UTC)
:::Dibe.Meîl? [[Bikarhêner:Rewiye tine|Rewiye tine]] ([[Gotûbêja bikarhêner:Rewiye tine#top|gotûbêj]]) 18:52, 6 kanûna pêşîn 2024 (UTC)
== [[WF:Nû]] ==
Merheba bira, min fam nekir te çima tiştekî wisa [https://ku.wiktionary.org/w/index.php?title=di%C4%9Fer_yandan&oldid=6333604] kiriye, problemek bi forma madeyan nû heye? Em çawa dikarin vê formê baştir bikin? Yan jî çi were îzah kirin da ku bikaranîn hêsantir be? [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 14:12, 14 tebax 2026 (UTC)
:Merhaba ji te re jî, hin qalib hene nakevin tu forma. An jî ez nizanim. Min jî girêdek hilbijart. Hin qalib hene di paragrafa de hevokan hev û du girê dide; weki ''ote yandan''. Bîya min divê ev qalib jî hebin. Lê ez ne pisporê vê karî me. Hûn dizanin, biryar ya we ye. [[Bikarhêner:Rewiye tine|Rewiye tine]] ([[Gotûbêja bikarhêner:Rewiye tine#top|gotûbêj]]) 15:32, 14 tebax 2026 (UTC)
::Na, ez behsa formata wîkîtekstê dikim. Tu li qismê nimûneyê nivisandiye, li şûna ku li qutiya "Tercimeyên rasterast ên kurmancî..." binivîsî, [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 15:37, 14 tebax 2026 (UTC)
:::Keko bi rastî min fam nekir. Bibore. Lê ji bo ku peyv tirkî bû min zêde li ser nesekînî. Peyv kurdî bûya heya ji min bihata min rind çêkira. [[Bikarhêner:Rewiye tine|Rewiye tine]] ([[Gotûbêja bikarhêner:Rewiye tine#top|gotûbêj]]) 15:49, 14 tebax 2026 (UTC)
::::Yaw bira, Wextê sayfeyekî nû çêdikî, formek tê li pêşberî te. Ziman û dûre Cureyê rêzimanî hildibijêrî, ez dibêjim em çawa dikarin vê formê baştir bikin. Fikrên te hene? Tu li şûna ku formê bi kar bînî, rasterast diçî ser "Edîtorê". Min gelek li ser çêkirina vê "formê" xebitiye. Dixwazim însanên din jî bi hêsanî bi kar bînin. Tiştekî heye ku em dikarin rast bikin? Yan jî îlawe bikin? [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:00, 14 tebax 2026 (UTC)
:::::Binêre herwiha (bnr-), bîya min ev serê yekî dibe ku tevlîhev bike. Li herî jor e, yê ku cara ewil bixwaze tiştek zêde bike yê wî bitirsîne. Gelo em nikarin danin li derekî jêr? Berê bilêvkirin otomatîk çêdibû. Niha bêhtir zehmet buye ji bo yekî nezan. Gelek şablon hene. Mirov kîjan şablonê divê hilbijire? Tu dikarî wekî sembolek soru îşaretî danî li wir hinek rave bikî. An jî dikarî lînkek danî ku here rûpelek din û li vir rave bixwîne. Şablonên mana jî dikare serê yekî tevlîhev bike. Guherto?, kevnbûyî? Ku-latn? Awayekî din? Paşnav? Şaşnivîs? Famkirina van zehmet e. Bîya min tu lînkek danî li serî û di rupelek de mînakan bidî. Çiqas varyasyonên mînakan zêde bin kesek bêhtir mesele fem bike. Xelet fem neke, bi rastî jî şahane çêbûye. Tiştekî pîroz e. Mala te ava. Ez şablonê fam dikim. Ne ji bo xwe dibêjim. Lê ji bo ew e cara yekemîn bikarbînin dibe ku ji wan re zehmet be. Rastî ev şablon karê me yê gelek hêsan bike lê gelek detay hene. Dibe ku mirov ji van detayan bitirse. [[Bikarhêner:Rewiye tine|Rewiye tine]] ([[Gotûbêja bikarhêner:Rewiye tine#top|gotûbêj]]) 16:36, 14 tebax 2026 (UTC)
::::::@[[Bikarhêner:Wikihez|Wikihez]] Ew derên mecburî were tijî kirin mirov sor çêke çawa ye? Çimkî dibe ku bejin qey dive hemû rupelê tijî bikin. Heçko punto jî biçûk in, xwendina wan hinek zehmet e. Divê alîyê famkirinê de hinek li ser were xebitandin. [[Bikarhêner:Rewiye tine|Rewiye tine]] ([[Gotûbêja bikarhêner:Rewiye tine#top|gotûbêj]]) 16:41, 14 tebax 2026 (UTC)
:::::::@[[Bikarhêner:Wikihez|Wikihez]] Tu dikarî ji min pirsî, înş ez ê bersiva te bidim. Behna min vekirîye. [[Bikarhêner:Rewiye tine|Rewiye tine]] ([[Gotûbêja bikarhêner:Rewiye tine#top|gotûbêj]]) 16:45, 14 tebax 2026 (UTC)
::::::::Mala te ava, nîyeta min jî hebû bila du form hebe yekî kurt yekî pêşketî, pêşî bila bi ya kurt dest pê bike, dûre ê ku dixwaze ya pêşketî bi kar bîne. Hinek karên din xilas bibin ez ê li ser wan xisûsan bixebitim înşellah [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 17:07, 14 tebax 2026 (UTC)
:::::::::# (ne hewce ye) "bnr-h" were rakirin
:::::::::# (ne hewce ye) Wêne (resim) were rakirin (li jêr were nivîsandin)
:::::::::# (ne hewce ye) "Bilêvkirin" bin beşa Ziman û ser "Cureyê rêzimanî" hatiye nivîsandin: ne baş e. Bin beşa "Cureyê peyvê" were nivîsandin. Cem "Mane" li aliyê rast wekî "tab" (ji ber ku nivîsandin ne hewce ye)
:::::::::# (hewce ye) "Cureyê rêzimanî" û "Parametreyên cureyê rêzimanî" (hewce ye) cem hev werin nivîsandin. Nivîsa "Parametreyên ..." ne baş e :) Tenê "Cins/zayend" ji bo navdêran bes e. Ji bo lêkeran jî "Cureyê lêkerê" (di nav de: rehê dema niha, ...). Tenê rêzek...
:::::::::# "Bikaranîn" û "Bilêvkirin, hevmane, jê, alt., .." wekî "tab" cem "Mane"
:::::::::# (ne hewce ne) Beşên din jî li jêr di bin beşa "Bilêvkirin, hevmane, jê, alt, .."
:::::::::Nizanim tiştên ku min nivîsand tên fêm kirin an na? :) [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 18:09, 14 tebax 2026 (UTC)
::::::::::PS: Lojîk va ye: tiştên ku hewce ne werin dîtin yên ku ne hewce ne wekî "tab" çêke :) [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 18:16, 14 tebax 2026 (UTC)
7k7zzs735nl8p5jegxe7ibsx87d585q
6333686
6333683
2026-08-14T18:22:56Z
Ghybu
1393
silav :)
6333686
wikitext
text/x-wiki
{{xêrhatin}}
== Xêrhatin ==
Merheba bikarhênerê me yê hêja: ''Rewiye tine'',
Bi xêr hatî ferhenga kurdî-kurdî WÎKÎFERHENGê {{=)}}
Em hêvîdar in ku tu jî di avakirina vê ferhengê de alîkariya me bikî.
Eger pirsên te hebin, xêra xwe ji me re binivîse.
Xebatxweş.
:::::: -- [[Bikarhêner:Bikarhêner|Bikarhêner]] ([[Gotûbêja bikarhêner:Bikarhêner|gotûbêj]]) 14:38, 29 çiriya pêşîn 2019 (UTC)
== Bikarhêner:Rewiye tine/Peyvên min yên bêçavkanî û bêwate ==
Silav bira, dikarî vê lîsteyê mezintir bikî, heta ku em Pêvekek ji bo peyvên bêçavkanî çêkin. [[Bikarhêner:Rewiye tine/Peyvên min yên bêçavkanî û bêwate]] Qewet be!--[[Bikarhêner:Balyozxane|Balyozxane]] ([[Gotûbêja bikarhêner:Balyozxane|gotûbêj]]) 17:21, 2 tebax 2020 (UTC)
[[Bikarhêner:Rewiye tine]]Bêguman ez ê zêde bikim. Peyvên xerîb bala min dikişînin:). Zor spas dikim.
== [[Wîkîferheng:Tomarkirina peyvên ji wêjeya kurdî|Jêgirtinekê tomar bike]] ==
Silav. Ji bo peyvên ku wateyên wan tu nizanî, dewsa çêkirina gotaran gelo dikarî li '''[[Wîkîferheng:Tomarkirina peyvên ji wêjeya kurdî|Jêgirtinekê tomar bike]]''' zêde bikî? Bi vî sayî hem ez dikarim kengî wexta min hebe wan kontrol bikim û bi awayekî baştir lê zêde bikim hem jî karê me hêsantir û hindiktir be. Dibe? --[[Bikarhêner:Balyozxane|Balyozxane]] ([[Gotûbêja bikarhêner:Balyozxane|gotûbêj]]) 11:58, 4 îlon 2020 (UTC)
:{{r|Balyozxane}}Merhaba keko. Ji xwe destê min vî avayî hin peyv hebûn xeynî min zêdekirî. Eger peyv binîre tunebe ez lê dernexim wek te got ez ê jorê zêde bikim. Min jî dixesta bi te re vê meseleyê axivim. Gelek baş çebû. Mala te ava.[[Bikarhêner:Rewiye tine|Rewiye tine]] ([[Gotûbêja bikarhêner:Rewiye tine#top|gotûbêj]]) 18:12, 4 îlon 2020 (UTC)
::A te avatir :) Qewet be! --[[Bikarhêner:Balyozxane|Balyozxane]] ([[Gotûbêja bikarhêner:Balyozxane|gotûbêj]]) 18:21, 4 îlon 2020 (UTC)
:::Te got tu yê li jor lê zêde bikî hingê ew [[hela hela kirin]] çi ye {{=D}} --[[Bikarhêner:Balyozxane|Balyozxane]] ([[Gotûbêja bikarhêner:Balyozxane|gotûbêj]]) 18:49, 4 îlon 2020 (UTC)
:::{{r|Balyozxane}} Brako biya min dibe nebe ev peyv biwej e. Ma bihele em jî hinek hela hela bikin :D.<br>Henek dikim. Mesele ji bo '''xwewxe'' qet fikra min tune bû. Min jor zêde kir. Lê hela hela kirin :D<br>ihtimalek mêzin biwêj e biya min. [[Bikarhêner:Rewiye tine|Rewiye tine]] ([[Gotûbêja bikarhêner:Rewiye tine#top|gotûbêj]]) 18:55, 4 îlon 2020 (UTC)
::::Min gotibû hemû peyvên ku maneyên wan tu nizanî lê zêde neke heta em dikarin wateyekê jê re bibînin. Tenê cûreyê peyvê ne bes e. :/ --[[Bikarhêner:Balyozxane|Balyozxane]] ([[Gotûbêja bikarhêner:Balyozxane|gotûbêj]]) 19:02, 4 îlon 2020 (UTC)
{{r|Balyozxane}} Ez dê binêrim balyoz :D. hela hela :D
{{r|Balyozxane}} Keko bi rastî min dixwest karê te hesan bikim. Lê wisa ez kêf nastînim. Ez dînamîk şol dikim. Ez hez sûrat dikim. Ev tişt min disekînîne. Ji xwe nîve kitêb çû. Tu min bibore. Ez ê wek xwe dewam bikim çêtir e. Vî avayî ez xwe pêş dixim. Mesela hin paragraf hene ji xwe mane peyvê diyar e. Lê ewê ecêb ez dê jor parve bikim. Tu çi dibêjî? Binêr piştî te got ez sekînim. Ez her deqqe zêde dikim normalê.[[Bikarhêner:Rewiye tine|Rewiye tine]] ([[Gotûbêja bikarhêner:Rewiye tine#top|gotûbêj]]) 20:47, 4 îlon 2020 (UTC)
:Bira, ez ji bo peyvekê nîv saetek carina saetek çavkaniyan û wateyên cûda digerim. Armanca me '''ne''' çêkirina gelek peyvên bêwate ye loma bila hindik be rindik be :) Tu yê dest ji vî karî bernedî, piştî kitêb xilas bû, ne wisa? :D --[[Bikarhêner:Balyozxane|Balyozxane]] ([[Gotûbêja bikarhêner:Balyozxane|gotûbêj]]) 20:53, 4 îlon 2020 (UTC)
::Tu dîsa şablona jêgirtin/mela bazîdî bi kar bîne. Ez ê dûre stûnên din mîna "navê pirtûkê" û hwd binivîsim. --[[Bikarhêner:Balyozxane|Balyozxane]] ([[Gotûbêja bikarhêner:Balyozxane|gotûbêj]]) 20:55, 4 îlon 2020 (UTC)
{{r|Balyozxane}} Keko heta hetaye ez van dera me. quwet be[[Bikarhêner:Rewiye tine|Rewiye tine]] ([[Gotûbêja bikarhêner:Rewiye tine#top|gotûbêj]]) 08:11, 6 îlon 2020 (UTC)
== frankî ==
Silav, Te li vir [https://ku.wiktionary.org/w/index.php?title=cure&diff=4738684&oldid=4738683] wek frankî lê zêde kiribû lê ew rast e an divê fransî be? Koda fransî <code>fr</code> ye.--[[Bikarhêner:Balyozxane|Balyozxane]] ([[Gotûbêja bikarhêner:Balyozxane|gotûbêj]]) 21:45, 20 çiriya pêşîn 2020 (UTC)
:{{r|Balyozxane}}Baş e. Spas dikim. Min ferq nekirîbû. Min rast kir--[[Bikarhêner:Rewiye tine|Rewiye tine]] ([[Gotûbêja bikarhêner:Rewiye tine#top|gotûbêj]]) 10:57, 21 çiriya pêşîn 2020 (UTC)
::Destxweş! :) --[[Bikarhêner:Balyozxane|Balyozxane]] ([[Gotûbêja bikarhêner:Balyozxane|gotûbêj]]) 14:04, 21 çiriya pêşîn 2020 (UTC)
== Ferhenga Mehmet Bozarslan ==
Bira te ferhenga vî pir cara bi kar tînî, lê ew dibe îxlalê mafê telîfê. Tu dikarî li binê rûpelê de navê ferhengê binivîsî wek çavkanî lê agahiyan ji vê ferhengê rasterast kopî neke jkx. Herwiha min şablona wikipedia sererast kir. --[[Bikarhêner:Balyozxane|Balyozxane]] ([[Gotûbêja bikarhêner:Balyozxane|gotûbêj]]) 22:32, 6 çiriya paşîn 2020 (UTC)
== At last ==
dembaş, keko 'axirkê' bi wateya at least nayê [[Bikarhêner:Keyomerd|Keyomerd]] ([[Gotûbêja bikarhêner:Keyomerd|gotûbêj]]) 10:17, 26 adar 2021 (UTC)
:: {{r|Keyomerd}} merhaba ji te re. 'at last' li vir binêre [[https://www.thekurdishdictionary.com/en/search/english/kurmanci/at%20last]]--[[Bikarhêner:Rewiye tine|Rewiye tine]] ([[Gotûbêja bikarhêner:Rewiye tine#top|gotûbêj]]) 10:29, 26 adar 2021 (UTC)
== Arşîvkirin ==
Silav bira, kodek heye ji bo arşîvkirina rûpelan. Gelek bi kêr tê. Heke dixwazî bi kar bînî pêşî koda li jêr li [[Bikarhêner:Rewiye tine/common.js]] zêde bike
<syntaxhighlight lang="JavaScript">
mw.loader.load('//ku.wiktionary.org/w/index.php?title=Bikarhêner:Balyozxane/Gadget-aWa.js&action=raw&ctype=text/javascript');
</syntaxhighlight>
Dûre koda li vir [[Bikarhêner:Balyozxane/barkirin.css]] li rûpela xwe ya [[Bikarhêner:Rewiye tine/common.css]] kopî bike. Dûre dikarî li vir [[Wîkîferheng:ceribandin/aWa]] biceribînî. [[Bikarhêner:Balyozxane|Balyozxane]] ([[Gotûbêja bikarhêner:Balyozxane|gotûbêj]]) 16:06, 30 adar 2021 (UTC)
== Çima? ==
Silav @[[Bikarhêner:Rewiye tine|Rewiye tine]]. Te çima li hemû rûpelan Ziman "Kurmancî" hilbijart? Ma ev [[التنفس]] ne peyveke erebî ye? Ev [[هەناسەدان]] jî ne soranî ye? --[[Bikarhêner:Balyozxane|Balyozxane]] ([[Gotûbêja bikarhêner:Balyozxane|gotûbêj]]) 20:26, 21 kanûna pêşîn 2023 (UTC)
:xeletî çebûye. [[Bikarhêner:Rewiye tine|Rewiye tine]] ([[Gotûbêja bikarhêner:Rewiye tine#top|gotûbêj]]) 13:37, 22 kanûna pêşîn 2023 (UTC)
== Çawa yî? ==
Merheba bira, tu çawa yî? Tu wekî berê naxebitî êdî. Gelo çi bû? [[Bikarhêner:Balyozxane|Balyozxane]] ([[Gotûbêja bikarhêner:Balyozxane|gotûbêj]]) 21:53, 21 sibat 2024 (UTC)
:Merhaba ji te re jî. Hin projeyê min hene bi wan re mijûlîm. Karê standîsazyon giran bû. Ji min hew hat :D. Nîyeta min heye ferhengek fenî çêbikim. Ji bo vê yêke niha li vir zêdeyî kelîmeyên fenî zêde dikim. [[Bikarhêner:Rewiye tine|Rewiye tine]] ([[Gotûbêja bikarhêner:Rewiye tine#top|gotûbêj]]) 16:59, 22 sibat 2024 (UTC)
::@[[Bikarhêner:Rewiye tine|Rewiye tine]] Bi rastî di destpêkê de diviya me tenê ji bo kelîmeyên nîqaşbar li ferhengan din binêrin lê şûnda wê me ji bo hemû kelîme dinihêrt. Ew jî gelek em westandin. Niha eger ti kes îtîraz neke (jixwe ti kes naxebite) em forma ferhenga rastnivîsînê wekî standard nîşan didin.
::Min ê ji te re bigota komeke me ya aplîkasyonekê heye. Ez û çend hevalên ji Wîkîferhengê tê de ne. Gelo dixwazî beşdar bibî? Em sihbetên gelemper li ser ziman dikin. Eger bixwazî, dikarî ji min re e-maîlekê bişînî. [[Bikarhêner:Balyozxane|Balyozxane]] ([[Gotûbêja bikarhêner:Balyozxane|gotûbêj]]) 19:44, 22 sibat 2024 (UTC)
:::Dibe.Meîl? [[Bikarhêner:Rewiye tine|Rewiye tine]] ([[Gotûbêja bikarhêner:Rewiye tine#top|gotûbêj]]) 18:52, 6 kanûna pêşîn 2024 (UTC)
== [[WF:Nû]] ==
Merheba bira, min fam nekir te çima tiştekî wisa [https://ku.wiktionary.org/w/index.php?title=di%C4%9Fer_yandan&oldid=6333604] kiriye, problemek bi forma madeyan nû heye? Em çawa dikarin vê formê baştir bikin? Yan jî çi were îzah kirin da ku bikaranîn hêsantir be? [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 14:12, 14 tebax 2026 (UTC)
:Merhaba ji te re jî, hin qalib hene nakevin tu forma. An jî ez nizanim. Min jî girêdek hilbijart. Hin qalib hene di paragrafa de hevokan hev û du girê dide; weki ''ote yandan''. Bîya min divê ev qalib jî hebin. Lê ez ne pisporê vê karî me. Hûn dizanin, biryar ya we ye. [[Bikarhêner:Rewiye tine|Rewiye tine]] ([[Gotûbêja bikarhêner:Rewiye tine#top|gotûbêj]]) 15:32, 14 tebax 2026 (UTC)
::Na, ez behsa formata wîkîtekstê dikim. Tu li qismê nimûneyê nivisandiye, li şûna ku li qutiya "Tercimeyên rasterast ên kurmancî..." binivîsî, [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 15:37, 14 tebax 2026 (UTC)
:::Keko bi rastî min fam nekir. Bibore. Lê ji bo ku peyv tirkî bû min zêde li ser nesekînî. Peyv kurdî bûya heya ji min bihata min rind çêkira. [[Bikarhêner:Rewiye tine|Rewiye tine]] ([[Gotûbêja bikarhêner:Rewiye tine#top|gotûbêj]]) 15:49, 14 tebax 2026 (UTC)
::::Yaw bira, Wextê sayfeyekî nû çêdikî, formek tê li pêşberî te. Ziman û dûre Cureyê rêzimanî hildibijêrî, ez dibêjim em çawa dikarin vê formê baştir bikin. Fikrên te hene? Tu li şûna ku formê bi kar bînî, rasterast diçî ser "Edîtorê". Min gelek li ser çêkirina vê "formê" xebitiye. Dixwazim însanên din jî bi hêsanî bi kar bînin. Tiştekî heye ku em dikarin rast bikin? Yan jî îlawe bikin? [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:00, 14 tebax 2026 (UTC)
:::::Binêre herwiha (bnr-), bîya min ev serê yekî dibe ku tevlîhev bike. Li herî jor e, yê ku cara ewil bixwaze tiştek zêde bike yê wî bitirsîne. Gelo em nikarin danin li derekî jêr? Berê bilêvkirin otomatîk çêdibû. Niha bêhtir zehmet buye ji bo yekî nezan. Gelek şablon hene. Mirov kîjan şablonê divê hilbijire? Tu dikarî wekî sembolek soru îşaretî danî li wir hinek rave bikî. An jî dikarî lînkek danî ku here rûpelek din û li vir rave bixwîne. Şablonên mana jî dikare serê yekî tevlîhev bike. Guherto?, kevnbûyî? Ku-latn? Awayekî din? Paşnav? Şaşnivîs? Famkirina van zehmet e. Bîya min tu lînkek danî li serî û di rupelek de mînakan bidî. Çiqas varyasyonên mînakan zêde bin kesek bêhtir mesele fem bike. Xelet fem neke, bi rastî jî şahane çêbûye. Tiştekî pîroz e. Mala te ava. Ez şablonê fam dikim. Ne ji bo xwe dibêjim. Lê ji bo ew e cara yekemîn bikarbînin dibe ku ji wan re zehmet be. Rastî ev şablon karê me yê gelek hêsan bike lê gelek detay hene. Dibe ku mirov ji van detayan bitirse. [[Bikarhêner:Rewiye tine|Rewiye tine]] ([[Gotûbêja bikarhêner:Rewiye tine#top|gotûbêj]]) 16:36, 14 tebax 2026 (UTC)
::::::@[[Bikarhêner:Wikihez|Wikihez]] Ew derên mecburî were tijî kirin mirov sor çêke çawa ye? Çimkî dibe ku bejin qey dive hemû rupelê tijî bikin. Heçko punto jî biçûk in, xwendina wan hinek zehmet e. Divê alîyê famkirinê de hinek li ser were xebitandin. [[Bikarhêner:Rewiye tine|Rewiye tine]] ([[Gotûbêja bikarhêner:Rewiye tine#top|gotûbêj]]) 16:41, 14 tebax 2026 (UTC)
:::::::@[[Bikarhêner:Wikihez|Wikihez]] Tu dikarî ji min pirsî, înş ez ê bersiva te bidim. Behna min vekirîye. [[Bikarhêner:Rewiye tine|Rewiye tine]] ([[Gotûbêja bikarhêner:Rewiye tine#top|gotûbêj]]) 16:45, 14 tebax 2026 (UTC)
::::::::Mala te ava, nîyeta min jî hebû bila du form hebe yekî kurt yekî pêşketî, pêşî bila bi ya kurt dest pê bike, dûre ê ku dixwaze ya pêşketî bi kar bîne. Hinek karên din xilas bibin ez ê li ser wan xisûsan bixebitim înşellah [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 17:07, 14 tebax 2026 (UTC)
:::::::::# Silav,
:::::::::# (ne hewce ye) "bnr-h" were rakirin
:::::::::# (ne hewce ye) Wêne (resim) were rakirin (li jêr were nivîsandin)
:::::::::# (ne hewce ye) "Bilêvkirin" bin beşa Ziman û ser "Cureyê rêzimanî" hatiye nivîsandin: ne baş e. Bin beşa "Cureyê peyvê" were nivîsandin. Cem "Mane" li aliyê rast wekî "tab" (ji ber ku nivîsandin ne hewce ye)
:::::::::# (hewce ye) "Cureyê rêzimanî" û "Parametreyên cureyê rêzimanî" (hewce ye) cem hev werin nivîsandin. Nivîsa "Parametreyên ..." ne baş e :) Tenê "Cins/zayend" ji bo navdêran bes e. Ji bo lêkeran jî "Cureyê lêkerê" (di nav de: rehê dema niha, ...). Tenê rêzek...
:::::::::# "Bikaranîn" û "Bilêvkirin, hevmane, jê, alt., .." wekî "tab" cem "Mane"
:::::::::# (ne hewce ne) Beşên din jî li jêr di bin beşa "Bilêvkirin, hevmane, jê, alt, .."
:::::::::Nizanim tiştên ku min nivîsand tên fêm kirin an na? :) [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 18:09, 14 tebax 2026 (UTC)
::::::::::PS: Lojîk va ye: tiştên ku hewce ne werin dîtin yên ku ne hewce ne wekî "tab" çêke :) [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 18:16, 14 tebax 2026 (UTC)
4vjqvnxme2o9yyt6dmcuig5ztx9f0yn
6333687
6333686
2026-08-14T18:23:37Z
Ghybu
1393
/* WF:Nû */
6333687
wikitext
text/x-wiki
{{xêrhatin}}
== Xêrhatin ==
Merheba bikarhênerê me yê hêja: ''Rewiye tine'',
Bi xêr hatî ferhenga kurdî-kurdî WÎKÎFERHENGê {{=)}}
Em hêvîdar in ku tu jî di avakirina vê ferhengê de alîkariya me bikî.
Eger pirsên te hebin, xêra xwe ji me re binivîse.
Xebatxweş.
:::::: -- [[Bikarhêner:Bikarhêner|Bikarhêner]] ([[Gotûbêja bikarhêner:Bikarhêner|gotûbêj]]) 14:38, 29 çiriya pêşîn 2019 (UTC)
== Bikarhêner:Rewiye tine/Peyvên min yên bêçavkanî û bêwate ==
Silav bira, dikarî vê lîsteyê mezintir bikî, heta ku em Pêvekek ji bo peyvên bêçavkanî çêkin. [[Bikarhêner:Rewiye tine/Peyvên min yên bêçavkanî û bêwate]] Qewet be!--[[Bikarhêner:Balyozxane|Balyozxane]] ([[Gotûbêja bikarhêner:Balyozxane|gotûbêj]]) 17:21, 2 tebax 2020 (UTC)
[[Bikarhêner:Rewiye tine]]Bêguman ez ê zêde bikim. Peyvên xerîb bala min dikişînin:). Zor spas dikim.
== [[Wîkîferheng:Tomarkirina peyvên ji wêjeya kurdî|Jêgirtinekê tomar bike]] ==
Silav. Ji bo peyvên ku wateyên wan tu nizanî, dewsa çêkirina gotaran gelo dikarî li '''[[Wîkîferheng:Tomarkirina peyvên ji wêjeya kurdî|Jêgirtinekê tomar bike]]''' zêde bikî? Bi vî sayî hem ez dikarim kengî wexta min hebe wan kontrol bikim û bi awayekî baştir lê zêde bikim hem jî karê me hêsantir û hindiktir be. Dibe? --[[Bikarhêner:Balyozxane|Balyozxane]] ([[Gotûbêja bikarhêner:Balyozxane|gotûbêj]]) 11:58, 4 îlon 2020 (UTC)
:{{r|Balyozxane}}Merhaba keko. Ji xwe destê min vî avayî hin peyv hebûn xeynî min zêdekirî. Eger peyv binîre tunebe ez lê dernexim wek te got ez ê jorê zêde bikim. Min jî dixesta bi te re vê meseleyê axivim. Gelek baş çebû. Mala te ava.[[Bikarhêner:Rewiye tine|Rewiye tine]] ([[Gotûbêja bikarhêner:Rewiye tine#top|gotûbêj]]) 18:12, 4 îlon 2020 (UTC)
::A te avatir :) Qewet be! --[[Bikarhêner:Balyozxane|Balyozxane]] ([[Gotûbêja bikarhêner:Balyozxane|gotûbêj]]) 18:21, 4 îlon 2020 (UTC)
:::Te got tu yê li jor lê zêde bikî hingê ew [[hela hela kirin]] çi ye {{=D}} --[[Bikarhêner:Balyozxane|Balyozxane]] ([[Gotûbêja bikarhêner:Balyozxane|gotûbêj]]) 18:49, 4 îlon 2020 (UTC)
:::{{r|Balyozxane}} Brako biya min dibe nebe ev peyv biwej e. Ma bihele em jî hinek hela hela bikin :D.<br>Henek dikim. Mesele ji bo '''xwewxe'' qet fikra min tune bû. Min jor zêde kir. Lê hela hela kirin :D<br>ihtimalek mêzin biwêj e biya min. [[Bikarhêner:Rewiye tine|Rewiye tine]] ([[Gotûbêja bikarhêner:Rewiye tine#top|gotûbêj]]) 18:55, 4 îlon 2020 (UTC)
::::Min gotibû hemû peyvên ku maneyên wan tu nizanî lê zêde neke heta em dikarin wateyekê jê re bibînin. Tenê cûreyê peyvê ne bes e. :/ --[[Bikarhêner:Balyozxane|Balyozxane]] ([[Gotûbêja bikarhêner:Balyozxane|gotûbêj]]) 19:02, 4 îlon 2020 (UTC)
{{r|Balyozxane}} Ez dê binêrim balyoz :D. hela hela :D
{{r|Balyozxane}} Keko bi rastî min dixwest karê te hesan bikim. Lê wisa ez kêf nastînim. Ez dînamîk şol dikim. Ez hez sûrat dikim. Ev tişt min disekînîne. Ji xwe nîve kitêb çû. Tu min bibore. Ez ê wek xwe dewam bikim çêtir e. Vî avayî ez xwe pêş dixim. Mesela hin paragraf hene ji xwe mane peyvê diyar e. Lê ewê ecêb ez dê jor parve bikim. Tu çi dibêjî? Binêr piştî te got ez sekînim. Ez her deqqe zêde dikim normalê.[[Bikarhêner:Rewiye tine|Rewiye tine]] ([[Gotûbêja bikarhêner:Rewiye tine#top|gotûbêj]]) 20:47, 4 îlon 2020 (UTC)
:Bira, ez ji bo peyvekê nîv saetek carina saetek çavkaniyan û wateyên cûda digerim. Armanca me '''ne''' çêkirina gelek peyvên bêwate ye loma bila hindik be rindik be :) Tu yê dest ji vî karî bernedî, piştî kitêb xilas bû, ne wisa? :D --[[Bikarhêner:Balyozxane|Balyozxane]] ([[Gotûbêja bikarhêner:Balyozxane|gotûbêj]]) 20:53, 4 îlon 2020 (UTC)
::Tu dîsa şablona jêgirtin/mela bazîdî bi kar bîne. Ez ê dûre stûnên din mîna "navê pirtûkê" û hwd binivîsim. --[[Bikarhêner:Balyozxane|Balyozxane]] ([[Gotûbêja bikarhêner:Balyozxane|gotûbêj]]) 20:55, 4 îlon 2020 (UTC)
{{r|Balyozxane}} Keko heta hetaye ez van dera me. quwet be[[Bikarhêner:Rewiye tine|Rewiye tine]] ([[Gotûbêja bikarhêner:Rewiye tine#top|gotûbêj]]) 08:11, 6 îlon 2020 (UTC)
== frankî ==
Silav, Te li vir [https://ku.wiktionary.org/w/index.php?title=cure&diff=4738684&oldid=4738683] wek frankî lê zêde kiribû lê ew rast e an divê fransî be? Koda fransî <code>fr</code> ye.--[[Bikarhêner:Balyozxane|Balyozxane]] ([[Gotûbêja bikarhêner:Balyozxane|gotûbêj]]) 21:45, 20 çiriya pêşîn 2020 (UTC)
:{{r|Balyozxane}}Baş e. Spas dikim. Min ferq nekirîbû. Min rast kir--[[Bikarhêner:Rewiye tine|Rewiye tine]] ([[Gotûbêja bikarhêner:Rewiye tine#top|gotûbêj]]) 10:57, 21 çiriya pêşîn 2020 (UTC)
::Destxweş! :) --[[Bikarhêner:Balyozxane|Balyozxane]] ([[Gotûbêja bikarhêner:Balyozxane|gotûbêj]]) 14:04, 21 çiriya pêşîn 2020 (UTC)
== Ferhenga Mehmet Bozarslan ==
Bira te ferhenga vî pir cara bi kar tînî, lê ew dibe îxlalê mafê telîfê. Tu dikarî li binê rûpelê de navê ferhengê binivîsî wek çavkanî lê agahiyan ji vê ferhengê rasterast kopî neke jkx. Herwiha min şablona wikipedia sererast kir. --[[Bikarhêner:Balyozxane|Balyozxane]] ([[Gotûbêja bikarhêner:Balyozxane|gotûbêj]]) 22:32, 6 çiriya paşîn 2020 (UTC)
== At last ==
dembaş, keko 'axirkê' bi wateya at least nayê [[Bikarhêner:Keyomerd|Keyomerd]] ([[Gotûbêja bikarhêner:Keyomerd|gotûbêj]]) 10:17, 26 adar 2021 (UTC)
:: {{r|Keyomerd}} merhaba ji te re. 'at last' li vir binêre [[https://www.thekurdishdictionary.com/en/search/english/kurmanci/at%20last]]--[[Bikarhêner:Rewiye tine|Rewiye tine]] ([[Gotûbêja bikarhêner:Rewiye tine#top|gotûbêj]]) 10:29, 26 adar 2021 (UTC)
== Arşîvkirin ==
Silav bira, kodek heye ji bo arşîvkirina rûpelan. Gelek bi kêr tê. Heke dixwazî bi kar bînî pêşî koda li jêr li [[Bikarhêner:Rewiye tine/common.js]] zêde bike
<syntaxhighlight lang="JavaScript">
mw.loader.load('//ku.wiktionary.org/w/index.php?title=Bikarhêner:Balyozxane/Gadget-aWa.js&action=raw&ctype=text/javascript');
</syntaxhighlight>
Dûre koda li vir [[Bikarhêner:Balyozxane/barkirin.css]] li rûpela xwe ya [[Bikarhêner:Rewiye tine/common.css]] kopî bike. Dûre dikarî li vir [[Wîkîferheng:ceribandin/aWa]] biceribînî. [[Bikarhêner:Balyozxane|Balyozxane]] ([[Gotûbêja bikarhêner:Balyozxane|gotûbêj]]) 16:06, 30 adar 2021 (UTC)
== Çima? ==
Silav @[[Bikarhêner:Rewiye tine|Rewiye tine]]. Te çima li hemû rûpelan Ziman "Kurmancî" hilbijart? Ma ev [[التنفس]] ne peyveke erebî ye? Ev [[هەناسەدان]] jî ne soranî ye? --[[Bikarhêner:Balyozxane|Balyozxane]] ([[Gotûbêja bikarhêner:Balyozxane|gotûbêj]]) 20:26, 21 kanûna pêşîn 2023 (UTC)
:xeletî çebûye. [[Bikarhêner:Rewiye tine|Rewiye tine]] ([[Gotûbêja bikarhêner:Rewiye tine#top|gotûbêj]]) 13:37, 22 kanûna pêşîn 2023 (UTC)
== Çawa yî? ==
Merheba bira, tu çawa yî? Tu wekî berê naxebitî êdî. Gelo çi bû? [[Bikarhêner:Balyozxane|Balyozxane]] ([[Gotûbêja bikarhêner:Balyozxane|gotûbêj]]) 21:53, 21 sibat 2024 (UTC)
:Merhaba ji te re jî. Hin projeyê min hene bi wan re mijûlîm. Karê standîsazyon giran bû. Ji min hew hat :D. Nîyeta min heye ferhengek fenî çêbikim. Ji bo vê yêke niha li vir zêdeyî kelîmeyên fenî zêde dikim. [[Bikarhêner:Rewiye tine|Rewiye tine]] ([[Gotûbêja bikarhêner:Rewiye tine#top|gotûbêj]]) 16:59, 22 sibat 2024 (UTC)
::@[[Bikarhêner:Rewiye tine|Rewiye tine]] Bi rastî di destpêkê de diviya me tenê ji bo kelîmeyên nîqaşbar li ferhengan din binêrin lê şûnda wê me ji bo hemû kelîme dinihêrt. Ew jî gelek em westandin. Niha eger ti kes îtîraz neke (jixwe ti kes naxebite) em forma ferhenga rastnivîsînê wekî standard nîşan didin.
::Min ê ji te re bigota komeke me ya aplîkasyonekê heye. Ez û çend hevalên ji Wîkîferhengê tê de ne. Gelo dixwazî beşdar bibî? Em sihbetên gelemper li ser ziman dikin. Eger bixwazî, dikarî ji min re e-maîlekê bişînî. [[Bikarhêner:Balyozxane|Balyozxane]] ([[Gotûbêja bikarhêner:Balyozxane|gotûbêj]]) 19:44, 22 sibat 2024 (UTC)
:::Dibe.Meîl? [[Bikarhêner:Rewiye tine|Rewiye tine]] ([[Gotûbêja bikarhêner:Rewiye tine#top|gotûbêj]]) 18:52, 6 kanûna pêşîn 2024 (UTC)
== [[WF:Nû]] ==
Merheba bira, min fam nekir te çima tiştekî wisa [https://ku.wiktionary.org/w/index.php?title=di%C4%9Fer_yandan&oldid=6333604] kiriye, problemek bi forma madeyan nû heye? Em çawa dikarin vê formê baştir bikin? Yan jî çi were îzah kirin da ku bikaranîn hêsantir be? [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 14:12, 14 tebax 2026 (UTC)
:Merhaba ji te re jî, hin qalib hene nakevin tu forma. An jî ez nizanim. Min jî girêdek hilbijart. Hin qalib hene di paragrafa de hevokan hev û du girê dide; weki ''ote yandan''. Bîya min divê ev qalib jî hebin. Lê ez ne pisporê vê karî me. Hûn dizanin, biryar ya we ye. [[Bikarhêner:Rewiye tine|Rewiye tine]] ([[Gotûbêja bikarhêner:Rewiye tine#top|gotûbêj]]) 15:32, 14 tebax 2026 (UTC)
::Na, ez behsa formata wîkîtekstê dikim. Tu li qismê nimûneyê nivisandiye, li şûna ku li qutiya "Tercimeyên rasterast ên kurmancî..." binivîsî, [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 15:37, 14 tebax 2026 (UTC)
:::Keko bi rastî min fam nekir. Bibore. Lê ji bo ku peyv tirkî bû min zêde li ser nesekînî. Peyv kurdî bûya heya ji min bihata min rind çêkira. [[Bikarhêner:Rewiye tine|Rewiye tine]] ([[Gotûbêja bikarhêner:Rewiye tine#top|gotûbêj]]) 15:49, 14 tebax 2026 (UTC)
::::Yaw bira, Wextê sayfeyekî nû çêdikî, formek tê li pêşberî te. Ziman û dûre Cureyê rêzimanî hildibijêrî, ez dibêjim em çawa dikarin vê formê baştir bikin. Fikrên te hene? Tu li şûna ku formê bi kar bînî, rasterast diçî ser "Edîtorê". Min gelek li ser çêkirina vê "formê" xebitiye. Dixwazim însanên din jî bi hêsanî bi kar bînin. Tiştekî heye ku em dikarin rast bikin? Yan jî îlawe bikin? [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:00, 14 tebax 2026 (UTC)
:::::Binêre herwiha (bnr-), bîya min ev serê yekî dibe ku tevlîhev bike. Li herî jor e, yê ku cara ewil bixwaze tiştek zêde bike yê wî bitirsîne. Gelo em nikarin danin li derekî jêr? Berê bilêvkirin otomatîk çêdibû. Niha bêhtir zehmet buye ji bo yekî nezan. Gelek şablon hene. Mirov kîjan şablonê divê hilbijire? Tu dikarî wekî sembolek soru îşaretî danî li wir hinek rave bikî. An jî dikarî lînkek danî ku here rûpelek din û li vir rave bixwîne. Şablonên mana jî dikare serê yekî tevlîhev bike. Guherto?, kevnbûyî? Ku-latn? Awayekî din? Paşnav? Şaşnivîs? Famkirina van zehmet e. Bîya min tu lînkek danî li serî û di rupelek de mînakan bidî. Çiqas varyasyonên mînakan zêde bin kesek bêhtir mesele fem bike. Xelet fem neke, bi rastî jî şahane çêbûye. Tiştekî pîroz e. Mala te ava. Ez şablonê fam dikim. Ne ji bo xwe dibêjim. Lê ji bo ew e cara yekemîn bikarbînin dibe ku ji wan re zehmet be. Rastî ev şablon karê me yê gelek hêsan bike lê gelek detay hene. Dibe ku mirov ji van detayan bitirse. [[Bikarhêner:Rewiye tine|Rewiye tine]] ([[Gotûbêja bikarhêner:Rewiye tine#top|gotûbêj]]) 16:36, 14 tebax 2026 (UTC)
::::::@[[Bikarhêner:Wikihez|Wikihez]] Ew derên mecburî were tijî kirin mirov sor çêke çawa ye? Çimkî dibe ku bejin qey dive hemû rupelê tijî bikin. Heçko punto jî biçûk in, xwendina wan hinek zehmet e. Divê alîyê famkirinê de hinek li ser were xebitandin. [[Bikarhêner:Rewiye tine|Rewiye tine]] ([[Gotûbêja bikarhêner:Rewiye tine#top|gotûbêj]]) 16:41, 14 tebax 2026 (UTC)
:::::::@[[Bikarhêner:Wikihez|Wikihez]] Tu dikarî ji min pirsî, înş ez ê bersiva te bidim. Behna min vekirîye. [[Bikarhêner:Rewiye tine|Rewiye tine]] ([[Gotûbêja bikarhêner:Rewiye tine#top|gotûbêj]]) 16:45, 14 tebax 2026 (UTC)
::::::::Mala te ava, nîyeta min jî hebû bila du form hebe yekî kurt yekî pêşketî, pêşî bila bi ya kurt dest pê bike, dûre ê ku dixwaze ya pêşketî bi kar bîne. Hinek karên din xilas bibin ez ê li ser wan xisûsan bixebitim înşellah [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 17:07, 14 tebax 2026 (UTC)
:::::::::Silav,
:::::::::# (ne hewce ye) "bnr-h" were rakirin
:::::::::# (ne hewce ye) Wêne (resim) were rakirin (li jêr were nivîsandin)
:::::::::# (ne hewce ye) "Bilêvkirin" bin beşa Ziman û ser "Cureyê rêzimanî" hatiye nivîsandin: ne baş e. Bin beşa "Cureyê peyvê" were nivîsandin. Cem "Mane" li aliyê rast wekî "tab" (ji ber ku nivîsandin ne hewce ye)
:::::::::# (hewce ye) "Cureyê rêzimanî" û "Parametreyên cureyê rêzimanî" (hewce ye) cem hev werin nivîsandin. Nivîsa "Parametreyên ..." ne baş e :) Tenê "Cins/zayend" ji bo navdêran bes e. Ji bo lêkeran jî "Cureyê lêkerê" (di nav de: rehê dema niha, ...). Tenê rêzek...
:::::::::# "Bikaranîn" û "Bilêvkirin, hevmane, jê, alt., .." wekî "tab" cem "Mane"
:::::::::# (ne hewce ne) Beşên din jî li jêr di bin beşa "Bilêvkirin, hevmane, jê, alt, .."
:::::::::Nizanim tiştên ku min nivîsand tên fêm kirin an na? :) [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 18:09, 14 tebax 2026 (UTC)
::::::::::PS: Lojîk va ye: tiştên ku hewce ne werin dîtin yên ku ne hewce ne wekî "tab" çêke :) [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 18:16, 14 tebax 2026 (UTC)
8ld0gjugpnaiwkwldlg0wvtd2dxshlf
6333688
6333687
2026-08-14T18:27:29Z
Ghybu
1393
/* WF:Nû */
6333688
wikitext
text/x-wiki
{{xêrhatin}}
== Xêrhatin ==
Merheba bikarhênerê me yê hêja: ''Rewiye tine'',
Bi xêr hatî ferhenga kurdî-kurdî WÎKÎFERHENGê {{=)}}
Em hêvîdar in ku tu jî di avakirina vê ferhengê de alîkariya me bikî.
Eger pirsên te hebin, xêra xwe ji me re binivîse.
Xebatxweş.
:::::: -- [[Bikarhêner:Bikarhêner|Bikarhêner]] ([[Gotûbêja bikarhêner:Bikarhêner|gotûbêj]]) 14:38, 29 çiriya pêşîn 2019 (UTC)
== Bikarhêner:Rewiye tine/Peyvên min yên bêçavkanî û bêwate ==
Silav bira, dikarî vê lîsteyê mezintir bikî, heta ku em Pêvekek ji bo peyvên bêçavkanî çêkin. [[Bikarhêner:Rewiye tine/Peyvên min yên bêçavkanî û bêwate]] Qewet be!--[[Bikarhêner:Balyozxane|Balyozxane]] ([[Gotûbêja bikarhêner:Balyozxane|gotûbêj]]) 17:21, 2 tebax 2020 (UTC)
[[Bikarhêner:Rewiye tine]]Bêguman ez ê zêde bikim. Peyvên xerîb bala min dikişînin:). Zor spas dikim.
== [[Wîkîferheng:Tomarkirina peyvên ji wêjeya kurdî|Jêgirtinekê tomar bike]] ==
Silav. Ji bo peyvên ku wateyên wan tu nizanî, dewsa çêkirina gotaran gelo dikarî li '''[[Wîkîferheng:Tomarkirina peyvên ji wêjeya kurdî|Jêgirtinekê tomar bike]]''' zêde bikî? Bi vî sayî hem ez dikarim kengî wexta min hebe wan kontrol bikim û bi awayekî baştir lê zêde bikim hem jî karê me hêsantir û hindiktir be. Dibe? --[[Bikarhêner:Balyozxane|Balyozxane]] ([[Gotûbêja bikarhêner:Balyozxane|gotûbêj]]) 11:58, 4 îlon 2020 (UTC)
:{{r|Balyozxane}}Merhaba keko. Ji xwe destê min vî avayî hin peyv hebûn xeynî min zêdekirî. Eger peyv binîre tunebe ez lê dernexim wek te got ez ê jorê zêde bikim. Min jî dixesta bi te re vê meseleyê axivim. Gelek baş çebû. Mala te ava.[[Bikarhêner:Rewiye tine|Rewiye tine]] ([[Gotûbêja bikarhêner:Rewiye tine#top|gotûbêj]]) 18:12, 4 îlon 2020 (UTC)
::A te avatir :) Qewet be! --[[Bikarhêner:Balyozxane|Balyozxane]] ([[Gotûbêja bikarhêner:Balyozxane|gotûbêj]]) 18:21, 4 îlon 2020 (UTC)
:::Te got tu yê li jor lê zêde bikî hingê ew [[hela hela kirin]] çi ye {{=D}} --[[Bikarhêner:Balyozxane|Balyozxane]] ([[Gotûbêja bikarhêner:Balyozxane|gotûbêj]]) 18:49, 4 îlon 2020 (UTC)
:::{{r|Balyozxane}} Brako biya min dibe nebe ev peyv biwej e. Ma bihele em jî hinek hela hela bikin :D.<br>Henek dikim. Mesele ji bo '''xwewxe'' qet fikra min tune bû. Min jor zêde kir. Lê hela hela kirin :D<br>ihtimalek mêzin biwêj e biya min. [[Bikarhêner:Rewiye tine|Rewiye tine]] ([[Gotûbêja bikarhêner:Rewiye tine#top|gotûbêj]]) 18:55, 4 îlon 2020 (UTC)
::::Min gotibû hemû peyvên ku maneyên wan tu nizanî lê zêde neke heta em dikarin wateyekê jê re bibînin. Tenê cûreyê peyvê ne bes e. :/ --[[Bikarhêner:Balyozxane|Balyozxane]] ([[Gotûbêja bikarhêner:Balyozxane|gotûbêj]]) 19:02, 4 îlon 2020 (UTC)
{{r|Balyozxane}} Ez dê binêrim balyoz :D. hela hela :D
{{r|Balyozxane}} Keko bi rastî min dixwest karê te hesan bikim. Lê wisa ez kêf nastînim. Ez dînamîk şol dikim. Ez hez sûrat dikim. Ev tişt min disekînîne. Ji xwe nîve kitêb çû. Tu min bibore. Ez ê wek xwe dewam bikim çêtir e. Vî avayî ez xwe pêş dixim. Mesela hin paragraf hene ji xwe mane peyvê diyar e. Lê ewê ecêb ez dê jor parve bikim. Tu çi dibêjî? Binêr piştî te got ez sekînim. Ez her deqqe zêde dikim normalê.[[Bikarhêner:Rewiye tine|Rewiye tine]] ([[Gotûbêja bikarhêner:Rewiye tine#top|gotûbêj]]) 20:47, 4 îlon 2020 (UTC)
:Bira, ez ji bo peyvekê nîv saetek carina saetek çavkaniyan û wateyên cûda digerim. Armanca me '''ne''' çêkirina gelek peyvên bêwate ye loma bila hindik be rindik be :) Tu yê dest ji vî karî bernedî, piştî kitêb xilas bû, ne wisa? :D --[[Bikarhêner:Balyozxane|Balyozxane]] ([[Gotûbêja bikarhêner:Balyozxane|gotûbêj]]) 20:53, 4 îlon 2020 (UTC)
::Tu dîsa şablona jêgirtin/mela bazîdî bi kar bîne. Ez ê dûre stûnên din mîna "navê pirtûkê" û hwd binivîsim. --[[Bikarhêner:Balyozxane|Balyozxane]] ([[Gotûbêja bikarhêner:Balyozxane|gotûbêj]]) 20:55, 4 îlon 2020 (UTC)
{{r|Balyozxane}} Keko heta hetaye ez van dera me. quwet be[[Bikarhêner:Rewiye tine|Rewiye tine]] ([[Gotûbêja bikarhêner:Rewiye tine#top|gotûbêj]]) 08:11, 6 îlon 2020 (UTC)
== frankî ==
Silav, Te li vir [https://ku.wiktionary.org/w/index.php?title=cure&diff=4738684&oldid=4738683] wek frankî lê zêde kiribû lê ew rast e an divê fransî be? Koda fransî <code>fr</code> ye.--[[Bikarhêner:Balyozxane|Balyozxane]] ([[Gotûbêja bikarhêner:Balyozxane|gotûbêj]]) 21:45, 20 çiriya pêşîn 2020 (UTC)
:{{r|Balyozxane}}Baş e. Spas dikim. Min ferq nekirîbû. Min rast kir--[[Bikarhêner:Rewiye tine|Rewiye tine]] ([[Gotûbêja bikarhêner:Rewiye tine#top|gotûbêj]]) 10:57, 21 çiriya pêşîn 2020 (UTC)
::Destxweş! :) --[[Bikarhêner:Balyozxane|Balyozxane]] ([[Gotûbêja bikarhêner:Balyozxane|gotûbêj]]) 14:04, 21 çiriya pêşîn 2020 (UTC)
== Ferhenga Mehmet Bozarslan ==
Bira te ferhenga vî pir cara bi kar tînî, lê ew dibe îxlalê mafê telîfê. Tu dikarî li binê rûpelê de navê ferhengê binivîsî wek çavkanî lê agahiyan ji vê ferhengê rasterast kopî neke jkx. Herwiha min şablona wikipedia sererast kir. --[[Bikarhêner:Balyozxane|Balyozxane]] ([[Gotûbêja bikarhêner:Balyozxane|gotûbêj]]) 22:32, 6 çiriya paşîn 2020 (UTC)
== At last ==
dembaş, keko 'axirkê' bi wateya at least nayê [[Bikarhêner:Keyomerd|Keyomerd]] ([[Gotûbêja bikarhêner:Keyomerd|gotûbêj]]) 10:17, 26 adar 2021 (UTC)
:: {{r|Keyomerd}} merhaba ji te re. 'at last' li vir binêre [[https://www.thekurdishdictionary.com/en/search/english/kurmanci/at%20last]]--[[Bikarhêner:Rewiye tine|Rewiye tine]] ([[Gotûbêja bikarhêner:Rewiye tine#top|gotûbêj]]) 10:29, 26 adar 2021 (UTC)
== Arşîvkirin ==
Silav bira, kodek heye ji bo arşîvkirina rûpelan. Gelek bi kêr tê. Heke dixwazî bi kar bînî pêşî koda li jêr li [[Bikarhêner:Rewiye tine/common.js]] zêde bike
<syntaxhighlight lang="JavaScript">
mw.loader.load('//ku.wiktionary.org/w/index.php?title=Bikarhêner:Balyozxane/Gadget-aWa.js&action=raw&ctype=text/javascript');
</syntaxhighlight>
Dûre koda li vir [[Bikarhêner:Balyozxane/barkirin.css]] li rûpela xwe ya [[Bikarhêner:Rewiye tine/common.css]] kopî bike. Dûre dikarî li vir [[Wîkîferheng:ceribandin/aWa]] biceribînî. [[Bikarhêner:Balyozxane|Balyozxane]] ([[Gotûbêja bikarhêner:Balyozxane|gotûbêj]]) 16:06, 30 adar 2021 (UTC)
== Çima? ==
Silav @[[Bikarhêner:Rewiye tine|Rewiye tine]]. Te çima li hemû rûpelan Ziman "Kurmancî" hilbijart? Ma ev [[التنفس]] ne peyveke erebî ye? Ev [[هەناسەدان]] jî ne soranî ye? --[[Bikarhêner:Balyozxane|Balyozxane]] ([[Gotûbêja bikarhêner:Balyozxane|gotûbêj]]) 20:26, 21 kanûna pêşîn 2023 (UTC)
:xeletî çebûye. [[Bikarhêner:Rewiye tine|Rewiye tine]] ([[Gotûbêja bikarhêner:Rewiye tine#top|gotûbêj]]) 13:37, 22 kanûna pêşîn 2023 (UTC)
== Çawa yî? ==
Merheba bira, tu çawa yî? Tu wekî berê naxebitî êdî. Gelo çi bû? [[Bikarhêner:Balyozxane|Balyozxane]] ([[Gotûbêja bikarhêner:Balyozxane|gotûbêj]]) 21:53, 21 sibat 2024 (UTC)
:Merhaba ji te re jî. Hin projeyê min hene bi wan re mijûlîm. Karê standîsazyon giran bû. Ji min hew hat :D. Nîyeta min heye ferhengek fenî çêbikim. Ji bo vê yêke niha li vir zêdeyî kelîmeyên fenî zêde dikim. [[Bikarhêner:Rewiye tine|Rewiye tine]] ([[Gotûbêja bikarhêner:Rewiye tine#top|gotûbêj]]) 16:59, 22 sibat 2024 (UTC)
::@[[Bikarhêner:Rewiye tine|Rewiye tine]] Bi rastî di destpêkê de diviya me tenê ji bo kelîmeyên nîqaşbar li ferhengan din binêrin lê şûnda wê me ji bo hemû kelîme dinihêrt. Ew jî gelek em westandin. Niha eger ti kes îtîraz neke (jixwe ti kes naxebite) em forma ferhenga rastnivîsînê wekî standard nîşan didin.
::Min ê ji te re bigota komeke me ya aplîkasyonekê heye. Ez û çend hevalên ji Wîkîferhengê tê de ne. Gelo dixwazî beşdar bibî? Em sihbetên gelemper li ser ziman dikin. Eger bixwazî, dikarî ji min re e-maîlekê bişînî. [[Bikarhêner:Balyozxane|Balyozxane]] ([[Gotûbêja bikarhêner:Balyozxane|gotûbêj]]) 19:44, 22 sibat 2024 (UTC)
:::Dibe.Meîl? [[Bikarhêner:Rewiye tine|Rewiye tine]] ([[Gotûbêja bikarhêner:Rewiye tine#top|gotûbêj]]) 18:52, 6 kanûna pêşîn 2024 (UTC)
== [[WF:Nû]] ==
Merheba bira, min fam nekir te çima tiştekî wisa [https://ku.wiktionary.org/w/index.php?title=di%C4%9Fer_yandan&oldid=6333604] kiriye, problemek bi forma madeyan nû heye? Em çawa dikarin vê formê baştir bikin? Yan jî çi were îzah kirin da ku bikaranîn hêsantir be? [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 14:12, 14 tebax 2026 (UTC)
:Merhaba ji te re jî, hin qalib hene nakevin tu forma. An jî ez nizanim. Min jî girêdek hilbijart. Hin qalib hene di paragrafa de hevokan hev û du girê dide; weki ''ote yandan''. Bîya min divê ev qalib jî hebin. Lê ez ne pisporê vê karî me. Hûn dizanin, biryar ya we ye. [[Bikarhêner:Rewiye tine|Rewiye tine]] ([[Gotûbêja bikarhêner:Rewiye tine#top|gotûbêj]]) 15:32, 14 tebax 2026 (UTC)
::Na, ez behsa formata wîkîtekstê dikim. Tu li qismê nimûneyê nivisandiye, li şûna ku li qutiya "Tercimeyên rasterast ên kurmancî..." binivîsî, [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 15:37, 14 tebax 2026 (UTC)
:::Keko bi rastî min fam nekir. Bibore. Lê ji bo ku peyv tirkî bû min zêde li ser nesekînî. Peyv kurdî bûya heya ji min bihata min rind çêkira. [[Bikarhêner:Rewiye tine|Rewiye tine]] ([[Gotûbêja bikarhêner:Rewiye tine#top|gotûbêj]]) 15:49, 14 tebax 2026 (UTC)
::::Yaw bira, Wextê sayfeyekî nû çêdikî, formek tê li pêşberî te. Ziman û dûre Cureyê rêzimanî hildibijêrî, ez dibêjim em çawa dikarin vê formê baştir bikin. Fikrên te hene? Tu li şûna ku formê bi kar bînî, rasterast diçî ser "Edîtorê". Min gelek li ser çêkirina vê "formê" xebitiye. Dixwazim însanên din jî bi hêsanî bi kar bînin. Tiştekî heye ku em dikarin rast bikin? Yan jî îlawe bikin? [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:00, 14 tebax 2026 (UTC)
:::::Binêre herwiha (bnr-), bîya min ev serê yekî dibe ku tevlîhev bike. Li herî jor e, yê ku cara ewil bixwaze tiştek zêde bike yê wî bitirsîne. Gelo em nikarin danin li derekî jêr? Berê bilêvkirin otomatîk çêdibû. Niha bêhtir zehmet buye ji bo yekî nezan. Gelek şablon hene. Mirov kîjan şablonê divê hilbijire? Tu dikarî wekî sembolek soru îşaretî danî li wir hinek rave bikî. An jî dikarî lînkek danî ku here rûpelek din û li vir rave bixwîne. Şablonên mana jî dikare serê yekî tevlîhev bike. Guherto?, kevnbûyî? Ku-latn? Awayekî din? Paşnav? Şaşnivîs? Famkirina van zehmet e. Bîya min tu lînkek danî li serî û di rupelek de mînakan bidî. Çiqas varyasyonên mînakan zêde bin kesek bêhtir mesele fem bike. Xelet fem neke, bi rastî jî şahane çêbûye. Tiştekî pîroz e. Mala te ava. Ez şablonê fam dikim. Ne ji bo xwe dibêjim. Lê ji bo ew e cara yekemîn bikarbînin dibe ku ji wan re zehmet be. Rastî ev şablon karê me yê gelek hêsan bike lê gelek detay hene. Dibe ku mirov ji van detayan bitirse. [[Bikarhêner:Rewiye tine|Rewiye tine]] ([[Gotûbêja bikarhêner:Rewiye tine#top|gotûbêj]]) 16:36, 14 tebax 2026 (UTC)
::::::@[[Bikarhêner:Wikihez|Wikihez]] Ew derên mecburî were tijî kirin mirov sor çêke çawa ye? Çimkî dibe ku bejin qey dive hemû rupelê tijî bikin. Heçko punto jî biçûk in, xwendina wan hinek zehmet e. Divê alîyê famkirinê de hinek li ser were xebitandin. [[Bikarhêner:Rewiye tine|Rewiye tine]] ([[Gotûbêja bikarhêner:Rewiye tine#top|gotûbêj]]) 16:41, 14 tebax 2026 (UTC)
:::::::@[[Bikarhêner:Wikihez|Wikihez]] Tu dikarî ji min pirsî, înş ez ê bersiva te bidim. Behna min vekirîye. [[Bikarhêner:Rewiye tine|Rewiye tine]] ([[Gotûbêja bikarhêner:Rewiye tine#top|gotûbêj]]) 16:45, 14 tebax 2026 (UTC)
::::::::Mala te ava, nîyeta min jî hebû bila du form hebe yekî kurt yekî pêşketî, pêşî bila bi ya kurt dest pê bike, dûre ê ku dixwaze ya pêşketî bi kar bîne. Hinek karên din xilas bibin ez ê li ser wan xisûsan bixebitim înşellah [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 17:07, 14 tebax 2026 (UTC)
:::::::::Silav,
:::::::::# (ne hewce ye) "bnr-h" were rakirin
:::::::::# (ne hewce ye) Wêne (resim) were rakirin (li jêr were nivîsandin)
:::::::::# (ne hewce ye) "Bilêvkirin" bin beşa Ziman û ser "Cureyê rêzimanî" hatiye nivîsandin: ne baş e. Bin beşa "Cureyê peyvê" were nivîsandin. Cem "Mane" li aliyê rast wekî "tab" (ji ber ku nivîsandin ne hewce ye)
:::::::::# (hewce ye) "Cureyê rêzimanî" û "Parametreyên cureyê rêzimanî" (hewce ye) cem hev werin nivîsandin. Nivîsa "Parametreyên ..." ne baş e :) Tenê "Cins/zayend" ji bo navdêran bes e. Ji bo lêkeran jî "Cureyê lêkerê" (di nav de: rehê dema niha, ...).
:::::::::# "Bikaranîn" û "Bilêvkirin, hevmane, jê, alt., .." wekî "tab" cem "Mane"
:::::::::# (ne hewce ne) Beşên din jî li jêr di bin beşa "Bilêvkirin, hevmane, jê, alt, .."
:::::::::Nizanim tiştên ku min nivîsand tên fêm kirin an na? :) [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 18:09, 14 tebax 2026 (UTC)
::::::::::PS: Lojîk va ye: tiştên ku hewce ne werin dîtin yên ku ne hewce ne wekî "tab" çêke :) [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 18:16, 14 tebax 2026 (UTC)
6cydy7lmjpccjqmwue9c4kz9lsy6nr1
Bikarhêner:Ghybu/test5
2
842348
6333606
3976250
2026-08-14T12:57:52Z
Ghybu
1393
...
6333606
wikitext
text/x-wiki
{| class="wikitable vsSwitcher" data-toggle-category="tewandin"
|-
! colspan=3 class="vsToggleElement" style="width=100%;" | Sernav 1
|-
! Header text !! Header text !! Header text
|-
| Mînak || Mînak || Mînak
|-
| Mînak || Mînak || Mînak
|-
| Mînak || Mînak || Mînak
|- class="vsHide"
| colspan=3 class="vsHide" |
{| class="wikitable vsSwitcher" data-toggle-category="tewandin" style="width:100%; display: table;"
|-
! colspan=3 class="vsToggleElement" style="width=100%;" | Sernav 2
|- class="vsHide"
! Header text !! Header text !! Header text
|- class="vsHide"
| Mînak || Mînak || Mînak
|- class="vsHide"
| Mînak || Mînak || Mînak
|- class="vsHide"
| Mînak || Mînak || Mînak
|}
|}
ckyho1zjdg1ou5pf2fyu1e47hqees2n
6333616
6333606
2026-08-14T13:47:32Z
Ghybu
1393
6333616
wikitext
text/x-wiki
{| class="wikitable vsSwitcher" data-toggle-category="tewandin"
|-
! colspan=3 class="vsToggleElement" style="width: 100%;" | Sernav 1
|-
! Header text !! Header text !! Header text
|-
| Mînak || Mînak || Mînak
|-
| Mînak || Mînak || Mînak
|-
| Mînak || Mînak || Mînak
|- class="vsHide"
| colspan=3 class="vsHide" |
{| class="wikitable vsSwitcher" data-toggle-category="tewandin" style="width:100%; display: table;"
|-
! colspan=3 class="vsToggleElement" style="width: 100%;" | Sernav 2
|- class="vsHide"
! Header text !! Header text !! Header text
|- class="vsHide"
| Mînak || Mînak || Mînak
|- class="vsHide"
| Mînak || Mînak || Mînak
|- class="vsHide"
| Mînak || Mînak || Mînak
|}
|}
iijy0eru1138r2cvoe6i3t335os258u
Bikarhêner:Wikihez/common.js
2
873671
6333698
6329714
2026-08-14T19:08:04Z
Wikihez
7344
6333698
javascript
text/javascript
/*---------Gadget-morebits.js-------------
[[Bikarhêner:Wikihez/skrîpt/Gadget/Gadget-morebits.js]]
[[Bikarhêner:Wikihez/skrîpt/Gadget/Gadget-morebits.css]]*/
mw.loader.load(mw.util.wikiScript() + '?title=Bikarhêner:Wikihez/skrîpt/Gadget/Gadget-morebits.css&action=raw&ctype=text/css', 'text/css');
mw.loader.load('//ku.wiktionary.org/w/index.php?title=Bikarhêner:Wikihez/skrîpt/Gadget/Gadget-morebits.js&action=raw&ctype=text/javascript');
mw.loader.load('//ku.wiktionary.org/w/index.php?title=Bikarhêner:Wikihez/Gadget-test/loader.js&action=raw&ctype=text/javascript');
mw.loader.load('//en.wikipedia.org/w/index.php?title=User:Joeytje50/JWB.js/load.js&action=raw&ctype=text/javascript');
( function () {
'use strict';
if ( [ 'Recentchanges', 'Watchlist' ].indexOf( mw.config.get( 'wgCanonicalSpecialPageName' ) ) === -1 ) {
return;
}
var style = document.createElement( 'style' );
style.textContent = '.mw-rollback-link { display: none !important; }';
document.head.appendChild( style );
}() );
//[[Bikarhêner:Wikihez/skrîpt/js/templateParamRenamer.js]]
mw.loader.load('//ku.wiktionary.org/w/index.php?title=Bikarhêner:Wikihez/skrîpt/js/templateParamRenamer.js&action=raw&ctype=text/javascript');
//[[Bikarhêner:Wikihez/skrîpt/js/quicklinks.js]]
mw.loader.load('//ku.wiktionary.org/w/index.php?title=Bikarhêner:Wikihez/skrîpt/js/quicklinks.js&action=raw&ctype=text/javascript');
//[[Bikarhêner:Wikihez/skrîpt/js/citeKurdifier.js]]
mw.loader.load('//ku.wiktionary.org/w/index.php?title=Bikarhêner:Wikihez/skrîpt/js/citeKurdifier.js&action=raw&ctype=text/javascript');
//[[Bikarhêner:Wikihez/Gadget-defaultVisibilityToggles.js]]
//mw.loader.load('//ku.wiktionary.org/w/index.php?title=Bikarhêner:Wikihez/Gadget-defaultVisibilityToggles.js&action=raw&ctype=text/javascript');
/*---------QQ.js-------------
[[Bikarhêner:Wikihez/Gadget-QQ.js]]
[[Bikarhêner:Wikihez/Gadget-QQ.css]]
mw.loader.load(mw.util.wikiScript() + '?title=Bikarhêner:Wikihez/Gadget-QQ.css&action=raw&ctype=text/css', 'text/css');
mw.loader.load('//ku.wiktionary.org/w/index.php?title=Bikarhêner:Wikihez/Gadget-QQ.js&action=raw&ctype=text/javascript');
*/
/*---------add-examples.js-------------
[[Bikarhêner:Wikihez/Gadget-wikt.add-examples.js]]
[[Bikarhêner:Wikihez/Gadget-wikt.add-examples.css]]
mw.loader.load(mw.util.wikiScript() + '?title=Bikarhêner:Wikihez/Gadget-wikt.add-examples.css&action=raw&ctype=text/css', 'text/css');
mw.loader.load('//ku.wiktionary.org/w/index.php?title=Bikarhêner:Wikihez/Gadget-wikt.add-examples.js&action=raw&ctype=text/javascript');
*/
mw.loader.load('//ku.wiktionary.org/w/index.php?title=Bikarhêner:Wikihez/skrîpt/js/loader.js&action=raw&ctype=text/javascript')
importScript( 'Bikarhêner:Wikihez/skrîpt/js/copyTitle.js' ); // Backlink: [[Bikarhêner:Wikihez/skrîpt/js/copyTitle.js]]
// [[Bikarhêner:Wikihez/addAutoCat.js]]
mw.loader.load('//ku.wiktionary.org/w/index.php?title=Bikarhêner:Wikihez/skrîpt/js/addAutoCat.js&action=raw&ctype=text/javascript');
//importScript( 'Bikarhêner:Wikihez/newentrywiz.js' ); // Backlink: [[Bikarhêner:Wikihez/newentrywiz.js]]
//[[Bikarhêner:Wikihez/CreateTranslation.js]]
mw.loader.load('//ku.wiktionary.org/w/index.php?title=Bikarhêner:Wikihez/CreateTranslation.js&action=raw&ctype=text/javascript');
//[[Bikarhêner:Wikihez/wergerîne.js]]
mw.loader.load('//ku.wiktionary.org/w/index.php?title=Bikarhêner:Wikihez/wergerîne.js&action=raw&ctype=text/javascript');
//[[Bikarhêner:Wikihez/skrîpt/js/getinflections.js]]
mw.loader.load('//ku.wiktionary.org/w/index.php?title=Bikarhêner:Wikihez/skrîpt/js/getinflections.js&action=raw&ctype=text/javascript');
//[[:w:Bikarhêner:Wikihez/skrîpt/js/OngletPurge.js]]
mw.loader.load('//ku.wikipedia.org/w/index.php?title=Bikarhêner:Wikihez/skrîpt/js/OngletPurge.js&action=raw&ctype=text/javascript');
//[[Bikarhêner:Wikihez/templateScript2.js]]
mw.loader.load('//ku.wiktionary.org/w/index.php?title=Bikarhêner:Wikihez/templateScript2.js&action=raw&ctype=text/javascript');
// [[Bikarhêner:Wikihez/şablon-lêke.js]]
mw.loader.load('//ku.wiktionary.org/w/index.php?title=Bikarhêner:Wikihez/şablon-lêke.js&action=raw&ctype=text/javascript');
mw.loader.load('https://en.wikipedia.org/w/index.php?title=User:BrandonXLF/TodoList.js&action=raw&ctype=text/javascript');
//[[Bikarhêner:Wikihez/test.js]]
mw.loader.load('//ku.wiktionary.org/w/index.php?title=Bikarhêner:Wikihez/test.js&action=raw&ctype=text/javascript');
//================================================================================================================================
/*---------start.js-------------
[[Bikarhêner:Wikihez/Gadget-start.js]]
[[Bikarhêner:Wikihez/Gadget-start.css]]
mw.loader.load(mw.util.wikiScript() + '?title=Bikarhêner:Wikihez/Gadget-start.css&action=raw&ctype=text/css', 'text/css');
mw.loader.load('//ku.wiktionary.org/w/index.php?title=Bikarhêner:Wikihez/Gadget-start.js&action=raw&ctype=text/javascript');
*/
//importScript( 'Bikarhêner:Wikihez/skrîpt/js/Gadget-citoid-helper.js' ); // Backlink: [[Bikarhêner:Wikihez/skrîpt/js/Gadget-citoid-helper.js]]
//importScript( 'Bikarhêner:Wikihez/Gadget-linkify.js' ); // Backlink: [[Bikarhêner:Wikihez/Gadget-linkify.js]]
//[[Bikarhêner:Wikihez/skrîpt/js/Gadget-catfix.js]]
//mw.loader.load('//ku.wiktionary.org/w/index.php?title=Bikarhêner:Wikihez/skrîpt/js/Gadget-catfix.js&action=raw&ctype=text/javascript');
//[[Bikarhêner:Wikihez/skrîpt/js/editor.js]]
//mw.loader.load('//ku.wiktionary.org/w/index.php?title=Bikarhêner:Wikihez/skrîpt/js/editor.js&action=raw&ctype=text/javascript');
//[[Bikarhêner:Wikihez/skrîpt/js/UpdateLanguageNameAndCode.js]]
//mw.loader.load('//ku.wiktionary.org/w/index.php?title=Bikarhêner:Wikihez/skrîpt/js/UpdateLanguageNameAndCode.js&action=raw&ctype=text/javascript');
//[[Bikarhêner:Wikihez/skrîpt/js/TranslationAdder-Data.js]]
//mw.loader.load('//ku.wiktionary.org/w/index.php?title=Bikarhêner:Wikihez/skrîpt/js/TranslationAdder-Data.js&action=raw&ctype=text/javascript');
//[[Bikarhêner:Wikihez/LanguageUtils.js]]
//mw.loader.load('//ku.wiktionary.org/w/index.php?title=Bikarhêner:Wikihez/LanguageUtils.js&action=raw&ctype=text/javascript');
/*---------aWa.js-------------
[[Bikarhêner:Wikihez/Gadget-aWa.js]]
[[Bikarhêner:Wikihez/Gadget-aWa.css]]
mw.loader.load(mw.util.wikiScript() + '?title=Bikarhêner:Wikihez/Gadget-aWa.css&action=raw&ctype=text/css', 'text/css');
mw.loader.load('//ku.wiktionary.org/w/index.php?title=Bikarhêner:Wikihez/Gadget-aWa.js&action=raw&ctype=text/javascript');
*/
// This array of dependencies comes from [[MediaWiki:Gadgets-definition]].
// If the list of dependencies changes, copy the text after dependencies=
// for TranslationAdder and run console.log(JSON.stringify("paste dependencies here".split(/, ?/)))
// in your browser's JavaScript console. Put the resulting array as the first argument to mw.loader.using.
//[[User:Wikihez/skrîpt/js/TranslationAdder.js]]
//mw.loader.using(["ext.gadget.LegacyScriptsNewNode","mediawiki.cookie","mediawiki.util"],
//function() {
// importScript('User:Wikihez/skrîpt/js/TranslationAdder.js');
//});
/*
// [[:w:en:MediaWiki:Gadget-edittop.js]]
mw.loader.load('//en.wikipedia.org/w/index.php?title=MediaWiki:Gadget-edittop.js&action=raw&ctype=text/javascript');
// [[Bikarhêner:Wikihez/addAutoCat.js]]
mw.loader.load('//ku.wiktionary.org/w/index.php?title=Bikarhêner:Wikihez/addAutoCat.js&action=raw&ctype=text/javascript');
//[[Bikarhêner:Balyozbot/Gadget-CommonWikt.js]]
//mw.loader.load('//ku.wiktionary.org/w/index.php?title=Bikarhêner:Balyozbot/Gadget-CommonWikt.js&action=raw&ctype=text/javascript');
//[[Bikarhêner:Wikihez/hw-ceke.js]]
mw.loader.load('//ku.wiktionary.org/w/index.php?title=Bikarhêner:Wikihez/hw-ceke.js&action=raw&ctype=text/javascript');
//[[Bikarhêner:Wikihez/sort-langheaders.js]]
mw.loader.load('//ku.wiktionary.org/w/index.php?title=Bikarhêner:Wikihez/sort-langheaders.js&action=raw&ctype=text/javascript');
//[[:en:User:Conrad.Irwin/Api.js]]
mw.loader.load('//en.wiktionary.org/w/index.php?title=User:Conrad.Irwin/Api.js&action=raw&ctype=text/javascript');
//[[Bikarhêner:Wikihez/etîket-çêke.js]]
mw.loader.load('//ku.wiktionary.org/w/index.php?title=Bikarhêner:Wikihez/etîket-çêke.js&action=raw&ctype=text/javascript');
//[[Bikarhêner:Wikihez/tagger.js]]
mw.loader.load('//ku.wiktionary.org/w/index.php?title=Bikarhêner:Wikihez/tagger.js&action=raw&ctype=text/javascript');
//[[Bikarhêner:Wikihez/Gadget-CatMaker.js]]
//mw.loader.load('//ku.wiktionary.org/w/index.php?title=Bikarhêner:Wikihez/Gadget-CatMaker.js&action=raw&ctype=text/javascript');
//[[Bikarhêner:Wikihez/VisibilityToggles.js]]
//mw.loader.load('//ku.wiktionary.org/w/index.php?title=Bikarhêner:Wikihez/VisibilityToggles.js&action=raw&ctype=text/javascript');
//[[Bikarhêner:Wikihez/Gadget-WiktAccFormCreation.js]]
//mw.loader.load('//ku.wiktionary.org/w/index.php?title=Bikarhêner:Wikihez/Gadget-WiktAccFormCreation.js&action=raw&ctype=text/javascript');
//[[Bikarhêner:Wikihez/XMLize.js]]
//mw.loader.load('//ku.wiktionary.org/w/index.php?title=Bikarhêner:Wikihez/XMLize.js&action=raw&ctype=text/javascript');
//[[Bikarhêner:Wikihez/RhymesAdder.js]]
//mw.loader.load('//ku.wiktionary.org/w/index.php?title=Bikarhêner:Wikihez/RhymesAdder.js&action=raw&ctype=text/javascript');
//[[Bikarhêner:Wikihez/Editor.js]]
mw.loader.load('//ku.wiktionary.org/w/index.php?title=Bikarhêner:Wikihez/Editor.js&action=raw&ctype=text/javascript');
//[[Bikarhêner:Wikihez/FilterTranslations.js]]
//mw.loader.load('//ku.wiktionary.org/w/index.php?title=Bikarhêner:Wikihez/FilterTranslations.js&action=raw&ctype=text/javascript');
//[[Bikarhêner:Wikihez/custom.js]]
//mw.loader.load('//ku.wiktionary.org/w/index.php?title=Bikarhêner:Wikihez/custom.js&action=raw&ctype=text/javascript');
//[[Bikarhêner:Wikihez/reformat.js]]
//mw.loader.load('//ku.wiktionary.org/w/index.php?title=Bikarhêner:Wikihez/reformat.js&action=raw&ctype=text/javascript');
//[[Bikarhêner:Wikihez/translateWiki.js]] ji aliyê [[Bikarhêner:Guherto]], [[Taybet:PermanentLink/4854098#Translatewiki.net]]
mw.loader.load('//ku.wiktionary.org/w/index.php?title=Bikarhêner:Wikihez/translateWiki.js&action=raw&ctype=text/javascript');
// Various fixes for the trees generated by [[Module:family tree]].
$(function () {
// Show the top toggle.
$('.familytree-toptoggle').css('display', '');
// Initialize the text of the toggles.
$('.familytree').get().forEach(function (tree) {
var isCollapsed = tree.classList.contains('mw-collapsed');
var toggles = $(tree).find('.familytree-toggle');
if (toggles[0]) {
var customToggleClass = Array.prototype.filter.call(toggles[0].classList, function (className) {
return className.indexOf('mw-customtoggle-familytree') === 0;
})[0];
if (customToggleClass) {
var toggledElement = $('#' + customToggleClass.replace('mw-customtoggle', 'mw-customcollapsible'));
if (toggledElement) {
toggles.html(toggledElement.data(isCollapsed ? 'expandtext' : 'collapsetext'));
}
}
}
});
// Change the text in the custom toggles generated by [[Module:family tree]]
// when they are clicked.
$('.mw-collapsible').on('beforeExpand.mw-collapsible beforeCollapse.mw-collapsible',
function (event) {
if (this.id.indexOf('mw-customcollapsible-familytree') === 0) {
var toggle = $('.' + this.id.replace('mw-customcollapsible', 'mw-customtoggle'));
if (event.type === 'beforeExpand') {
toggle.html(this.dataset.collapsetext);
} else { // beforeCollapse
toggle.html(this.dataset.expandtext);
}
event.stopPropagation();
}
});
});
*/
ozkvkz99sskenzc6b6u33bi20eewfgf
6333720
6333698
2026-08-14T19:54:52Z
Wikihez
7344
Restored revision 6329714 by [[Special:Contributions/Wikihez|Wikihez]] ([[User talk:Wikihez|talk]]) ([[:m:User:Xiplus/TwinkleGlobal|TwinkleGlobal]])
6333720
javascript
text/javascript
/*---------Gadget-morebits.js-------------
[[Bikarhêner:Wikihez/skrîpt/Gadget/Gadget-morebits.js]]
[[Bikarhêner:Wikihez/skrîpt/Gadget/Gadget-morebits.css]]*/
mw.loader.load(mw.util.wikiScript() + '?title=Bikarhêner:Wikihez/skrîpt/Gadget/Gadget-morebits.css&action=raw&ctype=text/css', 'text/css');
mw.loader.load('//ku.wiktionary.org/w/index.php?title=Bikarhêner:Wikihez/skrîpt/Gadget/Gadget-morebits.js&action=raw&ctype=text/javascript');
mw.loader.load('//en.wikipedia.org/w/index.php?title=User:Joeytje50/JWB.js/load.js&action=raw&ctype=text/javascript');
( function () {
'use strict';
if ( [ 'Recentchanges', 'Watchlist' ].indexOf( mw.config.get( 'wgCanonicalSpecialPageName' ) ) === -1 ) {
return;
}
var style = document.createElement( 'style' );
style.textContent = '.mw-rollback-link { display: none !important; }';
document.head.appendChild( style );
}() );
//[[Bikarhêner:Wikihez/skrîpt/js/templateParamRenamer.js]]
mw.loader.load('//ku.wiktionary.org/w/index.php?title=Bikarhêner:Wikihez/skrîpt/js/templateParamRenamer.js&action=raw&ctype=text/javascript');
//[[Bikarhêner:Wikihez/skrîpt/js/quicklinks.js]]
mw.loader.load('//ku.wiktionary.org/w/index.php?title=Bikarhêner:Wikihez/skrîpt/js/quicklinks.js&action=raw&ctype=text/javascript');
//[[Bikarhêner:Wikihez/skrîpt/js/citeKurdifier.js]]
mw.loader.load('//ku.wiktionary.org/w/index.php?title=Bikarhêner:Wikihez/skrîpt/js/citeKurdifier.js&action=raw&ctype=text/javascript');
//[[Bikarhêner:Wikihez/Gadget-defaultVisibilityToggles.js]]
//mw.loader.load('//ku.wiktionary.org/w/index.php?title=Bikarhêner:Wikihez/Gadget-defaultVisibilityToggles.js&action=raw&ctype=text/javascript');
/*---------QQ.js-------------
[[Bikarhêner:Wikihez/Gadget-QQ.js]]
[[Bikarhêner:Wikihez/Gadget-QQ.css]]
mw.loader.load(mw.util.wikiScript() + '?title=Bikarhêner:Wikihez/Gadget-QQ.css&action=raw&ctype=text/css', 'text/css');
mw.loader.load('//ku.wiktionary.org/w/index.php?title=Bikarhêner:Wikihez/Gadget-QQ.js&action=raw&ctype=text/javascript');
*/
/*---------add-examples.js-------------
[[Bikarhêner:Wikihez/Gadget-wikt.add-examples.js]]
[[Bikarhêner:Wikihez/Gadget-wikt.add-examples.css]]
mw.loader.load(mw.util.wikiScript() + '?title=Bikarhêner:Wikihez/Gadget-wikt.add-examples.css&action=raw&ctype=text/css', 'text/css');
mw.loader.load('//ku.wiktionary.org/w/index.php?title=Bikarhêner:Wikihez/Gadget-wikt.add-examples.js&action=raw&ctype=text/javascript');
*/
mw.loader.load('//ku.wiktionary.org/w/index.php?title=Bikarhêner:Wikihez/skrîpt/js/loader.js&action=raw&ctype=text/javascript')
importScript( 'Bikarhêner:Wikihez/skrîpt/js/copyTitle.js' ); // Backlink: [[Bikarhêner:Wikihez/skrîpt/js/copyTitle.js]]
// [[Bikarhêner:Wikihez/addAutoCat.js]]
mw.loader.load('//ku.wiktionary.org/w/index.php?title=Bikarhêner:Wikihez/skrîpt/js/addAutoCat.js&action=raw&ctype=text/javascript');
//importScript( 'Bikarhêner:Wikihez/newentrywiz.js' ); // Backlink: [[Bikarhêner:Wikihez/newentrywiz.js]]
//[[Bikarhêner:Wikihez/CreateTranslation.js]]
mw.loader.load('//ku.wiktionary.org/w/index.php?title=Bikarhêner:Wikihez/CreateTranslation.js&action=raw&ctype=text/javascript');
//[[Bikarhêner:Wikihez/wergerîne.js]]
mw.loader.load('//ku.wiktionary.org/w/index.php?title=Bikarhêner:Wikihez/wergerîne.js&action=raw&ctype=text/javascript');
//[[Bikarhêner:Wikihez/skrîpt/js/getinflections.js]]
mw.loader.load('//ku.wiktionary.org/w/index.php?title=Bikarhêner:Wikihez/skrîpt/js/getinflections.js&action=raw&ctype=text/javascript');
//[[:w:Bikarhêner:Wikihez/skrîpt/js/OngletPurge.js]]
mw.loader.load('//ku.wikipedia.org/w/index.php?title=Bikarhêner:Wikihez/skrîpt/js/OngletPurge.js&action=raw&ctype=text/javascript');
//[[Bikarhêner:Wikihez/templateScript2.js]]
mw.loader.load('//ku.wiktionary.org/w/index.php?title=Bikarhêner:Wikihez/templateScript2.js&action=raw&ctype=text/javascript');
// [[Bikarhêner:Wikihez/şablon-lêke.js]]
mw.loader.load('//ku.wiktionary.org/w/index.php?title=Bikarhêner:Wikihez/şablon-lêke.js&action=raw&ctype=text/javascript');
mw.loader.load('https://en.wikipedia.org/w/index.php?title=User:BrandonXLF/TodoList.js&action=raw&ctype=text/javascript');
//[[Bikarhêner:Wikihez/test.js]]
mw.loader.load('//ku.wiktionary.org/w/index.php?title=Bikarhêner:Wikihez/test.js&action=raw&ctype=text/javascript');
//================================================================================================================================
/*---------start.js-------------
[[Bikarhêner:Wikihez/Gadget-start.js]]
[[Bikarhêner:Wikihez/Gadget-start.css]]
mw.loader.load(mw.util.wikiScript() + '?title=Bikarhêner:Wikihez/Gadget-start.css&action=raw&ctype=text/css', 'text/css');
mw.loader.load('//ku.wiktionary.org/w/index.php?title=Bikarhêner:Wikihez/Gadget-start.js&action=raw&ctype=text/javascript');
*/
//importScript( 'Bikarhêner:Wikihez/skrîpt/js/Gadget-citoid-helper.js' ); // Backlink: [[Bikarhêner:Wikihez/skrîpt/js/Gadget-citoid-helper.js]]
//importScript( 'Bikarhêner:Wikihez/Gadget-linkify.js' ); // Backlink: [[Bikarhêner:Wikihez/Gadget-linkify.js]]
//[[Bikarhêner:Wikihez/skrîpt/js/Gadget-catfix.js]]
//mw.loader.load('//ku.wiktionary.org/w/index.php?title=Bikarhêner:Wikihez/skrîpt/js/Gadget-catfix.js&action=raw&ctype=text/javascript');
//[[Bikarhêner:Wikihez/skrîpt/js/editor.js]]
//mw.loader.load('//ku.wiktionary.org/w/index.php?title=Bikarhêner:Wikihez/skrîpt/js/editor.js&action=raw&ctype=text/javascript');
//[[Bikarhêner:Wikihez/skrîpt/js/UpdateLanguageNameAndCode.js]]
//mw.loader.load('//ku.wiktionary.org/w/index.php?title=Bikarhêner:Wikihez/skrîpt/js/UpdateLanguageNameAndCode.js&action=raw&ctype=text/javascript');
//[[Bikarhêner:Wikihez/skrîpt/js/TranslationAdder-Data.js]]
//mw.loader.load('//ku.wiktionary.org/w/index.php?title=Bikarhêner:Wikihez/skrîpt/js/TranslationAdder-Data.js&action=raw&ctype=text/javascript');
//[[Bikarhêner:Wikihez/LanguageUtils.js]]
//mw.loader.load('//ku.wiktionary.org/w/index.php?title=Bikarhêner:Wikihez/LanguageUtils.js&action=raw&ctype=text/javascript');
/*---------aWa.js-------------
[[Bikarhêner:Wikihez/Gadget-aWa.js]]
[[Bikarhêner:Wikihez/Gadget-aWa.css]]
mw.loader.load(mw.util.wikiScript() + '?title=Bikarhêner:Wikihez/Gadget-aWa.css&action=raw&ctype=text/css', 'text/css');
mw.loader.load('//ku.wiktionary.org/w/index.php?title=Bikarhêner:Wikihez/Gadget-aWa.js&action=raw&ctype=text/javascript');
*/
// This array of dependencies comes from [[MediaWiki:Gadgets-definition]].
// If the list of dependencies changes, copy the text after dependencies=
// for TranslationAdder and run console.log(JSON.stringify("paste dependencies here".split(/, ?/)))
// in your browser's JavaScript console. Put the resulting array as the first argument to mw.loader.using.
//[[User:Wikihez/skrîpt/js/TranslationAdder.js]]
//mw.loader.using(["ext.gadget.LegacyScriptsNewNode","mediawiki.cookie","mediawiki.util"],
//function() {
// importScript('User:Wikihez/skrîpt/js/TranslationAdder.js');
//});
/*
// [[:w:en:MediaWiki:Gadget-edittop.js]]
mw.loader.load('//en.wikipedia.org/w/index.php?title=MediaWiki:Gadget-edittop.js&action=raw&ctype=text/javascript');
// [[Bikarhêner:Wikihez/addAutoCat.js]]
mw.loader.load('//ku.wiktionary.org/w/index.php?title=Bikarhêner:Wikihez/addAutoCat.js&action=raw&ctype=text/javascript');
//[[Bikarhêner:Balyozbot/Gadget-CommonWikt.js]]
//mw.loader.load('//ku.wiktionary.org/w/index.php?title=Bikarhêner:Balyozbot/Gadget-CommonWikt.js&action=raw&ctype=text/javascript');
//[[Bikarhêner:Wikihez/hw-ceke.js]]
mw.loader.load('//ku.wiktionary.org/w/index.php?title=Bikarhêner:Wikihez/hw-ceke.js&action=raw&ctype=text/javascript');
//[[Bikarhêner:Wikihez/sort-langheaders.js]]
mw.loader.load('//ku.wiktionary.org/w/index.php?title=Bikarhêner:Wikihez/sort-langheaders.js&action=raw&ctype=text/javascript');
//[[:en:User:Conrad.Irwin/Api.js]]
mw.loader.load('//en.wiktionary.org/w/index.php?title=User:Conrad.Irwin/Api.js&action=raw&ctype=text/javascript');
//[[Bikarhêner:Wikihez/etîket-çêke.js]]
mw.loader.load('//ku.wiktionary.org/w/index.php?title=Bikarhêner:Wikihez/etîket-çêke.js&action=raw&ctype=text/javascript');
//[[Bikarhêner:Wikihez/tagger.js]]
mw.loader.load('//ku.wiktionary.org/w/index.php?title=Bikarhêner:Wikihez/tagger.js&action=raw&ctype=text/javascript');
//[[Bikarhêner:Wikihez/Gadget-CatMaker.js]]
//mw.loader.load('//ku.wiktionary.org/w/index.php?title=Bikarhêner:Wikihez/Gadget-CatMaker.js&action=raw&ctype=text/javascript');
//[[Bikarhêner:Wikihez/VisibilityToggles.js]]
//mw.loader.load('//ku.wiktionary.org/w/index.php?title=Bikarhêner:Wikihez/VisibilityToggles.js&action=raw&ctype=text/javascript');
//[[Bikarhêner:Wikihez/Gadget-WiktAccFormCreation.js]]
//mw.loader.load('//ku.wiktionary.org/w/index.php?title=Bikarhêner:Wikihez/Gadget-WiktAccFormCreation.js&action=raw&ctype=text/javascript');
//[[Bikarhêner:Wikihez/XMLize.js]]
//mw.loader.load('//ku.wiktionary.org/w/index.php?title=Bikarhêner:Wikihez/XMLize.js&action=raw&ctype=text/javascript');
//[[Bikarhêner:Wikihez/RhymesAdder.js]]
//mw.loader.load('//ku.wiktionary.org/w/index.php?title=Bikarhêner:Wikihez/RhymesAdder.js&action=raw&ctype=text/javascript');
//[[Bikarhêner:Wikihez/Editor.js]]
mw.loader.load('//ku.wiktionary.org/w/index.php?title=Bikarhêner:Wikihez/Editor.js&action=raw&ctype=text/javascript');
//[[Bikarhêner:Wikihez/FilterTranslations.js]]
//mw.loader.load('//ku.wiktionary.org/w/index.php?title=Bikarhêner:Wikihez/FilterTranslations.js&action=raw&ctype=text/javascript');
//[[Bikarhêner:Wikihez/custom.js]]
//mw.loader.load('//ku.wiktionary.org/w/index.php?title=Bikarhêner:Wikihez/custom.js&action=raw&ctype=text/javascript');
//[[Bikarhêner:Wikihez/reformat.js]]
//mw.loader.load('//ku.wiktionary.org/w/index.php?title=Bikarhêner:Wikihez/reformat.js&action=raw&ctype=text/javascript');
//[[Bikarhêner:Wikihez/translateWiki.js]] ji aliyê [[Bikarhêner:Guherto]], [[Taybet:PermanentLink/4854098#Translatewiki.net]]
mw.loader.load('//ku.wiktionary.org/w/index.php?title=Bikarhêner:Wikihez/translateWiki.js&action=raw&ctype=text/javascript');
// Various fixes for the trees generated by [[Module:family tree]].
$(function () {
// Show the top toggle.
$('.familytree-toptoggle').css('display', '');
// Initialize the text of the toggles.
$('.familytree').get().forEach(function (tree) {
var isCollapsed = tree.classList.contains('mw-collapsed');
var toggles = $(tree).find('.familytree-toggle');
if (toggles[0]) {
var customToggleClass = Array.prototype.filter.call(toggles[0].classList, function (className) {
return className.indexOf('mw-customtoggle-familytree') === 0;
})[0];
if (customToggleClass) {
var toggledElement = $('#' + customToggleClass.replace('mw-customtoggle', 'mw-customcollapsible'));
if (toggledElement) {
toggles.html(toggledElement.data(isCollapsed ? 'expandtext' : 'collapsetext'));
}
}
}
});
// Change the text in the custom toggles generated by [[Module:family tree]]
// when they are clicked.
$('.mw-collapsible').on('beforeExpand.mw-collapsible beforeCollapse.mw-collapsible',
function (event) {
if (this.id.indexOf('mw-customcollapsible-familytree') === 0) {
var toggle = $('.' + this.id.replace('mw-customcollapsible', 'mw-customtoggle'));
if (event.type === 'beforeExpand') {
toggle.html(this.dataset.collapsetext);
} else { // beforeCollapse
toggle.html(this.dataset.expandtext);
}
event.stopPropagation();
}
});
});
*/
dvtq5ctc64dp35wa3ipdjtrc4ir0ydw
Bikarhêner:Wikihez/common.css
2
874440
6333648
6329688
2026-08-14T15:21:43Z
Wikihez
7344
[[Special:PermanentLink/6333636#L-1]]
6333648
css
text/css
/* [[Şablon:manelazim]]: dema ku amûra "Pênaseyê temam bike" bi awayekî serkeftî were
barkirin, nivîsa cîgir a "manelazim" tê veşartin; ji bo bikarhênerên bêyî
JavaScript, ev nivîs xuya dibe (ji ber vê yekê em .manelazim bi xwe naşehitînin). */
.fill-definition-resolved > .manelazim {
display: none;
}
/* Add X icon after links to X. */
.mw-parser-output a[href*="twitter.com"].external,
.mw-parser-output a[href*="x.com"].external {
background: url("//upload.wikimedia.org/wikipedia/commons/c/ce/X_logo_2023.svg") no-repeat right;
background-size: auto;
padding: 8px 15px 8px 0;
background-size: 12px;
}
c3qq9zllhoqnm1k4haplef2sh8p2a3y
Bikarhêner:Wikihez/test
2
965335
6333685
6331749
2026-08-14T18:22:22Z
Wikihez
7344
/* Parameters */ (bi [[MediaWiki:Gadget-AjaxEdit.js|AjaxEdit]]ê re)
6333685
wikitext
text/x-wiki
{{belgekirin/binrûpel}}
{{documentation subpage}}
{{uses lua|Module:quote}}
==Usage==
This template can be used in a dictionary entry to provide a quotation from a book.
For citations in "References" and "Further reading" sections, and on talk pages, use {{temp|cite-book}}.
==Sample templates==
;Most basic parameters for English quotations
<pre style="overflow:auto">
#* {{quote-book|1=|year=|author=|title=|chapter=|url=|page=|text=}}
</pre>
;Most basic parameters for non-English quotations
<pre style="overflow:auto">
#* {{quote-book|1=|year=|author=|title=|chapter=|url=|page=|text=|t=}}
</pre>
;Commonly used parameters
<pre style="overflow:auto">
#* {{quote-book|1=|author=|authorlink=|chapter=|editor=|editors=|title=|url=|archiveurl=|archivedate=|edition=|location=|publisher=|date=|isbn=|oclc=|volume=|section=|sectionurl=|page=|pages=|pageurl=|text=|t=|tr=}}
</pre>
Certain basic parameters can be used in the template without any named parameters, as follows:
<pre style="overflow:auto" id="blank-shorthand">
#* {{quote-book|[lang]|[year]|[author]|[title]|[url]|[page]|[text]|[translation]}}
</pre>
This will not work if any of the parameters contains an equals ("=") sign. The value of any parameter containing an equals sign must be surrounded by <syntaxhighlight lang="html" inline=yes><nowiki></syntaxhighlight> tags, like this: "<syntaxhighlight lang="html" inline=yes><nowiki>http://foo.com?id=bar</nowiki></syntaxhighlight>". Alternatively, use a named parameter such as <code>url</code>.
==Parameters==
{{#invoke:quote doc|show_doc|jêder-kitêb}}
==Examples==
===Basic examples===
A basic example:
{{demo|sep=which produces|<nowiki>{{quote-book|en
|author=w:William Shakespeare
|title=[[w:First Folio|Mr. William Shakespeares Comedies, Histories, & Tragedies: Published According to the True Originall Copies]]
|location=London
|publisher=Printed by [[w:William Jaggard|Isaac Iaggard]], and [[w:Edward Blount|Ed[ward] Blount]]
|year=c. 1601–1602
|year_published=1623
|page=255
|pageurl=https://books.google.com/books?id=uNtBAQAAMAAJ&pg=PA255
|oclc=606515358
|text='''Twelfe Night''', Or vvhat you vvill. [title of play]
}}</nowiki>}}
Here, the author is preceded by <code>w:</code>, which links to a Wikipedia entry under the same name. The year is preceded by <code>c.</code> to indicate an approximate year, which is processed specially and displayed with a tooltip explaining the meaning of ''c.''. Note also the difference between {{para|pageurl}}, which provides a URL to a specific page and is used to link the page number, and the overall URL specified using {{para|url}}, which is converted into a superscript reference following the title.
----
Another basic example:
{{demo|sep=which produces|<nowiki>{{quote-book|en
|date=23 December 2021
|author=Harry Hobbs; George Williams
|title=Micronations and the Search for Sovereignty
|url=https://www.cambridge.org/core/books/micronations-and-the-search-for-sovereignty/B0414A3A322695D9EE71E4CDDFDA06DE
|publisher=Cambridge University Press
|page=155
|isbn=978-1-009-15012-5
|text=The Republic of Molossia has played a considerable role in developing '''intermicronational''' diplomacy.
}}</nowiki>}}
Here, a date is specified in place of a year, and two authors are given, semicolon-separated, which when displayed become comma-separated.
----
Another basic example:
{{demo|sep=which produces|<nowiki>{{quote-book|en
|year=c. 1988
|author=Peter W. Rodino, Jr.; et al.
|title=Report of the Congressional Committees Investigating the Iran/Contra Affair
|pageurl=http://books.google.com/books?id=ew_K3auTwEgC&pg=PA646&dq=phone+call
|page=646
|text=On November 20, they had a '''phone call''' and later a meeting with others lasting at least 1 1/2 hours.
}}</nowiki>}}
This shows the correct use of ''et al.'', which should follow a semicolon in a list of authors or other entities. It will be correctly italicized and the preceding delimiter removed.
----
The following an example of quoting a textbook.
{{demo|sep=which produces|<nowiki>{{quote-book|en
|title=Medical Surgical Nursing
|series=Juta's Manual of Nursing
|seriesvolume=volume 4
|editors=Sophie Mataniele Mogotlane; Joyce Mokoena; Motshedisi Eunice Chauke; Anne Young
|year=2005
|publisher=Juta Academic
|isbn=978-0702171840
|page=!12-29
|text=Centrally acting '''sympathicolytics''' cause a decrease in the sympathetic outflow from the brainstem. This reduction in sympathetic outflow brings about vasodilatation of the peripheral vascular bed with a concomitant drop in the blood pressure
}}</nowiki>}}
Textbooks often have no author listed, but only editors, as in this case. Here, the pages are compound, with a hyphen in the middle. To avoid the page number from being interpreted as a range of page numbers and displayed as ''pages 12-29'', precede the page number with an exclamation point (<code>!</code>), which is a signal to respect the name of the parameter (otherwise {{para|page}} and {{para|pages}} are aliases of each other, with either one displaying as ''page'' or ''pages'' depending on the parameter value).
===Chapter in an anthology===
The following is a basic example of quoting a chapter in an anthology.
{{demo|sep=which produces|<nowiki>{{quote-book|en
|year=2005
|editors=Martin Endress; George Psathas; Hisashi Nasu
|chapter=Between the Everyday Life-World and the World of Social Scientific Theory—Towards an “Adequate” Social Thory
|author=Hisashi Nasu
|title=Explorations of the Life-World: Continuing Dialogues with Alfred Schutz
|publisher=Springer
|isbn=1402032196
|page=136
|text=It is not only the '''man on the street''' who is characterized by taking one's own system of relevance for granted. This holds true for the expert,....
}}</nowiki>}}
----
The following is a similar example.
{{demo|sep=which produces|<nowiki>{{quote-book|en
|year=2002
|author=Peter Shirlow
|chapter=Sinn Féin: Beyond; within Containment
|chapter_number=4
|editors=Stefan Wolff; Jörg Neuheiser
|title=Peace at Last?: The Impact of the Good Friday Agreement on Northern Ireland
|publisher=Berghahn Books
|isbn=157181518X
|pageurl=http://books.google.com/books?id=QyInASKCFjcC&pg=PA62&dq=ethnosectarian&sig=Q54T1Vz3vsKnqd05666N1ddFki8
|page=62
|text=Moreover, language, discourse, and dialogue, their definition and mobilisation, create chains of equivalence which enclose subjects within not only '''ethnosectarian''' but at times entirely self-referential and self-sustained notions of identity, practice and collective devotion.
}}</nowiki>}}
Note the use of {{para|chapter_number}} to specify the chapter number along with the name.
----
The following is an example of citing a conference paper. Generally, they should be cited similarly to chapters in anthologies; in this case, the anthology is the conference proceedigs.
{{demo|sep=which produces|<nowiki>{{quote-book|en
|title=Extreme Hydrological Events: New Concepts for Security
|editors=O.F. Vasiliev; P.H.A.J.M. van Gelder; E.J. Plate; M.V. Bolgov
|year=2007
|publisher=[[w:Springer Science+Business Media|Springer]]
|isbn=1402057393
|chapter=Predetermination of Floods
|author=Pierre Hubert; Ioulia Tchiguirinskaia; Daniel Schertzer; Hocine Bendjoudi; Shaun Lovejoy
|section=On Probability and Return Periods of Floods
|section_number=2
|page=187
|text=It is perfectly legitimate to be interested, particularly for safety studies, by millennium floods or floods or '''decamillennium''' floods (i.e. having a probability 0,001 and 0,0001 respectively to occur in the course of given year) of a river which did not exist five thousand years ago and that will not exist perhaps any more in ten thousand years, similarly to the industrial interest in the probability of faults which will not undoubtedly occur, because the minimization of their probability is an aspect of a policy of industrial security.
}}</nowiki>}}
Here, we identify a section within the paper by {{para|section}} and {{para|section_number}}. (You can also use {{para|section_plain}} if the section number should not be preceded by the word "section"; {{para|chapter_plain}} works similarly.)
===Prefaces and commentaries===
When quoting a preface, commentary of the like written by someone other than the primary author of a work, place the author of the quote in {{para|author}} and the primary author in {{para|mainauthor}}. An example follows:
{{demo|sep=which produces|<nowiki>{{quote-book|en
|year=1995
|author=w:Robert M. Solovay
|mainauthor=w:Kurt Gödel
|editors=w:Solomon Feferman; w:John W. Dawson Jr.; w:Warren Goldfarb; {{w|Charles Parsons (philosopher)|Charles Parsons}}; w:Robert M. Solovay
|chapter=Notes to *1970 [{{w|Godel's ontological proof}}]
|title=Kurt Gödel: Collected Works: Volume III
|pageurl=https://books.google.com.au/books?id=gDzbuUwma5MC&pg=PA419&dq=%22Hausdorff+gap%22%7C%22Hausdorff+gaps%22&hl=en&newbks=1&newbks_redir=0&sa=X&ved=2ahUKEwjo-o7D9OT7AhVQJUQIHaSlBIgQ6AF6BAhXEAI#v=onepage&q=%22Hausdorff%20gap%22%7C%22Hausdorff%20gaps%22&f=false
|page=419
|publisher=w:Oxford University Press
|passage=Of course, Hausdorff did not talk of models of set theory or prove absoluteness results. He gave a direct construction in ''ZFC'' of what is now called a '''Hausdorff gap''' and proved properties 1 through 4 for his construction. The notion of a '''Hausdorff gap''' and the proof that '''Hausdorff gaps''' are indestructible under cardinal preserving extensions (property 5 above) are due to Kunen (unpublished).
}}</nowiki>}}
The book in question is a volume of collected works by the famous German mathematician {{w|Kurt Gödel}}, and what is being quoted is a section entitled ''Notes to *1970'', where ''*1970'' refers to what is commonly known as {{w|Godel's ontological proof}} (of the existence of God). The author of the note itself is {{w|Robert M. Solovay}}. Note that individual authors in a combined field such as {{para|editors}} can have Wikipedia and language prefixes (as well as inline modifiers).
===Reprintings, translations and quoting one book in another===
The following example is of a reprinting of a book:
{{demo|sep=which produces|<nowiki>{{quote-book|en
|year=1925
|author={{w|F. Scott Fitzgerald|F[rancis] Scott Fitzgerald}}
|chapter=IX
|title=w:The Great Gatsby
|location=New York, N.Y.
|publisher=w:Charles Scribner's Sons
|oclc=884653065
|year2=1953
|location2=New York, N.Y.
|publisher2=Charles Scribner’s Sons
|isbn2=978-0-684-16498-4
|page2=182
|pageurl2=https://archive.org/stream/in.ernet.dli.2015.184960/2015.184960.The-Great-Gatsby#page/n185/mode/1up
|text=So we beat on, boats against the current, borne back '''ceaselessly''' into the past.
|lccn=gm 95-1
}}</nowiki>}}
Here, the first set of parameters specify the original version and the second set the reprinting. {{para|newversion}} defaults to "republished [as]", so it does not need to be explicitly given.
----
The following is another smilar example:
{{demo|sep=which produces|<nowiki>{{quote-book|en
|author=w:John Boyle O'Reilly
|chapter=On the Trail
|title=[[w:Moondyne|Moondyne: A Story from the Under-world]]
|location=London
|publisher=[[w:Routledge|George Routledge and Sons]]
|year=1878
|year_published=1879
|oclc=39983928
|title2=Moondyne: A Story of Convict Life in Australia
|location2=London
|publisher2=George Routledge & Sons, Limited, Broadway House, {{w|Ludgate Hill}}
|year2=[1880s]
|section2=book first
|pages2=23–24
|pageurl2=https://archive.org/stream/moondynestory00oreirich#page/24/mode/1up/
|oclc2=83033698
|text=It was sore travelling for horse and man under the blazing sun, with no food nor water save what he pressed from the pith of the palms, and even these were growing scarce. The only life on the plains was the hard and dusty scrub. Every hour brought a more hopeless and '''grislier''' desolation.
}}</nowiki>}}
----
The following example is of a book translated into English:
{{demo|sep=which produces|<nowiki>{{quote-book|en
|year=1966
|origyear=1858
|author=w:Hans Christian Andersen
|tlr=Pat Shaw Iversen
|original=Suppe paa en Pølsepind
|origlang=da
|chapter=Soup from a Sausage Peg
|title=The Snow Queen and Other Tales
|series=Signet Classic
|seriesvolume=CT334
|location=New York, N.Y.
|publisher=w:New American Library
|page=224
|pageurl=http://books.google.com/books?id=2tjWAAAAMAAJ&q=%22from+your+own+nook+and+cranny%22#search_anchor
|oclc=636818779
|origtext=da:Det er underligt at komme hjemme fra sin egen '''Krinkelkrog''', gaae med Skib, der ogsaa er en Slags '''Krinkelkrog''', og saa pludselig være over hundrede Mile borte og staae i et fremmedt Land.
|text=It’s strange to come away from home, from your own '''nook and cranny''', to go by ship – which is also a kind of '''nook and cranny''' – and then suddenly be more than a hundred miles away and stand in a foreign land!
}}</nowiki>}}
Some comments:
* When {{para|original}} is used like this, to indicate a translation, the original author can be placed either in the {{para|author}} or {{para|by}} field. The former is generally preferred in a straight translation, but the latter can be used in cases of free translation, annotated editions and the like.
* Note also the use of {{para|origyear}} to indicate the year the original work was first published.
* The {{para|newversion}} format described above can be used to quote translations, in place of using {{para|original}} and {{para|by}}. To use this, use {{para|newversion|translated as}}, placing the information on the original work in the primary set of parameters and the information on the translation in the second set of parameters. In particular, this method must be used if more information is to be presented on the original work than merely its title, author and year.
----
The following example is another example of a book translated into English, this time using {{para|newversion}}:
{{demo|sep=which produces|<nowiki>{{quote-book|en
|year=2013
|author=Bernd Klauer; Reiner Manstetten; Thomas Petersen; Johannes Schiller
|worklang=de
|chapter=Materielle Bestände
|title=Die Kunst, langfristig zu denken : Wege zur Nachhaltigkeit<t:The art of thinking long-term : paths to sustainability>
|location=Baden-Baden
|publisher=Nomos
|newversion=translated as
|tlr2=Kathleen Cross
|year2=2016
|title2=Sustainability and the Art of Long-Term Thinking
|chapter2=Material stocks
|location2=London; New York
|publisher2=Routledge, Taylor & Francis Group
|section2=4.3.1. Material sets and stocks
|page2=44
|isbn2=9781134986187
|text=The property of '''appertainment''' of a set is therefore the property which, by definition, has to be given in every element of the set.
}}</nowiki>}}
----
The following example is of one book quoted in another, using {{para|newversion}} (which is preferred):
{{demo|sep=which produces|<nowiki>{{quote-book|en
|author={{w|Andrew Seth Pringle-Pattison|Andrew Seth}}
|title=Hegelianism and Personality
|edition=2nd
|year=1887
|year_published=1893
|page=216
|line_plain=footnote
|location=Edinburgh; London
|publisher=William Blackwood and Sons
|newversion=quoted in
|year2=1893
|2ndauthor=w:David George Ritchie
|title2=Darwin and Hegel, with other Philosophical Studies
|location2=London
|publisher2=S. Sonnenschein & Co.; New York, N.Y.: [[w:Macmillan Publishers (United States)|Macmillan & Co.]]
|page2=72
|pageurl2=http://books.google.com/books?id=8yGEAHvAwiIC&q=%22An+absolute+system+cannot+afford+to+leave+any+nook+or+cranny+of+existence+unexplored%22#search_anchor
|line_plain2=note 1
|oclc2=3299658
|text=An absolute system cannot afford to leave '''any nook or cranny''' of existence unexplored.
}}</nowiki>}}
The situation here is that the book ''Hegelianism and Personality'' by Andrew Seth (later known as Andrew Seth Pringle-Pattison), 2nd edition of 1893 (first edition published 1887), was quoted in ''Darwin and Hegel, with other Philosophical Studies'' by David George Ritchie, also published 1893. Note that (somewhat confusingly), the author of the {{para|newversion}} work (here, the quoting work) is placed in {{para|2ndauthor}} rather than {{para|author2}}. The reason for this is that {{para|author2}}, {{para|author3}}, etc. were originally used to specify additional authors of the primary work. This method is now deprecated and it is preferred to place all authors in the {{para|author}} field, semicolon-separated.
----
The following is the same example, expressed using {{para|quotee}} and {{para|quoted_in}}:
{{demo|sep=which produces|<nowiki>{{quote-book|en
|author=w:David George Ritchie
|quotee=w:Andrew Seth Pringle-Pattison
|title=Hegelianism and Personality
|edition=2nd
|others=1893, page 216, footnote
|quoted_in=Darwin and Hegel, with other Philosophical Studies
|location=London
|publisher=S. Sonnenschein & Co.; New York, N.Y.: [[w:Macmillan Publishers (United States)|Macmillan & Co.]]
|year=1893
|page=72
|line_plain=note 1
|pageurl=http://books.google.com/books?id=8yGEAHvAwiIC&q=%22An+absolute+system+cannot+afford+to+leave+any+nook+or+cranny+of+existence+unexplored%22#search_anchor
|oclc=3299658
|text=An absolute system cannot afford to leave '''any nook or cranny''' of existence unexplored.
}}</nowiki>}}
Note in particular that (rather confusingly) the original author and title are placed in {{para|quotee}} and {{para|title}}, while the quoting author and title are placed in {{para|author}} and {{para|quoted in}}. No further fields are provided to express any other information about the original work other than the {{para|others}} field, into which all remaining information must be crammed. It is strongly recommended to avoid this format, but you will see existing examples using it.
----
The following is an example of a journal article reprinted in a book. Journal articles are actually expressed using {{tl|quote-journal}}, but the same underlying code is used, making it possible to effectively use two different templates in the primary work and new version. To do that, use the {{para|type2}} field, in this case {{para|type2|book}}:
{{demo|sep=which produces|<nowiki>{{quote-journal|en
|author=w:Hayden Carruth
|title=Making It New
|journal=w:The Hudson Review
|location=New York, N.Y.
|publisher=Hudson Review, Inc.
|month=Summer
|year=1968
|volume=XXI
|number=2
|issn=2325-5935
|oclc=920393805
|newversion=reprinted as
|type2=book
|chapter2=From ‘Making It New’ [''Body Rags'']
|editor2=Howard Nelson
|title2=On the Poetry of Galway Kinnell: The Wages of Dying
|series2=Under Discussion
|location2=Ann Arbor, Mich.
|publisher2={{w|University of Michigan Press}}
|year2=1987
|page2=75
|pageurl2=https://books.google.com/books?id=7cXV26PmJUYC&pg=PA75
|isbn2=978-0-472-09376-2
|text=In his [{{w|Galway Kinnell}}'s] new book, ''Body Rags'', he has brought this style to a kind of perfection, especially in two poems about the killing of animals, "The Porcupine" and "The Bear." These are the '''grisliest''' poems I have ever read.
}}</nowiki>}}
Note that if {{para|type2|journal}} were used to quote a journal article reprinted in another journal, the article in the reprinting journal would be expressed using {{para|title2}} and the journal title in {{para|journal2}}. When {{para|type2|book}} is used, {{para|chapter2}} and {{para|title2}} must be used instead. ({{para|journal2}} cannot be used, and in fact will throw an error.) Note also the use of <code>&#91;</code> and <code>&#93;</code>, which are the HTML entities for left and right brackets (<code>[...]</code>) respectively. These are used to avoid parsing errors, as the call to {{tl|w}} directly inside them expands to a raw link <code><nowiki>[[w:Galway Kinnell|Galway Kinnell]]</nowiki></code>, and without the HTML entity, there would be three left brackets in a row, which would be misparsed.
===Foreign-language examples===
Quoted text in a foreign language:
{{demo|sep=which produces|<nowiki>{{quote-book|fr
|year=1973
|author=w:Claude Simon
|title=Tryptique
|publisher=Éditions de Minuit
|page=12
|text=Les sons de la cloche '''égrenant''' les quarts, les demies et les heures {{...}}
|t=The sounds of the clock '''rattling off''' the quarters, the halves and the hours {{...}}
}}</nowiki>}}
----
Quoted text in a foreign language, of a book in a series:
{{demo|sep=which produces|<nowiki>{{quote-book|de
|year=1999
|author=Paul Hoffmann
|coauthors=Stefan H. Brandenburger; Ulrike Brauner; Thomas Hieke
|title=Q 22:28, 30: You Will Judge the Twelve Tribes of Israel
|series=Documenta Q: Reconstructions of Q Through Two Centuries of Gospel Research Excerpted, Sorted and Evaluated
|seriesvolume=volume 5
|isbn=90-429-0734-7
|page=189
|passage=Zumal in beiden Fällen eine Partizipialform vorliegt, liegt es nahe, die '''Zeitworte''' als Varianten anzusehen.
}}</nowiki>}}
Here, the authors of this scholarly work were listed as "Paul Hoffmann, together with Stefan H. Brandenburger, Ulrike Brauner and Thomas Hieke", which we handle by listing the other authors as coauthors.
----
Quoted text with automatic transliteration:
{{demo|sep=which produces|<nowiki>{{quote-book|ru
|author=lw:ru:[[Филарет (Дроздов)|Митрополи́т Филаре́т]]<tr:-><t:Mitropolit Filaret>
|chapter=ru:Сло́во предъ приведеніемъ къ присягѣ Санктпетербурксаго дворя́нства и гражданъ для избранія суде́й
|date=1818-02-01<!--Converted to Gregorian-->
|year_published=1873
|location=Moscow
|title=ru:Сочинеиія Филарета Митрополита Московскаго и Коломенскаго
|volume=I
|page=253
|pageurl=https://books.google.com/books?id=yWEcAAAAMAAJ&pg=PA253
|text=[[изъ|Изъ]] [[сей|сего́]] [[ви́дно]], [[что]] [[судья|судія́]], [[как|какъ]] [[блюсти́тель]] [[общественный|обще́ственнаго]] [[порядок|поря́дка]], [[должен|долженъ]] '''объима́ть''' [[и]] [[проника́ть]] [[мысль|мы́слію]] [[весь]] [[состав|соста́въ]] [[общество|о́бщества]];
|t=From this it becomes discernible that a judge, in his function as a warden of public order, should '''enclose''' and traverse the whole body of the society;
}}</nowiki>}}
----
Quoted text with automatic transliteration and use of {{para|subst}} and <code><subst:...></code>:
{{demo|sep=which produces|<nowiki>{{quote-book|yi
|author=I.J. Singer
|title=Fun a velt vos iz nishto mer
|year=1946
|chapter=yi:אַ ייד אַ מלמד פֿאַרגלוסט זיך צו ווערן אַ מלאך אום פּורים און פֿאַרלירט, נעבעך, אַן אויג<subst:ייד/ייִד,מלמד/מעלאַמעד,פּורים/פּורעם,מלאך/מאַלעך><t:A Jew, a teacher, decides to become an angel on Purim and, unfortunately, loses an eye>
|passage=יעדן '''זמן''' אויפֿסניי, חול־המועד סוכות אָדער חול־המועד פּסח, בין איך געווען זייער האָפֿערדיק, וואָס מען האָט מיך גענומען איין מלמד און אָנגעדונגען צו אַן אַנדערן, גלײבנדיק, אַז דער נייער וועט זיין בעסער ווי דער אַלטער.
|subst=זמן//זמאַן,חול־המועד//כאַלעמויעד,סוכות//סוקוס,פּסח//פּייסעך,מלמד//מעלאַמעד,נייער//נײַער
|translation=Every '''term''' anew, during the intermediary periods of Sukkot and Pesach, I was very confident in being taken from one melamed and given to another, believing the new one would be better than the old.
}}</nowiki>}}
----
Quoted text with automatic transliteration, of a translation, with use of {{para|original}}, {{para|origtext}} and {{para|origlang}}:
{{demo|sep=which produces|<nowiki>{{quote-book|ru
|year=1983
|author=w:Samuil Marshak
|title=Баллада о королевском бутерброде<subst:бутер/бутэр><t:Ballad of the King's Bread>
|original=The King's Breakfast
|by=w:A. A. Milne
|origtext=en:"Nobody," / He whimpered, / "Could call me / A fussy man; / I only want / A little bit / Of butter for / My bread!"
|origlang=en
|text=— [[никто|Никто́]] [[не]] [[сказать|ска́жет]], [[бу́дто]] [[я]] / [[тиран|Тира́н]] [[и]] [[сумасбро́д]], / [[за|За]] [[то́]], [[что]] [[к]] [[чай|ча́ю]] [[я]] [[любить|люблю́]] / [[хороший|Хоро́ший]] '''бутербро́д'''.
|subst=бутербро́д/бутэрбро́д
|t="No one would say that I / Am a tyrant and madman, / For the fact that with my tea I like / A good '''bread-and-butter sandwich'''."
}}</nowiki>}}
Here, the original text in English was freely translated into Russian, and so we present the original text along with a literal translation back into English. Usually with translations, we put the original author in the {{para|author}} field and the translator in the {{para|tlr}} field, but here due to the free translation we are treating the translator as the author and putting the original author in the {{para|by}} field. Note that the language of the original text is duplicated in both the {{para|origtext}} field (as a prefix) and the {{para|origlang}} field. This is necessary because the two fields serve different purposes, and the use of {{para|origlang}} may not always be correct (as in the following example).
----
Another example of quoted text from a translation, using {{para|newversion}}:
{{demo|sep=which produces|<nowiki>{{quote-book|ota
|year=1922
|title=ota:ادارهٔ حرب و سیاست<tr:Idare-i harb ve siyaset>
|location=Istanbul
|publisher=ota:مطبعهٔ عثمانیه
|page=176
|pageurl=https://babel.hathitrust.org/cgi/pt?id=uc1.aa0006749931&view=1up&seq=182
|newversion=translation of
|lang2=de
|year2=1922
|2ndauthor=w:Erich Ludendorff
|title2=Kriegsführung und Politik
|location2=Berlin
|publisher2=E. S. Mittler & Sohn
|page2=199
|pageurl2=https://archive.org/details/kriegfhrungund00lude/page/199
|text=شرقی غالیچیا، و بوقوونیاده شمندوفر نقاباتی تأسس ایتدكدن صكره شرقده '''صلحی''' تأمین ایچون دینیهستر نهری جنوبندن روس — رومن جبههسنه قارشو حربه دوام ایتمك فكرندن فراغت ایتمك لازمكلیورایدی. بر قصقاچ تأثیری یاپهبیلمك ایچون بری قلاص غربندن یوقارهسهرهت اوزرینه و دیكری دینیهستر جنوبندن اولمق اوزره مضاعف بر تعرض اجراسی لازمكلیور ایده.
|tr=Şarki Galiçya, ve Bukovinyada şömendüfer nakabatı tesis itdikden soñra şarkda sulhı temin içün Dinyester nehri cenubundan rus-rumen cebhesine karşu harbe devam itmek fikrinden feragat itmek lazım geliyor idi. Bir kıskaç tesiri yapabilmek içün biri Kalas garbından yukara-yı Seret üzerine ve diğeri Dinyester cenubundan olmak üzere muzaaf bir taarruz icrası lazım geliyor idi.
|origtext=de:Unsere weitere Absicht, nach Herstellung der Eisenbahnverbindungen in Ostgalizien und in der Bukowina zur Erzwingung des Friedens im Osten den Feldzug gegen die russisch-rumänische Front südlich des Dnjestr fortzusetzen, mußte aufgegeben werden. Er sollte in einem doppelten Angriff über den oberen Sereth westlich Galatz und hart südlich des Dnjestr bestehen und auch zangenartig wirken.
|t=Our further intention, the military campaign against the Russian-Romanian front to be continued south of the Dniestr to force '''peace''' in the east, after procurement of the railroad connections in Eastern Galicia and in the Bukovina, had to be abandoned. It was supposed to consist in a double attack over the upper Siret west of Galați as well as hard south of the Dniestr and go like pincers.
}}</nowiki>}}
Here, an original work in German was translated into Ottoman Turkish and used to illustrate an Ottoman Turkish term. The use of {{para|newversion}} allows full bibliographic information to be given for the original work as well as the translation. In such a case, the original text language is placed in {{para|lang2}} (or in some cases in {{para|origlang2}}, when there are two layers of translation).
----
Yet another example of quoted text from a translation, using both {{para|original}} and {{para|newversion}} to express two layers of translation:
{{demo|sep=which produces|<nowiki>{{quote-book|it
|title=L'œuvre complète de Tchouang-tseu
|tlr=Liou Kia-hway<f:Hant:劉家槐><f:Pinyin:Liú Jiāhuái>
|original={{w|Zhuangzi (book)|Zhuang-zi}}
|by=莊周<t:Zhuang Zhou>
|origlang=och
|origyear=c. 300 {{BCE}}
|year=1969
|year2=1982
|year_published2=2010
|newversion=translated as
|tlr2=Carlo Laurenti; Christine Leverd
|title2=Zhuang-zi [Chuang-tzu]
|series2=Gli Adelphi
|seriesvolume2=41
|chapter2=Libertà naturale
|trans-chapter2=Natural Freedom
|edition2=6th
|location2=Milan
|publisher2={{w|Adelphi Edizioni}}
|page2=17
|isbn2=978-88-459-0950-4
|origtext=och:之人也,物莫之傷,大浸稽天而不溺,大旱、金石流、土山焦而不熱。
|text=Se le acque si alzassero fino al cielo, non annegherebbero. Se la siccità '''liquefacesse''' i metalli e infiammasse le montagne, non ne sarebbero neppure sfiorati.
|t=If the waters were to rise to the skies, they wouldn't drown. If drought were to '''liquefy''' metals, and set fire to the mountains, they wouldn't even be touched by it.
}}</nowiki>}}
Here, an original work in Old Chinese (the {{w|Zhuangzi (book)|Zhuang-zi}}) was translated into French as ''L'œuvre complète de Tchouang-tseu'', and from there translated into Italian as ''Zhuang-zi [Chuang-tzu]'' (the brackets are in the original title). The template does not support two different {{para|newversion}} levels, but this can be expressed using a combination of {{para|original}} and {{para|newversion}}, as shown. Note also the use of the <code><f:...></code> modifier in the translator's name to express the original version in traditional Chinese characters and the Romanization in Pinyin.
----
The following example shows the use of {{para|termlang}} (to indicate a term in one language contained in a quotation in a different language) and {{para|brackets}} (to specify that the quotation presents a mention of a term rather than a use per se):
{{demo|sep=which produces|<nowiki>{{quote-book|fr
|termlang=en
|year=1677
|author=Guy Miege [''i.e.'', [[w:fr:Guy Miège|Guy Miège]]]
|entry=HAGGESS
|entryurl=https://books.google.com/books?id=YbWtTwVbLioC&pg=PP857
|title=A New Dictionary French and English, with Another English and French; According to the Present Use, and Modern Orthography of the French. Inrich’d with New Words, Choice Phrases, and Apposite Proverbs; Digested into a Most Accurate Method; and Contrived for the Use Both of English and Foreiners
|location=London
|publisher=Printed by Tho[mas] Dawks, for Thomas Basset, at the George, near [[w:Clifford's Inn|Cliffords-inn]], in [[w:Fleet Street|Fleetstreet]]
|column=3
|oclc=874955677
|text='''HAGGESS''', '''haggas''', or '''haggis''', ſort d'appret fait avec des herbes, du larde caupé menu, des épices, des œufs, & du fromage, le tout mis enſemble & bouilli dans une panſe de brebis.
|t='''HAGGESS''', '''haggas''', or '''haggis''', a sort of preparation made with herbs, bacon, spices, eggs, cheese, all put together and boiled in a sheep's belly.
|brackets=1
}}</nowiki>}}
==TemplateData==
{{TemplateData header}}
<templatedata>
{
"description": "This template can be used in a dictionary entry to provide a quotation from a book.",
"params": {
"1": {
"label": "Language",
"description": "A comma-separated list of language codes indicating the language(s) of the quoted text.",
"example": "en",
"type": "string",
"required": true,
"suggested": true
},
"worklang": {
"label": "Work language",
"description": "A comma-separated list of language codes indicating the language(s) that the book is written in, if different from the quoted text.",
"example": "de",
"type": "string"
},
"termlang": {
"label": "Term language",
"description": "A language code indicating the language of the term being illustrated, if different from the quoted text. If specified, this language is the one used when adding the page to a category of the form \"Category:[Language] terms with quotations\"; otherwise, the first listed language specified using \"1\" is used. Only specify this parameter if the language of the quotation is different from the term's language, e.g. a Middle English quotation used to illustrate a modern English term or an English definition of a Vietnamese term in a Vietnamese-English dictionary.",
"example": "it",
"type": "string"
},
"title": {
"label": "Title",
"description": "The title of the book.",
"type": "string",
"required": true,
"example": "Animal Farm"
},
"trans-title": {
"label": "Translated title",
"description": "If the title of the book is not in English, this parameter can be used to provide an English translation of the title.",
"type": "string",
"example": "The Ingenious Gentleman Don Quixote of La Mancha"
},
"year": {
"label": "Year of (first) publication",
"description": "The year that the book was published. Prefix with \"a.\", \"c.\" or \"p.\" to indicate a publication year that is ante (before), circa (about), or post (after) the year specified.",
"type": "number",
"aliases": ["2"],
"suggested": true,
"example": "1945"
},
"year_published": {
"label": "Year of cited publication",
"description": "If \"year\" is used to state the year when the original version of the book was published, \"year_published\" can be used to state the year in which the version quoted from was published",
"type": "number"
},
"origyear": {
"label": "Original year of publication",
"description": "The year when the book was originally published. Use either \"origdate\", or \"origyear\" (and \"origmonth\"), not both.",
"type": "number",
"example": "1942"
},
"date": {
"label": "Date of publication",
"description": "Use either \"year\" or \"date\", not both.",
"type": "string",
"example": "17 August 1945"
},
"origdate": {
"label": "Original date of publication",
"description": "The date when the book was originally published. Use either \"origdate\", or \"origyear\" (and \"origmonth\"), not both.",
"type": "string",
"example": "17 August 1942"
},
"author": {
"label": "Author",
"description": "The name of the author of the book quoted. Additional authors can be added using the parameters \"author2\" to \"author5\".",
"type": "string",
"example": "George Orwell",
"suggested": true
},
"first": {
"label": "Author first name",
"description": "The first name of the author of the book quoted. Use either \"author\", or \"last\" and \"first\".",
"type": "string",
"example": "George"
},
"last": {
"label": "Author last name",
"description": "The last name of the author of the book quoted. Use either \"author\", or \"last\" and \"first\".",
"type": "string",
"example": "Orwell"
},
"authorlink": {
"label": "Wikipedia author page",
"description": "English Wikipedia article about the author.",
"type": "string",
"example": "George Orwell",
"suggested": false
},
"editor": {
"label": "Editor",
"description": "The name(s) of the editor(s) of the book. Separate multiple names with semicolons.",
"aliases": ["editors"],
"type": "string"
},
"translator": {
"label": "Translator",
"description": "The name(s) of the translator(s) of the book. Separate multiple names with semicolons.",
"aliases": ["translators", "tlr"],
"type": "string"
},
"page": {
"label": "Page",
"description": "The page number or range of page numbers of the book. Use an en dash (–) to separate the page numbers in the range.",
"type": "number",
"example": "123, 56–57",
"aliases": ["pages"],
"suggested": true
},
"pageurl": {
"label": "Page URL",
"description": "The URL or web address of the webpage containing the page(s) of the book referred to. The page number(s) will be linked to this webpage.",
"type": "url",
"example": "https://books.google.com/books?id=p98NAAAAQAAJ&pg=PA1"
},
"line": {
"label": "Line number(s)",
"description": "If quoting a play or a poem, the line number(s) quoted. Use an en dash (–) to separate the line numbers in a range.",
"type": "number",
"example": "1–2",
"aliases": ["lines"]
},
"section": {
"label": "Section",
"description": "Use this parameter to identify a page or other portion of a book that does not have page numbers.",
"example": "Act II, scene iv",
"type": "string"
},
"sectionurl": {
"label": "Section URL",
"description": "The URL of the webpage containing the section of the book referred to. The section number will be linked to this webpage.",
"type": "url"
},
"column": {
"label": "Column number(s)",
"aliases": ["columns"],
"description": "The column number or range of column numbers of the book. Use an en dash to separate the column numbers in the range.",
"example": "1–4",
"type": "string"
},
"columnurl": {
"label": "Column URL",
"description": "The URL of the webpage containing the column(s) of the book referred to. The column number(s) will be linked to this webpage.",
"type": "url"
},
"chapter": {
"label": "Chapter",
"description": "The chapter of the book quoted. You can either specify a chapter number in Arabic or Roman numerals or a chapter title.",
"type": "string",
"aliases": ["entry"],
"example": "4, IV, Some Chapter Title"
},
"chapterurl": {
"label": "Chapter URL",
"description": "The URL of an external webpage to link to the chapter. For example, if the book has no page numbers, the webpage can be linked to the chapter or entry name using this parameter. Do not link to any website that has content in breach of copyright.",
"aliases": ["entryurl"],
"type": "url"
},
"trans-chapter": {
"label": "Translated chapter",
"description": "If the chapter of, or entry in, the book is not in English, this parameter can be used to provide an English translation of the chapter or entry.",
"aliases": ["trans-entry"],
"type": "string"
},
"volume": {
"label": "Volume number",
"description": "The volume number of the book.",
"type": "number",
"example": "2"
},
"volume_plain": {
"label": "Volume title",
"description": "The volume name of the book. Use if you wish to suppress the word \"volume\" appearing in front of the volume number.",
"type": "string",
"example": "book II"
},
"series": {
"label": "Series",
"description": "The book series that the book belongs to.",
"type": "string",
"example": "Signet Classic"
},
"seriesvolume": {
"label": "Series volume",
"description": " The volume number of the book within the \"series\".",
"type": "string",
"example": "CT334"
},
"genre": {
"label": "Genre",
"description": "The literary genre of the book.",
"example": "\"fiction\", \"non-fiction\"",
"suggestedvalues": [
"fiction",
"non-fiction"
],
"type": "string"
},
"format": {
"label": "Format",
"description": "The format that the book is in.",
"example": "\"hardcover\", \"paperback\"",
"suggestedvalues": [
"hardcover",
"paperback"
],
"type": "string"
},
"isbn": {
"label": "ISBN",
"description": "International Standard Book Number",
"type": "string",
"example": "9780452284241",
"aliases": ["ISBN"],
"suggested": true
},
"issn": {
"label": "ISSN",
"description": "International Standard Serial Number",
"type": "string",
"aliases": ["ISSN"],
"example": "2049-3630"
},
"oclc": {
"label": "OCLC",
"description": "Online Computer Library Center number (www.worldcat.org)",
"type": "number",
"aliases": ["OCLC"],
"example": "53163540"
},
"lccn": {
"label": "LCCN",
"description": " Library of Congress Control Number",
"type": "string",
"aliases": ["LCCN"],
"example": "n78-890351"
},
"ol": {
"label": "Open Library number",
"description": "Internet Archive Open Library number (openlibrary.org)",
"type": "string",
"aliases": ["OL"],
"example": "OL7954505M"
},
"doi": {
"label": "DOI",
"description": "Digital object identifier",
"type": "string",
"aliases": ["DOI"],
"example": "10.3352/jeehp.2013.10.3"
},
"id": {
"label": "Other id",
"description": "Use for an identifier other than the ones listed above.",
"type": "string"
},
"publisher": {
"label": "Publisher",
"description": "The name of one or more publishers of the book. If more than one publisher is stated, separate the names with semicolons.",
"type": "string",
"example": "Secker and Warburg"
},
"location": {
"label": "Location",
"description": "The location where the book was published. If more than one location is stated, separate the locations with semicolons.",
"type": "string",
"example": "London"
},
"edition": {
"label": "Edition",
"description": "The edition of the book quoted. If quoting from the first edition of the book, it is usually not necessary to specify this fact.",
"type": "string",
"example": "\"2nd\", \"3rd corrected and revised\""
},
"url": {
"label": "URL",
"description": "The URL or web address of an external website containing the full text of the book. Do not link to any website that has content in breach of copyright.",
"type": "url",
"example": "https://www.gutenberg.org/files/2828/2828-h/2828-h.htm"
},
"archiveurl": {
"label": "Archive URL",
"description": "Use \"archiveurl\" to indicate the URL of a webpage on a website such as the Internet Archive at which the webpage has been archived.",
"type": "url",
"example": "https://web.archive.org/web/20120210005807/https://time.com/time/magazine/article/0,9171,912563,00.html"
},
"archivedate": {
"label": "Archive date",
"description": "The date on which \"archiveurl\" was archived.",
"type": "string",
"example": "2012-02-10"
},
"brackets": {
"label": "Brackets",
"description": "Use \"on\" to surround a quotation with brackets. This indicates that the quotation contains a mere mention of a term or does not provide an actual instance of a term but provides information about related terms.",
"type": "boolean",
"example": "on"
},
"author2": {
"description": "additional author",
"type": "string"
},
"authorlink2": {
"description": "additional author Wikipedia article",
"type": "string"
},
"author3": {
"inherits": "author2"
},
"authorlink3": {
"inherits": "authorlink2"
},
"author4": {
"inherits": "author2"
},
"authorlink4": {
"inherits": "authorlink2"
},
"author5": {
"inherits": "author2"
},
"authorlink5": {
"inherits": "authorlink2"
},
"passage": {
"label": "Quoted passage",
"description": "The text being quoted. Use boldface to highlight the term being defined.",
"aliases": ["text"],
"type": "content",
"required": true,
"example": "Boxer was an enormous beast, nearly eighteen '''hands''' high, {{...}}"
},
"translation": {
"label": "Translation",
"description": "If the quoted text is not in English, this parameter can be used to provide an English translation of it. Don't use automated (machine-provided) translations.",
"aliases": ["t"],
"type": "content"
},
"transliteration": {
"label": "Transliteration",
"description": "If the quoted text uses a different writing system from the Latin alphabet (the usual alphabet used in English), this parameter can be used to provide a transliteration of it into the Latin alphabet. Note that many languages provide an automatic transliteration if this argument is not specified.",
"aliases": ["tr"],
"type": "content"
},
"footer": {
"label": "Footer",
"description": "This parameter can be used to specify arbitrary text to insert in a separate line at the bottom, to specify a comment, footnote, etc.",
"type": "content"
},
"quoted_in": {
"label": "Quoted in",
"description": "If the quoted text is from book \"A\" which states that the text is from another book \"B\", use \"title\", \"edition\" and \"others\" to provide information about book \"B\". Use \"quoted_in\" for the title of book \"A\".",
"type": "string"
},
"original": {
"label": "Original title of work",
"description": "If you are citing a derivative work such as a translation, state the title of the original work.",
"example": "El ingenioso hidalgo Don Quijote de la Mancha",
"type": "string"
},
"type": {
"label": "Type of derivative work",
"description": "If you are citing a derivative work such as a translation, state the type of derivative work. If not indicated, the template assumes that the derivative work is a translation.",
"example": "Translation",
"type": "string"
},
"by": {
"label": "Author of original work",
"description": "If you are citing a derivative work such as a translation, state the author of the original work.",
"example": "Miguel de Cervantes",
"type": "string"
},
"by2": {
"label": "Author of original work",
"description": "If \"by\" is used to state the author of another translated version of the work, \"by2\" can be used to state the author of the original work.",
"type": "string"
}
},
"maps": {
"citoid": {
"language": "1",
"title": "title",
"bookTitle": "title",
"publicationTitle": "title",
"translator": "translator",
"author": ["author", "author2", "author3", "author4", "author5"],
"editor": "editor",
"publisher": "publisher",
"date": "date",
"place": "location",
"edition": "edition",
"ISSN": ["issn"],
"ISBN": ["isbn"],
"oclc": "oclc",
"pages": "page",
"volume": "volume",
"series": "series",
"DOI": "doi",
"url": "url"
}
},
"paramOrder": [
"1",
"worklang",
"termlang",
"author",
"authorlink",
"editor",
"title",
"trans-title",
"chapter",
"chapterurl",
"trans-chapter",
"page",
"pageurl",
"line",
"section",
"sectionurl",
"column",
"columnurl",
"passage",
"translation",
"transliteration",
"year",
"year_published",
"origyear",
"date",
"origdate",
"publisher",
"location",
"edition",
"genre",
"format",
"url",
"archiveurl",
"archivedate",
"translator",
"volume",
"volume_plain",
"series",
"seriesvolume",
"isbn",
"issn",
"oclc",
"doi",
"lccn",
"ol",
"id",
"brackets",
"last",
"first",
"quoted_in",
"original",
"type",
"by",
"by2",
"footer",
"author2",
"authorlink2",
"author3",
"authorlink3",
"author4",
"authorlink4",
"author5",
"authorlink5"
],
"format": "inline"
}
</templatedata>
==See also==
* {{temp|cite-book}} – for citations in reference sections and on talk pages
* <code><nowiki>{{</nowiki>[[w:Template:cite book|cite book]]<nowiki>}}</nowiki></code> – the corresponding English Wikipedia template
{{citation templates}}
<includeonly>
[[Kategorî:Çavkanî|{{PAGENAME}}]]
</includeonly>
o3l304t7uo74gzo6xxyx7mi18dghg74
سپەر
0
977144
6333607
6333602
2026-08-14T13:00:20Z
Ghybu
1393
/* Etîmolojî */
6333607
wikitext
text/x-wiki
== {{ziman|ckb}} ==
=== Navdêr ===
{{navdêr|ckb}}
# {{f|ckb|çek}} [[mertal]]
#: {{hevmane|ckb|مەتاڵ|قەڵغان}}
# [[senger]], [[kozik]], [[çeper]]
==== Formên alternatîv ====
* {{hw|ckb|سپێر}}
* {{hw|ckb|سوپەر}}
==== Etîmolojî ====
Hevreha {{hv|fa|سپر|tr=sêper|w=mertal}}, {{hv|xme-old|*sparah|w=mertal}}.
3vcw0g4h4tp7yoybmxd0zoqx7ii106i
6333608
6333607
2026-08-14T13:02:25Z
Ghybu
1393
/* {{ziman|ckb}} */
6333608
wikitext
text/x-wiki
== {{ziman|ckb}} ==
=== Navdêr ===
{{navdêr|ckb|tr=siper}}
# {{f|ckb|çek}} [[mertal]]
#: {{hevmane|ckb|مەتاڵ|قەڵغان}}
# [[senger]], [[kozik]], [[çeper]]
==== Formên alternatîv ====
* {{hw|ckb|سپێر|tr=siper}}
* {{hw|ckb|سوپەر}}
==== Etîmolojî ====
Hevreha {{hv|fa|سپر|tr=sêper|w=mertal}}, {{hv|xme-old|*sparah|w=mertal}}.
fy5x9o4wgkrxmsid8zo7sjypn5l860k
6333609
6333608
2026-08-14T13:03:43Z
Ghybu
1393
/* Formên alternatîv */
6333609
wikitext
text/x-wiki
== {{ziman|ckb}} ==
=== Navdêr ===
{{navdêr|ckb|tr=siper}}
# {{f|ckb|çek}} [[mertal]]
#: {{hevmane|ckb|مەتاڵ|قەڵغان}}
# [[senger]], [[kozik]], [[çeper]]
==== Formên alternatîv ====
* {{hw|ckb|سپێر|tr=sipêr}}
* {{hw|ckb|سوپەر}}
==== Etîmolojî ====
Hevreha {{hv|fa|سپر|tr=sêper|w=mertal}}, {{hv|xme-old|*sparah|w=mertal}}.
f3zf9ozznqg34u6c2tuwaoldsqexwxi
MediaWiki:Gadget-start.js
8
1268672
6333633
6327631
2026-08-14T14:41:12Z
Bikarhêner
3719
6333633
javascript
text/javascript
// Li ser [[vi:MediaWiki:Gadget-start.js]] hatiye refaktorkirin.
// implicit dependencies: StorageUtils (ObjectStorage)
//<nowiki>
$(function () {
if (window.location.href.includes("editintro=User:Wikihez/creation/intro")) {
return; // Do not run the script wextê WF:Bilez dişuxile
}
var ns = mw.config.get("wgNamespaceNumber");
if (ns &&
!(ns === 2 && mw.config.get("wgPageName").match(/\/ceribandin$|\/test$/))) {
return;
}
var addLangMode = mw.util.getParamValue("wiktkuaddlang") === "1";
// ── Testing mode ──────────────────────────────────────────────────────
var Testing = false;
var WIKTKU_DATA_JSON_TITLE = "MediaWiki:Gadget-start/data.json";
// ── Tercîh (user settings) panel stored via mw.storage (localStorage), globally
var WIKTKU_PREFS_KEY = "wiktku_start_prefs";
var WIKTKU_PREFS_DEFAULTS = {
// [] = show the full language list in the "ziman" step; otherwise
// only these codes are shown there (data.json codes, not names).
langCodes: [],
// true = never auto-open on a new/empty page — only via the
// "+Ziman/beşeke din" portlet link.
onlyOnClick: false,
// "auto" | "p-cactions" | "p-tb" | "p-views" — where the
// "+Ziman/beşeke din" portlet link is added.
portlet: "auto",
// true = suppress routine/informational mw.notify toasts (page
// loading, cache auto-restored, cache saved/cleared, "tê şandin…").
// Errors and direct results of an explicit action (like saving
// Tercîh itself) always show regardless of this setting.
quiet: false
};
function wiktkuLoadPrefs() {
if (!(window.mw && mw.storage)) return $.extend({}, WIKTKU_PREFS_DEFAULTS);
var raw;
try { raw = mw.storage.get(WIKTKU_PREFS_KEY); } catch (e) { raw = null; }
if (!raw) return $.extend({}, WIKTKU_PREFS_DEFAULTS);
var parsed;
try { parsed = JSON.parse(raw); } catch (e) { parsed = {}; }
return $.extend({}, WIKTKU_PREFS_DEFAULTS, parsed);
}
function wiktkuSavePrefs(prefs) {
if (!(window.mw && mw.storage)) return false;
try {
mw.storage.set(WIKTKU_PREFS_KEY, JSON.stringify(prefs));
return true;
} catch (e) { return false; }
}
var wiktkuPrefs = wiktkuLoadPrefs();
// Routine/informational notices go through here so "quiet mode" can
// suppress them; errors and explicit-action confirmations (like the
// Tercîh save toast) call mw.notify directly instead, and always show.
function wiktkuNotify(message, options) {
if (wiktkuPrefs.quiet) return;
mw.notify(message, options);
}
// Lazily built the first time it's opened; reused after that (see
// wiktkuOpenPrefsDialog below, defined once we know OOUI is available).
var wiktkuPrefsWindowManager = null;
var wiktkuPrefsDialog = null;
function wiktkuOpenPrefsDialog() {
mw.loader.using(["oojs-ui-core", "oojs-ui-windows"], function () {
function WiktkuPrefsDialog(config) {
WiktkuPrefsDialog.super.call(this, config);
}
if (!wiktkuPrefsDialog) {
OO.inheritClass(WiktkuPrefsDialog, OO.ui.ProcessDialog);
WiktkuPrefsDialog.static.name = "wiktkuPrefsDialog";
WiktkuPrefsDialog.static.title = "Tercîhên min";
WiktkuPrefsDialog.static.actions = [
{ action: "save", label: "Qeyd bike", flags: ["primary", "progressive"] },
{ action: "cancel", label: "Betal bike", flags: "safe" }
];
WiktkuPrefsDialog.prototype.initialize = function () {
WiktkuPrefsDialog.super.prototype.initialize.call(this);
this.langCodesInput = new OO.ui.TextInputWidget({
placeholder: "ku, zza, ckb (vala bihêle ji bo hemû zimanan)"
});
this.onlyOnClickCheckbox = new OO.ui.CheckboxInputWidget({});
this.quietCheckbox = new OO.ui.CheckboxInputWidget({});
this.portletDropdown = new OO.ui.DropdownInputWidget({
options: [
{ data: "auto", label: "Otomatîk (li gorî rûyê wîkiyê)" },
{ data: "p-cactions", label: "p-cactions - Li qismê Amûran" },
{ data: "left-navigation", label: "left-navigation - Li qismê Gotar-Gotûbêj" },
{ data: "p-tb", label: "p-tb - Li qismê Giştî" },
{ data: "p-views", label: "p-views - Li qismê Bixwîne" }
]
});
var fieldset = new OO.ui.FieldsetLayout({ label: "Eyar" });
fieldset.addItems([
new OO.ui.FieldLayout(this.langCodesInput, {
label: "Kodên zimanan ku tê xuyakirin li qismê \"ziman\"",
align: "top",
help: "Kodan bi virgulê (,) ji hev veqetîne. Vala bihêle da ku hemû ziman were nîşandan.",
helpInline: true
}),
new OO.ui.FieldLayout(this.onlyOnClickCheckbox, {
label: "Tenê veke wextê \"+Ziman/beşeke din\" were tikandin",
align: "inline",
help: "Eger were hilbijartin, ev amûr êdî otomatîk li ser rûpelên nû/vala dest pê nake — divê meriv her carê pêl \"+Ziman/beşeke din\" bike.",
helpInline: true
}),
new OO.ui.FieldLayout(this.portletDropdown, {
label: "Cihê lînka \"+Ziman/beşeke din\"",
align: "top",
help: "\"Otomatîk\" li gorî rûyê wîkiyê hildibijêre.",
helpInline: true
}),
new OO.ui.FieldLayout(this.quietCheckbox, {
label: "Moda bêdeng (kêmtir agahdarî nîşan bide)",
align: "inline",
help: "Agahdariyên normal nîşan nede. Xeta her tim tên xuyakirin.",
helpInline: true
})
]);
this.$body.addClass("wiktku-prefs-dialog-body").append(fieldset.$element);
};
WiktkuPrefsDialog.prototype.getSetupProcess = function (data) {
return WiktkuPrefsDialog.super.prototype.getSetupProcess.call(this, data)
.next(function () {
this.langCodesInput.setValue(wiktkuPrefs.langCodes.join(", "));
this.onlyOnClickCheckbox.setSelected(!!wiktkuPrefs.onlyOnClick);
this.portletDropdown.setValue(wiktkuPrefs.portlet || "auto");
this.quietCheckbox.setSelected(!!wiktkuPrefs.quiet);
}, this);
};
WiktkuPrefsDialog.prototype.getActionProcess = function (action) {
var dialog = this;
if (action === "save") {
return new OO.ui.Process(function () {
var codes = dialog.langCodesInput.getValue()
.split(/[,\s]+/)
.map(function (c) { return c.trim().toLowerCase(); })
.filter(function (c) { return !!c; });
wiktkuPrefs = {
langCodes: codes,
onlyOnClick: dialog.onlyOnClickCheckbox.isSelected(),
portlet: dialog.portletDropdown.getValue() || "auto",
quiet: dialog.quietCheckbox.isSelected()
};
wiktkuSavePrefs(wiktkuPrefs);
mw.notify(
"Tercîh hatin qeydkirin. Rûpelê ji nû ve bar bike (F5).",
{ type: "success", tag: "wiktku-prefs-save" }
);
dialog.close({ action: "save" });
});
}
if (action === "cancel") {
return new OO.ui.Process(function () {
dialog.close({ action: "cancel" });
});
}
return WiktkuPrefsDialog.super.prototype.getActionProcess.call(this, action);
};
wiktkuPrefsWindowManager = new OO.ui.WindowManager();
$(document.body).append(wiktkuPrefsWindowManager.$element);
wiktkuPrefsDialog = new WiktkuPrefsDialog();
wiktkuPrefsWindowManager.addWindows([wiktkuPrefsDialog]);
}
wiktkuPrefsWindowManager.openWindow(wiktkuPrefsDialog);
});
}
var targetContainer;
var skin = mw.config.get('skin');
if (wiktkuPrefs.portlet && wiktkuPrefs.portlet !== "auto") {
targetContainer = wiktkuPrefs.portlet;
} else if (skin === 'vector-2022') {
targetContainer = 'p-cactions';
} else if (skin === 'vector') {
targetContainer = 'p-tb';
} else {
targetContainer = 'p-views';
}
mw.util.addPortletLink(targetContainer,
mw.util.getUrl(mw.config.get("wgPageName"), { action: "submit", wiktkuaddlang: "1" }),
"+Ziman/beşeke din", "ca-wiktku-addlang",
"Li vê rûpelê, ziman an jî beşeke nû zêde bike");
// If "onlyOnClick" is set, the wizard should ONLY ever open via the
// "+Ziman/beşeke din" link — never automatically
var wiktkuNewPageDetected = $(".mw-newarticletext, .mw-newarticletextanon").length > 0;
if (wiktkuPrefs.onlyOnClick ? !addLangMode : (!addLangMode && !wiktkuNewPageDetected)) {
return;
}
function capitalize(str) {
if (!str) return str;
return str[0].toUpperCase() + str.substr(1);
}
function decapitalize(str) {
if (!str) return str;
return str[0].toLowerCase() + str.substr(1);
}
function escapeRegExp(str) {
return str.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
}
function langHeaderSource(codePattern) {
return "\n?==\\s*\\{\\{\\s*ziman\\s*\\|\\s*(" + codePattern + ")\\s*\\}\\}\\s*==";
}
function findLangHeader(text, code) {
var m = new RegExp(langHeaderSource(escapeRegExp(code))).exec(text);
return m ? { index: m.index, match: m[0] } : null;
}
function stripWikilinks(str) {
return str.replace(/\[\[([^\]|]+)(?:\|([^\]]+))?\]\]/g, function (m, target, display) {
return display || target;
});
}
function splitTercimeIzah(mane) {
var m = /^([\s\S]*?)\s*\{\{îzah\|([\s\S]*)\}\}\s*$/.exec(mane || "");
return m ? { tercime: m[1], izah: m[2] } : null;
}
function insertAtCursor(el, text) {
var start = el.selectionStart;
var end = el.selectionEnd;
var val = el.value;
el.value = val.slice(0, start) + text + val.slice(end);
var pos = start + text.length;
el.selectionStart = el.selectionEnd = pos;
}
var catSrcTemplates = null;
var catSrcTemplatesPromise = null;
function fetchCatSrcTemplates() {
if (catSrcTemplatesPromise) return catSrcTemplatesPromise;
catSrcTemplatesPromise = new mw.Api().get({
action: "query",
list: "categorymembers",
cmtitle: "Kategorî:Çavkanî",
cmnamespace: 10,
cmlimit: "max",
formatversion: 2
}).then(function (data) {
var members = (data.query && data.query.categorymembers) || [];
catSrcTemplates = $.map(members, function (m) {
// Pêşgira navî ya "Şablon:" rake.
return m.title.replace(/^[^:]+:/, "");
});
catSrcTemplates.sort(function (a, b) { return a.localeCompare(b, userLang); });
return catSrcTemplates;
}, function () {
catSrcTemplates = [];
return catSrcTemplates;
});
return catSrcTemplatesPromise;
}
var pageName = mw.config.get("wgPageName").replaceAll(/_/g, " ");
if (ns) pageName = pageName.replace(/.*\//, "");
var pageNameRe = escapeRegExp(pageName);
var userLang = mw.config.get("wgUserLanguage");
var formCache = new ObjectStorage("wiktku_start_draft_" + mw.config.get("wgPageName"), 1);
var FOLD_EXTRA ={
"ı":"i", "ø":"o","đ":"d","ð":"d","ə":"e","ħ":"h","ł":"l","ŋ":"n","ʉ":"u", "ɨ":"i","ʒ":"z","ɛ":"e","ɔ":"o","æ":"ae", "œ":"oe","ß":"ss","þ":"th"
};
function foldDiacritics(str) {
if (str === null || str === undefined) return "";
var s = String(str).toLowerCase();
if (typeof s.normalize === "function") {
// Split "î" into "i" + combining circumflex, then drop the accent.
s = s.normalize("NFD").replace(/[\u0300-\u036f]/g, "");
}
return s.replace(/[^\u0000-\u007f]/g, function (ch) {
return Object.prototype.hasOwnProperty.call(FOLD_EXTRA, ch) ? FOLD_EXTRA[ch] : ch;
});
}
var WIKTKU_RESIZE_STORAGE_PREFIX = "wiktku_resize_height_";
function wiktkuResizeStorageKey(textarea) {
var cls = (textarea.attr("class") || "").trim().replace(/\s+/g, "_");
return WIKTKU_RESIZE_STORAGE_PREFIX + cls;
}
function wiktkuSaveResizeHeight(textarea, height) {
if (!(window.mw && mw.storage)) return;
try {
mw.storage.set(wiktkuResizeStorageKey(textarea), String(Math.round(height)));
} catch (e) { /* localStorage unavailable (private mode, quota, …) — skip caching */ }
}
function wiktkuLoadResizeHeight(textarea) {
if (!(window.mw && mw.storage)) return null;
try {
var v = mw.storage.get(wiktkuResizeStorageKey(textarea));
return v ? parseFloat(v) : null;
} catch (e) {
return null;
}
}
function wiktkuMakeManualResizable(textarea) {
textarea = $(textarea);
if (!textarea.is("textarea") || textarea.hasClass("wiktku-start-narrow")) return;
if (textarea.data("wiktkuResizableDone")) return;
textarea.data("wiktkuResizableDone", true);
textarea.wrap("<div class='wiktku-resize-wrap'></div>");
var grip = $("<div class='wiktku-resize-grip'></div>");
textarea.after(grip);
// Restore a previously chosen height for this kind of field, if any.
var cachedHeight = wiktkuLoadResizeHeight(textarea);
if (cachedHeight) {
var minHeightInit = parseFloat(textarea.css("min-height")) || 0;
textarea.css("height", Math.max(cachedHeight, minHeightInit) + "px");
}
var dragging = false, startY = 0, startHeight = 0;
function onPointerMove(e) {
if (!dragging) return;
var oe = e.originalEvent || e;
var minHeight = parseFloat(textarea.css("min-height")) || 0;
var newHeight = startHeight + (oe.clientY - startY);
textarea.css("height", Math.max(newHeight, minHeight) + "px");
}
function onPointerUp(e) {
if (!dragging) return;
dragging = false;
var oe = e.originalEvent || e;
try { grip[0].releasePointerCapture(oe.pointerId); } catch (err) { /* ignore */ }
$(document).off("pointermove", onPointerMove);
$(document).off("pointerup pointercancel", onPointerUp);
wiktkuSaveResizeHeight(textarea, textarea.outerHeight());
}
grip.on("pointerdown", function (e) {
var oe = e.originalEvent || e;
if (oe.button !== undefined && oe.button !== 0) return; // primary contact only
e.preventDefault();
dragging = true;
startY = oe.clientY;
startHeight = textarea.outerHeight();
try { grip[0].setPointerCapture(oe.pointerId); } catch (err) { /* ignore */ }
$(document).on("pointermove", onPointerMove);
$(document).on("pointerup pointercancel", onPointerUp);
});
}
/** Applies wiktkuMakeManualResizable to every eligible textarea already
* inside `context` (context itself, if it is a textarea, or any of its
* descendants). Used both for the initial form render and, via the
* MutationObserver set up in build(), for textareas added later on
* (new sense blocks, quote-source fields, nimûne rows, …). */
function wiktkuInitManualResize(context) {
var $context = $(context);
var $textareas = $context.is("textarea") ? $context : $context.find("textarea");
$textareas.each(function () {
wiktkuMakeManualResizable(this);
});
}
function wrapNativeSelect(select) {
var wrapper = $("<span class='wiktku-native-select-wrap'></span>");
if (select.prop("multiple")) {
return wrapper.append(select);
}
var placeholder = select.attr("data-placeholder") || "Lê bigere...";
select.hide();
var textInput = $("<input type='search' autocomplete='off'>")
.attr("placeholder", placeholder)
.attr("role", "combobox")
.attr("aria-autocomplete", "list")
.attr("aria-expanded", "false")
.addClass("wiktku-start-narrow wiktku-ac-input");
var resultsList = $("<ul class='wiktku-ac-results' role='listbox'></ul>").hide();
var allOptions = [];
var shown = [];
var activeIndex = -1;
function cacheOptions() {
allOptions = [];
select.find("option").each(function () {
var v = $(this).val();
var text = $(this).text();
// A blank value with no label (most selects' placeholder) is
// never a real choice, so skip it. But a blank value WITH a
// label -- e.g. tplSelect's "— yan jî şablonek hilbijêre —" --
// is a meaningful "clear the selection" choice, so keep it
// searchable/selectable like any other option.
if (!v && !text) return;
// Language options read "Name (code)" -- score the name on its own
// so the trailing code doesn't also count as a name match.
var name = text.replace(/\s*\([^()]*\)\s*$/, "");
allOptions.push({
value: v,
text: text,
disabled: $(this).prop("disabled"),
foldCode: foldDiacritics(v),
foldName: foldDiacritics(name),
foldText: foldDiacritics(text)
});
});
}
cacheOptions();
// True if `q` starts a word inside `name` ("kevn" in "ingiliziya kevn").
function startsWord(name, q) {
var from = 0, at;
while ((at = name.indexOf(q, from)) !== -1) {
if (at === 0 || /[\s\-\u2013\u2014(/,.]/.test(name.charAt(at - 1))) return true;
from = at + 1;
}
return false;
}
// Lower rank = better match.
// a code that *is* the query, or begins with it, always outranks a name
// that merely contains it -- so "ang" lists "Îngilîziya kevn (ang)"
// first instead of burying it among every name containing "ang".
var RANK_NONE = 99;
function rankOption(o, q) {
var code = o.foldCode, name = o.foldName;
if (code === q) return 0; // exact code
if (code.indexOf(q) === 0) return 1; // code prefix
if (name === q) return 2; // exact name
if (name.indexOf(q) === 0) return 3; // name prefix
if (startsWord(name, q)) return 4; // starts a word in the name
if (name.indexOf(q) !== -1) return 5; // name substring
if (code.indexOf(q) !== -1) return 6; // code substring
if (o.foldText.indexOf(q) !== -1) return 7; // anywhere else in the label
return RANK_NONE;
}
function positionList() {
// Position the list above or below depending on viewport space.
var inputRect = textInput[0].getBoundingClientRect();
var viewportH = window.innerHeight;
var spaceBelow = viewportH - inputRect.bottom - 8;
var spaceAbove = inputRect.top - 8;
var maxH = Math.min(224, Math.max(spaceBelow, spaceAbove)); // 224px = 14em
resultsList.css({
"max-height": maxH + "px",
"top": spaceBelow >= spaceAbove ? "100%" : "auto",
"bottom": spaceBelow >= spaceAbove ? "auto" : "100%"
});
}
function closeList() {
resultsList.hide();
textInput.attr("aria-expanded", "false");
activeIndex = -1;
}
function showResults(query) {
var q = foldDiacritics($.trim(query || ""));
resultsList.empty();
activeIndex = -1;
var matched = [];
if (q) {
$.each(allOptions, function (i, o) {
if (o.disabled) return;
var rank = rankOption(o, q);
if (rank !== RANK_NONE) matched.push({ opt: o, rank: rank, i: i });
});
if (!matched.length && q.indexOf(" ") !== -1) {
var tokens = q.split(/\s+/);
$.each(allOptions, function (i, o) {
if (o.disabled) return;
var all = true;
$.each(tokens, function (_, t) {
if (o.foldText.indexOf(t) === -1) { all = false; return false; }
});
if (all) matched.push({ opt: o, rank: 8, i: i });
});
}
matched.sort(function (a, b) {
if (a.rank !== b.rank) return a.rank - b.rank;
// Inside the code tiers the shorter code is the better hit:
// "an" -> "an" before "ang" before "ang-x-...".
if (a.rank <= 1 && a.opt.foldCode.length !== b.opt.foldCode.length) {
return a.opt.foldCode.length - b.opt.foldCode.length;
}
// Otherwise keep the menu's own order (pinned languages first).
return a.i - b.i;
});
} else {
$.each(allOptions, function (i, o) {
if (!o.disabled) matched.push({ opt: o, rank: 0, i: i });
});
}
shown = $.map(matched.slice(0, 50), function (m) { return m.opt; });
if (!shown.length) {
closeList();
return;
}
$.each(shown, function (idx, opt) {
var li = $("<li role='option'></li>")
.text(opt.text)
.attr("data-value", opt.value)
.attr("aria-selected", "false");
// touchend (not touchstart) so a scroll doesn't trigger a select.
var touchMoved = false;
li.on("touchstart", function () {
touchMoved = false;
});
li.on("touchmove", function () {
touchMoved = true;
});
li.on("touchend", function (e) {
if (touchMoved) return; // was a scroll, not a tap
e.preventDefault();
selectOption(opt.value, opt.text);
});
// mousedown (not click) so it beats the input's blur handler.
li.on("mousedown", function (e) {
e.preventDefault();
selectOption(opt.value, opt.text);
});
li.on("mouseenter", function () {
// Hovered items are already in view -- don't scroll the list
// under the mouse, or the shift can trigger the next item's
// mouseenter and cascade into a runaway scroll.
setActive(idx, /* scrollIntoView */ false);
});
resultsList.append(li);
});
positionList();
resultsList.show();
resultsList[0].scrollTop = 0;
textInput.attr("aria-expanded", "true");
}
function setActive(idx, scrollIntoView) {
var items = resultsList.children("li");
if (!items.length) return;
if (idx < 0) idx = items.length - 1;
if (idx >= items.length) idx = 0;
activeIndex = idx;
items.removeClass("wiktku-ac-active").attr("aria-selected", "false");
var li = items.eq(idx).addClass("wiktku-ac-active").attr("aria-selected", "true");
if (scrollIntoView === false) return;
// Keep the cursor visible inside the scrollable list -- only for
// keyboard navigation. A mouse-hovered item is already visible, so
// scrolling here would shift the list under a stationary pointer
// and cascade into further mouseenter events.
var ul = resultsList[0], el = li[0];
if (el.offsetTop < ul.scrollTop) {
ul.scrollTop = el.offsetTop;
} else if (el.offsetTop + el.offsetHeight > ul.scrollTop + ul.clientHeight) {
ul.scrollTop = el.offsetTop + el.offsetHeight - ul.clientHeight;
}
}
/** Puts the currently selected option's label back in the text box. */
function syncInputToSelect() {
var cur = select.val();
var match = null;
if (cur) {
$.each(allOptions, function (_, o) {
if (o.value === cur) { match = o; return false; }
});
}
textInput.val(match ? match.text : "");
}
function selectOption(value, text) {
textInput.val(text);
select.val(value);
closeList();
select.trigger("change");
}
textInput.on("input", function () {
showResults($(this).val());
});
textInput.on("focus", function () {
// Select the current label so typing replaces it, and open the full list
this.select();
showResults("");
});
textInput.on("click", function () {
if (!resultsList.is(":visible")) showResults($(this).val());
});
textInput.on("keydown", function (e) {
var open = resultsList.is(":visible");
switch (e.which) {
case 40: // Down
e.preventDefault();
if (!open) { showResults($(this).val()); setActive(0); }
else setActive(activeIndex + 1);
break;
case 38: // Up
e.preventDefault();
if (!open) { showResults($(this).val()); setActive(-1); }
else setActive(activeIndex - 1);
break;
case 13: // Enter -- must never submit the form while the list is open
if (open) {
e.preventDefault();
if (activeIndex >= 0 && shown[activeIndex]) {
selectOption(shown[activeIndex].value, shown[activeIndex].text);
} else if (shown.length === 1) {
selectOption(shown[0].value, shown[0].text);
}
}
break;
case 27: // Esc -- abandon the search, restore the real value
if (open) {
e.preventDefault();
closeList();
syncInputToSelect();
}
break;
case 9: // Tab -- commit the highlighted row on the way out
if (open && activeIndex >= 0 && shown[activeIndex]) {
selectOption(shown[activeIndex].value, shown[activeIndex].text);
}
closeList();
break;
}
});
textInput.on("blur", function () {
// Short delay so a touchstart/mousedown on a result fires first.
setTimeout(function () {
closeList();
// Half-typed text that never became a selection would otherwise sit
// in the box looking like a choice -- put the real value back.
syncInputToSelect();
}, 200);
});
// Re-caches the option list. Fired after the full language list loads, after
// options are enabled/disabled, and after programmatic .val() changes.
select.on("wiktku:refresh", function () {
cacheOptions();
syncInputToSelect();
if (resultsList.is(":visible")) showResults(textInput.val());
});
wrapper.append(textInput).append(resultsList).append(select);
return wrapper;
}
/**
* Gives every plain <select> under `root` the searchable picker. Selects
* marked .wiktku-plain-select opt out, and the call is idempotent, so it is
* safe to re-run after new rows or sense blocks are inserted.
*/
function initSelects(root) {
$(root).find("select").addBack("select").not(".wiktku-plain-select").each(function () {
var sel = $(this);
if (sel.prop("multiple")) return;
if (sel.closest(".wiktku-native-select-wrap").length) return; // already wrapped
var marker = $("<span></span>").insertBefore(sel);
marker.replaceWith(wrapNativeSelect(sel));
});
}
var langsByCode = {};
// Looks up the display label for a language code, falling back to the
// code itself if it isn't known yet (e.g. langsByCode not loaded).
function getLangLabel(code) {
var entry = langsByCode[code];
return entry ? entry.label : code;
}
// Populated from [[MediaWiki:Gadget-start.js/data.json]] at runtime.
var metadata = {};
var ZARAVA_LANG_CODES = ["ckb", "sdh", "lki", "hac", "zza"];
// Converts a {code: label} object (langChoices/posChoices in data.json)
// into the {code, label[, sortKey]} array the rest of the script uses.
// isLang: true adds a sortKey and shows "(code)" after the label —
// language choices only.
function choicesFromObject(obj, isLang) {
var result = [];
$.each(obj || {}, function (code, label) {
var choice = { code: code, label: label };
if (isLang) choice.sortKey = label;
result.push(choice);
});
return result;
}
function getZaravaKeys(choices) {
var byCode = {};
$.each(choices || [], function (_, c) { byCode[c.code] = c; });
var result = [];
$.each(ZARAVA_LANG_CODES, function (_, code) {
if (byCode[code]) result.push(byCode[code]);
});
return result;
}
function needsTransliteration(langCode) {
var meta = metadata[langCode];
if (!meta || !meta.sc) return false;
var scripts = Array.isArray(meta.sc) ? meta.sc : [meta.sc];
return scripts.length > 0 && scripts[0] !== "Latn";
}
// Kodên cinsiyetê yên di metadata.g de — ji data.json tê dagirtin
var GENDER_BASE_LABELS = {};
// Sub-lists that only make sense for a plain (non-şablon) sense — hidden
// when a şablon (e.g. {{guharto|…}}) is chosen for that sense
var HIDDEN_ON_TPL_GROUPS = [
"wiktku-dfn-alternativ",
"wiktku-dfn-hevmane",
"wiktku-dfn-dijmane",
"wiktku-dfn-koordine",
"wiktku-dfn-jornav",
"wiktku-dfn-jernav"
];
function genderLabel(code) {
if (code === "p") return "Pirjimar";
var pluralMatch = code.match(/^(.+)-p$/);
if (pluralMatch && GENDER_BASE_LABELS[pluralMatch[1]]) {
return GENDER_BASE_LABELS[pluralMatch[1]] + " (pirjimar)";
}
return GENDER_BASE_LABELS[code] || code;
}
// True if a sense has content beyond mane worth keeping (etîket, word
// lists, nimûne, jêder) — so it's still emitted with {{mane?}} if empty.
function senseHasExtraContent(s) {
if (s.etiket && $.grep(s.etiket, function (e) { return $.trim(e) !== ""; }).length) return true;
if (s.kategori && $.grep(s.kategori, function (k) { return $.trim(k) !== ""; }).length) return true;
if (s.alternativ.length || s.hevmane.length || s.dijmane.length ||
s.koordine.length || s.jornav.length || s.jernav.length) return true;
if (s.nimune && $.grep(s.nimune, function (n) {
return (typeof n === "object" ? n.text : n) !== "";
}).length > 0) return true;
if (senseHasJeder(s)) return true;
return false;
}
// Bolds the *first* occurrence of the page name
function boldPageNameOnce(text) {
if (!text || !pageNameRe) return text;
var re = new RegExp("(" + pageNameRe + "([^( |,|;|\\?|\\.|\\!)]+)?)", "i");
return text.replace(re, "'''$1'''");
}
// Converts literal line breaks typed into a nimûne/jêgirtin box into
// wikitext <br> tags,
function nlToBr(text) {
return text ? text.replace(/\r\n|\r|\n/g, "<br>") : text;
}
function escapeHtmlForBackdrop(str) {
return String(str)
.replace(/&/g, "&")
.replace(/</g, "<")
.replace(/>/g, ">");
}
// Mirrors a textarea's text, with a small highlighted marker placed
// right after each line that's followed by an actual typed/pasted
// linebreak. Rendered into a transparent backdrop layer behind the
// textarea (see ensureLinebreakBackdrop()), so only the point of the
// break is marked instead of the whole box.
function buildLinebreakBackdropHtml(text) {
var lines = text.split(/\r\n|\r|\n/);
return $.map(lines, function (line, i) {
var isLast = i === lines.length - 1;
return escapeHtmlForBackdrop(line) +
(isLast ? "" : "<mark class='wiktku-linebreak-mark'>↵</mark>\n");
}).join("");
}
// Copies the metrics that affect where text wraps/lands (font, line
// height, padding, border) from the real textarea onto its backdrop,
// via computed style rather than shared CSS classes — most of the
// box's own rules are written as "textarea.foo", which a <div> with
// the same class wouldn't match. Re-run on every update in case a
// responsive breakpoint changed the textarea's own font-size.
function syncLinebreakBackdropMetrics(textarea, backdrop) {
var cs = window.getComputedStyle(textarea[0]);
backdrop.css({
"box-sizing": cs.boxSizing,
"padding-top": cs.paddingTop,
"padding-right": cs.paddingRight,
"padding-bottom": cs.paddingBottom,
"padding-left": cs.paddingLeft,
"border-width": cs.borderWidth,
"border-style": "solid",
"font-family": cs.fontFamily,
"font-size": cs.fontSize,
"font-weight": cs.fontWeight,
"line-height": cs.lineHeight,
"letter-spacing": cs.letterSpacing
});
}
// Lazily wraps a textarea in its own positioning anchor (independent
// of .wiktku-resize-wrap, so this doesn't depend on load order versus
// wiktkuMakeManualResizable) and inserts the transparent backdrop
// layer used to mark the exact point of a linebreak. Safe to call
// more than once on the same textarea — the backdrop is cached.
function ensureLinebreakBackdrop(textarea) {
var existing = textarea.data("wiktkuLinebreakBackdrop");
if (existing) return existing;
textarea.wrap("<div class='wiktku-linebreak-wrap'></div>");
var backdrop = $("<div aria-hidden='true'></div>").addClass("wiktku-linebreak-backdrop");
textarea.before(backdrop);
textarea.data("wiktkuLinebreakBackdrop", backdrop);
textarea.on("scroll.wiktkuLinebreak", function () {
backdrop.scrollTop(textarea.scrollTop()).scrollLeft(textarea.scrollLeft());
});
return backdrop;
}
// Flags a nimûne/jêgirtin textarea (via CSS class, for the border
// tint + tooltip) while it contains a typed/pasted linebreak, so the
// user notices before it's silently turned into <br> on output.
// Marks only the exact point of the break via a mirrored backdrop,
// rather than tinting the whole box.
function highlightLinebreak(el) {
var textarea = $(el);
var text = textarea.val();
var hasBreak = /\r|\n/.test(text);
textarea
.toggleClass("wiktku-has-linebreak", hasBreak)
.attr("title", hasBreak ? "Xeta nû dê wek <br> bê nivîsandin" : "");
if (!hasBreak) {
var cached = textarea.data("wiktkuLinebreakBackdrop");
if (cached) cached.hide();
textarea.removeClass("wiktku-has-linebreak-source");
return;
}
var backdrop = ensureLinebreakBackdrop(textarea);
textarea.addClass("wiktku-has-linebreak-source");
syncLinebreakBackdropMetrics(textarea, backdrop);
backdrop.html(buildLinebreakBackdropHtml(text)).show();
backdrop.scrollTop(textarea.scrollTop()).scrollLeft(textarea.scrollLeft());
}
// Each nimûne item can be { text, tr, t }: text, transliteration, translation.
function formatNimune(nimunes, lang, hasJeder) {
var hasNimune = nimunes && $.grep(nimunes, function (n) {
return (typeof n === "object" ? n.text : n) !== "";
}).length > 0;
if (!hasNimune) {
return hasJeder ? "" : "\n#* {{nimûne?|" + lang + "}}";
}
return $.map(nimunes, function (n) {
var text = typeof n === "object" ? n.text : n;
if (!text) return undefined;
var bolded = nlToBr(boldPageNameOnce(text));
var tpl = "\n#: {{nm|" + lang + "|" + bolded;
if (typeof n === "object") {
if (n.tr) tpl += "|tr=" + nlToBr(n.tr);
// Translation as third positional param (no key needed).
if (n.t) tpl += "|" + nlToBr(n.t);
}
// Short examples fit on one line together with their translation.
// rêz=1 is not used for ku — definitions are shown on separate lines there.
if (text.length < 60 && lang !== "ku") tpl += "|rêz=1";
tpl += "}}";
return tpl;
}).join("");
}
// Formats jêder (citation) entries into "#* {{jêder…|…}}" lines; skips
// entries with no quote text. Falls back to the generic {{jêder}}
// template when no specific template was chosen.
function formatJeder(jederList, lang) {
if (!jederList || !jederList.length) return "";
return $.map(jederList, function (jeder) {
if (!jeder || !jeder.quote) return undefined;
var quote = nlToBr(boldPageNameOnce(jeder.quote));
var quoteTr = nlToBr(jeder.quoteTr);
var quoteT = nlToBr(jeder.quoteT);
if (jeder.jederTpl) {
var cite = "\n#* {{" + jeder.jederTpl + "|" + lang;
cite += "|jêgirtin=" + quote;
if (quoteTr) cite += "|tr=" + quoteTr;
if (quoteT) cite += "|tercime=" + quoteT;
$.each(jeder.jêderFields || {}, function (key, val) {
if (val) cite += "|" + key + "=" + val;
});
cite += "}}";
return cite;
}
var out = "\n#* {{jêder|" + lang + "|jêgirtin=" + quote;
if (quoteTr) out += "|tr=" + quoteTr;
if (quoteT) out += "|tercime=" + quoteT;
// A şablon picked from Kategorî:Çavkanî is transcluded as the
// source param (e.g. |{{Kovara X}}); manual text is used as-is.
var srcParam = jeder.jederCatTpl ? ("{{" + jeder.jederCatTpl + "}}") :
(jeder.jederManual ? jeder.jederManual : "çavkanî?");
// A positional param containing "=" gets parsed as its own key=value
// pair by MediaWiki and breaks the template, so force it to be
// explicitly named (|2=) whenever that's the case.
out += (srcParam.indexOf("=") !== -1 ? "|2=" : "|") + srcParam;
out += "}}";
return out;
}).join("");
}
// True if a sense has at least one jêder entry with quote text.
function senseHasJeder(sense) {
return !!(sense.jeder && $.grep(sense.jeder, function (j) {
return j && j.quote;
}).length > 0);
}
// Builds "{{tplName|lang|part1|part2|…}}" from a sense field (kategori,
// etiket), wrapped inline (" {{…}} ") or on its own line ("\n#: {{…}}").
function buildSenseTpl(sense, field, lang, tplName) {
if (!sense[field] || !sense[field].length) return "";
var parts = sense[field].map(function (p) { return $.trim(p); })
.filter(function (p) { return p !== ""; });
if (!parts.length) return "";
var call = "{{" + tplName + "|" + lang + "|" + parts.join("|") + "}}";
return call
}
/**
* Assembles the nimûne + jêder wikitext block for a sense. Shared by
* both the template-sense and normal-mane-sense branches below.
*/
function buildCite(sense, lang) {
return formatNimune(sense.nimune, lang, senseHasJeder(sense)) +
formatJeder(sense.jeder, lang);
}
// ── Inline modifier system ───────────────────────────────────────────────
// Appends a ⊕ button to a word input <li>. Clicking it shows a compact
// modifier picker; selecting one prompts for the value and appends
// <modifier:value> to the textarea's current content.
var WORD_MODIFIERS = [
{ key: "t", label: "t: tercime / îzah", hint: "Tercimeya kelîmeyê an îzaha wê" },
{ key: "cuda", label: "cuda: alt display", hint: "Forma nîşankirinê ya alternatîf" },
{ key: "c", label: "c: cinsiyet", hint: "Cinsiyeta kelîmeyê" },
{ key: "e", label: "e: etîket (li pêşiyê)", hint: "Etîketek li pêşiya kelîmeyê" },
{ key: "ee", label: "ee: etîket (li dawiyê)", hint: "Etîketek li dawiya kelîmeyê" },
{ key: "q", label: "q: qualifier (li pêşiyê)", hint: "Wesf li pêşiya kelîmeyê" },
{ key: "qq", label: "qq: qualifier (li dawiyê)", hint: "Wesf li dawiya kelîmeyê" },
{ key: "crz", label: "crz: cureyê rêzimanî", hint: "Cureyê rêzimanî yê kelîmeyê" },
{ key: "hrf", label: "hrf: herfiyen", hint: "Herfiyen, manaya rasterast" },
{ key: "ref", label: "ref: çavkanî", hint: "Çavkanî" }
];
// Sub-groups (inside a sense/definition block) that get the same ⊕
// modifier button as makeWordListStep fields.
var MODIFIER_SUBGROUPS = {
"wiktku-dfn-alternativ": true,
"wiktku-dfn-hevmane": true,
"wiktku-dfn-dijmane": true,
"wiktku-dfn-koordine": true,
"wiktku-dfn-jornav": true,
"wiktku-dfn-jernav": true
};
/**
* Wraps a freshly-created textarea in a <li> with a ⊕ modifier button.
* `ta` — the jQuery textarea element.
* Returns the <li>.
*/
function makeModifierLi(ta) {
var li = $("<li class='wiktku-word-li'></li>");
var btn = $("<button type='button' class='wiktku-mod-btn' title='Modifiyerê lê zêde bike'>⊕</button>");
var picker = $("<div class='wiktku-mod-picker'></div>").hide();
// Which modifier keys are already present in the textarea's current
// text — e.g. "<t:...>" → "t" used. Each modifier can only be
// applied once per word, so its pill gets disabled once used.
function usedKeys() {
var used = {};
var re = /<([a-zA-Z]+):/g;
var val = ta.val() || "";
var m;
while ((m = re.exec(val)) !== null) used[m[1]] = true;
return used;
}
$.each(WORD_MODIFIERS, function (_, mod) {
var pill = $("<button type='button' class='wiktku-mod-pill'></button>").text(mod.label);
pill.attr("title", mod.hint);
pill.data("mod-key", mod.key);
pill.on("click", function (e) {
e.preventDefault();
if (pill.prop("disabled")) return; // already used on this word
picker.hide();
// Show a tiny inline input for the modifier value.
var valWrap = $("<span class='wiktku-mod-val-wrap'></span>");
var valInp = $("<input type='text' class='wiktku-mod-val-input'>")
.attr("placeholder", mod.hint + "…")
.attr("size", 20);
var confirm = $("<button type='button' class='wiktku-mod-confirm'>✓</button>");
var cancel = $("<button type='button' class='wiktku-mod-cancel'>✕</button>");
function applyModifier() {
var v = $.trim(valInp.val());
if (v) {
ta.val(ta.val() + "<" + mod.key + ":" + v + ">");
ta.trigger("input");
}
valWrap.remove();
ta.focus();
}
confirm.on("click", applyModifier);
cancel.on("click", function () { valWrap.remove(); ta.focus(); });
valInp.on("keydown", function (e) {
if (e.which === 13) { e.preventDefault(); applyModifier(); }
if (e.which === 27) { valWrap.remove(); ta.focus(); }
});
valWrap.append(valInp).append(confirm).append(cancel);
li.append(valWrap);
valInp.focus();
});
picker.append(pill);
});
btn.on("click", function (e) {
e.preventDefault();
// Close any other open pickers in the same list.
li.closest("ol, ul").find(".wiktku-mod-picker").not(picker).hide();
// Grey out modifiers already used on this word — refreshed on
// every open since the text (and thus what's "used") can change.
var used = usedKeys();
picker.find(".wiktku-mod-pill").each(function () {
var isUsed = !!used[$(this).data("mod-key")];
$(this).prop("disabled", isUsed).toggleClass("wiktku-mod-pill-used", isUsed);
});
picker.toggle();
});
// Close picker when focus leaves the li entirely.
li.on("focusout", function () {
setTimeout(function () {
if (!$.contains(li[0], document.activeElement)) picker.hide();
}, 150);
});
li.append(ta).append(btn).append(picker);
return li;
}
function makeWordListStep(id, name, question_fmt) {
return {
id: id,
name: name,
question_fmt: question_fmt,
multiple: true,
narrow: true,
modifiers: true,
// Function instead of a plain string so it can name the current
// language — computed fresh at build time and re-applied by
// refresh() whenever the language changes.
placeholder: function () {
var lang = getValues().lang || "";
var langLabel = lang ? getLangLabel(lang) : "";
return "Kelîme" + (langLabel ? " bi " + langLabel : "") + "…";
},
visible: function (values) {
return values.lang && values.pos;
},
output: function (values) {
var words = $.grep(values[id] || [], function (w) { return !!w; });
var header = capitalize(name);
if (!words.length) return "";
var lang = values.lang;
var section = "\n==== " + header + " ====\n";
var params = "cure=" + header + "\n" +
$.map(words, function (w) {
return "|" + w;
}).join("\n");
return section +
"{{kol3|" + lang + "|" + params + "\n}}\n";
} };
}
var steps = {
lang: {
id: "lang",
required: true,
name: "ziman",
question_fmt: '"' + pageName + '" bi çi zimanî ye?',
question_br: true,
// Populated from [[MediaWiki:Gadget-start.js/data.json]] (langChoices).
choices: [],
output: function (values) {
return "== {{ziman|" + values.lang + "}} ==\n";
}
},
pron: {
id: "pron",
name: "bilêvkirin",
question_fmt: '"' + pageName + '" çawa tê telafûzkirin?',
// pronTpls populated from data.json
pronTpls: {},
visible: function (values) {
if (!values.lang) return false;
// addLangMode: skip pron only if this lang already has a section.
if (addLangMode) {
// Clearing the page makes existing content irrelevant.
var clearPageCheck = $("#wiktku-clear-page-check");
if (clearPageCheck.length && clearPageCheck.prop("checked")) {
return true;
}
var existing = $("#wpTextbox1").val() || "";
return !findLangHeader(existing, values.lang);
}
return true;
},
// Fills the insert-dropdown from pronTpls, filtered by language.
refreshTplSelect: function () {
var sel = $("#wiktku-start-pron .wiktku-tpl-insert-select");
if (!sel.length) return;
var lang = getValues().lang || "";
sel.find("option[value!='']").remove();
$.each(steps.pron.pronTpls, function (name, tpl) {
// Filter: if tpl.langs exists, only show if lang is in that list; otherwise show always
var allowed = !tpl.langs || tpl.langs.indexOf(lang) !== -1;
if (allowed) {
sel.append($("<option></option>")
.val(tpl.snippet)
.text(name + " — " + tpl.desc)
.attr("data-nolang", tpl.noLang ? "1" : ""));
}
});
// Tell the picker the option list changed.
sel.trigger("wiktku:refresh");
},
build: function (stepDiv) {
if (stepDiv.find(".wiktku-pron-wrap").length) return null;
var wrap = $("<div class='wiktku-pron-wrap'></div>");
var ta = $("<textarea></textarea>")
.attr("name", "wiktku-pron-" + $.now())
.attr("class", "wiktku-start-step-field wiktku-pron-text")
.attr("rows", 4)
.attr("placeholder", "Nimûne: {{IPA|ku|/pɛɪ̯n/}} yan {{kîte|ku|he|ce|ki|rin}}");
// Template insert dropdown — filtered by language.
var sel = $("<select class='wiktku-tpl-insert-select'></select>");
sel.attr("data-placeholder", "Şablonek lê zêde bike ");
sel.append($("<option value=''>— şablonek lê zêde bike —</option>"));
var lang = getValues().lang || "";
$.each(steps.pron.pronTpls, function (name, tpl) {
// Filter: if tpl.langs exists, only show if lang is in that list; otherwise show always
var allowed = !tpl.langs || tpl.langs.indexOf(lang) !== -1;
if (allowed) {
sel.append($("<option></option>")
.val(tpl.snippet)
.text(name + " — " + tpl.desc)
.attr("data-nolang", tpl.noLang ? "1" : ""));
}
});
sel.on("change", function () {
var snippet = $(this).val();
if (!snippet) return;
var lang = getValues().lang || "";
// Check if the selected option has noLang flag
var selectedOption = sel.find("option:selected");
var hasNoLang = selectedOption.attr("data-nolang") === "1";
if (!hasNoLang) {
snippet = snippet.replace(/CODE/g, lang).replace(/SOURCELANG/g, "?");
}
insertAtCursor(ta[0], snippet);
$(this).val("");
// Clear the picker's search box
sel.trigger("wiktku:refresh");
ta.focus();
});
wrap.append(sel).append(ta);
stepDiv.append(wrap);
initSelects(wrap);
return ta;
},
output: function () {
var text = $.trim($("#wiktku-start-pron .wiktku-pron-text").val());
if (!text) return "";
var lines = text.split("\n");
var out = $.map(lines, function (line) {
line = $.trim(line);
if (!line) return undefined;
return line;
}).join("\n");
return "\n=== Bilêvkirin ===\n" + out + "\n";
} },
pos: {
id: "pos",
required: true,
name: "Cureyê rêzimanî",
question_fmt: 'Cureyê rêzimanî yê "' + pageName + '" çi ye?',
visible: function (values) {
return values.lang;
},
question_br: true,
// Populated from [[MediaWiki:Gadget-start.js/data.json]] (posChoices).
choices: [],
output: function (values) {
var pos = values.pos || "";
var capitalizedPos = capitalize(pos);
// "form" opt-param (checked in posparams) marks this as a
// form-of/inflected entry — the section title becomes
// "Formeke <pos>ê" instead of the plain pos name. The
// template call itself still uses the unchanged pos name.
var isForm = $("#wiktku-posparams-opt-form").is(":checked");
var header = isForm
? "\n=== Formeke " + pos + "ê ===\n"
: "\n=== " + capitalizedPos + " ===\n";
// Image line (between header and template call)
var imageLine = steps.resim.output(values);
// Read the live wikitext from the posparams textarea.
// Fall back to a plain {{pos|lang}} if the step hasn't been built yet.
var tplLine = $.trim($("#wiktku-start-posparams .wiktku-posparams-text").val());
if (!tplLine) {
tplLine = "{{" + pos + "|" + (values.lang || "") + "}}";
}
return header + imageLine + tplLine + "\n";
}
},
// cinsiyet (gender) — shown for navdêr/serenav only, with choices built
// from metadata[lang].g since not every language has grammatical gender.
cinsiyet: {
id: "cinsiyet",
name: "cinsiyet",
question_fmt: 'Cinsiyeta "' + pageName + '" çi ye?',
question_br: true,
visible: function () { return false; }, // handled inside posparams
// Single source of truth for the selected gender code. The visible
// dropdown lives inside the posparams step (see steps.posparams),
// but it must always read/write THIS hidden field — not a field of
// its own — since getValuesForStep("cinsiyet") reads from here.
build: function (stepDiv) {
var field = stepDiv.find(".wiktku-start-step-field");
if (field.length) return field;
field = $("<input type='hidden'>")
.addClass("wiktku-start-step-field")
.attr("id", "wiktku-start-cinsiyet-field")
.val("");
stepDiv.append(field);
return field;
},
output: function () { return ""; } // consumed by posparams/pos.output
},
// Lêker transitivity — hidden step, handled inside posparams
lektur: {
id: "lektur",
name: "Cureyê lêkerê (fiîlê)",
question_fmt: "Cureyê lêkerê (fiîlê) çi ye?",
question_br: true,
visible: function () { return false; },
choices: [
{ code: "gh", label: "gerguhêz" },
{ code: "x-gh", label: "xwerû-gerguhêz" },
{ code: "p-gh", label: "pêkhatî-gerguhêz" },
{ code: "h-gh", label: "hevedudanî-gerguhêz" },
{ code: "b-gh", label: "biwêjî-gerguhêz" },
{ code: "ngh", label: "negerguhêz" },
{ code: "x-ngh", label: "xwerû-negerguhêz" },
{ code: "p-ngh", label: "pêkhatî-negerguhêz" },
{ code: "h-ngh", label: "hevedudanî-negerguhêz" },
{ code: "b-ngh", label: "biwêjî-negerguhêz" } ],
output: function () { return ""; }
},
// tr — hidden step, handled inside posparams
tr: {
id: "tr",
name: "transliterasyon",
question_fmt: "Transliterasyona vê kelîmeyê",
multiple: false,
narrow: true,
visible: function () { return false; }
},
posparams: {
id: "posparams",
name: "Parametreyên cureyê rêzimanî",
question_fmt: "Parametreyên şablona cureyê rêzimanî",
visible: function (values) {
return !!(values.lang && values.pos);
},
build: function (stepDiv) {
if (stepDiv.find(".wiktku-posparams-wrap").length) return null;
var wrap = $("<div class='wiktku-posparams-wrap'></div>");
var helpers = $("<div class='wiktku-posparams-helpers'></div>");
var ta = $("<textarea></textarea>")
.attr("name", "wiktku-posparams-" + $.now())
.attr("class", "wiktku-start-step-field wiktku-posparams-text")
.attr("rows", 2);
var _rebuilding = false;
function safeRebuild() {
if (_rebuilding) return;
_rebuilding = true;
steps.posparams.rebuildTa(stepDiv);
_rebuilding = false;
refresh();
}
// Generic text-input row factory
function makeTextRow(key, labelText, placeholder) {
var row = $("<div class='wiktku-posparams-row'></div>")
.attr("id", "wiktku-posparams-row-" + key).hide();
var inp = $("<input type='text'>")
.addClass("wiktku-start-narrow wiktku-posparams-field")
.attr("data-pp-key", key)
.attr("placeholder", placeholder || "");
inp.on("input", safeRebuild);
row.append($("<label></label>").text(labelText + ": ")).append(inp);
return row;
}
// cinsiyet
var cinsiyetRow = $("<div class='wiktku-posparams-row' id='wiktku-posparams-row-c'></div>")
.append($("<label></label>").text("Cinsiyet: ")).hide();
var cinsiyetSel = $("<select></select>")
.addClass("wiktku-plain-select wiktku-start-narrow wiktku-posparams-cinsiyet-sel")
.append($("<option value=''>— hilbijêre —</option>"));
// Writes into the real, shared #wiktku-start-cinsiyet-field (owned by
// steps.cinsiyet) rather than a field of its own — see the comment
// on steps.cinsiyet.build for why that matters.
cinsiyetSel.on("change", function () {
$("#wiktku-start-cinsiyet-field").val($(this).val()).trigger("change");
safeRebuild();
});
cinsiyetRow.append(cinsiyetSel);
// lektur
var lekturRow = $("<div class='wiktku-posparams-row' id='wiktku-posparams-row-lektur'></div>")
.append($("<label></label>").text("Cureyê lêkerê: ")).hide();
var lekturSel = $("<select></select>")
.addClass("wiktku-plain-select wiktku-start-narrow wiktku-posparams-lektur-sel")
.append($("<option value=''>— hilbijêre —</option>"));
$.each(steps.lektur.choices, function (_, c) {
lekturSel.append($("<option></option>").val(c.code).text(c.label));
});
lekturSel.on("change", safeRebuild);
lekturRow.append(lekturSel);
helpers.append(cinsiyetRow).append(lekturRow)
.append(makeTextRow("cuda", "nîşankirina alternatîv", "cuda…"))
.append(makeTextRow("tr", "Transliterasyon (tr)", "Transliterasyon…"))
.append(makeTextRow("ts", "Transkrîpsiyon (ts)", "Transkrîpsiyon…"))
.append(makeTextRow("m", "Forma mê (m)", "Forma mê…"))
.append(makeTextRow("mtr", "Translit. mê (mtr)", "Transliterasyona mê…"))
.append(makeTextRow("n", "Forma nêr (n)", "Forma nêr…"))
.append(makeTextRow("ntr", "Translit. nêr (ntr)", "Transliterasyona nêr…"))
.append(makeTextRow("p", "Forma pirjimar (p)", "Forma pirjimar…"))
.append(makeTextRow("ptr", "Translit. pirjimar", "Transliterasyona pirjimar…"))
.append(makeTextRow("y", "Forma yekjimar (y)", "Forma yekjimar…"))
.append(makeTextRow("ytr", "Translit. yekjimar", "Transliterasyona yekjimar…"))
.append(makeTextRow("sûp", "Forma sûperlatîv (sûp)", "Forma sûperlatîv…"))
.append(makeTextRow("sûptr", "Translit. sûperlatîv", "Transliterasyona sûperlatîv…"))
.append(makeTextRow("komp", "Forma komparatîv (komp)", "Forma komparatîv…"))
.append(makeTextRow("komptr", "Translit. komparatîv", "Transliterasyona komparatîv…"))
.append(makeTextRow("gir", "Forma girdêk (gir)", "gir=…"))
.append(makeTextRow("girtr", "Translit. gir", "girtr=…"))
.append(makeTextRow("hûr", "Forma hûrek (hûr)", "hûr=…"))
.append(makeTextRow("hûrtr", "Translit. hûr", "hûrtr=…"))
.append(makeTextRow("hanja", "Forma hanja", "hanja=…"))
.append(makeTextRow("hanjaTr","Translit. hanja", "hanjaTr=…"))
// Lêker rehên demê (only shown when pos is lêker — see syncHelpers)
.append(makeTextRow("niha", "Rehê dema niha (niha)", "Rehê dema niha…"))
.append(makeTextRow("nihatr", "Translit. rehê dema niha", "Transliterasyona rehê dema niha…"))
.append(makeTextRow("borî", "Rehê dema borî (borî)", "Rehê dema borî…"))
.append(makeTextRow("borîtr", "Translit. rehê dema borî", "Transliterasyona rehê dema borî…"))
.append(makeTextRow("subj", "Rehê dema bilanî (subj)", "Rehê dema bilanî…"))
.append(makeTextRow("subjtr", "Translit. rehê dema bilanî", "Transliterasyona rehê dema bilanî…"));
// Optional boolean params (collapsed)
var optToggle = $("<a href='#' class='wiktku-posparams-opt-toggle'></a>").text("▸ Tercîhên pêşketî");
var optPanel = $("<div class='wiktku-posparams-opt-panel'></div>").hide();
$.each([
{ key: "form", label: "form — ev made forma tewandî ye" },
{ key: "formaalt", label: "formaalt — vê madeyê bike forma alternatîv" },
{ key: "nekatcure", label: "nekatcure — sinifa rêzimanî kategorîze neke" },
{ key: "nekatcins", label: "nekatcins — kategoriya cinsiyetê neyîne" },
{ key: "nekatçendterm", label: "nekatçendterm — kategoriya çend-term neyîne" },
{ key: "serlînkneke", label: "serlînkneke — sernavê madeyê lînk neke" },
{ key: "nekatpalîndrom", label: "nekatpalîndrom — kategoriya palîndromê neyîne" },
{ key: "neformtr", label: "neformtr — transliterasyona forman neyîne" }
], function (_, p) {
var cb = $("<input type='checkbox'>")
.attr("id", "wiktku-posparams-opt-" + p.key).val(p.key).on("change", safeRebuild);
var lbl = $("<label></label>").attr("for", "wiktku-posparams-opt-" + p.key).text(" " + p.label);
optPanel.append($("<div class='wiktku-posparams-opt-row'></div>").append(cb).append(lbl));
});
optToggle.on("click", function (e) {
e.preventDefault();
var open = optPanel.is(":visible");
optPanel.toggle(!open);
$(this).text((open ? "▸" : "▾") + " Tercîhên pêşketî");
});
helpers.append(optToggle).append(optPanel);
wrap.append(helpers).append(ta);
// Typing directly in textarea keeps cinsiyet hidden in sync,
// but does NOT call refresh() — preserves manual edits.
ta.on("input", function () {
var cMatch = $(this).val().match(/\|c=([^|}\s]+)/);
$("#wiktku-start-cinsiyet-field").val(cMatch ? cMatch[1] : "");
});
stepDiv.append(wrap);
return null;
},
/** Reads all helper widget values and rewrites the textarea.
* Called only by safeRebuild (user interaction) — never by syncHelpers,
* so manual textarea edits are never overwritten by a refresh cycle. */
rebuildTa: function (stepDiv) {
var values = getValues();
var pos = values.pos || "";
var lang = values.lang || "";
if (!pos || !lang) return;
var cinsiyet = stepDiv.find(".wiktku-posparams-cinsiyet-sel").val() || "";
var lektur = stepDiv.find(".wiktku-posparams-lektur-sel").val() || "";
function v(key) {
return $.trim(stepDiv.find(".wiktku-posparams-field[data-pp-key='" + key + "']").val());
}
var out = "{{" + pos + "|" + lang;
if (pos === "navdêr" || pos === "serenav") {
out += cinsiyet ? "|c=" + cinsiyet : (lang === "ku" ? "|c=?" : "");
} else if (/^lêker/.test(pos) && lektur) {
out += "|c=" + lektur;
}
if (v("cuda")) out += "|" + v("cuda");
if (v("tr")) out += "|tr=" + v("tr");
if (v("ts")) out += "|ts=" + v("ts");
$.each(["m","n","p","y"], function (_, k) {
if (v(k)) out += "|" + k + "=" + v(k);
if (v(k+"tr")) out += "|" + k + "tr=" + v(k+"tr");
});
if (v("sûp")) out += "|sûp=" + v("sûp");
if (v("sûptr")) out += "|sûptr=" + v("sûptr");
if (v("komp")) out += "|komp=" + v("komp");
if (v("komptr")) out += "|komptr=" + v("komptr");
if (v("gir")) out += "|gir=" + v("gir");
if (v("girtr")) out += "|girtr=" + v("girtr");
if (v("hûr")) out += "|hûr=" + v("hûr");
if (v("hûrtr")) out += "|hûrtr=" + v("hûrtr");
if (v("hanja")) out += "|hanja=" + v("hanja");
if (v("hanjaTr")) out += "|hanjaTr=" + v("hanjaTr");
if (v("niha")) out += "|niha=" + v("niha");
if (v("nihatr")) out += "|nihatr=" + v("nihatr");
if (v("borî")) out += "|borî=" + v("borî");
if (v("borîtr")) out += "|borîtr=" + v("borîtr");
if (v("subj")) out += "|subj=" + v("subj");
if (v("subjtr")) out += "|subjtr=" + v("subjtr");
stepDiv.find(".wiktku-posparams-opt-panel input:checked").each(function () {
var key = $(this).val();
// "form" marks this entry as a form-of/inflected entry — it
// takes "erê" rather than the plain "1" the other boolean
// opt params use.
out += "|" + key + "=" + (key === "form" ? "erê" : "1");
});
out += "}}";
stepDiv.find(".wiktku-posparams-text").val(out);
$("#wiktku-start-cinsiyet-field").val(cinsiyet);
},
/** Called from refresh() — controls row visibility only.
* Does NOT rewrite textarea so user edits are preserved.
* Rebuilds only when textarea is empty (first pos selection). */
syncHelpers: function (stepDiv) {
var values = getValues();
var pos = values.pos || "";
var lang = values.lang || "";
var needsTr = needsTransliteration(lang);
var isNom = pos === "navdêr" || pos === "serenav" || pos === "rengdêr";
var isAdj = pos === "rengdêr";
var isTîp = pos === "tîp";
var isJa = lang === "ja";
var isLeker = /^lêker/.test(pos);
var meta = metadata[lang];
var gCodes = (meta && meta.g) || [];
var showC = (pos === "navdêr" || pos === "serenav") && gCodes.length > 0;
var cRow = stepDiv.find("#wiktku-posparams-row-c");
cRow.toggle(showC);
if (showC) {
var sel = cRow.find(".wiktku-posparams-cinsiyet-sel");
// Prefer the select's own current value (normal in-session
// use); fall back to the shared hidden field, which is how
// a cache/section restore communicates a saved gender
// before this select has any <option>s to hold it.
var prev = sel.val() || $("#wiktku-start-cinsiyet-field").val() || "";
sel.find("option[value!='']").remove();
$.each(gCodes, function (_, code) {
sel.append($("<option></option>").val(code).text(genderLabel(code)));
});
if (prev) sel.val(prev);
}
stepDiv.find("#wiktku-posparams-row-lektur").toggle(isLeker);
stepDiv.find("#wiktku-posparams-row-tr").toggle(needsTr);
stepDiv.find("#wiktku-posparams-row-ts").toggle(needsTr);
stepDiv.find("#wiktku-posparams-row-m").toggle(isNom);
stepDiv.find("#wiktku-posparams-row-mtr").toggle(isNom && needsTr);
stepDiv.find("#wiktku-posparams-row-n").toggle(isNom);
stepDiv.find("#wiktku-posparams-row-ntr").toggle(isNom && needsTr);
stepDiv.find("#wiktku-posparams-row-p").toggle(isNom);
stepDiv.find("#wiktku-posparams-row-ptr").toggle(isNom && needsTr);
stepDiv.find("#wiktku-posparams-row-y").toggle(isNom);
stepDiv.find("#wiktku-posparams-row-ytr").toggle(isNom && needsTr);
stepDiv.find("#wiktku-posparams-row-sûp").toggle(isAdj);
stepDiv.find("#wiktku-posparams-row-sûptr").toggle(isAdj && needsTr);
stepDiv.find("#wiktku-posparams-row-komp").toggle(isAdj);
stepDiv.find("#wiktku-posparams-row-komptr").toggle(isAdj && needsTr);
stepDiv.find("#wiktku-posparams-row-gir").toggle(isTîp);
stepDiv.find("#wiktku-posparams-row-girtr").toggle(isTîp && needsTr);
stepDiv.find("#wiktku-posparams-row-hûr").toggle(isTîp);
stepDiv.find("#wiktku-posparams-row-hûrtr").toggle(isTîp && needsTr);
stepDiv.find("#wiktku-posparams-row-hanja").toggle(isJa);
stepDiv.find("#wiktku-posparams-row-hanjaTr").toggle(isJa);
stepDiv.find("#wiktku-posparams-row-niha").toggle(isLeker);
stepDiv.find("#wiktku-posparams-row-nihatr").toggle(isLeker && needsTr);
stepDiv.find("#wiktku-posparams-row-borî").toggle(isLeker);
stepDiv.find("#wiktku-posparams-row-borîtr").toggle(isLeker && needsTr);
stepDiv.find("#wiktku-posparams-row-subj").toggle(isLeker);
stepDiv.find("#wiktku-posparams-row-subjtr").toggle(isLeker && needsTr);
if (!$.trim(stepDiv.find(".wiktku-posparams-text").val())) {
steps.posparams.rebuildTa(stepDiv);
}
},
output: function () { return ""; } // pos.output reads the textarea directly
},
dfn: {
id: "dfn",
name: "Mane",
question_fmt: function (values) {
var base = "Maneya kelîmeyê binivîse. Mane otomatîk tê lînkkirin!";
if (values.lang === "ku") {
return base + " Ji bo tercimeyan beşa 'Werger' bi kar bîne!";
}
return base;
},
multiple: true,
ordered: true,
rows: 3,
visible: function (values) {
return values.lang && values.pos;
},
example: function (values) {
// posExamples loaded from [[MediaWiki:Gadget-start.js/data.json]].
var examples = steps.dfn.posExamples || {};
var full = values.pos || "";
return examples[full] || "";
},
// Builds one sense block (<li>): mane textarea, nimûne list, and
// sub-lists for alternatîv/hevmane/dijmane/etc.
buildSenseBlock: function (stepDiv) {
var block = $("<li class='wiktku-dfn-sense'></li>");
// — Mane textarea (declared first so the template handler can reference it) —
var dfnArea = $("<textarea></textarea>")
.attr("name", "wiktku-dfn-mane-" + $.now() + "-" + Math.random().toString(36).substr(2, 9))
.attr("class", "wiktku-start-step-field wiktku-dfn-mane")
.attr("rows", 6)
.attr("placeholder", "Mane…");
dfnArea.on("input", function () {
steps.dfn.onDfnInput(stepDiv, block, this);
});
// — Tercime + Îzah boxes (non-ku alternative to the plain mane box) —
// Non-ku entries get a direct translation plus a {{îzah|…}}-wrapped
// gloss instead of a Kurdish-style gloss. Rather than teach every
// consumer (getSenses/getOutput/linkify) a second data shape, these
// boxes just write their combined text into dfnArea and re-fire its
// "input" event, so dfnArea stays the single source of truth.
var tercimeArea = $("<textarea></textarea>")
.attr("name", "wiktku-dfn-tercime-" + $.now() + "-" + Math.random().toString(36).substr(2, 9))
.attr("class", "wiktku-dfn-subfield wiktku-dfn-tercime")
.attr("rows", 2)
.attr("placeholder", "Tercimeyên rasterast ên kurmancî… Ji bo school-a îngilîzî li vir 'mekteb, medrese' binivîse");
var izahArea = $("<textarea></textarea>")
.attr("name", "wiktku-dfn-izah-" + $.now() + "-" + Math.random().toString(36).substr(2, 9))
.attr("class", "wiktku-dfn-subfield wiktku-dfn-izah")
.attr("rows", 3)
.attr("placeholder", "Îzaha kurmancî… Ji bo school-a îngilîzî li vir 'cihê tehsîlgirtinê' binivîse");
var nonKuWrap = $("<div class='wiktku-dfn-nonku-wrap'></div>")
.append(tercimeArea).append(izahArea)
.hide();
function syncNonKuToMane() {
var t = $.trim(tercimeArea.val());
var iz = $.trim(izahArea.val());
// if tercime is blank, use îzah as definition
var combined = t ? (iz ? t + " {{îzah|" + iz + "}}" : t) : iz;
dfnArea.val(combined);
// Re-fires onDfnInput so the sense list still grows and
// refresh() still runs, exactly as if this were typed
// directly into the mane textarea.
dfnArea.trigger("input");
}
tercimeArea.on("input", syncNonKuToMane);
izahArea.on("input", syncNonKuToMane);
// Switches between the plain mane box and the tercime+îzah pair —
// only for non-ku entries with no tplSelect selected.
function updateManeMode() {
var lang = getValues().lang || "";
var isTpl = !!tplSelect.val();
if (lang && lang !== "ku" && !isTpl) {
dfnArea.hide();
nonKuWrap.show();
} else {
nonKuWrap.hide();
if (!isTpl) dfnArea.show();
}
}
// Store on the block so refresh() can re-sync every block when
// lang changes, and restoreDfn() can re-sync after restoring.
block.data("updateManeMode", updateManeMode);
// — Template selector (optional — replaces mane when chosen) —
// Template definitions loaded from [[MediaWiki:Gadget-start.js/data.json]].
var tplDefs = steps.dfn.tplDefs || {};
// Cache of all non-placeholder option elements, so updateTplOptions
// can detach/re-attach them without losing the full list.
var _allTplOptions = [];
var tplSelect = $(mw.html.element("select", { "class": "wiktku-dfn-tpl-select" }));
tplSelect.attr("data-placeholder", "Li şablonekê bigere");
tplSelect.append($("<option value=''>— yan jî şablonek hilbijêre —</option>"));
$.each(tplDefs, function (name, tpl) {
var opt = $("<option></option>")
.val(name)
.text(name)
.attr("data-langs", tpl.langs ? tpl.langs.join(",") : "")
.attr("data-nolang", tpl.noLang ? "1" : "");
tplSelect.append(opt);
_allTplOptions.push(opt[0]);
});
function updateTplOptions() {
var lang = getValues().lang || "";
var currentVal = tplSelect.val();
var currentStillValid = false;
// Detach all non-placeholder options, then re-attach only the visible
// ones — native <select> won't reliably hide options any other way.
tplSelect.find("option[value!='']").detach();
$.each(_allTplOptions, function (_, opt) {
var allowed = $(opt).attr("data-langs");
var visible = !allowed || allowed.split(",").indexOf(lang) !== -1;
if (visible) {
tplSelect.append(opt);
if ($(opt).val() === currentVal) currentStillValid = true;
}
});
tplSelect.trigger("wiktku:refresh");
if (currentVal && !currentStillValid) {
tplSelect.val("");
tplTitleInput.hide().val("");
updateManeMode();
}
}
// Store updater on the element so refresh() can call it for all blocks.
tplSelect.data("updateOptions", updateTplOptions);
var tplTitleInput = $("<input type='text'>")
.addClass("wiktku-dfn-tpl-title wiktku-start-narrow")
.attr("placeholder", "Navê rûpela hedefê…")
.hide();
// Grow the sense list when the title field of the last block gets content,
// mirroring what onDfnInput does for the plain mane textarea.
tplTitleInput.on("input", function () {
steps.dfn.onDfnInput(stepDiv, block, this);
});
// Şablon senses have no plain gloss, so hide alternatîv/hevmane/
// dijmane/etc. Etîket, Nimûne and Jêgirtin stay visible either way.
function updateFieldVisibility() {
var isTpl = !!tplSelect.val();
$.each(HIDDEN_ON_TPL_GROUPS, function (_, cls) {
block.find("." + cls + "-group").toggle(!isTpl);
});
}
// Store on the block so restoreDfn() can re-sync visibility
// after setting tplSelect's value.
block.data("updateFieldVisibility", updateFieldVisibility);
tplSelect.on("change", function () {
var chosen = $(this).val();
if (chosen) {
dfnArea.hide();
nonKuWrap.hide();
tplTitleInput.show().focus();
} else {
tplTitleInput.hide().val("");
updateManeMode();
}
updateFieldVisibility();
// Re-run refresh so the Werger step visibility updates.
refresh();
});
var tplRow = $("<div></div>").addClass("wiktku-dfn-tpl-row")
.append(tplSelect).append(" ").append(tplTitleInput);
block.append(tplRow);
block.append(dfnArea);
block.append(nonKuWrap);
// Apply lang filter on initial build.
updateTplOptions();
updateManeMode();
// — Sub-field groups are always visible with a placeholder textarea.
var allGroups = [
{ cls: "wiktku-dfn-etiket", label: "Etîket", rows: 1, narrow: true, izah: "xisûsen, Mêrdîn, anatomî, Badînî", noLangSuffix: true },
{ cls: "wiktku-dfn-kategori", label: "Kategorî", rows: 1, narrow: true, izah: "wekî etîket lê xuya nabe tenê kategorîze dike", noLangSuffix: true },
{ cls: "wiktku-dfn-alternativ", label: "Formên alternatîv", rows: 1, narrow: true, izah: "Varyantên vê kelîmeyê" },
{ cls: "wiktku-dfn-hevmane", label: "Hevmane", rows: 1, narrow: true, izah: "Spehî hevmaneya Bedew e." },
{ cls: "wiktku-dfn-dijmane", label: "Dijmane", rows: 1, narrow: true, izah: "Zengîn dijmaneya feqîr e." },
{ cls: "wiktku-dfn-koordine", label: "Termên koordîne", rows: 1, narrow: true, izah: "Pisîk û kûçik termên koordîne ne çunkî Jornavên wan gelek in" },
{ cls: "wiktku-dfn-jornav", label: "Jornav", rows: 1, narrow: true, izah: "Heywan jornavê guhandar e" },
{ cls: "wiktku-dfn-jernav", label: "Jêrnav", rows: 1, narrow: true, izah: "Guhandar jêrnavê heywan e" },
{ cls: "wiktku-dfn-nimune", label: "Nimûne", rows: 2, narrow: false }
];
$.each(allGroups, function (_, g) {
var groupDiv = $("<div></div>").addClass("wiktku-dfn-subgroup " + g.cls + "-group");
function buildNimuneLi() {
var lang = getValues().lang || "";
var li = $("<li></li>").addClass("wiktku-dfn-nimune-li");
var mainTa = $("<textarea></textarea>")
.attr("name", "wiktku-dfn-nimune-text-" + $.now() + "-" + Math.random().toString(36).substr(2, 9))
.attr("rows", g.rows)
.attr("class", "wiktku-dfn-subfield wiktku-dfn-nimune-text")
.attr("placeholder", "Nimûneya emilandina kelîmeyê tu bi xwe binivîse…");
mainTa.on("input", function () {
highlightLinebreak(this);
var val = $.trim($(this).val());
var isLast = li.is(list.children("li:last-child"));
if (val && isLast) {
list.append(buildNimuneLi());
}
});
li.append(mainTa);
var subWrap = $("<div></div>").addClass("wiktku-dfn-nimune-sub");
if (needsTransliteration(lang)) {
subWrap.append(
$("<textarea></textarea>")
.attr("name", "wiktku-dfn-nimune-tr-" + $.now() + "-" + Math.random().toString(36).substr(2, 9))
.attr("rows", 5)
.attr("class", "wiktku-dfn-subfield wiktku-dfn-nimune-tr")
.attr("placeholder", "Transliterasyona bi alfabeya latînî")
);
}
if (lang && lang !== "ku") {
subWrap.append(
$("<textarea></textarea>")
.attr("name", "wiktku-dfn-nimune-t-" + $.now() + "-" + Math.random().toString(36).substr(2, 9))
.attr("rows", 5)
.attr("class", "wiktku-dfn-subfield wiktku-dfn-nimune-t")
.attr("placeholder", "Tercimeya nimûneyê bi kurmancî")
);
}
if (subWrap.children().length) li.append(subWrap);
return li;
}
// The placeholder names the current language, but that's
// often not chosen yet when this block is first built —
// so keep a function around that refresh() (and onSubInput,
// for newly-grown fields) can call again once lang is set
// or changes.
function subPlaceholder() {
if (g.noLangSuffix) return g.label + "…";
var lang = getValues().lang || "";
var langLabel = lang ? getLangLabel(lang) : "";
return g.label + (langLabel ? " bi " + langLabel : "") + "…";
}
function updateSubPlaceholders() {
list.find("> li > textarea.wiktku-dfn-subfield").attr("placeholder", subPlaceholder());
}
if (g.cls === "wiktku-dfn-nimune") {
// Nimûne — compound widget with tr/t sub-fields.
var lbl = $("<span></span>").addClass("wiktku-dfn-sublabel")
.append($("<span></span>").addClass("wiktku-dfn-sublabel-term").text(g.label))
.append(": ");
var list = $("<ol></ol>").addClass("wiktku-dfn-sublist " + g.cls + "-list");
groupDiv.data("buildNimuneLi", buildNimuneLi);
list.append(buildNimuneLi());
groupDiv.append(lbl).append(list);
block.append(groupDiv);
} else {
// Regular always-visible group — label + growing textarea list.
var lbl = $("<span></span>").addClass("wiktku-dfn-sublabel")
.append($("<span></span>").addClass("wiktku-dfn-sublabel-term").text(g.label))
.append(": ")
.append($("<span></span>").addClass("wiktku-dfn-sublabel-hint").text(g.izah));
var list = $("<ol></ol>").addClass("wiktku-dfn-sublist " + g.cls + "-list");
var useModifiers = !!MODIFIER_SUBGROUPS[g.cls];
list.data("updatePlaceholders", updateSubPlaceholders);
var firstInput = $("<textarea></textarea>")
.attr("name", g.cls + "-" + $.now() + "-" + Math.random().toString(36).substr(2, 9))
.attr("rows", g.rows)
.attr("class", "wiktku-dfn-subfield" + (g.narrow ? " wiktku-start-narrow" : ""))
.attr("placeholder", subPlaceholder());
firstInput.on("input", function () {
steps.dfn.onSubInput(list, this, g.rows, g.narrow, useModifiers);
});
list.append(useModifiers ? makeModifierLi(firstInput) : $("<li></li>").append(firstInput));
groupDiv.append(lbl).append(list);
block.append(groupDiv);
}
});
// — Jêder group — growing list, same structure as Nimûne. —
(function () {
var jederGroupDiv = $("<div></div>").addClass("wiktku-dfn-subgroup wiktku-dfn-jeder-group");
var jederLbl = $("<span></span>").addClass("wiktku-dfn-sublabel")
.append($("<span></span>").addClass("wiktku-dfn-sublabel-term").text("Jêgirtin"))
.append(": ");
var jederList = $("<ol></ol>").addClass("wiktku-dfn-sublist wiktku-dfn-jeder-list");
function buildJederLi() {
var lang = getValues().lang || "";
var li = $("<li></li>").addClass("wiktku-dfn-jeder-li");
// Quote text textarea
var quoteTa = $("<textarea></textarea>")
.attr("name", "wiktku-dfn-nimune-quote-" + $.now() + "-" + Math.random().toString(36).substr(2, 9))
.attr("rows", 2)
.attr("class", "wiktku-dfn-subfield wiktku-dfn-nimune-quote")
.attr("placeholder", "Nimûneya emilandinê ji kitêb an çavkaniyeke din binivîse");
quoteTa.on("input", function () {
highlightLinebreak(this);
var val = $.trim($(this).val());
var isLast = li.is(jederList.children("li:last-child"));
if (val && isLast) {
jederList.append(buildJederLi());
}
});
li.append(quoteTa);
// tr/t sub-fields for the quote — shown as needed for the language.
var quoteSubWrap = $("<div></div>").addClass("wiktku-dfn-quote-sub");
if (needsTransliteration(lang)) {
quoteSubWrap.append(
$("<textarea></textarea>")
.attr("name", "wiktku-dfn-nimune-quote-tr-" + $.now() + "-" + Math.random().toString(36).substr(2, 9))
.attr("rows", 2)
.attr("class", "wiktku-dfn-subfield wiktku-dfn-nimune-quote-tr")
.attr("placeholder", "Transliterasyona jêgirtinê…")
);
}
if (lang && lang !== "ku") {
quoteSubWrap.append(
$("<textarea></textarea>")
.attr("name", "wiktku-dfn-nimune-quote-t-" + $.now() + "-" + Math.random().toString(36).substr(2, 9))
.attr("rows", 2)
.attr("class", "wiktku-dfn-subfield wiktku-dfn-nimune-quote-t")
.attr("placeholder", "Tercimeya jêgirtinê bi kurmancî")
);
}
if (quoteSubWrap.children().length) li.append(quoteSubWrap);
// Citoid auto-fill: fetch citation data from a URL, DOI or ISBN and
// prefill the source şablon + fields below (see Gadget-citoid-helper.js).
var citoidWrap = $("<div></div>").addClass("wiktku-dfn-quote-citoid");
var citoidInput = $("<textarea></textarea>")
.addClass("wiktku-dfn-subfield wiktku-dfn-quote-citoid-input")
.attr("rows", 1)
.attr("placeholder", "URL, DOI an ISBN binivîse ku otomatîk were tijekirin…");
var citoidBtn = new OO.ui.ButtonWidget({
label: "Bi otomatîk tijî bike",
classes: [ "wiktku-dfn-quote-citoid-btn" ]
});
var citoidStatus = $("<span></span>").addClass("wiktku-dfn-quote-citoid-status");
// Fetches citation data from Citoid and fills this citation's
// şablon + fields — only rebuilds fields on template change,
// and never overwrites values the user already typed.
function runCitoidFetch() {
var query = $.trim(citoidInput.val());
if (!query) {
mw.notify("Ji kerema xwe re pêşî URL, DOI an ISBNyekê binivîse.");
return;
}
citoidBtn.setDisabled(true);
citoidStatus.text("Tê anîn…");
wikt.citoid.fetchJederFields(query).then(function (result) {
var jederKey = result.jederKey;
var hasTpl = !!jederKey && srcSel.find("option[value='" + jederKey + "']").length > 0;
var targetVal = hasTpl ? jederKey : "__manual__";
// Only rebuild if switching şablon, so a repeat fetch
// doesn't clear fields already filled in by hand.
if (srcSel.val() !== targetVal) {
srcSel.val(targetVal).trigger("change");
}
if (hasTpl) {
// Tenê qadên vala tijî bike.
$.each(result.fields, function (key, val) {
var input = srcFields.find("[data-field-key='" + key + "']");
if (input.length && !$.trim(input.val())) {
input.val(val);
}
});
} else {
// Şablonek nehat naskirin ji bo vê itemType — rêzikeke
// çavkaniyê ya bi destan a ji qadên Citoid tê çêkirin,
// lê tenê ger qada destan vala be.
var manualField = srcFields.find(".wiktku-dfn-quote-src-manual");
if (!$.trim(manualField.val())) {
var parts = [];
$.each(["nivîskar", "sernav", "websîte", "kovar", "weşanxane", "sal", "url"], function (_, k) {
if (result.fields[k]) parts.push(result.fields[k]);
});
manualField.val(parts.join(", "));
}
}
citoidStatus.text("");
}, function (errorMsg) {
citoidStatus.text(typeof errorMsg === "string" ? errorMsg : "Nehat dîtin. Kontrol bike ka URL/DOI/ISBN rast e.");
}).always(function () {
citoidBtn.setDisabled(false);
});
}
citoidBtn.on("click", runCitoidFetch);
citoidInput.on("keydown", function (e) {
if (e.which === 13) { // Enter
e.preventDefault();
runCitoidFetch();
}
});
citoidWrap.append(citoidInput).append(citoidBtn.$element).append(citoidStatus);
// Source template selector, specific to this citation.
var srcSel = $("<select></select>").addClass("wiktku-dfn-quote-src-sel wiktku-plain-select");
srcSel.append($("<option value=''>— Çavkaniyê hilbijêre —</option>"));
srcSel.append($("<option></option>").val("__manual__").text("Bi destê xwe binivîsim"));
srcSel.append($("<option></option>").val("__category__").text("Ji Kategorî:Çavkanî şablonekê hilbijêre"));
var jederDefs = steps.dfn.jederDefs || {};
$.each(jederDefs, function (tplName, def) {
srcSel.append($("<option></option>").val(tplName).text(def.label));
});
// Dynamic source fields container.
var srcFields = $("<div></div>").addClass("wiktku-dfn-quote-src-fields");
srcSel.on("change", function () {
srcFields.empty();
var chosen = $(this).val();
// Citoid is only useful before a source is chosen —
// hide it once a selection is made, restore on reset.
if (chosen) {
citoidWrap.hide();
} else {
citoidWrap.show();
return;
}
if (chosen === "__manual__") {
// Freeform source, written by the user — becomes the 2nd
// positional param of {{jêder|lang|…}} instead of çavkanî?.
srcFields.append(
$("<textarea></textarea>")
.attr("rows", 4)
.addClass("wiktku-dfn-subfield wiktku-dfn-quote-src-manual")
.attr("placeholder", "Çavkaniyê bi destê xwe binivîse…")
);
return;
}
if (chosen === "__category__") {
// Search widget over the members of [[Kategorî:Çavkanî]].
// Picking a şablon here immediately switches the row to
// "Bi destê xwe binivîsim" mode with {{Şablon}} pre-filled,
var catWrap = $("<span></span>").addClass("wiktku-native-select-wrap wiktku-dfn-quote-src-cat");
var catInput = $("<input type='search' autocomplete='off'>")
.addClass("wiktku-start-narrow wiktku-dfn-quote-src-cat-input")
.attr("placeholder", "Li navê şablonê bigere…");
var catResults = $("<ul></ul>").addClass("wiktku-ac-results wiktku-dfn-quote-src-cat-results").hide();
var catStatus = $("<span></span>").addClass("wiktku-dfn-quote-src-cat-status").text("Şablon tên barkirin…");
var showCatResults = function (query) {
var q = $.trim(query).toLowerCase();
catResults.empty();
var list = catSrcTemplates || [];
var matched = q ?
$.grep(list, function (name) { return name.toLowerCase().indexOf(q) !== -1; }) :
list;
if (!matched.length) {
catResults.hide();
return;
}
$.each(matched.slice(0, 50), function (_, name) {
var li = $("<li></li>").text(name).attr("data-value", name);
var touchMoved = false;
li.on("touchstart", function () { touchMoved = false; });
li.on("touchmove", function () { touchMoved = true; });
li.on("touchend", function (e) {
if (touchMoved) return;
e.preventDefault();
selectCatTpl(name);
});
li.on("mousedown", function (e) {
e.preventDefault();
selectCatTpl(name);
});
catResults.append(li);
});
catResults.show();
};
// Wraps the chosen şablon as {{Name}}, drops it into the
// manual textarea, and switches the row into manual mode
// so the user can keep editing it (add params, etc.).
var selectCatTpl = function (name) {
catResults.hide();
srcSel.val("__manual__");
srcSel.trigger("change");
srcFields.find(".wiktku-dfn-quote-src-manual")
.val("{{" + name + "}}")
.trigger("focus");
};
catInput.on("input", function () {
showCatResults($(this).val());
});
catInput.on("focus", function () {
showCatResults($(this).val());
});
catInput.on("blur", function () {
setTimeout(function () { catResults.hide(); }, 200);
});
catWrap.append(catInput).append(catResults).append(catStatus);
srcFields.append(catWrap);
fetchCatSrcTemplates().then(function () {
catStatus.text("");
}, function () {
catStatus.text("Şablon nehatin barkirin.");
});
return;
}
var def = (steps.dfn.jederDefs || {})[chosen];
if (!def) return;
$.each(def.fields, function (key, label) {
var row = $("<div></div>").addClass("wiktku-dfn-quote-src-row");
var fieldLbl = $("<label></label>").text(label + ": ");
var inp = $("<textarea></textarea>")
.attr("rows", 2)
.addClass("wiktku-dfn-quote-src-input wiktku-start-narrow")
.attr("data-field-key", key)
.attr("placeholder", label + "…");
// "Sernav" / "Sernavê orjînal" (title fields, e.g. for
// kitêb/kovar/malper) get a taller, draggable box; every
// other field in the template stays as-is. Field labels
// come from the on-wiki jederDefs data, so match on the
// (diacritic-folded) label text rather than a fixed key.
var foldedLabel = foldDiacritics(label);
if (/^sernav$/.test(foldedLabel) || /orjin/.test(foldedLabel)) {
inp.addClass("wiktku-dfn-quote-src-input--title");
}
row.append(fieldLbl).append(inp);
srcFields.append(row);
});
});
li.append(citoidWrap).append(srcSel).append(srcFields);
return li;
}
jederGroupDiv.data("buildJederLi", buildJederLi);
jederList.append(buildJederLi());
jederGroupDiv.append(jederLbl).append(jederList);
block.append(jederGroupDiv);
}());
// Apply the initial hide/show state for the sub-groups (matches
// tplSelect's starting value, which is normally empty).
updateFieldVisibility();
return block;
},
/** Grows the sense list when the last mane textarea gets content. */
onDfnInput: function (stepDiv, block, textarea) {
var val = $.trim($(textarea).val());
var list = stepDiv.find("ol.wiktku-dfn-list");
var isLast = block.is(list.children("li:last-child"));
if (val && isLast) {
var newBlock = steps.dfn.buildSenseBlock(stepDiv);
list.append(newBlock);
// Give the new block's template selector the searchable picker.
initSelects(newBlock);
}
refresh();
},
/** Grows a sub-list (nimûne/formên alternatîv/hevmane/dijmane/termên koordîne) on input. */
onSubInput: function (list, input, rows, narrow, modifiers) {
var val = $.trim($(input).val());
var item = $(input).parent();
var isLast = item.is(list.children("li:last-child"));
if (val && isLast) {
var next = $("<textarea></textarea>")
.attr("name", "wiktku-dfn-sub-" + $.now() + "-" + Math.random().toString(36).substr(2, 9))
.attr("rows", rows)
.attr("class", "wiktku-dfn-subfield" + (narrow ? " wiktku-start-narrow" : ""));
next.on("input", function () {
steps.dfn.onSubInput(list, this, rows, narrow, modifiers);
});
list.append(modifiers ? makeModifierLi(next) : $("<li></li>").append(next));
// New field starts with no placeholder — give it (and any
// others in the list) the current one.
var updatePlaceholders = list.data("updatePlaceholders");
if (typeof updatePlaceholders === "function") updatePlaceholders();
}
},
// Populated from [[MediaWiki:Gadget-start.js/data.json]] (tplDefs, posExamples, jederDefs).
tplDefs: {},
posExamples: {},
jederDefs: {},
build: function (stepDiv) {
if (stepDiv.find("ol.wiktku-dfn-list").length) return null;
// One-time "hide/show all" link for the etîket/kategorî/hevmane/…/
// nimûne/jêgirtin subgroups
if (!stepDiv.find(".wiktku-dfn-subs-toggle").length) {
var subsToggle = $("<a href='#' class='wiktku-dfn-subs-toggle'></a>").text("▾ Malûmatên bikaranînê veşêre");
subsToggle.on("click", function (e) {
e.preventDefault();
var hidden = stepDiv.toggleClass("wiktku-dfn-subs-hidden").hasClass("wiktku-dfn-subs-hidden");
$(this).text((hidden ? "▸ Malûmatên bikaranînê nîşan bide" : "▾ Malûmatên bikaranînê veşêre"));
});
stepDiv.append(subsToggle);
}
var list = $("<ol class='wiktku-dfn-list'></ol>");
list.append(steps.dfn.buildSenseBlock(stepDiv));
stepDiv.append(list);
return null;
},
/** Reads all sense blocks from the DOM and returns an array of sense objects. */
getSenses: function (stepDiv) {
var senses = [];
stepDiv.find("li.wiktku-dfn-sense").each(function () {
var block = $(this);
var tplSel = block.find("select.wiktku-dfn-tpl-select");
var tpl = tplSel.val() || "";
// noLang: template already encodes the language — don't add |lang| param.
var tplNoLang = tpl
? tplSel.find("option[value='" + tpl + "']").attr("data-nolang") === "1"
: false;
var tplTitle = $.trim(block.find("input.wiktku-dfn-tpl-title").val());
var mane = $.trim(block.find("textarea.wiktku-dfn-mane").val());
function readList(cls) {
var vals = [];
block.find("." + cls + "-list textarea").each(function () {
var v = $.trim($(this).val());
if (v) vals.push(v);
});
return vals;
}
// Nimûne items are compound: { text, tr?, t? }
function readNimuneList() {
var items = [];
block.find(".wiktku-dfn-nimune-list li.wiktku-dfn-nimune-li").each(function () {
var text = $.trim($(this).find(".wiktku-dfn-nimune-text").val());
if (!text) return;
var obj = { text: text };
var tr = $.trim($(this).find(".wiktku-dfn-nimune-tr").val());
var t = $.trim($(this).find(".wiktku-dfn-nimune-t").val());
if (tr) obj.tr = tr;
if (t) obj.t = t;
items.push(obj);
});
return items;
}
// Jêder is a growing list of citations, one per li — mirrors readNimuneList().
function readJederList() {
var items = [];
block.find(".wiktku-dfn-jeder-list li.wiktku-dfn-jeder-li").each(function () {
var li = $(this);
var quote = $.trim(li.find(".wiktku-dfn-nimune-quote").val());
if (!quote) return;
var obj = { quote: quote };
var qtr = $.trim(li.find(".wiktku-dfn-nimune-quote-tr").val());
var qt = $.trim(li.find(".wiktku-dfn-nimune-quote-t").val());
if (qtr) obj.quoteTr = qtr;
if (qt) obj.quoteT = qt;
var tplName = li.find(".wiktku-dfn-quote-src-sel").val();
if (tplName === "__manual__") {
var manual = $.trim(li.find(".wiktku-dfn-quote-src-manual").val());
if (manual) obj.jederManual = manual;
} else if (tplName === "__category__") {
// Reachable only if the user opened the category search but
// never picked a şablon — picking one switches the row to
// __manual__ (see selectCatTpl above), so there's nothing
// meaningful to save here.
} else if (tplName) {
obj.jederTpl = tplName;
var fields = {};
li.find(".wiktku-dfn-quote-src-input").each(function () {
var k = $(this).attr("data-field-key");
var v = $.trim($(this).val());
if (k && v) fields[k] = v;
});
obj.jêderFields = fields;
}
items.push(obj);
});
return items;
}
senses.push({
tpl: tpl,
tplNoLang: tplNoLang,
tplTitle: tplTitle,
mane: mane,
etiket: readList("wiktku-dfn-etiket"),
kategori: readList("wiktku-dfn-kategori"),
nimune: readNimuneList(),
jeder: readJederList(),
alternativ: readList("wiktku-dfn-alternativ"),
hevmane: readList("wiktku-dfn-hevmane"),
dijmane: readList("wiktku-dfn-dijmane"),
koordine: readList("wiktku-dfn-koordine"),
jornav: readList("wiktku-dfn-jornav"),
jernav: readList("wiktku-dfn-jernav")
});
});
return senses;
},
getOutput: function (values, callback) {
var stepDiv = $("#wiktku-start-dfn");
var senses = steps.dfn.getSenses(stepDiv);
var lang = values.lang;
// A sense counts as "filled" if it has a mane, a chosen template + title,
// or any other content (etîket/hevmane/nimûne/jêder…) worth keeping.
var hasMane = senses.some(function (s) {
return s.mane !== "" || (s.tpl && s.tplTitle) || senseHasExtraContent(s);
});
var defLines = []; // one entry per kept sense (goes to linkify)
var citeLines = []; // parallel — nimûne+jêder for that same sense
var izahLines = []; // parallel — raw îzah gloss for that same sense
// True only once some sense's *actual* dfn text (post tercime/îzah
// split) is non-empty.
var hasLinkableMane = false;
$.each(senses, function (_, sense) {
// — Template sense (e.g. {{guharto|ku|somepage}}) —
if (sense.tpl) {
if (!sense.tplTitle) return; // skip empty template senses
var tplKatTpl = buildSenseTpl(sense, "kategori", lang, "K");
var tplLabelTpl = buildSenseTpl(sense, "etiket", lang, "e");
var tplCall = sense.tplNoLang
? "{{" + sense.tpl + "|" + sense.tplTitle + "}}"
: "{{" + sense.tpl + "|" + lang + "|" + sense.tplTitle + "}}";
var idx = defLines.length;
var cite = buildCite(sense, lang);
defLines.push("# " + (tplKatTpl ? tplKatTpl + " " : "") + (tplLabelTpl ? tplLabelTpl + " " : "") + tplCall +
(cite ? "{{wiktku-cite-" + idx + "}}" : ""));
citeLines.push(cite);
izahLines.push(""); // template senses have no îzah
return;
}
// — Normal mane sense —
var dfn = sense.mane;
if (!dfn && !senseHasExtraContent(sense)) return; // truly empty
// Pull the îzah gloss (if any) out of the combined tercime+îzah
// string — it's spliced back in separately below, after its
// own linkify pass (see izahLines / the second linkifyText call).
var izahRaw = null;
var tercimeIzah = splitTercimeIzah(dfn);
if (tercimeIzah) {
dfn = tercimeIzah.tercime;
izahRaw = stripWikilinks(tercimeIzah.izah);
}
if (dfn) {
dfn = stripWikilinks(dfn);
// Sentence-case + trailing period are for ku definitions,
// which are written as full glosses.
if (lang === "ku") {
if (dfn[0] !== dfn[0].toUpperCase()) dfn = capitalize(dfn);
if (!dfn.match(/[.…?!)\]]$/)) dfn += ".";
}
// Real prose — this is what makes the sense worth running
// through the main linkify pass.
hasLinkableMane = true;
} else if (izahRaw === null) {
// No mane at all — this is just the "{{mane?|lang}}"
// placeholder, a bare template call with no plain words
// in it. Do NOT count it as linkable: sending nothing but
// bracketed templates through the main linkify pass hangs
// the linkify gadget (see the hasLinkableMane/hasIzah
// check below).
dfn = lang === "ku" ? "{{mane?|" + lang + "}}" : "";
}
var katTpl = buildSenseTpl(sense, "kategori", lang, "K");
var labelTpl = buildSenseTpl(sense, "etiket", lang, "e");
var out = "# " + (katTpl ? katTpl + " " : "") + (labelTpl ? labelTpl + " " : "") + dfn;
var idx = defLines.length;
var hasThisIzah = izahRaw !== null && $.trim(izahRaw) !== "";
// Bare {{...}} token — like {{wiktku-cite-N}}, this survives
// linkify's first pass untouched (it treats template calls as
// opaque), then gets swapped for {{îzah|…}} once the actual
// gloss text has been linkified in its own separate pass.
if (hasThisIzah) {
out += (dfn ? " " : "") + "{{wiktku-izah-" + idx + "}}";
}
function wordLine(tpl, words) {
if (!words.length) return "";
return "\n#: {{" + tpl + "|" + lang + "|" + words.join("|") + "}}";
}
out += wordLine("alt-r", sense.alternativ);
out += wordLine("hevmane", sense.hevmane);
out += wordLine("dijmane", sense.dijmane);
out += wordLine("koordîne", sense.koordine);
out += wordLine("jornav", sense.jornav);
out += wordLine("jêrnav", sense.jernav);
var cite = buildCite(sense, lang);
defLines.push(out + (cite ? "{{wiktku-cite-" + idx + "}}" : ""));
citeLines.push(cite);
izahLines.push(hasThisIzah ? izahRaw : "");
});
// Splice citeLines back into a linkified string, replacing each
// {{wiktku-cite-N}} token with its stored nimûne/jêder block.
function restoreCites(t) {
return t.replace(/\{\{wiktku-cite-(\d+)\}\}/g, function (_, n) {
return citeLines[parseInt(n, 10)] || "";
});
}
// Runs text through the linkify gadget if it's loaded, otherwise
// just passes it through unchanged. Shared by both linkify passes
// below (main mane text, and — separately — îzah glosses).
function linkifyText(t, cb) {
if (typeof $.kuLinkify === "function") {
$.kuLinkify(t, cb);
} else {
cb(t);
}
}
var hasIzah = izahLines.some(function (t) { return t && $.trim(t) !== ""; });
var text = defLines.join("\n") + "\n";
if (!hasMane) {
// No definitions entered — emit {{mane?}} with nimûne?.
text = "# {{mane?|" + lang + "}}\n#* {{nimûne?|" + lang + "}}\n";
callback(text);
return;
}
// Runs the îzah-only linkify pass against `base` (either the raw
// text, when there's no linkable mane to run the main pass on
// first, or the already-linkified main text). Shared by both
// branches below so the token-splice logic only lives once.
function runIzahPass(base) {
var izahJoined = $.map(izahLines, function (raw, idx) {
if (!raw) return undefined;
return "{{wiktku-izah-open-" + idx + "}}" + raw + "{{wiktku-izah-close-" + idx + "}}";
}).join("\n");
linkifyText(izahJoined, function (izahLinked) {
var izahByIdx = {};
var re = /\{\{wiktku-izah-open-(\d+)\}\}([\s\S]*?)\{\{wiktku-izah-close-\1\}\}/g;
var m;
while ((m = re.exec(izahLinked)) !== null) {
izahByIdx[parseInt(m[1], 10)] = m[2];
}
var withIzah = base.replace(/\{\{wiktku-izah-(\d+)\}\}/g, function (_, n) {
var linked = izahByIdx[parseInt(n, 10)];
return linked !== undefined ? "{{îzah|" + linked + "}}" : "";
});
callback(restoreCites(withIzah));
});
}
if (!hasLinkableMane) {
if (!hasIzah) {
// All filled senses are template senses (or otherwise have
// no plain text at all) — nothing here needs linkify.
callback(restoreCites(text));
return;
}
// There's no plain mane text anywhere (e.g. tercime left blank
// with only îzah filled in), so every defLine is just a bare
// template call with nothing to word-link. Sending a line
// like "# {{wiktku-izah-0}}" through the main linkify pass
// gives it no plain words to work with, makes the linkify
// gadget hang — so skip that pass entirely and run only
// the îzah pass, splicing straight into the unlinkified text.
var loadIzahOnly = function () { runIzahPass(text); };
mw.loader.using("ext.gadget.linkify", loadIzahOnly, loadIzahOnly);
return;
}
var didTryToLoad = function () {
// First pass: the main definition text (mane), same as before.
linkifyText(text, function (mainLinked) {
if (!hasIzah) {
callback(restoreCites(mainLinked));
return;
}
// Second pass: îzah glosses, linkified via their own
// separate call. Each gloss is wrapped in its own
// {{wiktku-izah-open/close-N}} pair; like the existing
// {{wiktku-cite-N}} tokens, these sit inside double
// braces so linkify leaves the tokens themselves alone —
// only the raw gloss text between each pair gets linked.
runIzahPass(mainLinked);
});
};
mw.loader.using("ext.gadget.linkify", didTryToLoad, didTryToLoad);
}
},
tewandin: {
id: "tewandin",
name: "tewandin",
question_fmt: 'Tewandina "' + pageName + '" binivîse',
visible: function (values) {
return values.lang && values.pos;
},
build: function (stepDiv) {
if (stepDiv.find(".wiktku-tewandin-wrap").length) return null;
var wrap = $("<div class='wiktku-tewandin-wrap'></div>");
var ta = $("<textarea></textarea>")
.attr("name", "wiktku-tewandin-" + $.now())
.attr("class", "wiktku-start-step-field wiktku-tewandin-text")
.attr("rows", 4)
.attr("placeholder", "{{ku-tewîn-nav|nêr}}");
wrap.append(ta);
stepDiv.append(wrap);
function autoPopulate() {
if (!ta.length) return;
var vals = getValues();
var c = vals.cinsiyet || "";
var p = vals.pos || "";
if (!pageName.includes(" ") && c && GENDER_BASE_LABELS[c] &&
(p === "navdêr" || p === "serenav") && vals.lang === "ku" &&
c !== "mndudil") {
var label = (c === "mnmane") ? "mê û nêr" : GENDER_BASE_LABELS[c];
var out = "{{ku-tewîn-nav|" + label;
if (p === "serenav") out += "|y";
out += "}}";
if (!$.trim(ta.val())) ta.val(out);
}
}
setTimeout(function () {
autoPopulate();
$("#wiktku-start-form").on("change.tewandin",
"#wiktku-start-lang-field, #wiktku-start-cinsiyet-field, #wiktku-start-pos-field",
autoPopulate);
}, 0);
return ta;
},
output: function () {
var manualText = $.trim($("#wiktku-start-tewandin .wiktku-tewandin-text").val());
if (manualText) {
return "\n==== Tewandin ====\n" + manualText + "\n";
}
return "";
}
},
// resim — one or more images
resim: {
id: "resim",
name: "resim",
question_fmt: "Resmekê lê zêde bike",
visible: function (values) { return !!(values.lang && values.pos); },
/** Builds one image row: filename + caption + alt text. */
buildItem: function (stepDiv) {
var item = $("<li class='wiktku-resim-item'></li>");
var fileRow = $("<div class='wiktku-posparams-row'></div>");
var fileInp = $("<input type='text'>")
.addClass("wiktku-start-step-field wiktku-start-narrow wiktku-resim-file")
.attr("placeholder", "navê_dosyayê.jpg");
fileRow.append($("<label></label>").text("Navê dosyayê: ")).append(fileInp);
var capRow = $("<div class='wiktku-posparams-row'></div>");
var capInp = $("<input type='text'>")
.addClass("wiktku-start-step-field wiktku-start-narrow wiktku-resim-caption")
.attr("placeholder", "Danasîna resimê…");
capRow.append($("<label></label>").text("Danasîn: ")).append(capInp);
// Alt text: what a screen reader announces for this image
var altRow = $("<div class='wiktku-posparams-row'></div>");
var altInp = $("<input type='text'>")
.addClass("wiktku-start-step-field wiktku-start-narrow wiktku-resim-alt")
.attr("placeholder", "Ji bo kesên nabînin, çi tê dîtin? (ne mecbûrî)");
altRow.append($("<label></label>").text("Nivîsa alternatîf: ")).append(altInp);
// Auto-fill the caption with the plain page name when a filename
// is typed
fileInp.on("input", function () {
var file = $.trim($(this).val());
var curCap = $.trim(capInp.val());
var isDefault = !curCap || curCap === pageName;
if (file && isDefault) {
capInp.val(pageName);
} else if (!file && isDefault) {
capInp.val("");
}
steps.resim.onFileInput(stepDiv, item, this);
});
item.append(fileRow).append(capRow).append(altRow);
return item;
},
/** Grows the image list when the last row's filename gets content. */
onFileInput: function (stepDiv, item, input) {
var val = $.trim($(input).val());
var list = stepDiv.find("ol.wiktku-resim-list");
var isLast = item.is(list.children("li:last-child"));
if (val && isLast) {
list.append(steps.resim.buildItem(stepDiv));
}
},
build: function (stepDiv) {
if (stepDiv.find(".wiktku-resim-wrap").length) return null;
var wrap = $("<div class='wiktku-resim-wrap'></div>");
var list = $("<ol class='wiktku-resim-list'></ol>");
list.append(steps.resim.buildItem(stepDiv));
wrap.append(list);
stepDiv.append(wrap);
return null;
},
/** Reads every filled row from the DOM into an array of {file, caption, alt}
* objects — blank rows (missing filename or caption) are skipped.
* Non-Kurdish captions get wrapped in {{zim|lang|…}} here, unless
* the user already typed their own {{zim|…}} template. Alt text is
* optional and left as plain text either way. */
getImages: function (values) {
var lang = (values && values.lang) || getValues().lang || "";
var images = [];
$("#wiktku-start-resim li.wiktku-resim-item").each(function () {
var file = $.trim($(this).find(".wiktku-resim-file").val());
var caption = $.trim($(this).find(".wiktku-resim-caption").val());
var alt = $.trim($(this).find(".wiktku-resim-alt").val());
if (!file || !caption) return;
// Strip leading "Wêne:" or "File:" if the user typed it — we add it ourselves.
file = file.replace(/^(wêne|file|image)\s*:\s*/i, "");
if (lang && lang !== "ku" && !/^\{\{zim\s*\|/i.test(caption)) {
caption = "{{zim|" + lang + "|" + caption + "}}";
}
images.push({ file: file, caption: caption, alt: alt });
});
return images;
},
output: function (values) {
var images = steps.resim.getImages(values);
if (!images.length) return "";
return images.map(function (img) {
var altPart = img.alt ? "|alt=" + img.alt : "";
return "[[Wêne:" + img.file + "|thumb" + altPart + "|" + img.caption + "]]";
}).join("\n") + "\n";
}
},
// bnr-h — {{bnr-h|Page1|Page2|…}} prepended before the lang section (shared, not per-section)
bnrh: {
id: "bnrh",
name: "binêre herwiha (bnr-h)",
question_fmt: "Şablona bnr-h li qismê herî jor a rûpelê",
//visible: function (values) { return !!values.lang; },
multiple: true,
narrow: true,
placeholder: "Ji bo 'test' bnr 'Test', 'teşt'",
output: function (values) {
var pages = $.grep(values.bnrh || [], function (p) { return !!$.trim(p); });
if (!pages.length) return "";
return "{{bnr-h|" + pages.map(function (p) { return $.trim(p); }).join("|") + "}}\n";
}
},
bikaranin: {
id: "bikaranin",
name: "Notên bikaranînê",
question_fmt: "Notên bikaranînê yên li ser vê kelîmeyê",
visible: function (values) {
return values.lang && values.pos;
},
multiple: false,
narrow: false,
output: function (values) {
var text = $.trim(values.bikaranin || "");
if (!text) return "";
return "\n==== Notên bikaranînê ====\n" + text + "\n";
},
},
xwendin: {
id: "xwendin",
name: "Bêhtir bixwîne",
question_fmt: "Lînkên derveyî eleqedarî vê madeyê",
visible: function (values) {
return values.lang && values.pos;
},
multiple: false,
narrow: false,
placeholder: function (values) {
if (!values || !values.lang) {
return `* {{wpedî}} ji bo ku meqaleya Wîkîpediyayê lînk bidî`;
}
const ziman = values.lang === "ku" ? "" : `|ziman=${values.lang}`;
return `* {{wpedî${ziman}}} ji bo ku meqaleya Wîkîpediyayê lînk bidî`;
},
output: function (values) {
var text = $.trim(values.xwendin || "");
if (!text) return "";
return "\n==== Bêhtir bixwîne ====\n" + text + "\n";
},
},
alfabeyendin: {
id: "alfabeyendin",
name: "Bi alfabeyên din",
question_fmt: function (values) {
var base = "Nivîsîna vê kelîmeyê bi alfabeyên din"
var langLabel = values.lang ? getLangLabel(values.lang) : "";
if (langLabel) {
return base + " ên " + langLabel;
}
return base;
},
visible: function (values) {
return values.lang && values.pos;
},
multiple: false,
narrow: false,
placeholder: "Ji bo kurmancî: * {{ku-ar|şiklê alfaba erebî}}",
output: function (values) {
var text = $.trim(values.alfabeyendin || "");
if (!text) return "";
return "\n==== Bi alfabeyên din ====\n" + text + "\n";
},
},
formalt: makeWordListStep("formalt", "formên alternatîv", "Formên alternatîv ên vê kelîmeyê ji bo hemû maneyan eger te li binê maneyê nenivîsandibe"),
hevmane: makeWordListStep("hevmane", "hevmane", "Hevmaneyên vê kelîmeyê ji bo hemû maneyan eger te li binê maneyê nenivîsandibe"),
dijmane: makeWordListStep("dijmane", "dijmane", "Dijmaneyên vê kelîmeyê ji bo hemû maneyan eger te li binê maneyê nenivîsandibe"),
jornav: makeWordListStep("jornav", "jornav", "Jornavên vê kelîmeyê ji bo hemû maneyan eger te li binê maneyê nenivîsandibe"),
jernav: makeWordListStep("jernav", "jêrnav", "Jêrnavên vê kelîmeyê ji bo hemû maneyan eger te li binê maneyê nenivîsandibe"),
je: makeWordListStep("je", "jê", "Kelîmeyên jê çêbûyî binivîse"),
tekildar: makeWordListStep("tekildar", "têkildar", "Kelîmeyên ji aliyê etîmolojiyê ve têkildarî vê kelîmeyê binivîse"),
binereherwiha: makeWordListStep("binereherwiha", "herwiha binêre", "Kelîmeyên din ên eleqedar binivîse"),
etym: {
id: "etym",
name: "etîmolojî",
question_fmt: "Etîmolojiya kelîmeyê binivîse",
// etymTpls populated from data.json
etymTpls: {},
visible: function (values) {
return values.lang && values.pos;
},
// Fills the insert-dropdown from the current etymTpls object.
refreshTplSelect: function () {
var sel = $("#wiktku-start-etym .wiktku-tpl-insert-select");
if (!sel.length) return;
sel.find("option[value!='']").remove();
$.each(steps.etym.etymTpls, function (name, tpl) {
sel.append($("<option></option>").val(tpl.snippet).text(name + " — " + tpl.desc));
});
// Tell the picker the option list changed.
sel.trigger("wiktku:refresh");
},
build: function (stepDiv) {
if (stepDiv.find(".wiktku-etym-wrap").length) return null;
var wrap = $("<div class='wiktku-etym-wrap'></div>");
var ta = $("<textarea></textarea>")
.attr("name", "wiktku-etym-" + $.now())
.attr("class", "wiktku-start-step-field wiktku-etym-text")
.attr("rows", 4)
.attr("placeholder", "Ji {{ji|en|ku|apple}}. yan rasterast binivîse…");
// Template insert dropdown — options also refreshed after data.json loads.
var sel = $("<select class='wiktku-tpl-insert-select'></select>");
sel.attr("data-placeholder", "Şablonek lê zêde bike…");
sel.append($("<option value=''>— şablonek lê zêde bike —</option>"));
$.each(steps.etym.etymTpls, function (name, tpl) {
sel.append($("<option></option>").val(tpl.snippet).text(name + " — " + tpl.desc));
});
sel.on("change", function () {
var snippet = $(this).val();
if (!snippet) return;
var lang = getValues().lang || "";
snippet = snippet.replace(/CODE/g, lang).replace(/SOURCELANG/g, "?");
insertAtCursor(ta[0], snippet);
$(this).val("");
sel.trigger("wiktku:refresh");
ta.focus();
});
wrap.append(sel);
wrap.append(ta);
stepDiv.append(wrap);
initSelects(wrap);
return ta;
},
output: function (values) {
var text = $.trim($("#wiktku-start-etym .wiktku-etym-text").val());
if (text) {
return "\n==== Etîmolojî ====\n" + text + "\n";
}
// No etymology entered — emit {{ji?|lang}} as a placeholder.
// Skip it only when every filled sense is a şablon sense
// a completely empty entry with no şablon chosen still gets the placeholder
var dfnSenses = steps.dfn.getSenses($("#wiktku-start-dfn"));
var hasFilledTplSense = dfnSenses.some(function (s) {
return !!s.tpl && !!s.tplTitle;
});
var hasRegularMane = dfnSenses.some(function (s) {
return !s.tpl && (s.mane !== "" || senseHasExtraContent(s));
});
if (hasFilledTplSense && !hasRegularMane) return "";
return "\n==== Etîmolojî ====\n{{ji?|" + values.lang + "}}\n";
} },
dunde: {
id: "dunde",
name: "dûnde",
question_fmt: "Eger ev kelîme ji vî zimanî ketibe zimanekî din, vî zimanî û kelîmeya wî binivîse",
visible: function (values) {
return !!values.pos;
},
disabledKeys: function (values) {
return {"navz": true, [values.lang]: true}
},
// Language dropdown + growing word-input list; a new row appends
// when the dropdown gets a value. Mirrors steps.trans, but flat.
buildRow: function (stepDiv) {
var row = $("<li class='wiktku-dunde-row wiktku-lang-row'></li>");
// Language selector — the searchable picker is applied after insertion into DOM.
var langSel = $(mw.html.element("select", {
"class": "wiktku-start-step-keyfield wiktku-start-narrow" }));
langSel.attr("data-placeholder", "Li zimanekî bigere");
populateMenus(langSel, steps.dunde.keys || [], steps.dunde.disabledKeys);
// When a language is chosen, ensure a next empty row exists.
langSel.on("change", function () {
steps.dunde.onLangChange(stepDiv, row);
});
// Word list for this language.
var wordList = $("<ul class='wiktku-dunde-words wiktku-lang-row-words'></ul>");
var firstWord = steps.dunde.makeWordInput();
wordList.append($("<li></li>").append(firstWord));
// The searchable picker is attached by initSelects() once the row
// is in the DOM (see onLangChange/build below).
row.append(langSel).append(wordList);
return row;
},
makeWordInput: function () {
var input = $("<textarea></textarea>")
.attr("name", "wiktku-dunde-word-" + $.now() + "-" + Math.random().toString(36).substr(2, 9))
.attr("rows", 1)
.attr("class", "wiktku-dfn-subfield wiktku-start-narrow")
.attr("placeholder", "Kelîme…");
input.on("input", function () {
var list = $(this).closest("ul.wiktku-dunde-words");
var item = $(this).parent();
var val = $.trim($(this).val());
if (val && item.is(list.children("li:last-child"))) {
var next = steps.dunde.makeWordInput();
list.append($("<li></li>").append(next));
}
});
return input;
},
onLangChange: function (stepDiv, row) {
var list = stepDiv.find("ul.wiktku-dunde-list");
var isLast = row.is(list.children("li.wiktku-dunde-row:last-child"));
if (isLast) {
var newRow = steps.dunde.buildRow(stepDiv);
list.append(newRow);
// Attach the searchable picker now the row is in the DOM.
initSelects(newRow);
}
// Keep disabled keys in sync across all lang selectors.
steps.dunde.syncDisabledKeys(stepDiv);
},
/** Disables already-selected languages in all other dropdowns. */
syncDisabledKeys: function (stepDiv) {
var taken = $.extend({}, steps.dunde.disabledKeys);
stepDiv.find("li.wiktku-dunde-row select").each(function () {
var v = $(this).val();
if (v) taken[v] = true;
});
stepDiv.find("li.wiktku-dunde-row select").each(function () {
var self = $(this);
var own = self.val();
self.find("option").each(function () {
var code = $(this).val();
if (!code) return;
$(this).prop("disabled", taken[code] && code !== own);
});
self.trigger("wiktku:refresh");
});
},
build: function (stepDiv) {
if (stepDiv.find("ul.wiktku-dunde-list").length) return null;
var list = $("<ul class='wiktku-dunde-list wiktku-lang-row-list'></ul>");
list.append(steps.dunde.buildRow(stepDiv));
stepDiv.append(list);
// Attach the searchable picker now the select is in the DOM.
initSelects(list);
return null;
},
/** Reads all [langcode, words[]] rows from the DOM. */
getRows: function (stepDiv) {
var result = [];
stepDiv.find("li.wiktku-dunde-row").each(function () {
var lang = $(this).find("select").val();
if (!lang) return;
var words = [];
$(this).find("ul.wiktku-dunde-words textarea").each(function () {
var v = $.trim($(this).val());
if (v) words.push(v);
});
if (words.length) result.push([lang, words]);
});
return result;
},
output: function () {
var stepDiv = $("#wiktku-start-dunde");
var rows = steps.dunde.getRows(stepDiv);
if (!rows.length) return "";
var lines = $.map(rows, function (row) {
var lang = row[0], words = row[1];
return "* {{dû|" + lang + "|" + words.join("|") + "}}";
});
return "\n==== Dûnde ====\n" + lines.join("\n") + "\n";
}
},
zarava: {
id: "zarava",
name: "bi zaravayên din",
question_fmt: "'"+ pageName + "' di zaravayên din de çawa tê gotin?",
visible: function (values) {
return steps.trans.visible(values);
},
disabledKeys: {},
buildRow: function (group) {
var row = $("<li class='wiktku-zarava-row wiktku-lang-row'></li>");
var langSel = $(mw.html.element("select", {
"class": "wiktku-start-step-keyfield wiktku-start-narrow" }));
langSel.attr("data-placeholder", "Li zaravayekî bigere");
populateMenus(langSel, steps.zarava.keys || [], steps.zarava.disabledKeys);
langSel.on("change", function () {
steps.zarava.onLangChange(group, row);
});
var wordList = $("<ul class='wiktku-zarava-words wiktku-lang-row-words'></ul>");
var firstWord = steps.zarava.makeWordInput();
wordList.append($("<li></li>").append(firstWord));
row.append(langSel).append(wordList);
return row;
},
makeWordInput: function () {
var input = $("<textarea></textarea>")
.attr("name", "wiktku-zarava-word-" + $.now() + "-" + Math.random().toString(36).substr(2, 9))
.attr("rows", 1)
.attr("class", "wiktku-dfn-subfield wiktku-start-narrow")
.attr("placeholder", "Tercime…");
input.on("input", function () {
var list = $(this).closest("ul.wiktku-zarava-words");
var item = $(this).parent();
var val = $.trim($(this).val());
if (val && item.is(list.children("li:last-child"))) {
var next = steps.zarava.makeWordInput();
list.append($("<li></li>").append(next));
}
});
return input;
},
onLangChange: function (group, row) {
var list = group.find("ul.wiktku-zarava-list");
var isLast = row.is(list.children("li.wiktku-zarava-row:last-child"));
if (isLast) {
var newRow = steps.zarava.buildRow(group);
list.append(newRow);
// Attach the searchable picker now the row is in the DOM.
initSelects(newRow);
}
steps.zarava.syncDisabledKeys(group);
},
/** Disables already-selected dialects in all other dropdowns within one group. */
syncDisabledKeys: function (group) {
var taken = $.extend({}, steps.zarava.disabledKeys);
group.find("li.wiktku-zarava-row select").each(function () {
var v = $(this).val();
if (v) taken[v] = true;
});
group.find("li.wiktku-zarava-row select").each(function () {
var self = $(this);
var own = self.val();
self.find("option").each(function () {
var code = $(this).val();
if (!code) return;
$(this).prop("disabled", taken[code] && code !== own);
});
self.trigger("wiktku:refresh");
});
},
/** Builds (or fetches) the .wiktku-zarava-group for one gloss. */
buildGroup: function (stepDiv, gi) {
var group = $("<div class='wiktku-zarava-group'></div>").attr("data-gloss-pos", gi);
var list = $("<ul class='wiktku-zarava-list wiktku-lang-row-list'></ul>");
list.append(steps.zarava.buildRow(group));
group.append(list);
stepDiv.append(group);
// Attach the searchable picker now the select is in the DOM.
initSelects(list);
return group;
},
/** Syncs one .wiktku-zarava-group per current gloss (same logic as steps.trans.build). */
build: function (stepDiv) {
var glosses = steps.trans.glossList();
if (!glosses.length) {
stepDiv.find(".wiktku-zarava-group").remove();
return null;
}
var existingGroups = stepDiv.find(".wiktku-zarava-group");
if (existingGroups.length > glosses.length) {
existingGroups.slice(glosses.length).remove();
}
$.each(glosses, function (gi, gloss) {
var group = stepDiv.find(".wiktku-zarava-group[data-gloss-pos='" + gi + "']");
if (!group.length) group = steps.zarava.buildGroup(stepDiv, gi);
var label = group.find(".wiktku-zarava-group-label");
if (glosses.length > 1) {
if (!label.length) {
label = $("<div class='wiktku-zarava-group-label'></div>");
group.prepend(label);
}
label.text(gloss.index + " " + gloss.text);
} else if (label.length) {
label.remove();
}
});
return null;
},
/** Reads the dialect rows for a single gloss group. */
getGroupTranslations: function (group) {
var result = [];
group.find("li.wiktku-zarava-row").each(function () {
var lang = $(this).find("select").val();
if (!lang) return;
var words = [];
$(this).find("ul.wiktku-zarava-words textarea").each(function () {
var v = $.trim($(this).val());
if (v) words.push(v);
});
if (words.length) result.push([lang, words]);
});
return result;
},
/** Reads all rows from the DOM, grouped by gloss position. */
getTranslations: function (stepDiv) {
var result = [];
stepDiv.find(".wiktku-zarava-group").each(function () {
result.push(steps.zarava.getGroupTranslations($(this)));
});
return result;
},
output: function (values) {
if (values.lang !== "ku") return "";
var stepDiv = $("#wiktku-start-zarava");
var glosses = steps.trans.glossList();
if (!glosses.length) return "";
var blocks = $.map(glosses, function (gloss, gi) {
var group = stepDiv.find(".wiktku-zarava-group[data-gloss-pos='" + gi + "']");
var rows = group.length ? steps.zarava.getGroupTranslations(group) : [];
if (!gloss.text && !rows.length) return undefined;
if (rows.length) {
rows.sort(function (a, b) {
var aLang = langsByCode[a[0]] || {};
var bLang = langsByCode[b[0]] || {};
return (aLang.sortKey || "").localeCompare(bLang.sortKey || "", "ku");
});
}
var wordLines = $.map(rows, function (row) {
var lang = row[0];
var words = row[1];
var wikiWords = words.map(function (w) {
return "{{W|" + lang + "|" + w + "}}";
}).join(", ");
return "* {{Z|" + lang + "}}: " + wikiWords;
}).join("\n");
if (!wordLines) return undefined;
var block = "{{werger-ser|" + (gloss.text || "?") + "|" + gloss.index + "}}";
block += "\n" + wordLines;
block += "\n{{werger-bin}}";
return block;
});
if (!blocks.length) return "";
return "\n==== Bi zaravayên din ====\n" + blocks.join("\n") + "\n";
}
},
trans: {
id: "trans",
name: "werger",
question_fmt: "Tercimeyên vê maneyê bi zimanên din binivîse",
visible: function (values) {
if (!(values.lang === "ku" && values.pos)) return false;
// Hide only when every sense is a filled template sense (no plain
// gloss to attach translations to). A mix, or nothing filled in
// yet, still shows Werger.
var dfnSenses = steps.dfn.getSenses($("#wiktku-start-dfn"));
var hasRealSense = dfnSenses.some(function (s) {
return !s.tpl && (s.mane !== "" || senseHasExtraContent(s));
});
var hasFilledTplSense = dfnSenses.some(function (s) {
return s.tpl && s.tplTitle;
});
return hasRealSense || !hasFilledTplSense;
},
disabledKeys: {
"navz": true,
"ku": true,
"ckb": true,
"sdh": true,
"lki": true,
"hac": true,
"zza": true },
// Language dropdown + growing word-input list, scoped to one gloss's
// group (each gloss has its own group and row list).
buildRow: function (group) {
var row = $("<li class='wiktku-trans-row wiktku-lang-row'></li>");
// Language selector — the searchable picker is applied after insertion into DOM.
var langSel = $(mw.html.element("select", {
"class": "wiktku-start-step-keyfield wiktku-start-narrow" }));
langSel.attr("data-placeholder", "Li zimanekî bigere");
populateMenus(langSel, steps.trans.keys || [], steps.trans.disabledKeys);
// When a language is chosen, ensure a next empty row exists.
langSel.on("change", function () {
steps.trans.onLangChange(group, row);
});
// Word list for this language.
var wordList = $("<ul class='wiktku-trans-words wiktku-lang-row-words'></ul>");
var firstWord = steps.trans.makeWordInput();
wordList.append($("<li></li>").append(firstWord));
// The searchable picker is attached by initSelects() once the row
// is in the DOM (see onLangChange/buildGroup below).
row.append(langSel).append(wordList);
return row;
},
makeWordInput: function () {
var input = $("<textarea></textarea>")
.attr("name", "wiktku-trans-word-" + $.now() + "-" + Math.random().toString(36).substr(2, 9))
.attr("rows", 1)
.attr("class", "wiktku-dfn-subfield wiktku-start-narrow")
.attr("placeholder", "Tercime…");
input.on("input", function () {
var list = $(this).closest("ul.wiktku-trans-words");
var item = $(this).parent();
var val = $.trim($(this).val());
if (val && item.is(list.children("li:last-child"))) {
var next = steps.trans.makeWordInput();
list.append($("<li></li>").append(next));
}
});
return input;
},
onLangChange: function (group, row) {
var list = group.find("ul.wiktku-trans-list");
var isLast = row.is(list.children("li.wiktku-trans-row:last-child"));
if (isLast) {
var newRow = steps.trans.buildRow(group);
list.append(newRow);
// Attach the searchable picker now the row is in the DOM.
initSelects(newRow);
}
// Keep disabled keys in sync across this gloss's lang selectors
// only — the same language can be used for different senses.
steps.trans.syncDisabledKeys(group);
},
/** Disables already-selected languages in all other dropdowns within one group. */
syncDisabledKeys: function (group) {
var taken = $.extend({}, steps.trans.disabledKeys);
group.find("li.wiktku-trans-row select").each(function () {
var v = $(this).val();
if (v) taken[v] = true;
});
group.find("li.wiktku-trans-row select").each(function () {
var self = $(this);
var own = self.val();
self.find("option").each(function () {
var code = $(this).val();
if (!code) return;
$(this).prop("disabled", taken[code] && code !== own);
});
self.trigger("wiktku:refresh");
});
},
// Builds (or fetches) the .wiktku-trans-group for one gloss.
buildGroup: function (stepDiv, gi) {
var group = $("<div class='wiktku-trans-group'></div>").attr("data-gloss-pos", gi);
var list = $("<ul class='wiktku-trans-list wiktku-lang-row-list'></ul>");
list.append(steps.trans.buildRow(group));
group.append(list);
stepDiv.append(group);
// Attach the searchable picker now the select is in the DOM.
initSelects(list);
return group;
},
// Syncs one .wiktku-trans-group per current gloss, keyed by
// data-gloss-pos so groups stay matched across rebuilds.
build: function (stepDiv) {
var glosses = steps.trans.glossList();
if (!glosses.length) {
stepDiv.find(".wiktku-trans-group").remove();
return null;
}
// Drop groups for glosses that no longer exist (always from the
// tail — groups are only ever appended in gloss order below).
var existingGroups = stepDiv.find(".wiktku-trans-group");
if (existingGroups.length > glosses.length) {
existingGroups.slice(glosses.length).remove();
}
$.each(glosses, function (gi, gloss) {
var group = stepDiv.find(".wiktku-trans-group[data-gloss-pos='" + gi + "']");
if (!group.length) group = steps.trans.buildGroup(stepDiv, gi);
// Only label groups when there's more than one gloss to
// distinguish between — a single gloss needs no caption.
var label = group.find(".wiktku-trans-group-label");
if (glosses.length > 1) {
if (!label.length) {
label = $("<div class='wiktku-trans-group-label'></div>");
group.prepend(label);
}
label.text(gloss.index + " " + gloss.text);
} else if (label.length) {
label.remove();
}
});
return null;
},
/** Reads the translation rows for a single gloss group. */
getGroupTranslations: function (group) {
var result = [];
group.find("li.wiktku-trans-row").each(function () {
var lang = $(this).find("select").val();
if (!lang) return;
var words = [];
$(this).find("ul.wiktku-trans-words textarea").each(function () {
var v = $.trim($(this).val());
if (v) words.push(v);
});
if (words.length) result.push([lang, words]);
});
return result;
},
// Reads all translation rows, grouped by gloss position.
getTranslations: function (stepDiv) {
var result = [];
stepDiv.find(".wiktku-trans-group").each(function () {
result.push(steps.trans.getGroupTranslations($(this)));
});
return result;
},
// Builds the numbered "{ index, gloss }" list, one per dfn sense
// with a real mane (skips template senses). index is 1-based and
// matches the sense's position in the "#" definition list.
// When nothing's filled in, returns one placeholder entry so
// Werger still has a group to attach to; when every sense is a
// filled template sense, stays empty (matches trans.visible()).
glossList: function () {
var dfnSenses = steps.dfn.getSenses($("#wiktku-start-dfn"));
var glosses = [];
var hasFilledTplSense = false;
$.each(dfnSenses, function (i, s) {
if (s.tpl) {
if (s.tplTitle) hasFilledTplSense = true;
return; // template sense — no gloss to caption with
}
var dfn = s.mane;
if (!dfn) {
// No mane, but other fields are filled — still gets a
// gloss group since dfn.getOutput() emits {{mane?}} for it.
if (senseHasExtraContent(s)) glosses.push({ index: i + 1, text: "" });
return;
}
if (dfn[0] !== dfn[0].toLowerCase()) dfn = decapitalize(dfn);
dfn = stripWikilinks(dfn).replace(/[.…?!)\]،؟]+$/, "");
glosses.push({ index: i + 1, text: dfn });
});
if (!glosses.length && !hasFilledTplSense) {
glosses.push({ index: 1, text: "" });
}
return glosses;
},
output: function (values) {
if (values.lang !== "ku") return "";
var stepDiv = $("#wiktku-start-trans");
var glosses = steps.trans.glossList();
// Every sense is a template sense — there's no real gloss
// anywhere and no group in the DOM either (glossList() only
// returns empty in that case), so skip the section entirely.
if (!glosses.length) return "";
// A completely empty entry (nothing filled in dfn at all, no
// şablon chosen either) still gets a placeholder Werger section
// to fill in later. Only
// skip an individual placeholder gloss below when some other
// sense actually has real content, making that particular
// placeholder redundant.
var dfnSenses = steps.dfn.getSenses($("#wiktku-start-dfn"));
var hasRegularMane = dfnSenses.some(function (s) {
return !s.tpl && (s.mane !== "" || senseHasExtraContent(s));
});
// Each gloss now has its own group of translation rows —
// attach every gloss's own words under its own werger-ser/-bin
// pair instead of dumping everything under the first one.
var blocks = $.map(glosses, function (gloss, gi) {
var group = stepDiv.find(".wiktku-trans-group[data-gloss-pos='" + gi + "']");
var rows = group.length ? steps.trans.getGroupTranslations(group) : [];
// Placeholder gloss (no real mane entered yet) with nothing
// translated into it. If some other sense already has real
// content, this placeholder is redundant — skip it. If the
// whole entry is empty, keep it so Werger still gets a
// section to fill in.
if (!gloss.text && !rows.length && hasRegularMane) return undefined;
if (rows.length) {
// Sort by Kurdish sort key.
rows.sort(function (a, b) {
var aLang = langsByCode[a[0]] || {};
var bLang = langsByCode[b[0]] || {};
return (aLang.sortKey || "").localeCompare(bLang.sortKey || "", "ku");
});
}
var wordLines = $.map(rows, function (row) {
var lang = row[0];
var words = row[1];
var wikiWords = words.map(function (w) {
return "{{W|" + lang + "|" + w + "}}";
}).join(", ");
return "* {{Z|" + lang + "}}: " + wikiWords;
}).join("\n");
var block = "{{werger-ser|" + (gloss.text || "?") + "|" + gloss.index + "}}";
if (wordLines) block += "\n" + wordLines;
block += "\n{{werger-bin}}";
return block;
});
if (!blocks.length) return "";
return "\n==== Werger ====\n" + blocks.join("\n") + "\n";
}
},
cavkani: {
id: "cavkani",
name: "çavkanî",
question_fmt: "Çavkaniyên din (ne jêgirtin) lê zêde bike",
visible: function (values) {
return !!values.pos;
},
// Fills the insert-dropdown from the members of [[Kategorî:Çavkanî]].
refreshTplSelect: function () {
var sel = $("#wiktku-start-cavkani .wiktku-tpl-insert-select");
if (!sel.length) return;
sel.find("option[value!='']").remove();
$.each(catSrcTemplates || [], function (_, name) {
sel.append($("<option></option>").val(name).text(name));
});
// Tell the picker the option list changed.
sel.trigger("wiktku:refresh");
},
build: function (stepDiv) {
if (stepDiv.find(".wiktku-cavkani-wrap").length) return null;
var wrap = $("<div class='wiktku-cavkani-wrap'></div>");
var ta = $("<textarea></textarea>")
.attr("name", "wiktku-cavkani-" + $.now())
.attr("class", "wiktku-start-step-field wiktku-cavkani-text")
.attr("rows", 4)
.attr("placeholder", "Şablonekî ji lîsteyê hilbijêre an rasterast binivîse…");
// Template insert dropdown, populated from [[Kategorî:Çavkanî]] —
// options refreshed once the category members are fetched.
var sel = $("<select class='wiktku-tpl-insert-select'></select>");
sel.attr("data-placeholder", "Şablonek lê zêde bike…");
sel.append($("<option value=''>— şablonek lê zêde bike —</option>"));
var status = $("<span class='wiktku-cavkani-status'></span>");
sel.on("change", function () {
var name = $(this).val();
if (!name) return;
insertAtCursor(ta[0], "\n* {{" + name + "}}");
$(this).val("");
sel.trigger("wiktku:refresh");
ta.focus();
});
wrap.append(sel);
wrap.append(status).append(ta);
stepDiv.append(wrap);
// build() runs again for every new beş (see the "+ Beş zêde bike"
// handler), after the initial page-wide pass — so this select needs
// its own init or it stays a plain, unsearchable native <select>.
initSelects(wrap);
if (catSrcTemplates) {
steps.cavkani.refreshTplSelect();
} else {
status.text("Şablon tên barkirin…");
fetchCatSrcTemplates().then(function () {
steps.cavkani.refreshTplSelect();
status.text("");
}, function () {
status.text("Şablon nehatin barkirin.");
});
}
return ta;
},
output: function () {
var text = $.trim($("#wiktku-start-cavkani .wiktku-cavkani-text").val());
if (!text) return "";
return "\n==== Çavkanî ====\n" + text + "\n";
}
},
};
steps.trans.keys = steps.lang.choices;
steps.dunde.keys = steps.lang.choices;
steps.zarava.keys = getZaravaKeys(steps.lang.choices);
var ordered_steps = [
steps.bnrh, steps.lang, steps.pron,steps.pos, steps.posparams,
steps.cinsiyet, steps.lektur, steps.tr, steps.resim, steps.dfn,
steps.tewandin, steps.bikaranin, steps.alfabeyendin, steps.je, steps.tekildar, steps.binereherwiha, steps.formalt, steps.hevmane, steps.dijmane, steps.jornav, steps.jernav,
steps.etym, steps.dunde, steps.zarava, steps.trans, steps.cavkani, steps.xwendin];
// ── Step-group tabs ──────────────────────────────────────────────────────
var STEP_GROUPS = [
{ id: "bingehin", label: "Bingehîn", steps: ["dfn", "tewandin", "etym", "zarava", "trans"] },
{ id: "linkkirin", label: "Lînkkirin", steps: ["je", "tekildar", "binereherwiha", "formalt", "hevmane", "dijmane", "jornav", "jernav"] },
{ id: "bikaranin", label: "Bikaranîn", steps: ["bikaranin", "alfabeyendin", "dunde", "cavkani", "xwendin"] },
];
// Reverse lookup: step id -> index into STEP_GROUPS (undefined for
// ungrouped steps like bnrh/lang/pron, which are never tab-filtered).
var stepIdToGroup = {};
$.each(STEP_GROUPS, function (gi, g) {
$.each(g.steps, function (_, sid) { stepIdToGroup[sid] = gi; });
});
// Step ids that belong to each section (not shared across sections).
var PER_SECTION_STEP_IDS = [
"pos", "posparams", "cinsiyet", "lektur", "tr",
"resim", "dfn", "tewandin", "formalt", "bikaranin", "alfabeyendin", "hevmane", "dijmane", "jornav", "jernav", "je", "tekildar", "etym", "dunde", "binereherwiha", "zarava", "trans", "cavkani", "xwendin"
];
// ── Multi-section state ──────────────────────────────────────────────────
// Each entry is a plain snapshot: { pos, cinsiyet, lektur, tr, dfn (senses[]),
// je, tekildar, binereherwiha, trans (rows[]) }.
var sections = [{}]; // section 0 starts empty (DOM is the truth)
var activeSection = 0;
// Which STEP_GROUPS tab is currently shown. Lives out here (like
// activeSection above) so refresh() — which is not nested inside build()
// — can read it and so renderGroupTabs()/updateGroupTabIndicators() below
// can be called from refresh() too. Both operate on the tab bar via its
// #wiktku-group-tabs id rather than a closured element reference, for the
// same reason.
var activeGroup = 0;
// Unsaved-changes / autosave state. Lives out here (same reason as
// activeGroup above) so destroy() — which runs on final submit and on
// switching to the source editor, and is not nested inside build() —
// can clear the timers and the beforeunload warning. build() assigns
// into these; it doesn't re-declare them.
var formDirty = false;
var autosaveDebounceTimer = null;
var autosaveInterval = null;
/** Re-renders the step-group tab bar to reflect the current activeGroup. */
function renderGroupTabs() {
var groupTabsDiv = $("#wiktku-group-tabs");
if (!groupTabsDiv.length) return;
groupTabsDiv.empty();
$.each(STEP_GROUPS, function (i, g) {
var tab = $("<span></span>")
.addClass("wiktku-group-tab")
.attr("data-group-idx", i)
.text(g.label)
.toggleClass("wiktku-tab-active", i === activeGroup);
(function (idx) {
tab.on("click", function () {
if (idx === activeGroup) return;
activeGroup = idx;
renderGroupTabs();
refresh();
});
}(i));
groupTabsDiv.append(tab);
});
}
/**
* Toggles a "needs attention" dot on any group tab that still has a
* required, unfilled field hidden inside it — so switching tabs doesn't
* leave the person wondering why "Bişîne" stays disabled.
*/
function updateGroupTabIndicators(values) {
var tabs = $("#wiktku-group-tabs .wiktku-group-tab");
if (!tabs.length) return;
$.each(STEP_GROUPS, function (i, g) {
var missing = false;
$.each(g.steps, function (_, sid) {
var step = steps[sid];
if (!step || !step.required) return;
var val = values[sid];
if (val === "" || (step.multiple && $.isArray(val) && val.join("") === "")) {
missing = true;
}
});
tabs.eq(i).toggleClass("wiktku-tab-missing", missing && i !== activeGroup);
});
}
function snapshotDfn() {
return steps.dfn.getSenses($("#wiktku-start-dfn"));
}
// Rebuilds the dfn DOM from a previously snapshotted senses array.
function restoreDfn(senses) {
var stepDiv = $("#wiktku-start-dfn");
// Tear down the existing list so build() recreates it cleanly.
stepDiv.find("ol.wiktku-dfn-list").remove();
steps.dfn.build(stepDiv);
var list = stepDiv.find("ol.wiktku-dfn-list");
$.each(senses, function (i, sense) {
// Ensure enough blocks exist (build() seeds one).
var blocks = list.find("li.wiktku-dfn-sense");
var block = blocks.eq(i);
if (!block.length) {
var nb = steps.dfn.buildSenseBlock(stepDiv);
list.append(nb);
block = list.find("li.wiktku-dfn-sense").last();
}
// Template selector.
block.find("select.wiktku-dfn-tpl-select").val(sense.tpl || "");
if (sense.tpl) {
block.find("textarea.wiktku-dfn-mane").hide();
block.find("input.wiktku-dfn-tpl-title").val(sense.tplTitle || "").show();
} else {
block.find("textarea.wiktku-dfn-mane").val(sense.mane || "").show();
block.find("input.wiktku-dfn-tpl-title").hide().val("");
}
// dfnArea is the only thing actually saved, so split it back into
// tercime/îzah for editing (mirrors syncNonKuToMane's join format).
var maneParts = splitTercimeIzah(sense.mane);
block.find(".wiktku-dfn-tercime").val(maneParts ? maneParts.tercime : (sense.mane || ""));
block.find(".wiktku-dfn-izah").val(maneParts ? maneParts.izah : "");
// Re-sync the formên alternatîv/hevmane/… hide state now that
// tplSelect's value was set (its own "change"
// handler doesn't fire from .val(), so this doesn't happen otherwise).
var updateVis = block.data("updateFieldVisibility");
if (updateVis) updateVis();
// Same for the mane-box mode (plain vs tercime+îzah), since this
// also depends on tplSelect's (and lang's) value.
var updateMane = block.data("updateManeMode");
if (updateMane) updateMane();
// Restore a sub-list (etiket, formên alternatîv, hevmane …) from a values array.
function restoreSubList(cls, values) {
if (!values || !values.length) return;
var groupDiv = block.find("." + cls + "-group");
var subList = groupDiv.find("ol, ul").first();
if (!subList.length) return; // group not found
var useModifiers = !!MODIFIER_SUBGROUPS[cls];
// Fill existing items, append new ones as needed.
$.each(values, function (j, val) {
var items = subList.find("li");
if (j < items.length) {
items.eq(j).find("textarea").val(val);
} else {
var ta = $("<textarea></textarea>")
.attr("name", "wiktku-dfn-restore-" + $.now() + "-" + Math.random().toString(36).substr(2, 9))
.attr("rows", 1)
.attr("class", "wiktku-dfn-subfield wiktku-start-narrow")
.val(val);
ta.on("input", function () {
steps.dfn.onSubInput(subList, this, 1, true, useModifiers);
});
subList.append(useModifiers ? makeModifierLi(ta) : $("<li></li>").append(ta));
}
});
}
// Reveal and populate lazy groups that have data.
var lazyMap = {
"wiktku-dfn-etiket": sense.etiket,
"wiktku-dfn-kategori": sense.kategori,
"wiktku-dfn-alternativ": sense.alternativ,
"wiktku-dfn-hevmane": sense.hevmane,
"wiktku-dfn-dijmane": sense.dijmane,
"wiktku-dfn-koordine": sense.koordine,
"wiktku-dfn-jornav": sense.jornav,
"wiktku-dfn-jernav": sense.jernav
};
$.each(lazyMap, function (cls, vals) {
if (vals && vals.length) restoreSubList(cls, vals);
});
// Nimûne items are objects { text, tr?, t? } — restore using the builder.
if (sense.nimune && sense.nimune.length) {
var nimuneGroupDiv = block.find(".wiktku-dfn-nimune-group");
var nimuneList = nimuneGroupDiv.find("ol.wiktku-dfn-nimune-list");
var buildFn = nimuneGroupDiv.data("buildNimuneLi");
nimuneList.empty();
$.each(sense.nimune, function (_, n) {
var text = typeof n === "object" ? (n.text || "") : n;
if (!text) return;
var li = buildFn ? buildFn() : $("<li class='wiktku-dfn-nimune-li'></li>");
li.find(".wiktku-dfn-nimune-text").val(text).each(function () { highlightLinebreak(this); });
if (n.tr) li.find(".wiktku-dfn-nimune-tr").val(n.tr);
if (n.t) li.find(".wiktku-dfn-nimune-t").val(n.t);
nimuneList.append(li);
});
// Always leave a blank trailing item.
if (buildFn) nimuneList.append(buildFn());
}
// Restore jêder entries — accepts current array shape or a legacy
// single object (older saved sections) for backwards compat.
var jederArr = $.isArray(sense.jeder) ? sense.jeder : (sense.jeder ? [sense.jeder] : []);
if (jederArr.length) {
var jederGroupDiv = block.find(".wiktku-dfn-jeder-group");
var jederList = jederGroupDiv.find("ol.wiktku-dfn-jeder-list");
var buildJederFn = jederGroupDiv.data("buildJederLi");
jederList.empty();
$.each(jederArr, function (_, j) {
if (!j || !j.quote) return;
var li = buildJederFn ? buildJederFn() : $("<li class='wiktku-dfn-jeder-li'></li>");
li.find(".wiktku-dfn-nimune-quote").val(j.quote).each(function () { highlightLinebreak(this); });
if (j.quoteTr) li.find(".wiktku-dfn-nimune-quote-tr").val(j.quoteTr);
if (j.quoteT) li.find(".wiktku-dfn-nimune-quote-t").val(j.quoteT);
if (j.jederManual) {
var manualSel = li.find(".wiktku-dfn-quote-src-sel");
manualSel.val("__manual__").trigger("change");
li.find(".wiktku-dfn-quote-src-manual").val(j.jederManual);
} else if (j.jederCatTpl) {
// Legacy format from before the şablon search switched rows to
// manual mode directly — convert it the same way now, so it's
// editable like any other free-form source.
var catSelEl = li.find(".wiktku-dfn-quote-src-sel");
catSelEl.val("__manual__").trigger("change");
li.find(".wiktku-dfn-quote-src-manual").val("{{" + j.jederCatTpl + "}}");
} else if (j.jederTpl) {
var srcSel = li.find(".wiktku-dfn-quote-src-sel");
srcSel.val(j.jederTpl).trigger("change");
if (j.jêderFields) {
$.each(j.jêderFields, function (key, val) {
li.find(".wiktku-dfn-quote-src-input[data-field-key='" + key + "']").val(val);
});
}
}
jederList.append(li);
});
// Always leave a blank trailing item, same as Nimûne.
if (buildJederFn) jederList.append(buildJederFn());
}
});
}
// Snapshots simple (non-dfn) per-section steps from the DOM into obj.
function saveCurrentSection() {
var snap = {};
$.each(PER_SECTION_STEP_IDS, function (_, id) {
if (id === "dfn") {
snap.dfn = snapshotDfn();
return;
}
if (id === "etym") {
snap.etym = $.trim($("#wiktku-start-etym .wiktku-etym-text").val());
return;
}
if (id === "cavkani") {
snap.cavkani = $.trim($("#wiktku-start-cavkani .wiktku-cavkani-text").val());
return;
}
if (id === "posparams") {
snap.posparams = $.trim($("#wiktku-start-posparams .wiktku-posparams-text").val());
return;
}
if (id === "resim") {
// One entry per row, including blank ones, so a mid-edit draft
// (e.g. a filename typed but no caption yet) survives a cache
// restore instead of being silently dropped.
snap.resim = $("#wiktku-start-resim li.wiktku-resim-item").map(function () {
return {
file: $.trim($(this).find(".wiktku-resim-file").val()),
caption: $.trim($(this).find(".wiktku-resim-caption").val()),
alt: $.trim($(this).find(".wiktku-resim-alt").val())
};
}).get();
return;
}
var step = steps[id];
if (!step) return;
var stepDiv = $("#wiktku-start-" + id);
if (id === "trans") {
snap.trans = steps.trans.getTranslations(stepDiv);
return;
}
if (id === "zarava") {
snap.zarava = steps.zarava.getTranslations(stepDiv);
return;
}
if (id === "dunde") {
snap.dunde = steps.dunde.getRows(stepDiv);
return;
}
// Generic: read all step fields.
var fields = stepDiv.find(".wiktku-start-step-field");
if (step.multiple) {
snap[id] = fields.map(function () { return $(this).val(); }).get();
} else {
snap[id] = fields.val();
}
});
sections[activeSection] = snap;
}
// Restores a previously saved snapshot into the form DOM.
function restoreSection(snap) {
$.each(PER_SECTION_STEP_IDS, function (_, id) {
if (id === "dfn") {
restoreDfn(snap.dfn || []);
return;
}
if (id === "etym") {
$("#wiktku-start-etym .wiktku-etym-wrap").remove();
steps.etym.build($("#wiktku-start-etym"));
$("#wiktku-start-etym .wiktku-etym-text").val(snap.etym || "");
return;
}
if (id === "cavkani") {
$("#wiktku-start-cavkani .wiktku-cavkani-wrap").remove();
steps.cavkani.build($("#wiktku-start-cavkani"));
$("#wiktku-start-cavkani .wiktku-cavkani-text").val(snap.cavkani || "");
return;
}
if (id === "posparams") {
var ppDiv = $("#wiktku-start-posparams");
ppDiv.find(".wiktku-posparams-wrap").remove();
steps.posparams.build(ppDiv);
var savedTa = snap.posparams || "";
ppDiv.find(".wiktku-posparams-text").val(savedTa);
// Re-parse saved textarea to restore helper widget states.
if (savedTa) {
var cMatch = savedTa.match(/\|c=([^|}\s]+)/);
var trMatch = savedTa.match(/\|tr=([^|}\s]+)/);
// Write into the shared hidden field (not the visible
// select, which has no <option>s yet) — syncHelpers()
// below reads it back to restore the dropdown once the
// gender options for this language are populated.
if (cMatch) $("#wiktku-start-cinsiyet-field").val(cMatch[1]);
if (trMatch) ppDiv.find(".wiktku-posparams-field[data-pp-key='tr']").val(trMatch[1]);
// Restore checked optional params. "form" is stored as
// "erê" rather than "1" (see rebuildTa), so it needs its
// own check here.
ppDiv.find(".wiktku-posparams-opt-panel input[type='checkbox']").each(function () {
var key = $(this).val();
var expected = key === "form" ? "erê" : "1";
$(this).prop("checked", savedTa.indexOf("|" + key + "=" + expected) !== -1);
});
}
steps.posparams.syncHelpers(ppDiv);
return;
}
if (id === "resim") {
var resimDiv = $("#wiktku-start-resim");
resimDiv.find(".wiktku-resim-wrap").remove();
steps.resim.build(resimDiv);
// Accept both the new array-of-rows format and the older
// single {file, caption} object saved before multi-image
// support existed.
var resimSnap = snap.resim;
var rows = $.isArray(resimSnap) ? resimSnap : (resimSnap ? [resimSnap] : []);
if (rows.length) {
var list = resimDiv.find("ol.wiktku-resim-list");
list.empty();
$.each(rows, function (_, r) {
var item = steps.resim.buildItem(resimDiv);
item.find(".wiktku-resim-file").val(r.file || "");
item.find(".wiktku-resim-caption").val(r.caption || "");
item.find(".wiktku-resim-alt").val(r.alt || "");
list.append(item);
});
// Always keep a blank trailing row, same as Nimûne/Dûnde.
var lastItem = list.children("li.wiktku-resim-item").last();
if ($.trim(lastItem.find(".wiktku-resim-file").val())) {
list.append(steps.resim.buildItem(resimDiv));
}
}
return;
}
if (id === "trans") {
// Rebuild trans groups (dfn must already be restored by this
// point in the $.each loop, so glossList() reflects it).
var transDiv = $("#wiktku-start-trans");
transDiv.find(".wiktku-trans-group").remove();
steps.trans.build(transDiv);
var groupsSnap = snap.trans || [];
$.each(groupsSnap, function (gi, rows) {
var group = transDiv.find(".wiktku-trans-group[data-gloss-pos='" + gi + "']");
if (!group.length) return; // gloss no longer exists — drop its rows
var list = group.find("ul.wiktku-trans-list");
$.each(rows, function (j, row) {
var lang = row[0], words = row[1];
var lastRow = list.find("li.wiktku-trans-row").last();
lastRow.find("select").val(lang).trigger("change");
var wordList = lastRow.find("ul.wiktku-trans-words");
$.each(words, function (k, word) {
var wordItems = wordList.find("li");
if (k < wordItems.length) {
wordItems.eq(k).find("textarea").val(word);
} else {
// .val() below doesn't fire "input", so the normal
// auto-grow never runs — append a matching item
// ourselves instead of silently dropping the word.
var extraInput = steps.trans.makeWordInput();
wordList.append($("<li></li>").append(extraInput));
extraInput.val(word);
}
});
// Leave one trailing empty field so the row can still grow
// when the user types, matching a freshly-built row.
if ($.trim(wordList.children("li").last().find("textarea").val())) {
wordList.append($("<li></li>").append(steps.trans.makeWordInput()));
}
});
});
return;
}
if (id === "zarava") {
// Rebuild zarava groups (dfn must already be restored by this
// point in the $.each loop, so glossList() reflects it).
var zaravaDiv = $("#wiktku-start-zarava");
zaravaDiv.find(".wiktku-zarava-group").remove();
steps.zarava.build(zaravaDiv);
var zaravaGroupsSnap = snap.zarava || [];
$.each(zaravaGroupsSnap, function (gi, rows) {
var group = zaravaDiv.find(".wiktku-zarava-group[data-gloss-pos='" + gi + "']");
if (!group.length) return; // gloss no longer exists — drop its rows
var list = group.find("ul.wiktku-zarava-list");
$.each(rows, function (j, row) {
var lang = row[0], words = row[1];
var lastRow = list.find("li.wiktku-zarava-row").last();
lastRow.find("select").val(lang).trigger("change");
var wordList = lastRow.find("ul.wiktku-zarava-words");
$.each(words, function (k, word) {
var wordItems = wordList.find("li");
if (k < wordItems.length) {
wordItems.eq(k).find("textarea").val(word);
} else {
var extraInput = steps.zarava.makeWordInput();
wordList.append($("<li></li>").append(extraInput));
extraInput.val(word);
}
});
if ($.trim(wordList.children("li").last().find("textarea").val())) {
wordList.append($("<li></li>").append(steps.zarava.makeWordInput()));
}
});
});
return;
}
if (id === "dunde") {
// Rebuild dunde rows.
var dundeDiv = $("#wiktku-start-dunde");
dundeDiv.find("ul.wiktku-dunde-list").remove();
steps.dunde.build(dundeDiv);
var dundeRows = snap.dunde || [];
$.each(dundeRows, function (i, row) {
var lang = row[0], words = row[1];
var list = dundeDiv.find("ul.wiktku-dunde-list");
var lastRow = list.find("li.wiktku-dunde-row").last();
lastRow.find("select").val(lang).trigger("change");
var wordList = lastRow.find("ul.wiktku-dunde-words");
$.each(words, function (j, word) {
var wordItems = wordList.find("li");
if (j < wordItems.length) {
wordItems.eq(j).find("textarea").val(word);
} else {
// .val() below doesn't fire "input", so the normal
// auto-grow never runs — append a matching item
// ourselves instead of silently dropping the word.
var extraInput = steps.dunde.makeWordInput();
wordList.append($("<li></li>").append(extraInput));
extraInput.val(word);
}
});
// Leave one trailing empty field so the row can still grow
// when the user types, matching a freshly-built row.
if ($.trim(wordList.children("li").last().find("textarea").val())) {
wordList.append($("<li></li>").append(steps.dunde.makeWordInput()));
}
});
return;
}
var step = steps[id];
if (!step) return;
var stepDiv = $("#wiktku-start-" + id);
var fields = stepDiv.find(".wiktku-start-step-field");
var val = snap[id];
if (val === undefined || val === null) return;
if (step.multiple) {
var arr = val;
fields.each(function (i) {
if (i < arr.length) $(this).val(arr[i]);
});
} else {
fields.val(val);
}
// Tell the pickers about the programmatic value change.
fields.filter("select").trigger("wiktku:refresh");
});
}
function getWikitextForCurrentSection(callback) {
var values = getValues();
var entry = steps.pos.output(values);
steps.dfn.getOutput(values, function (output) {
entry += output;
entry += steps.tewandin.output(values);
entry += steps.bikaranin.output(values);
entry += steps.alfabeyendin.output(values);
entry += steps.formalt.output(values);
entry += steps.hevmane.output(values);
entry += steps.dijmane.output(values);
entry += steps.jornav.output(values);
entry += steps.jernav.output(values);
entry += steps.je.output(values);
entry += steps.tekildar.output(values);
entry += steps.etym.output(values);
entry += steps.dunde.output(values);
entry += steps.binereherwiha.output(values);
entry += steps.zarava.output(values);
entry += steps.trans.output(values);
entry += steps.cavkani.output(values);
entry += steps.xwendin.output(values);
callback(entry, values);
});
}
function getWikitextAllSections(callback) {
saveCurrentSection();
var results = new Array(sections.length);
var sharedValues = getValues(); // lang/pron are shared
function processSection(i) {
if (i >= sections.length) {
// All done — restore original active section.
restoreSection(sections[activeSection]);
refresh();
callback(results, sharedValues);
return;
}
restoreSection(sections[i]);
refresh();
getWikitextForCurrentSection(function (sectionText) {
results[i] = sectionText;
processSection(i + 1);
});
}
processSection(0);
}
// Assembles wikitext for all sections plus the shared lang/pron header.
function getWikitext(callback) {
getWikitextAllSections(function (sectionTexts, sharedValues) {
var bnrh = steps.bnrh.output(sharedValues);
var entry = steps.lang.output(sharedValues);
entry += steps.pron.output(sharedValues);
entry += sectionTexts.join("\n");
// bnr-h goes before the language section — only prepended when
// generating fresh wikitext (not addLangMode, which handles it separately).
if (!addLangMode && bnrh) entry = bnrh + entry;
// Edit summary uses section 0's values. Read from the saved snapshot
// (not the live DOM) so it doesn't mix section 0's pos with whichever
// section happens to be active/restored at this point.
var dfnSenses = (sections[0] && sections[0].dfn) || [];
var dfnSummary = dfnSenses.map(function (s) {
if (s.mane) return s.mane;
// Template sense (e.g. {{guharto|ku|somepage}}) — same
// construction as the tplCall built in getOutput, so the
// summary shows what actually gets written to the entry
// instead of going blank.
if (s.tpl && s.tplTitle) {
return s.tplNoLang
? "{{" + s.tpl + "|" + s.tplTitle + "}}"
: "{{" + s.tpl + "|" + sharedValues.lang + "|" + s.tplTitle + "}}";
}
return "";
}).filter(Boolean).join("; ");
var summary = "([[Mediawiki:Gadget-start.js|WF:NÛ]] v.2.0) +" +
sharedValues.lang + ":" + sections[0].pos + ":" + dfnSummary;
var summaryField = document.getElementById("wpSummary");
if (addLangMode && summaryField.value) {
summary = summaryField.value + " " + summary;
}
summaryField.value = summary;
callback(entry);
});
}
var continueBtn;
function getValuesForStep(stepId) {
var fields = $("#wiktku-start-" + stepId + " .wiktku-start-step-field");
var step = steps[stepId];
if (step.keys) {
var values = {};
fields.each(function (i, field) {
var key = $(field).prevAll(".wiktku-start-step-keyfield").val();
if (key) values[key] = $(field).val();
});
return values;
}
else if (step.multiple) {
return fields.map(function () {
return $(this).val();
}).get();
}
return fields.val();
}
function getValues() {
var values = {};
$.each(steps, function (stepId) {
values[stepId] = getValuesForStep(stepId);
});
return values;
}
function populateMenus(inputs, choices, disabledValues, placeholderText) {
if (!disabledValues) disabledValues = {};
var vals = inputs.map(function (i, input) {
return $(input).val();
});
inputs.empty();
inputs.append($("<option></option>").text(placeholderText || ""));
$.each(choices, function (j, choice) {
// Append the language code in parentheses so that typing a code
// (e.g. "ku") in the search box still finds the language name.
var displayText = capitalize(choice.label);
if (choice.sortKey !== undefined) {
// This is a language choice {code, label, sortKey} — show code.
displayText = capitalize(choice.label) + " (" + choice.code + ")";
}
var option = $(mw.html.element("option", {
value: choice.code }, displayText));
if (disabledValues[choice.code]) option.prop("disabled", true);
inputs.append(option);
});
inputs.val(function (i) {
return vals[i];
});
}
// Keys to disable for a key menu: already-taken or explicitly disabled.
function getDisabledKeys(step) {
var occupiedKeys = {};
$("#wiktku-start-" + step.id + " .wiktku-start-step-keyfield").each(function () {
occupiedKeys[$(this).val()] = true;
});
if (step.disabledKeys) $.extend(occupiedKeys, step.disabledKeys);
return occupiedKeys;
}
function buildKeyInput(step) {
if (!step.keys) return undefined;
var input = $(mw.html.element("select", {
"class": "wiktku-start-step-keyfield wiktku-start-narrow" }));
input.attr("data-placeholder", "Hilbijêre " + step.keyName);
populateMenus(input, step.keys, getDisabledKeys(step));
// Keep the key menus mutually exclusive: whatever one row selects is
// disabled in every other row. Recomputed from the DOM on each change.
input.on("change", function () {
var all = $("#wiktku-start-" + step.id + " .wiktku-start-step-keyfield");
var taken = {};
all.each(function () {
var v = $(this).val();
if (v) taken[v] = true;
});
all.not(this).each(function () {
var self = $(this), own = self.val();
self.find("option").each(function () {
var code = $(this).val();
if (code) $(this).prop("disabled", !!taken[code] && code !== own);
});
self.trigger("wiktku:refresh");
});
});
// Return the wrapper; the select lives inside it and still fires change.
return wrapNativeSelect(input);
}
// Adds another text field to the list if the last one now has text.
function refreshForTextField(currentInput, step) {
currentInput = $(currentInput);
var value = currentInput.val();
var item = currentInput.parent();
if (value && !item.next("li").length) {
var nextInput = $("<textarea></textarea>")
.attr("name", "wiktku-field-" + $.now() + "-" + Math.random().toString(36).substr(2, 9))
.attr("class", currentInput.attr("class"))
.attr("rows", currentInput.attr("rows") || 1);
if (step.placeholder) {
nextInput.attr("placeholder", typeof step.placeholder === "function" ? step.placeholder() : step.placeholder);
}
nextInput.on("input", function (evt) {
refreshForTextField(evt.target, step);
});
var nextKeyInput = buildKeyInput(step);
var nextItem = step.modifiers
? makeModifierLi(nextInput).prepend(nextKeyInput || "")
: $("<li></li>").append(nextKeyInput).append(nextInput);
item.parent().append(nextItem);
if (nextKeyInput) initSelects(nextItem);
}
var canContinue = !continueBtn.isDisabled();
if ((value && !canContinue) || (!value && canContinue)) {
refresh(step);
}
}
function prepareInput(input, step) {
if (!input) return;
if (step.required) input.prop('required', true);
input.change(step, refresh);
}
// Shows/hides steps based on whether their prerequisites are met, and
// updates placeholders where applicable.
function refresh(evt) {
var values = getValues();
var changedStep = evt && evt.data;
var canContinue = true;
// Re-filter template options in every sense block whenever lang changes.
$("#wiktku-start-dfn .wiktku-dfn-tpl-select").each(function () {
var fn = $(this).data("updateOptions");
if (typeof fn === "function") fn();
});
// Re-filter pronunciation and etymology template dropdowns when language changes.
steps.pron.refreshTplSelect();
steps.etym.refreshTplSelect();
steps.cavkani.refreshTplSelect();
// Re-render any step's question label that depends on current values
// (e.g. dfn's Werger-section reminder, which only applies to ku).
$.each(steps, function (stepId, step) {
if (typeof step.question_fmt === "function") {
$("#wiktku-start-" + stepId + " .wiktku-start-step-question")
.text(step.question_fmt(values));
}
});
// Sync every sense block's mane-box mode (plain mane vs tercime+îzah)
// to the current language, in case lang changes after blocks exist.
$("#wiktku-start-dfn li.wiktku-dfn-sense").each(function () {
var updateMane = $(this).data("updateManeMode");
if (updateMane) updateMane();
});
// Sync tr/t sub-fields in every nimûne item to the current language.
// tr shown when language needs transliteration; t shown when lang !== "ku".
(function () {
var lang = values.lang || "";
var showTr = needsTransliteration(lang);
var showT = lang && lang !== "ku";
$("#wiktku-start-dfn .wiktku-dfn-nimune-list li.wiktku-dfn-nimune-li").each(function () {
var li = $(this);
// Ensure the sub-wrapper exists when we need it.
var subWrap = li.find(".wiktku-dfn-nimune-sub");
// tr field
var trTa = li.find(".wiktku-dfn-nimune-tr");
if (showTr && !trTa.length) {
if (!subWrap.length) {
subWrap = $("<div></div>").addClass("wiktku-dfn-nimune-sub");
li.append(subWrap);
}
trTa = $("<textarea></textarea>")
.attr("name", "wiktku-dfn-nimune-tr-" + $.now() + "-" + Math.random().toString(36).substr(2, 9))
.attr("rows", 5)
.attr("class", "wiktku-dfn-subfield wiktku-dfn-nimune-tr")
.attr("placeholder", "Transliterasyon…");
subWrap.prepend(trTa);
} else if (!showTr && trTa.length) {
trTa.remove();
}
// t field
var tTa = li.find(".wiktku-dfn-nimune-t");
if (showT && !tTa.length) {
if (!subWrap.length) {
subWrap = $("<div></div>").addClass("wiktku-dfn-nimune-sub");
li.append(subWrap);
}
tTa = $("<textarea></textarea>")
.attr("name", "wiktku-dfn-nimune-t-" + $.now() + "-" + Math.random().toString(36).substr(2, 9))
.attr("rows", 5)
.attr("class", "wiktku-dfn-subfield wiktku-dfn-nimune-t")
.attr("placeholder", "Tercimeya nimûneyê bi kurmancî…");
subWrap.append(tTa);
} else if (!showT && tTa.length) {
tTa.remove();
}
// Remove the wrapper if it ended up empty.
subWrap = li.find(".wiktku-dfn-nimune-sub");
if (subWrap.length && !subWrap.children().length) subWrap.remove();
});
}());
// Re-sync the "<label> bi <ziman>…" placeholder on every always-visible
// sub-field list (etîket, kategorî, hevmane, …), since the language may
// not have been chosen yet when these lists were first built, or may
// have changed since.
$("#wiktku-start-dfn .wiktku-dfn-sublist").each(function () {
var upd = $(this).data("updatePlaceholders");
if (typeof upd === "function") upd();
});
// Same idea for word-list steps (jê, têkildar, binêre herwiha, …)
// whose placeholder is a function of the current language.
$.each(steps, function (stepId, step) {
if (typeof step.placeholder === "function") {
$("#wiktku-start-" + stepId + " textarea.wiktku-start-step-field")
.attr("placeholder", step.placeholder());
}
});
// Sync tr/t sub-fields in every jêder citation to the current language.
// tr shown when language needs transliteration; t shown when lang !== "ku".
(function () {
var lang = values.lang || "";
var showTr = needsTransliteration(lang);
var showT = lang && lang !== "ku";
$("#wiktku-start-dfn .wiktku-dfn-jeder-list li.wiktku-dfn-jeder-li").each(function () {
var li = $(this);
// Ensure the sub-wrapper exists when we need it. It must sit right
// after the quote textarea and before the source selector.
var subWrap = li.find(".wiktku-dfn-quote-sub");
// tr field
var trTa = li.find(".wiktku-dfn-nimune-quote-tr");
if (showTr && !trTa.length) {
if (!subWrap.length) {
subWrap = $("<div></div>").addClass("wiktku-dfn-quote-sub");
// Insert after the quote textarea's resize-wrap (if the manual
// resize handle has already been attached to it), not after the
// bare textarea -- otherwise this lands *inside* that wrap,
// between the textarea and its own grip, breaking jêgirtin's
// handle and nesting the tr/t boxes inside it.
var quoteTa = li.find(".wiktku-dfn-nimune-quote");
var quoteResizeWrap = quoteTa.closest(".wiktku-resize-wrap");
(quoteResizeWrap.length ? quoteResizeWrap : quoteTa).after(subWrap);
}
trTa = $("<textarea></textarea>")
.attr("name", "wiktku-dfn-nimune-quote-tr-" + $.now() + "-" + Math.random().toString(36).substr(2, 9))
.attr("rows", 2)
.attr("class", "wiktku-dfn-subfield wiktku-dfn-nimune-quote-tr")
.attr("placeholder", "Transliterasyona jêgirtinê…");
subWrap.prepend(trTa);
} else if (!showTr && trTa.length) {
trTa.remove();
}
// t field
var tTa = li.find(".wiktku-dfn-nimune-quote-t");
if (showT && !tTa.length) {
if (!subWrap.length) {
subWrap = $("<div></div>").addClass("wiktku-dfn-quote-sub");
// See the tr-field branch above for why this targets the
// resize-wrap instead of the bare textarea.
var quoteTa2 = li.find(".wiktku-dfn-nimune-quote");
var quoteResizeWrap2 = quoteTa2.closest(".wiktku-resize-wrap");
(quoteResizeWrap2.length ? quoteResizeWrap2 : quoteTa2).after(subWrap);
}
tTa = $("<textarea></textarea>")
.attr("name", "wiktku-dfn-nimune-quote-t-" + $.now() + "-" + Math.random().toString(36).substr(2, 9))
.attr("rows", 2)
.attr("class", "wiktku-dfn-subfield wiktku-dfn-nimune-quote-t")
.attr("placeholder", "Tercimeya jêgirtinê bi kurmancî…");
subWrap.append(tTa);
} else if (!showT && tTa.length) {
tTa.remove();
}
// Remove the wrapper if it ended up empty.
subWrap = li.find(".wiktku-dfn-quote-sub");
if (subWrap.length && !subWrap.children().length) subWrap.remove();
});
}());
$.each(steps, function (stepId, step) {
var groupIdx = stepIdToGroup[stepId];
var hiddenByTab = (groupIdx !== undefined && groupIdx !== activeGroup);
if (hiddenByTab || (typeof(step.visible) === "function" && !step.visible(values))) {
$("#wiktku-start-" + stepId).hide();
}
else {
var stepDiv = $("#wiktku-start-" + stepId);
if (changedStep !== step && typeof(step.build) === "function") {
prepareInput(step.build(stepDiv, values), step);
}
// After build, sync the posparams helper widgets whenever pos or lang changes.
if (step.id === "posparams" && typeof step.syncHelpers === "function") {
step.syncHelpers(stepDiv);
}
var input = stepDiv.find(".wiktku-start-step-field");
if (typeof(step.example) === "function") {
// .find() above already reaches nested fields (e.g. the dfn
// step's mane textareas inside each sense block), so one
// assignment covers every step; dfn keeps its own fallback.
var exampleText = step.example(values) || (step.id === "dfn" ? "Mane…" : "");
input.attr("placeholder", exampleText);
}
stepDiv.slideDown();
}
if (step.required &&
(values[stepId] === "" ||
(step.multiple && values[stepId].join("") === ""))) {
canContinue = false;
}
});
$("#wiktku-group-tabs").toggle(!!values.pos);
updateGroupTabIndicators(values);
continueBtn.setDisabled(!canContinue);
}
function destroy() {
if (autosaveDebounceTimer) clearTimeout(autosaveDebounceTimer);
if (autosaveInterval) clearInterval(autosaveInterval);
formDirty = false;
$(window).off("beforeunload.wiktkuUnsaved");
$("#wiktku-start-form, .noafterwizard").slideUp(function () {
$(this).remove();
});
$(".noarticletext .nowizard").slideDown();
// #editform was kept laid-out but off-screen (see build()) instead of
// display:none, precisely so the editor never had to size itself
// against a zero-width/height box. Just bring it back on-screen —
// no slideDown needed since it was never actually collapsed.
$("#editform").removeClass("wiktku-offscreen");
// Belt-and-braces: if WikiEditor/CodeMirror/mobile's auto-grow still
// cached a stale size from some earlier point, nudge them to
// recalculate now that the box is genuinely visible.
$(window).trigger("resize");
if (window.CodeMirror) {
var cm = $("#wpTextbox1").data("CodeMirror") || $("#wpTextbox1").data("cmInstance");
if (cm && typeof cm.refresh === "function") cm.refresh();
}
$("#ca-edit").removeClass("selected");
$("#ca-wiktku-nowizard").addClass("selected");
}
// Priority order for Kurdish dialects and navz.
// Codes listed here come before all other languages; unlisted codes
// are sorted alphabetically by their display name via localeCompare.
var LANG_PRIORITY = ["navz", "ku", "hac", "sdh", "lki", "ckb", "zza"];
// Inserts a new "== {{ziman|code}} ==" section at the correct sorted
// position: navz, then ku/hac/sdh/lki/ckb/zza, then alphabetical by name.
function insertNewLangSection(existing, wikitext) {
var newCodeMatch = wikitext.match(new RegExp("^" + langHeaderSource("[^}]+")));
var newCode = newCodeMatch ? newCodeMatch[1] : "";
var sections = [];
var preamble = "";
var anyHeaderSrc = langHeaderSource("[^}]+");
var firstMatch = new RegExp("^" + anyHeaderSrc, "m").exec(existing);
if (!firstMatch) {
// No existing lang sections — just write the new section.
// Add \n\n only when there is real non-whitespace content above.
var trimmed = existing.replace(/\s+$/, "");
return trimmed ? trimmed + "\n\n" + wikitext : wikitext;
}
// Everything before the first == {{ziman|...}} == is the preamble.
var firstSectionStart = firstMatch.index;
// Walk back to the start of that line.
var lineStart = existing.lastIndexOf("\n", firstSectionStart - 1);
var preambleEnd = lineStart !== -1 ? lineStart + 1 : 0;
preamble = existing.slice(0, preambleEnd);
// Parse each language section: header line + everything until the next header.
var body = existing.slice(preambleEnd);
// (?![\s\S]) matches only true end-of-string, since a bare "$" with
// /m would stop at the section's first line break instead.
var langSectionRe = new RegExp(
"^(" + anyHeaderSrc + "\\n?)([\\s\\S]*?)(?=\\n" + anyHeaderSrc + "|(?![\\s\\S]))",
"gm"
);
var m;
while ((m = langSectionRe.exec(body)) !== null) {
sections.push({
code: m[2],
content: m[0] // full text of this section including header
});
}
// Determine sort rank: priority list first (by index), then alphabetical.
function getLangName(code) {
var entry = langsByCode[code];
return entry ? entry.label : code;
}
function sortRank(code) {
var idx = LANG_PRIORITY.indexOf(code);
return idx !== -1 ? idx : LANG_PRIORITY.length;
}
function compareLangs(a, b) {
var ra = sortRank(a), rb = sortRank(b);
if (ra !== rb) return ra - rb;
// Both are outside priority list — sort by display name.
return getLangName(a).localeCompare(getLangName(b), userLang);
}
// Insert the new section into the sorted list.
var newSection = { code: newCode, content: wikitext };
var inserted = false;
for (var i = 0; i < sections.length; i++) {
if (compareLangs(newCode, sections[i].code) < 0) {
sections.splice(i, 0, newSection);
inserted = true;
break;
}
}
if (!inserted) sections.push(newSection);
// Re-join: preamble + sections, each separated by exactly \n\n.
// Trim trailing whitespace off each section's content first so we
// control the spacing precisely.
var joined = sections.map(function (s) {
return s.content.replace(/\s+$/, "");
}).join("\n\n");
// Only add a separator after the preamble when it has real content.
var preambleTrimmed = preamble.replace(/\s+$/, "");
var prefix = preambleTrimmed ? preambleTrimmed + "\n\n" : "";
return prefix + joined + "\n";
}
function build() {
$(".nowizard, .nowizard .noafterwizard").hide();
var callToAction = $("#wiktku-calltoaction");
var origCallToActionText = callToAction.text();
$(mw.util.addPortletLink("p-views", "#", "Edîtora çavkaniyê veke",
"ca-wiktku-nowizard", "Vê rûpelê bi edîtora çavkaniyê çêke",
undefined, "#ca-watch")).click(function (evt) {
evt.preventDefault();
callToAction.text(origCallToActionText);
destroy();
});
if (callToAction.length) {
callToAction.text(origCallToActionText +
" Forma li jêr ji bo çêkirina madeyeke nû bi kar bîne.");
}
var startForm = $("<form id='wiktku-start-form'></form>");
var clearPageCheck = null;
if (addLangMode) {
startForm.append($("<p class='wiktku-addlang-notice'></p>").html(
"Bi vê formê tu yê zimanekî nû li rûpelê îlawe bikî. Eger ev ziman jixwe hebe, beşa nû li dawiya vî zimanî dê were îlawekirin. " +
"Ji kerema xwe netîceya dawî kontrol bike, eger problemek derkeve, li <a href='" +
mw.util.getUrl('Mediawiki talk:Gadget-start.js') +
"'>nîqaşa vê amûrê</a> problemê ragihîne."
));
clearPageCheck = $("<input type='checkbox' id='wiktku-clear-page-check'>");
var clearPageLabel = $("<label for='wiktku-clear-page-check'></label>")
.text(" Muhtewaya rûpelê paqij bike (her tiştî jê bibe û rûpelê ji nû ve binivîse)");
startForm.append(
$("<p class='wiktku-addlang-notice'></p>")
.append(clearPageCheck)
.append(clearPageLabel)
);
// Re-evaluate step visibility (e.g. the pron step) whenever this
// is toggled, since it changes what counts as "existing content".
clearPageCheck.on("change", function () {
refresh();
});
}
var spinner;
// Tab bar for switching between POS sections.
var sectionTabsDiv = $("<div id='wiktku-section-tabs'></div>");
// Tab bar for switching between step-groups (topics) within a section.
// renderGroupTabs()/updateGroupTabIndicators() (which populate and
// maintain it) live outside build() — see near "var activeSection".
var groupTabsDiv = $("<div id='wiktku-group-tabs'></div>");
startForm.submit(function (evt) {
evt.preventDefault();
continueBtn.setDisabled(true);
continueBtn.$element.addClass("wiktku-btn-sending");
spinner.show();
getWikitext(function (wikitext) {
if (addLangMode && clearPageCheck && clearPageCheck.prop("checked")) {
// User asked to wipe the page — write fresh content.
$("#wpTextbox1").val(wikitext);
} else if (addLangMode) {
var textbox = $("#wpTextbox1");
var existing = textbox.val() || "";
// ── bnr-h merge ──────────────────────────────────────────
// If the user filled bnr-h inputs, either merge into the
// existing {{bnr-h|…}} call or prepend a new one.
var bnrhOut = steps.bnrh.output(getValues());
if (bnrhOut) {
var newPages = bnrhOut.replace(/^\{\{bnr-h\|/, "").replace(/\}\}\n?$/, "").split("|");
var bnrhRe = /\{\{bnr-h\|([^}]*)\}\}/i;
if (bnrhRe.test(existing)) {
existing = existing.replace(bnrhRe, function (_, inner) {
var existingPages = inner.split("|").map(function (p) { return p.trim(); });
$.each(newPages, function (_, p) {
p = p.trim();
if (p && existingPages.indexOf(p) === -1) existingPages.push(p);
});
return "{{bnr-h|" + existingPages.join("|") + "}}";
});
} else {
existing = bnrhOut + existing;
}
}
// If this language's section already exists (whitespace
// differences aside), merge into it; otherwise insert new.
var langHeaderMatch = wikitext.match(new RegExp("^(" + langHeaderSource("[^}]+") + "\\n)"));
if (langHeaderMatch) {
var langHeader = langHeaderMatch[1]; // e.g. "== {{ziman|ku}} ==\n"
var newCode = langHeaderMatch[2];
var existingHeader = findLangHeader(existing, newCode);
if (existingHeader) {
// Strip the header from the new output.
var newContent = wikitext.slice(langHeader.length);
// Find the insertion point: end of the existing lang section.
// A new L2 heading marks the start of the next language block.
var searchFrom = existingHeader.index + existingHeader.match.length;
// Find the next == … == heading after this section's start.
var nextL2 = existing.indexOf("\n== ", searchFrom);
var insertAt = nextL2 !== -1 ? nextL2 : existing.length;
// Ensure there's a blank line before the inserted block.
var before = existing.slice(0, insertAt);
var after = existing.slice(insertAt);
var sep = /\n\s*$/.test(before) ? "" : "\n";
textbox.val(before + sep + newContent + after);
} else {
// New language — insert at the correct sorted position.
textbox.val(insertNewLangSection(existing, wikitext));
}
} else {
// Unexpected format — insert at sorted position anyway.
textbox.val(insertNewLangSection(existing, wikitext));
}
} else {
$("#wpTextbox1").val(wikitext);
}
$("html, body").animate({scrollTop: 0});
callToAction.text("Hindik ma!");
destroy();
});
});
$.each(ordered_steps, function (i, step) {
var stepDiv = $(mw.html.element("div", {
"class": "wiktku-start-step",
id: "wiktku-start-" + step.id }));
var name = capitalize(step.name);
stepDiv.append($(mw.html.element("h3", {
"class": "wiktku-start-step-name" }, new mw.html.Raw(mw.html.element("label", {
"for": "wiktku-start-" + step.id + "-field" }, name)))));
if (step.question_fmt) {
// question_fmt can be a plain string, or a function of the
// current values (used by steps whose question text depends
// on e.g. the chosen language) — refresh() keeps it in sync
// afterwards via the .wiktku-start-step-question class.
var questionText = typeof step.question_fmt === "function"
? step.question_fmt(getValues())
: step.question_fmt;
stepDiv.append($(mw.html.element("label", {
"class": "wiktku-start-step-question",
"for": "wiktku-start-" + step.id + "-field" }, questionText)));
if (step.question_br) stepDiv.append($("<br>"));
}
var input;
if (step.choices) {
input = $(mw.html.element("select", {
"class": "wiktku-start-step-field",
id: "wiktku-start-" + step.id + "-field" }));
input.attr("data-placeholder",
capitalize(step.name) + " hilbijêre ");
populateMenus(input, step.choices);
if (step.multiple) input.attr("multiple", true);
// initSelects() runs over the whole form once it is in the DOM.
stepDiv.append(input);
} else if (typeof(step.build) === "function") {
input = step.build(stepDiv);
} else {
input = $("<textarea></textarea>")
.attr("class", "wiktku-start-step-field")
.attr("id", "wiktku-start-" + step.id + "-field")
.attr("rows", step.rows || 2);
if (step.narrow) input.addClass("wiktku-start-narrow");
if (step.placeholder) {
input.attr("placeholder", typeof step.placeholder === "function" ? step.placeholder() : step.placeholder);
}
if (step.multiple) {
input.on("input", function (evt) {
refreshForTextField(evt.target, step);
});
var keyInput = buildKeyInput(step);
var list = $(step.ordered ? "<ol></ol>" : "<ul></ul>")
.append(step.modifiers
? makeModifierLi(input)
: $("<li></li>").append(keyInput).append(input));
stepDiv.append(list);
}
else stepDiv.append(input);
}
prepareInput(input, step);
stepDiv.hide();
// Section tabs (switch between POS sections) sit above the
// per-section fields, starting at "pos".
if (step.id === "pos") {
startForm.append(sectionTabsDiv);
}
// Step-group tabs sit just before the first grouped step (now
// "dfn" — pos/posparams/cinsiyet/lektur/tr/resim are ungrouped
// and render above the tab bar, same as bnrh/lang/pron).
if (step.id === "dfn") {
startForm.append(groupTabsDiv);
}
startForm.append(stepDiv);
});
// ── Section tab helpers ──────────────────────────────────────────────
// ── Add-section button — lives in the tab bar, disabled until pos chosen ──
var addSectionBtn = new OO.ui.ButtonWidget({
label: "+ Beş zêde bike",
disabled: true
});
addSectionBtn.on("click", function () {
saveCurrentSection();
sections.push({});
activeSection = sections.length - 1;
$.each(PER_SECTION_STEP_IDS, function (_, id) {
if (id === "dfn") {
var stepDiv = $("#wiktku-start-dfn");
stepDiv.find("ol.wiktku-dfn-list").remove();
steps.dfn.build(stepDiv);
return;
}
if (id === "etym") {
$("#wiktku-start-etym .wiktku-etym-wrap").remove();
steps.etym.build($("#wiktku-start-etym"));
return;
}
if (id === "cavkani") {
$("#wiktku-start-cavkani .wiktku-cavkani-wrap").remove();
steps.cavkani.build($("#wiktku-start-cavkani"));
return;
}
if (id === "posparams") {
var ppDiv = $("#wiktku-start-posparams");
ppDiv.find(".wiktku-posparams-wrap").remove();
return;
}
if (id === "resim") {
$("#wiktku-start-resim .wiktku-resim-wrap").remove();
return;
}
if (id === "trans") {
var transDiv = $("#wiktku-start-trans");
transDiv.find(".wiktku-trans-group").remove();
return;
}
if (id === "zarava") {
var zaravaDiv = $("#wiktku-start-zarava");
zaravaDiv.find(".wiktku-zarava-group").remove();
return;
}
if (id === "dunde") {
var dundeDiv = $("#wiktku-start-dunde");
dundeDiv.find("ul.wiktku-dunde-list").remove();
return;
}
var stepDiv = $("#wiktku-start-" + id);
stepDiv.find(".wiktku-start-step-field").val("");
stepDiv.find("select.wiktku-start-step-field").trigger("wiktku:refresh");
});
renderSectionTabs();
refresh();
});
/** Re-render the tab bar to reflect current sections[] and activeSection. */
function renderSectionTabs() {
// Detach (not remove) the button first: .empty() strips bound
// event data from any children left inside it, which would
// silently kill addSectionBtn's click handler on every re-render.
addSectionBtn.$element.detach();
sectionTabsDiv.empty();
var lang = getValues().lang || "";
if (!lang) {
sectionTabsDiv.hide();
return;
}
sectionTabsDiv.show();
$.each(sections, function (i) {
var posVal = sections[i].pos || "";
var tabLabel = posVal ? capitalize(posVal) : ("Beş " + (i + 1));
var tab = $("<span></span>")
.addClass("wiktku-section-tab")
.text(tabLabel)
.toggleClass("wiktku-tab-active", i === activeSection);
(function (idx) {
tab.on("click", function () {
if (idx === activeSection) return;
saveCurrentSection();
activeSection = idx;
restoreSection(sections[activeSection]);
refresh();
renderSectionTabs();
});
}(i));
sectionTabsDiv.append(tab);
});
// Enable "Beş zêde bike" only when the active section has a pos chosen.
var activePos = sections[activeSection] && sections[activeSection].pos
? sections[activeSection].pos
: getValues().pos;
addSectionBtn.setDisabled(!activePos);
sectionTabsDiv.append(addSectionBtn.$element);
}
renderSectionTabs();
/**
* Re-populates a dynamically-growing "multiple" field list (bnrh, je,
* tekildar, …) from a saved array of strings. Sets each value via
* .val() + a triggered "input" event rather than touching the DOM
* structure directly, so the normal refreshForTextField() growth
* logic adds exactly as many rows as needed — the same thing that
* happens when a person types into the last (empty) row.
*/
function restoreMultiField(id, values) {
var container = $("#wiktku-start-" + id);
$.each(values || [], function (i, v) {
var field = container.find(".wiktku-start-step-field").eq(i);
if (!field.length || !v) return;
field.val(v).trigger("input");
});
}
/**
* Restores a full cached draft: shared lang/pron/bnrh fields, then
* every section (via the same restoreSection()/refresh()/
* renderSectionTabs() sequence already used when switching tabs).
* @param cached {{lang: string, pron: string, bnrh: Array, sections: Array, activeSection: number}}
*/
function restoreFromCache(cached) {
if (cached.lang) {
$("#wiktku-start-lang-field").val(cached.lang);
$("#wiktku-start-lang-field").trigger("wiktku:refresh");
}
// Rebuild dependent steps (pos, pron wrap, etc.) now that lang is set.
refresh();
if (cached.pron !== undefined) {
$("#wiktku-start-pron .wiktku-pron-text").val(cached.pron);
}
if (cached.bnrh) {
restoreMultiField("bnrh", cached.bnrh);
}
sections = (cached.sections && cached.sections.length) ? cached.sections : [{}];
activeSection = (typeof cached.activeSection === "number" &&
cached.activeSection >= 0 && cached.activeSection < sections.length)
? cached.activeSection : 0;
restoreSection(sections[activeSection]);
refresh();
renderSectionTabs();
updateLastSavedIndicator(cached.savedAt || null);
formDirty = false;
wiktkuNotify("Danûstandina berê ya qeydkirî ji cache hate barkirin.",
{ type: "info", tag: "wiktku-cache-restore" });
}
// Update the active tab's label whenever pos changes.
startForm.on("change", "#wiktku-start-pos-field", function () {
renderSectionTabs();
// A new cureyê rêzimanî means any previously chosen cinsiyet/
// cureyê lêkerê no longer applies — clear both selections (and
// the shared hidden cinsiyet field, since rebuildTa()/syncHelpers()
// fall back to it) before wiping the textarea, so nothing stale
// gets carried over into the rebuilt template.
var ppDiv = $("#wiktku-start-posparams");
ppDiv.find(".wiktku-posparams-cinsiyet-sel").val("");
ppDiv.find(".wiktku-posparams-lektur-sel").prop("selectedIndex", 0);
$("#wiktku-start-cinsiyet-field").val("");
ppDiv.find(".wiktku-posparams-text").val("");
// refresh() runs steps.posparams.syncHelpers(), which toggles the
// param rows for the new pos and — since the textarea is now
// empty — calls rebuildTa() to repopulate it. Just clearing the
// textarea (as before) never triggered this, so the params
// section was left stale until some other field's change event
// happened to fire a refresh().
refresh();
});
// Show the tab bar as soon as a language is selected.
startForm.on("change", "#wiktku-start-lang-field", function () {
renderSectionTabs();
});
var footer = $("<div id='wiktku-start-footer'></div>");
spinner = $(mw.html.element("img", {
id: "wiktku-start-spinner",
src: "//upload.wikimedia.org/wikipedia/commons/d/de/Ajax-loader.gif",
alt: "Tê barkirin…",
title: "Tê barkirin…" }));
footer.append(spinner.hide());
continueBtn = new OO.ui.ButtonWidget({
id: "wiktku-unhide-editform",
label: "Bişîne",
flags: [ "primary", "progressive" ]
});
continueBtn.on("click", function () {
// Immediate feedback that the click registered
continueBtn.$element.addClass("wiktku-btn-flash");
setTimeout(function () {
continueBtn.$element.removeClass("wiktku-btn-flash");
}, 500);
wiktkuNotify("Tê şandin…", { type: "info", tag: "wiktku-submit" });
startForm.trigger("submit");
});
footer.append(continueBtn.$element);
// "Edîtora çavkaniyê veke" button — inline fallback for the portlet link
var sourceEditorBtn = new OO.ui.ButtonWidget({
label: "Edîtora çavkaniyê veke",
flags: [ "destructive" ],
});
sourceEditorBtn.on("click", function () {
destroy();
});
footer.append(sourceEditorBtn.$element);
// ── Cache save/clear buttons ─────────────────────────────────────────
// Manual, page-scoped save of the entire wizard (all sections, not
// just the active one) via [[MediaWiki:Gadget-StorageUtils.js]]'s
// ObjectStorage. Restoring happens silently on load at the end of
// build(), once the full language list is available.
//
// Saving also happens automatically (debounced while typing, plus a
// periodic fallback) — see "Autosave" below — since relying on the
// person to remember to click "Li cache qeyd bike" before an
// accidental tab close/reload defeats the point of having a cache
// at all.
function buildCacheSnapshot() {
return {
lang: getValues().lang || "",
pron: $("#wiktku-start-pron .wiktku-pron-text").val() || "",
// bnrh is shared (page-level), same as lang/pron above — not
// per-section, so it doesn't live in sections[].
bnrh: getValuesForStep("bnrh"),
sections: sections,
activeSection: activeSection,
savedAt: Date.now()
};
}
// ── Last-saved indicator ─────────────────────────────────────────────
var lastSavedEl = $("<span id='wiktku-last-saved'></span>");
function formatSavedTime(ts) {
try {
return new Date(ts).toLocaleTimeString(mw.config.get("wgUserLanguage"),
{ hour: "2-digit", minute: "2-digit" });
} catch (e) {
return new Date(ts).toLocaleTimeString();
}
}
function updateLastSavedIndicator(ts) {
lastSavedEl.text(ts ? ("Cache: qeydkirî di saet " + formatSavedTime(ts) + " de") : "");
}
// ── Dirty-state tracking + autosave ──────────────────────────────────
// formDirty mirrors "does the live form differ from what's in cache".
// Anything the person types/selects sets it; a successful save (auto
// or manual) clears it; destroy() (final submit, or switching to the
// source editor) also clears it since the wizard's job is over at
// that point either way. formDirty/autosaveDebounceTimer/autosaveInterval
// are declared in the outer scope (near activeGroup) — assigned here,
// not re-declared — so destroy() can reach them too.
var AUTOSAVE_DEBOUNCE_MS = 8000; // save shortly after typing pauses
var AUTOSAVE_INTERVAL_MS = 60000; // …and at least this often regardless
function performAutosave() {
if (!formDirty) return;
saveCurrentSection();
try {
formCache.Set(buildCacheSnapshot());
formDirty = false;
updateLastSavedIndicator(Date.now());
} catch (e) {
// Silent on autosave failure (storage blocked/full, etc.) — the
// manual button still surfaces a proper error if the person
// tries it directly, no need to interrupt typing with a toast.
}
}
function scheduleAutosave() {
formDirty = true;
if (autosaveDebounceTimer) clearTimeout(autosaveDebounceTimer);
autosaveDebounceTimer = setTimeout(performAutosave, AUTOSAVE_DEBOUNCE_MS);
}
startForm.on("input change", "input, textarea, select", scheduleAutosave);
autosaveInterval = setInterval(performAutosave, AUTOSAVE_INTERVAL_MS);
// Warn on accidental tab close/reload while there's anything unsaved.
$(window).on("beforeunload.wiktkuUnsaved", function (e) {
if (!formDirty) return undefined;
e.preventDefault();
e.returnValue = "";
return "";
});
var saveCacheBtn = new OO.ui.ButtonWidget({
label: "Li cache qeyd bike",
title: "Halê vê formê yê niha (ziman, bilêvkirin û hemû beş) li cache (localStorage) qeyd bike, da ku eger rûpel bêyî xwestin were girtin an ji nû ve were barkirin, tu karibî berdewam bikî."
});
saveCacheBtn.on("click", function () {
saveCurrentSection();
// ObjectStorage.Set() doesn't return a success/failure value, so
// the only way to detect a real failure (storage blocked, quota
// exceeded, JSON.stringify choking on something unexpected) is to
// catch it here rather than inspect a (nonexistent) return value.
try {
var snapshot = buildCacheSnapshot();
formCache.Set(snapshot);
formDirty = false;
updateLastSavedIndicator(snapshot.savedAt);
wiktkuNotify("Halê formê li cache hate qeydkirin.", { type: "success", tag: "wiktku-cache-save" });
} catch (e) {
mw.notify("Qeydkirina li cache bi ser neket.", { type: "error", tag: "wiktku-cache-save" });
}
});
footer.append(saveCacheBtn.$element);
var clearCacheBtn = new OO.ui.ButtonWidget({
label: "Cache paqij bike",
flags: [ "destructive" ],
title: "Datayên qeydkirî yên vê rûpelê ji cache jê bibe (forma ku niha xuya dike naguherîne)."
});
clearCacheBtn.on("click", function () {
formCache.Set({});
// The live form still has whatever the person typed — it's just no
// longer backed up anywhere, so treat this like a fresh unsaved edit.
formDirty = true;
updateLastSavedIndicator(null);
wiktkuNotify("Cache hate paqijkirin.", { type: "success", tag: "wiktku-cache-clear" });
});
footer.append(clearCacheBtn.$element);
footer.append(lastSavedEl);
// Icon-only settings button — opens the Tercîh dialog. Plain OOUI
// icon names depend on which icon-pack module happens to be loaded,
// so this uses the actual Codex "settings" (color-subtle) SVG from
// Commons directly, the same way the spinner above hotlinks its gif.
var prefsBtn = $("<button></button>", {
type: "button",
"class": "wiktku-prefs-btn",
title: "Tercîh — sazkariyên vê amûrê biguherîne"
});
prefsBtn.on("click", function (e) {
e.preventDefault();
wiktkuOpenPrefsDialog();
});
footer.append(prefsBtn);
startForm.append(footer);
// NOTE: deliberately NOT .hide() (display:none). WikiEditor/CodeMirror/
// the mobile editor's auto-grow logic measure #wpTextbox1's real
// dimensions during their own init, which happens while the wizard is
// up. A display:none ancestor reports 0 for offsetWidth/offsetHeight/
// scrollHeight, so those scripts bake in a near-zero height that never
// gets recalculated later — slideDown() in destroy() only animates the
// outer box, it doesn't re-trigger their sizing. Pushing #editform
// off-screen instead keeps it laid out (real width/height available to
// measure) without being visible, so the editbox opens at full size.
$("#editform").addClass("wiktku-offscreen").before(startForm);
// renderGroupTabs() looks up #wiktku-group-tabs via a live DOM
// selector, so it must run after startForm is actually in the
// document — calling it back in the build loop (while startForm was
// still detached) silently no-op'd and left the tab bar empty.
renderGroupTabs();
// One pass over the whole form: every select that hasn't already been
// initialised, and isn't opted out with .wiktku-plain-select, gets
// the searchable picker.
initSelects(startForm);
refresh();
// Give every draggable textarea a custom resize grip (works
// consistently on Safari/iOS, unlike the native corner grip — see
// the "Manual drag-to-resize handle" comment in styles.css), and
// keep applying it to textareas added later on (new sense blocks,
// quote-source fields, nimûne rows, …).
wiktkuInitManualResize(startForm);
new MutationObserver(function (mutations) {
mutations.forEach(function (mutation) {
$(mutation.addedNodes).each(function () {
if (this.nodeType !== 1) return;
wiktkuInitManualResize(this);
});
});
}).observe(startForm[0], { childList: true, subtree: true });
// Now that the full language list is loaded, silently restore any
// draft the editor previously saved for this page.
var cachedDraft = formCache.Get();
if (cachedDraft && cachedDraft.sections && cachedDraft.sections.length) {
restoreFromCache(cachedDraft);
}
}
mw.loader.using(["oojs-ui-core"], function () {
function wiktkuProceedWithData(wiktkuData) {
var d = wiktkuData || {};
// Populate metadata.
if (d.metadata) $.extend(metadata, d.metadata);
// Populate gender labels.
if (d.genderLabels) $.extend(GENDER_BASE_LABELS, d.genderLabels);
// Populate lang choices (pinned list).
if (d.langChoices) steps.lang.choices = choicesFromObject(d.langChoices, true);
// Populate langsByCode and merge full language list from d.ziman.
// d.ziman is a {code: name} object with all known languages.
$.each(steps.lang.choices, function (i, choice) {
if (choice.sortKey === undefined) choice.sortKey = choice.label;
langsByCode[choice.code] = choice;
});
if (d.ziman) {
var pinnedCodes = {};
$.each(steps.lang.choices, function (i, c) { pinnedCodes[c.code] = true; });
var extraChoices = [];
$.each(d.ziman, function (code, name) {
if (/-pro$/i.test(code)) return;
if (/ziman[eê]\s+destan/i.test(name)) return;
if (pinnedCodes[code]) return;
var choice = { code: code, label: name, sortKey: name };
extraChoices.push(choice);
langsByCode[code] = choice;
});
extraChoices.sort(function (a, b) {
return a.sortKey.localeCompare(b.sortKey, userLang);
});
steps.lang.choices = steps.lang.choices.concat(extraChoices);
}
// Keep the full merged list around for trans/dunde/zarava — those
// should still be able to reference any language even when the
// Tercîh panel restricts the main "ziman" step below — then, if
// the user set a restriction there, narrow steps.lang.choices
// itself to just those codes.
var wiktkuFullLangChoices = steps.lang.choices;
if (wiktkuPrefs.langCodes && wiktkuPrefs.langCodes.length) {
var wiktkuAllowedLangSet = {};
$.each(wiktkuPrefs.langCodes, function (i, code) { wiktkuAllowedLangSet[code] = true; });
var wiktkuRestrictedChoices = $.grep(wiktkuFullLangChoices, function (c) {
return !!wiktkuAllowedLangSet[c.code];
});
// Fall back to the full list instead of showing an empty
// dropdown if none of the saved codes matched anything
// (typo'd code, data.json changed since, …).
steps.lang.choices = wiktkuRestrictedChoices.length ? wiktkuRestrictedChoices : wiktkuFullLangChoices;
}
// Populate POS choices — also a plain {code: label} object in data.json.
if (d.posChoices) steps.pos.choices = choicesFromObject(d.posChoices, false);
// Populate template definitions for the dfn sense-block builder.
if (d.tplDefs) steps.dfn.tplDefs = d.tplDefs;
// Populate pos placeholder examples.
if (d.posExamples) steps.dfn.posExamples = d.posExamples;
// Populate citation template definitions for the quote widget.
if (d.jederDefs) steps.dfn.jederDefs = d.jederDefs;
// Populate pronunciation and etymology template insert lists.
if (d.pronTpls) {
steps.pron.pronTpls = d.pronTpls;
steps.pron.refreshTplSelect();
}
if (d.etymTpls) {
steps.etym.etymTpls = d.etymTpls;
steps.etym.refreshTplSelect();
}
// Sync trans/dunde/zarava keys with the full language list
// (not the possibly Tercîh-restricted steps.lang.choices).
steps.trans.keys = wiktkuFullLangChoices;
steps.dunde.keys = wiktkuFullLangChoices;
steps.zarava.keys = getZaravaKeys(wiktkuFullLangChoices);
build();
}
if (Testing) {
$.getJSON(mw.util.getUrl(WIKTKU_DATA_JSON_TITLE, { action: "raw", ctype: "application/json" }))
.done(function (data) {
wiktkuProceedWithData(data);
})
.fail(function (jqXHR, textStatus, errorThrown) {
mw.notify(
"data.json nehate barkirin ji " + WIKTKU_DATA_JSON_TITLE +
" (" + textStatus + "). Testing=true û navê rûpelê kontrol bike.",
{ type: "error" }
);
});
} else {
wiktkuProceedWithData(require("./start/data.json"));
}
});
});
//</nowiki>
r3lyy534dp21hxovfj3y34fdmn55sdo
MediaWiki:Gadget-start
8
1268757
6333669
5839503
2026-08-14T16:10:56Z
Wikihez
7344
6333669
wikitext
text/x-wiki
''[[MediaWiki:Gadget-start.js|start.js]]'' — amûreke ji bo çêkirina rûpelên nû û îlawekirina beşên nû bi tijîkirina formekê.
d5jv0py1jgosahvmsyrbia2cs8nxm0t
MediaWiki:Gadget-wikt.add-examples.js
8
1272598
6333632
6329704
2026-08-14T14:40:05Z
Bikarhêner
3719
6333632
javascript
text/javascript
// <nowiki>
// dependencies (declared in MediaWiki:Gadgets-definition): oojs, oojs-ui, ext.gadget.citoid-helper (wikt.citoid), ext.gadget.StorageUtils (ObjectStorage)
// Formats a string using {0}, {1}, ... placeholders.
if (!String.prototype.format) {
String.prototype.format = function(var_args) {
var args = arguments;
return this.replace(/{(\d+)}/g, function(match, number) {
return typeof args[number] !== "undefined" ? args[number] : match;
});
};
}
$(function() {
"use strict";
// Skip pages where this gadget shouldn't run.
if (
mw.config.get("wgPageName") !== "Wîkîferheng:ceribandin/nimûne" &&
mw.config.get("wgNamespaceNumber") !== 108 &&
mw.config.get("wgNamespaceNumber") !== 0 ||
mw.config.get("wgPageName") === "Destpêk" ||
mw.config.get("wgArticleId") === 0
) return;
console.log("Gadget-wikt.add-examples.js dest pê dike…");
var NAME = "[[Mediawiki:Gadget-wikt.add-examples|Nimûne zêde bike]]";
var VERSION = "1.7";
// Persists form drafts via MediaWiki:Gadget-StorageUtils.js (localStorage, falling back to a cookie) so unsaved text survives a failed submit.
var draftStorage = new ObjectStorage("add_examples_draft", 1);
// Citoid logic lives in MediaWiki:Gadget-citoid-helper.js; it's a registered gadget dependency, so wikt.citoid is already loaded by the time this file runs.
// "width" controls field layout below (see _setSourceType): "narrow" for short fields (year, pages, ...), "wide" for fields that always take their own row, unset for medium fields (two-ish per row).
var jederDefs = {
"jêder-kitêb": {
"label": "Kitêb",
"fields": [
{ "key": "nivîskar", "label": "Nivîskar" },
{ "key": "sernav", "label": "Sernav", "multiline": true, "width": "wide" },
{ "key": "terciman", "label": "Terciman" },
{ "key": "weşanxane", "label": "Weşanxane" },
{ "key": "cih", "label": "Cih" },
{ "key": "sal", "label": "Sal", "width": "narrow" },
{ "key": "sala weşandinê", "label": "Sala weşandinê", "width": "narrow" },
{ "key": "çap", "label": "Çap", "width": "narrow" },
{ "key": "rûpel", "label": "Rûpel", "width": "narrow" },
{ "key": "isbn", "label": "ISBN", "width": "narrow" },
{ "key": "url", "label": "URL", "width": "wide" }
]
},
"jêder-kovar": {
"label": "Kovar",
"fields": [
{ "key": "nivîskar", "label": "Nivîskar" },
{ "key": "nivîskar2", "label": "Nivîskar 2" },
{ "key": "sernav", "label": "Sernav", "multiline": true, "width": "wide" },
{ "key": "kovar", "label": "Kovar" },
{ "key": "terciman", "label": "Terciman" },
{ "key": "weşanxane", "label": "Weşanxane" },
{ "key": "cild", "label": "Cild", "width": "narrow" },
{ "key": "hejmar", "label": "Hejmar", "width": "narrow" },
{ "key": "sal", "label": "Sal", "width": "narrow" },
{ "key": "rûpel", "label": "Rûpel", "width": "narrow" },
{ "key": "url", "label": "URL", "width": "wide" }
]
},
"jêder-websîte": {
"label": "Websîte",
"fields": [
{ "key": "nivîskar", "label": "Nivîskar" },
{ "key": "sernav", "label": "Sernav", "multiline": true, "width": "wide" },
{ "key": "terciman", "label": "Terciman" },
{ "key": "websîte", "label": "Websîte" },
{ "key": "url", "label": "URL", "width": "wide" },
{ "key": "urlya-arşîvê", "label": "URLya Arşîvê", "width": "wide" },
{ "key": "sal", "label": "Sal", "width": "narrow" },
{ "key": "tarîx", "label": "Tarîx", "width": "narrow" }
]
}
};
var languages = {};
var sectionNames = {
"Navdêr": ["Navdêr"],
"Formeke navdêrê": ["Formeke navdêrê"],
"Lêker": ["Lêker"],
"Formeke lêkerê": ["Formeke lêkerê"],
"Rengdêr": ["Rengdêr"],
"Formeke rengdêrê": ["Formeke rengdêrê"],
"Hoker": ["Hoker"],
"Formeke hokerê": ["Formeke hokerê"],
"Serenav": ["Serenav"],
"Formeke serenavê": ["Formeke serenavê"],
"Artîkel": ["Artîkel"],
"Baneşan": ["Baneşan"],
"Bazinedaçek": ["Bazinedaçek"],
"Biwêj": ["Biwêj"],
"Cînav": ["Cînav"],
"Daçek": ["Daçek"],
"Girêdek": ["Girêdek"],
"Gotineke pêşiyan": ["Gotineke pêşiyan"],
"Hejmar": ["Hejmar"],
"Hevok": ["Hevok"],
"Îfade": ["Îfade"],
"Kurtenav": ["Kurtenav"],
"Navgir": ["Navgir"],
"Paşdaçek": ["Paşdaçek"],
"Paşgir": ["Paşgir"],
"Pêşdaçek": ["Pêşdaçek"],
"Pêşgir": ["Pêşgir"],
"Pirtik": ["Pirtik"],
"Reh": ["Reh"],
"Sembol": ["Sembol"],
"Tîp": ["Tîp"]
};
// Template names treated as "real examples" (an allow-list, not the old deny-list) so annotation templates like synonyms/antonyms/alt-forms aren't mistaken for examples.
var exampleTemplateNames = ["jêder", "nimûne"].concat(Object.keys(jederDefs));
// Returns the template name starting a "#:"/"#*" line (e.g. "jêder" from "#* {{jêder|ku|...}}"), or null if the line doesn't start with a template.
function getLineTemplateName(line) {
var m = /^#[:*]\s*\{\{\s*([^|}]+)/.exec(line);
return m ? m[1].trim() : null;
}
// Returns the index of the line where a (possibly multi-line) template block starting at startIndex closes its {{ }} braces, so multi-line templates are treated as one block.
function findBlockEnd(lines, startIndex) {
var depth = 0;
var i = startIndex;
for (; i < lines.length; i++) {
var opens = (lines[i].match(/\{\{/g) || []).length;
var closes = (lines[i].match(/\}\}/g) || []).length;
depth += opens - closes;
if (depth <= 0) {
break;
}
}
return i;
}
// Ported from start.js: converts literal line breaks typed/pasted into the example/translation/transcription boxes into wikitext <br> tags, since a raw newline would break the single-line "#*" wikitext structure.
function nlToBr(text) {
return text ? text.replace(/\r\n|\r|\n/g, "<br>") : text;
}
function escapeHtmlForBackdrop(str) {
return String(str)
.replace(/&/g, "&")
.replace(/</g, "<")
.replace(/>/g, ">");
}
// Mirrors a textarea's text with a small marker after each line that's followed by an actual typed/pasted linebreak, rendered into a transparent backdrop behind the textarea (see ensureLinebreakBackdrop()).
function buildLinebreakBackdropHtml(text) {
var lines = text.split(/\r\n|\r|\n/);
return $.map(lines, function(line, i) {
var isLast = i === lines.length - 1;
return escapeHtmlForBackdrop(line) +
(isLast ? "" : "<mark class='add-example-linebreak-mark'>↵</mark>\n");
}).join("");
}
// Copies the metrics that affect where text wraps/lands (font, line height, padding, border) from the real textarea onto its backdrop via computed style, since the backdrop is a plain <div>, not a themed OOUI input.
function syncLinebreakBackdropMetrics(textarea, backdrop) {
var cs = window.getComputedStyle(textarea[0]);
backdrop.css({
"box-sizing": cs.boxSizing,
"padding-top": cs.paddingTop,
"padding-right": cs.paddingRight,
"padding-bottom": cs.paddingBottom,
"padding-left": cs.paddingLeft,
"border-width": cs.borderWidth,
"border-style": "solid",
"font-family": cs.fontFamily,
"font-size": cs.fontSize,
"font-weight": cs.fontWeight,
"line-height": cs.lineHeight,
"letter-spacing": cs.letterSpacing
});
}
// Lazily inserts the transparent backdrop layer used to mark linebreaks, as a sibling of the textarea inside its existing OOUI input wrapper (which OOUI already positions relatively for icon overlays), rather than start.js's approach of wrapping the textarea in a new div — that would risk disturbing OOUI's own layout of the input. Safe to call more than once; the backdrop is cached.
function ensureLinebreakBackdrop(textarea) {
var existing = textarea.data("addExampleLinebreakBackdrop");
if (existing) {
return existing;
}
var $parent = textarea.parent();
if ($parent.css("position") === "static") {
$parent.css("position", "relative");
}
var backdrop = $("<div aria-hidden='true'></div>").addClass("add-example-linebreak-backdrop");
textarea.before(backdrop);
textarea.data("addExampleLinebreakBackdrop", backdrop);
textarea.on("scroll.addExampleLinebreak", function() {
backdrop.scrollTop(textarea.scrollTop()).scrollLeft(textarea.scrollLeft());
});
return backdrop;
}
// Flags a textarea (via CSS class, for the border tint + tooltip) while it contains a typed/pasted linebreak, so the user notices before it's silently turned into <br> on submit; marks only the exact point of the break via the mirrored backdrop.
function highlightLinebreak(el) {
var textarea = $(el);
var text = textarea.val();
var hasBreak = /\r|\n/.test(text);
textarea
.toggleClass("add-example-has-linebreak", hasBreak)
.attr("title", hasBreak ? "Xeta nû dê wek <br> bê nivîsandin" : "");
if (!hasBreak) {
var cached = textarea.data("addExampleLinebreakBackdrop");
if (cached) {
cached.hide();
}
textarea.removeClass("add-example-has-linebreak-source");
return;
}
var backdrop = ensureLinebreakBackdrop(textarea);
textarea.addClass("add-example-has-linebreak-source");
syncLinebreakBackdropMetrics(textarea, backdrop);
backdrop.html(buildLinebreakBackdropHtml(text)).show();
backdrop.scrollTop(textarea.scrollTop()).scrollLeft(textarea.scrollLeft());
}
// Wires linebreak detection onto an OOUI multiline widget, matching start.js's scope: only the quote/example text and its translation/transcription, not bibliographic fields. Uses OOUI's own "change" event rather than the raw <textarea> "input" event start.js listens to, since our fields can also be set programmatically (Clear button, draft restore) via setValue(), which doesn't fire a native DOM input event.
function watchForLinebreaks(widget) {
widget.on("change", function() {
highlightLinebreak(widget.$input[0]);
});
}
// Get names of all defined languages
var api = new mw.Api();
api.get({
action: "query",
format: "json",
titles: "MediaWiki:Gadget-translation editor.js/ziman.json",
prop: "revisions",
rvprop: "content",
rvslots: "main",
}).then(function(data) {
for (var pageID in data.query.pages) {
if (data.query.pages.hasOwnProperty(pageID)) {
// noinspection JSUnresolvedVariable
languages = JSON.parse(data.query.pages[pageID].revisions[0].slots.main["*"]);
break;
}
}
});
// .example/.benimune = old Şablon:jêder hidden marker; .h-usage-example/.h-quotation = Modul:usex/Modul:quote containers used directly by Şablon:nimûne and jêder-* templates now that the old marker is gone.
$("ul > li > .example, ul > li > .benimune, ul > li > .h-usage-example, ul > li > .h-quotation").each(function() {
var $element = $(this);
var $item = $element.parent();
if (!$item.next().length) {
// Get example’s language
// bdi[lang] = old hidden marker; .e-example[lang]/.e-quotation[lang] = Modul:usex/Modul:quote already put lang on the visible span.
var language = $item.find(".e-example[lang], .e-quotation[lang], bdi[lang]")[0].lang;
if (language === "ku-Latn") {
language = "ku";
}
console.log('Language:', language);
// Get section and indices of associated definition
var definitionLevel = [];
var $definitionItem = $item.parent().parent();
var $topItem;
do {
// Skip MediaWiki's empty <li class="mw-empty-elt"> placeholders so indices match the real "#" lines in wikitext (see submit()).
definitionLevel.splice(0, 0, $definitionItem.prevAll("li:not(.mw-empty-elt)").length);
$topItem = $definitionItem;
$definitionItem = $definitionItem.parent().parent();
} while ($definitionItem.prop("tagName") === "LI");
var $section = $($topItem.parent().prevAll(".mw-heading3, h3").get(0));
if ($section.length) {
definitionLevel.splice(0, 0, $section.find("h3").attr("id"));
} else {
console.warn("Gadget-wikt.add-examples: Section heading not found");
// TODO: why does this happen? mw.notify("Beş nehat dîtin. Jkx li WF:Dîwanê vê problemê ragihînin!");
return;
}
// Remove default edit link if present
var $defaultEditLink = $item.find("span.example > span.stubedit");
if ($defaultEditLink.length) {
$defaultEditLink.remove();
}
// Add a nice button to open the form
var $formItem = $("<li>");
var $button = $("<a href='#'>Nimûneyeke bikaranînê lê zêde bike</a>");
$button.css("color", "var( --color-subtle, #777777 )");
$button.on("click", function() {
if (!$button.form) {
$formItem.append(new Form($item, $button, language, definitionLevel).$element);
console.log("$item", $item);
console.log("$button", $button);
console.log("language", language);
console.log("definitionLevel", definitionLevel);
}
$button.form.setVisible(true);
return false;
});
$item.after($formItem.append($button));
}
});
// Constructor for the edit form; lastExample/button/language/definitionLevel identify where the form attaches and what it edits.
function Form($lastExample, $button, language, definitionLevel) {
var self = this;
this._language = language;
this._definitionLevel = definitionLevel;
this._$lastExample = $lastExample;
this._$button = $button;
this._$button.form = this;
this._currentJederKey = "";
this._jederFieldWidgets = {};
this._textInput = new OO.ui.MultilineTextInputWidget();
var textInputLayout = new OO.ui.FieldLayout(this._textInput, {
label: "Metna nimûneyê",
align: "top",
});
this._textInput.on("change", function(value) {
self._applyButton.setDisabled(!value);
});
watchForLinebreaks(this._textInput);
// Source type dropdown: free text, a jêder-* template, or "citoid" (a pseudo key, not in jederDefs) meaning "not yet detected" — the default, switched automatically once a Citoid fetch succeeds (see _fillFromCitoid).
var sourceTypeMenuItems = [
new OO.ui.MenuOptionWidget({ data: "citoid", label: "Bi Citoidê otomatîk zêde bike" }),
new OO.ui.MenuOptionWidget({ data: "", label: "Bi destê xwe binivîsim" }),
];
for (var jederKey in jederDefs) {
if (jederDefs.hasOwnProperty(jederKey)) {
sourceTypeMenuItems.push(new OO.ui.MenuOptionWidget({
data: jederKey,
label: jederDefs[jederKey].label,
}));
}
}
this._sourceTypeDropdown = new OO.ui.DropdownWidget({
menu: { items: sourceTypeMenuItems },
label: "Bi Citoidê otomatîk zêde bike",
});
var sourceTypeLayout = new OO.ui.FieldLayout(this._sourceTypeDropdown, {
label: "Şablona çavkaniyê",
align: "top",
});
this._sourceTypeDropdown.getMenu().on("choose", function(menuOption) {
self._setSourceType(menuOption.getData());
});
this._sourceInput = new OO.ui.MultilineTextInputWidget();
this._sourceInputLayout = new OO.ui.FieldLayout(this._sourceInput, {
label: "Çavkaniya nimûneyê",
align: "top",
});
// Always visible in every mode (free text included) — submit() reads this unconditionally as the "url=" parameter, and it's also the query field the Citoid button below fetches from.
this._sourceURLInput = new OO.ui.TextInputWidget({
icon: "link",
placeholder: "https://… an jî DOI/ISBN",
});
this._sourceURLInputLayout = new OO.ui.FieldLayout(this._sourceURLInput, {
label: "Lînk, DOI an ISBNya çavkaniyê",
align: "top",
help: "Li qutiyê URL, DOI an ISBN binivîse û pê lê bike butona 'Bi otomatîk tijî bike' da ku otomatîk çavkanî were dagirtin.",
helpInline: true,
});
// Matches the wording just constructed above, so the initial _setSourceType("citoid") call at the end of this constructor doesn't needlessly recreate an identical layout.
this._urlFieldIsFreeTextWording = false;
this._citoidButton = new OO.ui.ButtonWidget({
label: "Bi otomatîk tijî bike",
icon: "download",
flags: ["progressive"],
title: "Li gorî URL, DOI an ISBNya jorîn, agahiyan ji Citoid tîne û qadên şablona jêder-* otomatîk tijî dike.",
classes: ["add-example-citoid-fetch"],
});
this._citoidButton.on("click", this._fillFromCitoid.bind(this));
// Clears the URL field and any filled jêder-* fields without touching the example text/translation.
this._citoidClearButton = new OO.ui.ButtonWidget({
label: "Vala bike",
icon: "trash",
framed: false,
title: "Lînkê û qadên jêder-* yên vê beşê vala bike",
classes: ["add-example-citoid-clear"],
});
this._citoidClearButton.on("click", function() {
self._sourceURLInput.setValue("");
Object.keys(self._jederFieldWidgets).forEach(function(key) {
self._jederFieldWidgets[key].setValue("");
});
});
var citoidButtonsLayout = new OO.ui.HorizontalLayout({
classes: ["add-example-citoid-buttons"],
items: [this._citoidButton, this._citoidClearButton],
});
// Fieldset that holds the fields for whichever jêder-* template is selected.
this._jederFieldsFieldset = new OO.ui.FieldsetLayout({
classes: ["add-example-jeder-fields"],
});
// Citoid button + jêder-* fields, framed as one "template" step — unlike the URL field above, this box only makes sense once a jêder-* template is active (there's nothing here for Citoid to fill in free-text mode, since it has no bibliographic fields to populate), so it's hidden for free text (see _setSourceType).
this._citoidBox = new OO.ui.PanelLayout({
expanded: false,
framed: true,
padded: true,
classes: ["add-example-citoid-box"],
content: [
new OO.ui.LabelWidget({
label: "Ji Citoid an bi destan tijî bike:",
classes: ["add-example-citoid-box-title"],
}),
citoidButtonsLayout,
this._jederFieldsFieldset,
],
});
this._translationInput = new OO.ui.MultilineTextInputWidget();
var translationInputLayout = new OO.ui.FieldLayout(this._translationInput, {
label: "Tercimeya kurmancî ya nimûneyê",
align: "top",
});
watchForLinebreaks(this._translationInput);
this._transcriptionInput = new OO.ui.MultilineTextInputWidget();
var transcriptionInputLayout = new OO.ui.FieldLayout(this._transcriptionInput, {
label: "Transkrîpsiyona nimûneyê",
align: "top",
help: "Tenê lê zêde bike eger metna di nimûneyê de bi alfabeya latînî nehatibe nivîsandin.",
helpInline: true,
});
watchForLinebreaks(this._transcriptionInput);
this._applyButton = new OO.ui.ButtonWidget({
label: "Biweşîne",
icon: "check",
title: "Nimûneyê ji bo vê tarîfê nimûneyê lê zêde bike",
flags: ["progressive", "primary"],
disabled: true,
});
this._applyButton.on("click", this.submit.bind(this));
this._cancelButton = new OO.ui.ButtonWidget({
label: "Betal bike",
icon: "close",
title: "Formê bigire",
flags: ["destructive"],
});
this._cancelButton.on("click", function() {
self.setVisible(false);
});
this._clearButton = new OO.ui.ButtonWidget({
label: "Paqij bike",
icon: "trash",
title: "Hemû qadan vala bike û pêşnûyisên hilanîbûyî jê bibe",
});
this._clearButton.on("click", function() {
self.clear();
self._clearDraft();
});
// Native CSS spinner (see Gadget-wikt.add-examples.css) instead of an external Commons GIF, so there's no network request and it matches dark/light mode.
this._loadingImage = new OO.ui.Widget({
classes: ["add-example-loading"],
});
this._loadingImage.$element.append($('<span class="add-example-spinner" aria-hidden="true"></span>'));
this._loadingImage.toggle(false);
var content = [textInputLayout, sourceTypeLayout, this._sourceInputLayout, this._sourceURLInputLayout, this._citoidBox];
if (language !== "ku") {
content.push(translationInputLayout, transcriptionInputLayout);
}
// Saved on the instance (not just a local var) so _setSourceType() can swap the URL field's label/help wording in and out of it when switching to/from free text.
this._fieldsLayout = new OO.ui.FieldsetLayout({
label: "Nimûneyeke bi " + (languages[this._language] || "zimanekî nenas") + " lê zêde dikî.",
items: content,
classes: ["add-example-fieldset"],
});
var buttonsLayout = new OO.ui.HorizontalLayout({
classes: ["add-example-main-buttons"],
items: [
this._applyButton,
this._cancelButton,
this._clearButton,
this._loadingImage,
]
});
this._frame = new OO.ui.PanelLayout({
id: "add-example-definition-{0}-form".format(this._definitionLevel.join("-")),
classes: ["add-example-form"],
expanded: false,
content: [
this._fieldsLayout,
buttonsLayout,
],
});
// Default to "citoid" mode; selectItemByData() doesn't fire "choose" (that only fires for interactive selection), so _setSourceType() must also be called explicitly to set up the initial UI.
this._sourceTypeDropdown.getMenu().selectItemByData("citoid");
this._setSourceType("citoid");
}
Form.prototype = {
// Returns the jQuery object for this form.
get $element() {
return this._frame.$element;
},
// Switches the source section between free text, Citoid auto-detect (no template chosen yet), and a specific jêder-* template, rebuilding the field list to match. The URL field itself is always visible in every mode (see the constructor); only the free-text textarea, the Citoid button box, and the manual jêder-* fields toggle here.
_setSourceType: function(jederKey) {
var self = this;
this._currentJederKey = jederKey;
this._jederFieldsFieldset.clearItems();
this._jederFieldWidgets = {};
var isRealJederKey = jederKey && jederDefs[jederKey];
if (isRealJederKey) {
var def = jederDefs[jederKey];
var items = [];
def.fields.forEach(function(field) {
var widget = field.multiline
? new OO.ui.MultilineTextInputWidget({ rows: 2, autosize: false })
: new OO.ui.TextInputWidget();
self._jederFieldWidgets[field.key] = widget;
var widthClass = field.width === "narrow" ? "add-example-field-narrow"
: field.width === "wide" ? "add-example-field-wide"
: "add-example-field-medium";
items.push(new OO.ui.FieldLayout(widget, {
label: field.label,
align: "top",
classes: [widthClass],
}));
});
this._jederFieldsFieldset.addItems(items);
}
this._jederFieldsFieldset.toggle(!!isRealJederKey);
// Free text textarea only for "" (free text); hidden for "citoid" and any real jêder-* key.
this._sourceInputLayout.toggle(jederKey === "");
// Citoid button box: hidden for free text (nothing there for it to fill in), shown for "citoid" auto-detect and any real jêder-* key.
this._citoidBox.toggle(jederKey !== "");
// URL field wording: plain "attach a link" phrasing for free text (no Citoid box visible there to explain), Citoid-oriented phrasing otherwise. Only recreated when actually crossing that boundary, not on every dropdown change (e.g. switching between two jêder-* types keeps the same wording, no need to touch the DOM).
var isFreeText = jederKey === "";
if (this._urlFieldIsFreeTextWording !== isFreeText) {
this._urlFieldIsFreeTextWording = isFreeText;
this._sourceURLInput.setPlaceholder(isFreeText ? "URLyeke wekî https://…" : "URLyek wekî https://… an jî DOI/ISBN");
var index = this._fieldsLayout.items.indexOf(this._sourceURLInputLayout);
this._fieldsLayout.removeItems([this._sourceURLInputLayout]);
this._sourceURLInputLayout = new OO.ui.FieldLayout(this._sourceURLInput, isFreeText ? {
label: "Adresa webê ya nimûneyê",
align: "top",
help: "Tenê binivîse eger lînk jixwe di referansa çavkaniyê de tinebe.",
helpInline: true,
} : {
label: "Lînk, DOI an ISBNya çavkaniyê",
align: "top",
help: "Ev dibe lînka çavkaniyê (url=). Ji bo şablonên jêder-*, dikare bi Citoid an bi destan jî bên dagirtin.",
helpInline: true,
});
this._fieldsLayout.addItems([this._sourceURLInputLayout], index);
}
},
// Fetches data from MediaWiki:Gadget-citoid-helper.js, picks the matching jêder-* template, and fills its empty fields; citoid-helper is a registered gadget dependency so it's already loaded here.
_fillFromCitoid: function() {
var self = this;
var query = this._sourceURLInput.getValue().trim();
if (!query) {
mw.notify("Ji kerema xwe re pêşî URL, DOI an ISBNyekê binivîse.");
return;
}
this._citoidButton.setDisabled(true);
this._loadingImage.toggle(true);
wikt.citoid.fetchJederFields(query).then(function(result) {
// Only let Citoid pick the template type when nothing's been chosen yet (the "citoid" auto-detect default). If the user already selected a specific jêder-* type (or free text), that choice is respected — e.g. picking "Websîte" and fetching a tweet must not silently switch to "Kovar" just because Citoid guessed differently.
var wasAutoDetect = self._currentJederKey === "citoid";
if (wasAutoDetect) {
var menu = self._sourceTypeDropdown.getMenu();
var item = menu.findItemFromData(result.jederKey);
if (item) {
menu.chooseItem(item); // this calls _setSourceType(jederKey) automatically
}
}
var targetJederKey = self._currentJederKey;
// Fields Citoid returned were shaped for its own detected type; if the active template differs (the case above where the user's choice was kept), re-derive fields for that template instead so e.g. "Websîte" still gets its own website-shaped fields (websîte, tarîx, ...) rather than leftover kovar-shaped ones.
var fields = targetJederKey === result.jederKey ? result.fields : wikt.citoid.dataToJederFields(targetJederKey, result.raw);
Object.keys(fields).forEach(function(key) {
var widget = self._jederFieldWidgets[key];
if (widget && !widget.getValue()) {
widget.setValue(fields[key]);
}
});
mw.notify("Agahî ji Citoid hatin barkirin.");
}, function(errorMsg) {
mw.notify(typeof errorMsg === "string" ? errorMsg : "Nekarî agahiyan ji Citoid bistîne. Kontrol bike ka URL/DOI/ISBN rast e.");
}).always(function() {
self._citoidButton.setDisabled(false);
self._loadingImage.toggle(false);
});
},
// Toggles the visibility of this form and restores any saved draft when shown.
setVisible: function(visible) {
this._$button.toggle(!visible);
this._frame.toggle(visible);
if (visible) {
var draft = draftStorage.Get() || {};
if (!this._textInput.getValue() && draft.text) {
this._textInput.setValue(draft.text);
}
if (!this._sourceInput.getValue() && draft.source) {
this._sourceInput.setValue(draft.source);
}
if (!this._sourceURLInput.getValue() && draft.sourceURL) {
this._sourceURLInput.setValue(draft.sourceURL);
}
if (!this._translationInput.getValue() && draft.translation) {
this._translationInput.setValue(draft.translation);
}
if (!this._transcriptionInput.getValue() && draft.transcription) {
this._transcriptionInput.setValue(draft.transcription);
}
}
},
// Removes any saved draft (localStorage/cookie via MediaWiki:Gadget-StorageUtils.js) so it can't resurface on other pages.
_clearDraft: function() {
draftStorage.Set({});
},
// Clears all fields in this form.
clear: function() {
this._textInput.setValue("");
this._sourceInput.setValue("");
this._sourceURLInput.setValue("");
this._translationInput.setValue("");
this._transcriptionInput.setValue("");
this._sourceTypeDropdown.getMenu().selectItemByData("citoid");
this._setSourceType("citoid");
},
// Generates and submits the wikicode, then inserts the resulting HTML element if no errors occurred.
submit: function() {
var self = this;
self._textInput.setDisabled(true);
self._sourceInput.setDisabled(true);
self._sourceURLInput.setDisabled(true);
self._translationInput.setDisabled(true);
self._transcriptionInput.setDisabled(true);
self._sourceTypeDropdown.setDisabled(true);
Object.keys(self._jederFieldWidgets).forEach(function(key) {
self._jederFieldWidgets[key].setDisabled(true);
});
// self._disableTranslationChk.setDisabled(true);
this._applyButton.setDisabled(true);
this._clearButton.setDisabled(true);
this._loadingImage.toggle(true);
var source = this._sourceInput.getValue().trim();
var sourceURL = this._sourceURLInput.getValue().trim();
var text = this._textInput.getValue().trim();
// If a jêder-* template is selected, collect its filled-in fields.
var jederParams = [];
if (this._currentJederKey && jederDefs[this._currentJederKey]) {
jederDefs[this._currentJederKey].fields.forEach(function(field) {
var widget = self._jederFieldWidgets[field.key];
var value = widget ? widget.getValue().trim() : "";
if (value) {
jederParams.push(field.key + "=" + value);
}
});
}
var usingJederTemplate = this._currentJederKey && jederParams.length > 0;
var minakAnNa, sablon;
if (usingJederTemplate) {
// The jêder-* template itself is used as the template, not as the "2=" content.
minakAnNa = "*";
sablon = this._currentJederKey;
} else if (source || sourceURL) {
minakAnNa = "*";
sablon = "jêder";
} else {
minakAnNa = ":";
sablon = "nimûne";
}
var listMarker = "".padStart(this._definitionLevel.length - 1, "#") + minakAnNa;
var title = mw.config.get('wgTitle');
// jêder-* template, jêder, or nimûne
var code = listMarker + " {{" + sablon;
// 1= language code
code += "|" + this._language;
if (usingJederTemplate) {
// Fields of the selected jêder-* template, passed straight through as its parameters.
jederParams.forEach(function(param) {
code += "|" + param;
});
} else {
// 2= source (free text)
if (source) {
code += "|2=" + source;
}
if (sourceURL) {
code += "|url=" + sourceURL;
}
}
// jêgirtin/nimûne (quotation text)
code += "|";
if (sablon !== "nimûne") {
code += "jêgirtin=";
}
// bold the page title, then convert any literal linebreak in the example text to <br> (see nlToBr) so it can't break the single-line "#*" wikitext
code += nlToBr(text.replace(new RegExp("(" + title + "([^( |,|;|?|.|!)]+)?)", "ig"), "'''$1'''"));
if (this._language !== "ku") {
var translation = nlToBr(this._translationInput.getValue().trim());
var transcription = nlToBr(this._transcriptionInput.getValue().trim());
if (translation) {
code += "|tercime=" + translation;
}
if (transcription) {
code += "|tr=" + transcription;
}
}
code += "}}";
// var escapedLangCode = languages[this._language].charAt(0).toUpperCase() + languages[this._language].slice(1);
// console.log("escapedLangCode: ", escapedLangCode);
var sectionIDPattern = new RegExp("^([\\wîêçş_]+?)_?(\\d+)?_?(\\d+)?$");
console.log("this._definitionLevel[0]: ", this._definitionLevel[0]);
var matchSectionID = sectionIDPattern.exec(this._definitionLevel[0]);
//var isInflection;
var sectionType = matchSectionID[1].replace(/_/, ' ');
sectionType = sectionType.replace(/_\d+$/, '');
console.log("sectionType: ", sectionType);
var sectionNum = matchSectionID[2] ? parseInt(matchSectionID[2]) : "";
console.log("Section Number:", sectionNum);
// Insert new example into page’s code
api.get({
action: "query",
titles: mw.config.get("wgPageName"),
prop: "revisions",
rvprop: "content",
rvslots: "main",
}).then(function(data) {
var pageContent;
for (var pageID in data.query.pages) {
if (data.query.pages.hasOwnProperty(pageID)) {
// noinspection JSUnresolvedVariable
pageContent = data.query.pages[pageID].revisions[0].slots.main["*"];
break;
}
}
// Look for correct language section
var langSectionRegex = new RegExp("==[ ]*{{ziman\\|{0}}}[ ]*==".format(self._language));
var langSectionIndex = pageContent.search(langSectionRegex);
console.log("langSectionIndex:", langSectionIndex);
if (langSectionIndex === -1) {
console.log("langSectionIndex === -1");
error("Xeletiyeke bi koda zimanî heye. Koda zimanî:" + self._language);
return;
}
// Look for correct word type section
var lines = pageContent.slice(langSectionIndex).split("\n");
var sectionNamesRegex = Object.keys(sectionNames).join('|');
var sectionRegex = new RegExp('^===[ ]*(' + sectionNamesRegex + ')\\s*(\\d+)?');
var targetLineIndex;
for (targetLineIndex = 0; targetLineIndex < lines.length; targetLineIndex++) {
var line = lines[targetLineIndex];
console.log("line:", line);
var matchSection = sectionRegex.exec(line);
if (matchSection) {
console.log("matchSection:", matchSection[1]);
// Extract section name and number from the matched result
var matchedSectionName = matchSection[1];
var matchedSectionNum = matchSection[2]; // It could be undefined
if (!sectionNames[sectionType]) {
error('Navê beşê xelet e. Di beşên "Ji wêjêyê" û "Ji wêjêya klasîk" ev amûr nayê bikaranîn.');
return; // Exit the function
}
// Check if the matched section name is in the expected list
if (sectionNames[sectionType].includes(matchedSectionName)) {
// Check if the line includes the section number (if present)
if (!matchedSectionNum || line.includes(" " + matchedSectionNum)) {
// Add more conditions if needed for inflection, e.g., (isInflection === line.includes("Formeke "))
break;
}
}
}
}
if (targetLineIndex === lines.length) {
console.log("targetLineIndex === lines.length");
error("Di navê beşê de xeletî heye. Îhtimalen bi vî navê beşê çend heb hene.");
return;
}
// Look for correct definition
var defIndex = -1;
var level = 1;
for (; targetLineIndex < lines.length; targetLineIndex++) {
var m = /^(#+)[^*#:]/.exec(lines[targetLineIndex]);
console.log("lines[targetLineIndex]:", lines[targetLineIndex]);
if (m) {
console.log("m:", m);
if (level === m[1].length) {
console.log("m[1]:", m[1]);
defIndex++;
console.log("defIndex:", defIndex);
if (self._definitionLevel[level] === defIndex) {
console.log("self._definitionLevel[level] === defIndex");
console.log("self._definitionLevel[level]", self._definitionLevel[level]);
if (level === self._definitionLevel.length - 1) {
console.log("level:", level);
break;
} else {
level++;
defIndex = -1;
}
}
}
}
}
// Find where to insert within this definition's "#:"/"#*" block: walk lines after the definition (findBlockEnd() tracks multi-line templates), and use exampleTemplateNames to tell real examples from annotations (synonyms, antonyms, alt-forms, etc.) rather than hard-blocking specific names.
var insertionFound = false;
var lastRelevantBlockEnd = -1;
var isJederFamily = (sablon === "jêder" || Object.prototype.hasOwnProperty.call(jederDefs, sablon));
var scanIndex = targetLineIndex + 1;
var emptyTemplate = false;
for (; scanIndex < lines.length; scanIndex++) {
var scanLine = lines[scanIndex];
if (!scanLine.startsWith("#:") && !scanLine.startsWith("#*")) {
// Left this definition's "#:"/"#*" block (e.g. a new definition or section starts).
break;
}
var blockEnd = findBlockEnd(lines, scanIndex);
var templateName = getLineTemplateName(scanLine);
var isExampleLine = templateName !== null &&
exampleTemplateNames.indexOf(templateName) !== -1;
if (isJederFamily) {
// jêder-family examples go after all "#:"/"#*" lines of this definition (both real examples and annotations).
lastRelevantBlockEnd = blockEnd;
insertionFound = true;
} else if (sablon === "nimûne") {
// "nimûne" examples go before any "#*" line, but after "#:" lines.
if (scanLine.startsWith("#*")) {
break;
}
lastRelevantBlockEnd = blockEnd;
insertionFound = true;
}
scanIndex = blockEnd; // Skip past the whole (possibly multi-line) block
}
var insertAt = lastRelevantBlockEnd >= 0 ? lastRelevantBlockEnd + 1 : scanIndex;
if (lastRelevantBlockEnd >= 0) {
emptyTemplate = /#+\*\s*{{[ ]*b?ê?(nimûne|mînak|jêgirtin)\??\s*\|\s*\|?\s*[^|}]+}}/.test(lines[lastRelevantBlockEnd]);
}
if (emptyTemplate) {
console.log("empty Template found", sablon);
// Replace empty template with new example
lines.splice(lastRelevantBlockEnd, 1, code);
} else {
console.log("empty Template not found", sablon);
// Insert the new example (right after the definition if it had no existing "#:"/"#*" lines yet, or after the relevant block otherwise).
lines.splice(insertAt, 0, code);
}
// Submit new page content
api.edit(mw.config.get("wgPageName"), function(_) {
return {
text: pageContent.slice(0, langSectionIndex) + lines.join("\n"),
summary: "+nimûneya bikaranînê bi amûra « {0} » (v{1}).".format(NAME, VERSION),
};
}).then(function() {
api.parse(code).done(function(data) {
var $renderedExample = $(data).find("ul > li").html();
var $item;
// Insert rendered example into page
if (emptyTemplate) {
self._$lastExample.html($renderedExample);
$item = self._$lastExample;
} else {
self._$lastExample.after($item = $("<li>").append($renderedExample));
}
$item.css("background-color", "lightgreen");
setTimeout(function() {
$item.css("background-color", "inherit");
}, 1000);
self._$lastExample = $item;
});
self.setVisible(false);
self.clear();
self._clearDraft();
reenable();
});
});
function error(errorMessage) {
mw.notify(errorMessage || "Nimûne nehat weşandin, îhtimalen rûpel hate guhartin. Ji kerema xwe re rûpelê dîsa bar bike û dîsa biceribîne.");
draftStorage.Set({
text: self._textInput.getValue(),
source: self._sourceInput.getValue(),
sourceURL: self._sourceURLInput.getValue(),
translation: self._translationInput.getValue(),
transcription: self._transcriptionInput.getValue(),
});
reenable();
}
function reenable() {
self._textInput.setDisabled(false);
self._sourceInput.setDisabled(false);
self._sourceURLInput.setDisabled(false);
self._translationInput.setDisabled(false);
self._transcriptionInput.setDisabled(false);
self._sourceTypeDropdown.setDisabled(false);
Object.keys(self._jederFieldWidgets).forEach(function(key) {
self._jederFieldWidgets[key].setDisabled(false);
});
// self._disableTranslationChk.setDisabled(false);
self._applyButton.setDisabled(false);
self._cancelButton.setDisabled(false);
self._clearButton.setDisabled(false);
self._loadingImage.toggle(false);
}
},
};
});
// </nowiki>
oml1oweif55rpwfsm5u5apq7a6a4mol
6333634
6333632
2026-08-14T14:42:22Z
Bikarhêner
3719
6333634
javascript
text/javascript
// <nowiki>
// dependencies (declared in MediaWiki:Gadgets-definition): oojs, oojs-ui, ext.gadget.citoid-helper (wikt.citoid), ext.gadget.StorageUtils (ObjectStorage)
// Formats a string using {0}, {1}, ... placeholders.
if (!String.prototype.format) {
String.prototype.format = function(var_args) {
var args = arguments;
return this.replace(/{(\d+)}/g, function(match, number) {
return typeof args[number] !== "undefined" ? args[number] : match;
});
};
}
$(function() {
"use strict";
// Skip pages where this gadget shouldn't run.
if (
mw.config.get("wgPageName") !== "Wîkîferheng:ceribandin/nimûne" &&
mw.config.get("wgNamespaceNumber") !== 108 &&
mw.config.get("wgNamespaceNumber") !== 0 ||
mw.config.get("wgPageName") === "Destpêk" ||
mw.config.get("wgArticleId") === 0
) return;
console.log("Gadget-wikt.add-examples.js dest pê dike…");
var NAME = "[[Mediawiki:Gadget-wikt.add-examples|Nimûne zêde bike]]";
var VERSION = "1.7";
// Persists form drafts via MediaWiki:Gadget-StorageUtils.js (localStorage, falling back to a cookie) so unsaved text survives a failed submit.
var draftStorage = new ObjectStorage("add_examples_draft", 1);
// Citoid logic lives in MediaWiki:Gadget-citoid-helper.js; it's a registered gadget dependency, so wikt.citoid is already loaded by the time this file runs.
// "width" controls field layout below (see _setSourceType): "narrow" for short fields (year, pages, ...), "wide" for fields that always take their own row, unset for medium fields (two-ish per row).
var jederDefs = {
"jêder-kitêb": {
"label": "Kitêb",
"fields": [
{ "key": "nivîskar", "label": "Nivîskar" },
{ "key": "sernav", "label": "Sernav", "multiline": true, "width": "wide" },
{ "key": "terciman", "label": "Terciman" },
{ "key": "weşanxane", "label": "Weşanxane" },
{ "key": "cih", "label": "Cih" },
{ "key": "sal", "label": "Sal", "width": "narrow" },
{ "key": "sala-weşandinê", "label": "Sala weşandinê", "width": "narrow" },
{ "key": "çap", "label": "Çap", "width": "narrow" },
{ "key": "rûpel", "label": "Rûpel", "width": "narrow" },
{ "key": "isbn", "label": "ISBN", "width": "narrow" },
{ "key": "url", "label": "URL", "width": "wide" }
]
},
"jêder-kovar": {
"label": "Kovar",
"fields": [
{ "key": "nivîskar", "label": "Nivîskar" },
{ "key": "nivîskar2", "label": "Nivîskar 2" },
{ "key": "sernav", "label": "Sernav", "multiline": true, "width": "wide" },
{ "key": "kovar", "label": "Kovar" },
{ "key": "terciman", "label": "Terciman" },
{ "key": "weşanxane", "label": "Weşanxane" },
{ "key": "cild", "label": "Cild", "width": "narrow" },
{ "key": "hejmar", "label": "Hejmar", "width": "narrow" },
{ "key": "sal", "label": "Sal", "width": "narrow" },
{ "key": "rûpel", "label": "Rûpel", "width": "narrow" },
{ "key": "url", "label": "URL", "width": "wide" }
]
},
"jêder-websîte": {
"label": "Websîte",
"fields": [
{ "key": "nivîskar", "label": "Nivîskar" },
{ "key": "sernav", "label": "Sernav", "multiline": true, "width": "wide" },
{ "key": "terciman", "label": "Terciman" },
{ "key": "websîte", "label": "Websîte" },
{ "key": "url", "label": "URL", "width": "wide" },
{ "key": "urlya-arşîvê", "label": "URLya Arşîvê", "width": "wide" },
{ "key": "sal", "label": "Sal", "width": "narrow" },
{ "key": "tarîx", "label": "Tarîx", "width": "narrow" }
]
}
};
var languages = {};
var sectionNames = {
"Navdêr": ["Navdêr"],
"Formeke navdêrê": ["Formeke navdêrê"],
"Lêker": ["Lêker"],
"Formeke lêkerê": ["Formeke lêkerê"],
"Rengdêr": ["Rengdêr"],
"Formeke rengdêrê": ["Formeke rengdêrê"],
"Hoker": ["Hoker"],
"Formeke hokerê": ["Formeke hokerê"],
"Serenav": ["Serenav"],
"Formeke serenavê": ["Formeke serenavê"],
"Artîkel": ["Artîkel"],
"Baneşan": ["Baneşan"],
"Bazinedaçek": ["Bazinedaçek"],
"Biwêj": ["Biwêj"],
"Cînav": ["Cînav"],
"Daçek": ["Daçek"],
"Girêdek": ["Girêdek"],
"Gotineke pêşiyan": ["Gotineke pêşiyan"],
"Hejmar": ["Hejmar"],
"Hevok": ["Hevok"],
"Îfade": ["Îfade"],
"Kurtenav": ["Kurtenav"],
"Navgir": ["Navgir"],
"Paşdaçek": ["Paşdaçek"],
"Paşgir": ["Paşgir"],
"Pêşdaçek": ["Pêşdaçek"],
"Pêşgir": ["Pêşgir"],
"Pirtik": ["Pirtik"],
"Reh": ["Reh"],
"Sembol": ["Sembol"],
"Tîp": ["Tîp"]
};
// Template names treated as "real examples" (an allow-list, not the old deny-list) so annotation templates like synonyms/antonyms/alt-forms aren't mistaken for examples.
var exampleTemplateNames = ["jêder", "nimûne"].concat(Object.keys(jederDefs));
// Returns the template name starting a "#:"/"#*" line (e.g. "jêder" from "#* {{jêder|ku|...}}"), or null if the line doesn't start with a template.
function getLineTemplateName(line) {
var m = /^#[:*]\s*\{\{\s*([^|}]+)/.exec(line);
return m ? m[1].trim() : null;
}
// Returns the index of the line where a (possibly multi-line) template block starting at startIndex closes its {{ }} braces, so multi-line templates are treated as one block.
function findBlockEnd(lines, startIndex) {
var depth = 0;
var i = startIndex;
for (; i < lines.length; i++) {
var opens = (lines[i].match(/\{\{/g) || []).length;
var closes = (lines[i].match(/\}\}/g) || []).length;
depth += opens - closes;
if (depth <= 0) {
break;
}
}
return i;
}
// Ported from start.js: converts literal line breaks typed/pasted into the example/translation/transcription boxes into wikitext <br> tags, since a raw newline would break the single-line "#*" wikitext structure.
function nlToBr(text) {
return text ? text.replace(/\r\n|\r|\n/g, "<br>") : text;
}
function escapeHtmlForBackdrop(str) {
return String(str)
.replace(/&/g, "&")
.replace(/</g, "<")
.replace(/>/g, ">");
}
// Mirrors a textarea's text with a small marker after each line that's followed by an actual typed/pasted linebreak, rendered into a transparent backdrop behind the textarea (see ensureLinebreakBackdrop()).
function buildLinebreakBackdropHtml(text) {
var lines = text.split(/\r\n|\r|\n/);
return $.map(lines, function(line, i) {
var isLast = i === lines.length - 1;
return escapeHtmlForBackdrop(line) +
(isLast ? "" : "<mark class='add-example-linebreak-mark'>↵</mark>\n");
}).join("");
}
// Copies the metrics that affect where text wraps/lands (font, line height, padding, border) from the real textarea onto its backdrop via computed style, since the backdrop is a plain <div>, not a themed OOUI input.
function syncLinebreakBackdropMetrics(textarea, backdrop) {
var cs = window.getComputedStyle(textarea[0]);
backdrop.css({
"box-sizing": cs.boxSizing,
"padding-top": cs.paddingTop,
"padding-right": cs.paddingRight,
"padding-bottom": cs.paddingBottom,
"padding-left": cs.paddingLeft,
"border-width": cs.borderWidth,
"border-style": "solid",
"font-family": cs.fontFamily,
"font-size": cs.fontSize,
"font-weight": cs.fontWeight,
"line-height": cs.lineHeight,
"letter-spacing": cs.letterSpacing
});
}
// Lazily inserts the transparent backdrop layer used to mark linebreaks, as a sibling of the textarea inside its existing OOUI input wrapper (which OOUI already positions relatively for icon overlays), rather than start.js's approach of wrapping the textarea in a new div — that would risk disturbing OOUI's own layout of the input. Safe to call more than once; the backdrop is cached.
function ensureLinebreakBackdrop(textarea) {
var existing = textarea.data("addExampleLinebreakBackdrop");
if (existing) {
return existing;
}
var $parent = textarea.parent();
if ($parent.css("position") === "static") {
$parent.css("position", "relative");
}
var backdrop = $("<div aria-hidden='true'></div>").addClass("add-example-linebreak-backdrop");
textarea.before(backdrop);
textarea.data("addExampleLinebreakBackdrop", backdrop);
textarea.on("scroll.addExampleLinebreak", function() {
backdrop.scrollTop(textarea.scrollTop()).scrollLeft(textarea.scrollLeft());
});
return backdrop;
}
// Flags a textarea (via CSS class, for the border tint + tooltip) while it contains a typed/pasted linebreak, so the user notices before it's silently turned into <br> on submit; marks only the exact point of the break via the mirrored backdrop.
function highlightLinebreak(el) {
var textarea = $(el);
var text = textarea.val();
var hasBreak = /\r|\n/.test(text);
textarea
.toggleClass("add-example-has-linebreak", hasBreak)
.attr("title", hasBreak ? "Xeta nû dê wek <br> bê nivîsandin" : "");
if (!hasBreak) {
var cached = textarea.data("addExampleLinebreakBackdrop");
if (cached) {
cached.hide();
}
textarea.removeClass("add-example-has-linebreak-source");
return;
}
var backdrop = ensureLinebreakBackdrop(textarea);
textarea.addClass("add-example-has-linebreak-source");
syncLinebreakBackdropMetrics(textarea, backdrop);
backdrop.html(buildLinebreakBackdropHtml(text)).show();
backdrop.scrollTop(textarea.scrollTop()).scrollLeft(textarea.scrollLeft());
}
// Wires linebreak detection onto an OOUI multiline widget, matching start.js's scope: only the quote/example text and its translation/transcription, not bibliographic fields. Uses OOUI's own "change" event rather than the raw <textarea> "input" event start.js listens to, since our fields can also be set programmatically (Clear button, draft restore) via setValue(), which doesn't fire a native DOM input event.
function watchForLinebreaks(widget) {
widget.on("change", function() {
highlightLinebreak(widget.$input[0]);
});
}
// Get names of all defined languages
var api = new mw.Api();
api.get({
action: "query",
format: "json",
titles: "MediaWiki:Gadget-translation editor.js/ziman.json",
prop: "revisions",
rvprop: "content",
rvslots: "main",
}).then(function(data) {
for (var pageID in data.query.pages) {
if (data.query.pages.hasOwnProperty(pageID)) {
// noinspection JSUnresolvedVariable
languages = JSON.parse(data.query.pages[pageID].revisions[0].slots.main["*"]);
break;
}
}
});
// .example/.benimune = old Şablon:jêder hidden marker; .h-usage-example/.h-quotation = Modul:usex/Modul:quote containers used directly by Şablon:nimûne and jêder-* templates now that the old marker is gone.
$("ul > li > .example, ul > li > .benimune, ul > li > .h-usage-example, ul > li > .h-quotation").each(function() {
var $element = $(this);
var $item = $element.parent();
if (!$item.next().length) {
// Get example’s language
// bdi[lang] = old hidden marker; .e-example[lang]/.e-quotation[lang] = Modul:usex/Modul:quote already put lang on the visible span.
var language = $item.find(".e-example[lang], .e-quotation[lang], bdi[lang]")[0].lang;
if (language === "ku-Latn") {
language = "ku";
}
console.log('Language:', language);
// Get section and indices of associated definition
var definitionLevel = [];
var $definitionItem = $item.parent().parent();
var $topItem;
do {
// Skip MediaWiki's empty <li class="mw-empty-elt"> placeholders so indices match the real "#" lines in wikitext (see submit()).
definitionLevel.splice(0, 0, $definitionItem.prevAll("li:not(.mw-empty-elt)").length);
$topItem = $definitionItem;
$definitionItem = $definitionItem.parent().parent();
} while ($definitionItem.prop("tagName") === "LI");
var $section = $($topItem.parent().prevAll(".mw-heading3, h3").get(0));
if ($section.length) {
definitionLevel.splice(0, 0, $section.find("h3").attr("id"));
} else {
console.warn("Gadget-wikt.add-examples: Section heading not found");
// TODO: why does this happen? mw.notify("Beş nehat dîtin. Jkx li WF:Dîwanê vê problemê ragihînin!");
return;
}
// Remove default edit link if present
var $defaultEditLink = $item.find("span.example > span.stubedit");
if ($defaultEditLink.length) {
$defaultEditLink.remove();
}
// Add a nice button to open the form
var $formItem = $("<li>");
var $button = $("<a href='#'>Nimûneyeke bikaranînê lê zêde bike</a>");
$button.css("color", "var( --color-subtle, #777777 )");
$button.on("click", function() {
if (!$button.form) {
$formItem.append(new Form($item, $button, language, definitionLevel).$element);
console.log("$item", $item);
console.log("$button", $button);
console.log("language", language);
console.log("definitionLevel", definitionLevel);
}
$button.form.setVisible(true);
return false;
});
$item.after($formItem.append($button));
}
});
// Constructor for the edit form; lastExample/button/language/definitionLevel identify where the form attaches and what it edits.
function Form($lastExample, $button, language, definitionLevel) {
var self = this;
this._language = language;
this._definitionLevel = definitionLevel;
this._$lastExample = $lastExample;
this._$button = $button;
this._$button.form = this;
this._currentJederKey = "";
this._jederFieldWidgets = {};
this._textInput = new OO.ui.MultilineTextInputWidget();
var textInputLayout = new OO.ui.FieldLayout(this._textInput, {
label: "Metna nimûneyê",
align: "top",
});
this._textInput.on("change", function(value) {
self._applyButton.setDisabled(!value);
});
watchForLinebreaks(this._textInput);
// Source type dropdown: free text, a jêder-* template, or "citoid" (a pseudo key, not in jederDefs) meaning "not yet detected" — the default, switched automatically once a Citoid fetch succeeds (see _fillFromCitoid).
var sourceTypeMenuItems = [
new OO.ui.MenuOptionWidget({ data: "citoid", label: "Bi Citoidê otomatîk zêde bike" }),
new OO.ui.MenuOptionWidget({ data: "", label: "Bi destê xwe binivîsim" }),
];
for (var jederKey in jederDefs) {
if (jederDefs.hasOwnProperty(jederKey)) {
sourceTypeMenuItems.push(new OO.ui.MenuOptionWidget({
data: jederKey,
label: jederDefs[jederKey].label,
}));
}
}
this._sourceTypeDropdown = new OO.ui.DropdownWidget({
menu: { items: sourceTypeMenuItems },
label: "Bi Citoidê otomatîk zêde bike",
});
var sourceTypeLayout = new OO.ui.FieldLayout(this._sourceTypeDropdown, {
label: "Şablona çavkaniyê",
align: "top",
});
this._sourceTypeDropdown.getMenu().on("choose", function(menuOption) {
self._setSourceType(menuOption.getData());
});
this._sourceInput = new OO.ui.MultilineTextInputWidget();
this._sourceInputLayout = new OO.ui.FieldLayout(this._sourceInput, {
label: "Çavkaniya nimûneyê",
align: "top",
});
// Always visible in every mode (free text included) — submit() reads this unconditionally as the "url=" parameter, and it's also the query field the Citoid button below fetches from.
this._sourceURLInput = new OO.ui.TextInputWidget({
icon: "link",
placeholder: "https://… an jî DOI/ISBN",
});
this._sourceURLInputLayout = new OO.ui.FieldLayout(this._sourceURLInput, {
label: "Lînk, DOI an ISBNya çavkaniyê",
align: "top",
help: "Li qutiyê URL, DOI an ISBN binivîse û pê lê bike butona 'Bi otomatîk tijî bike' da ku otomatîk çavkanî were dagirtin.",
helpInline: true,
});
// Matches the wording just constructed above, so the initial _setSourceType("citoid") call at the end of this constructor doesn't needlessly recreate an identical layout.
this._urlFieldIsFreeTextWording = false;
this._citoidButton = new OO.ui.ButtonWidget({
label: "Bi otomatîk tijî bike",
icon: "download",
flags: ["progressive"],
title: "Li gorî URL, DOI an ISBNya jorîn, agahiyan ji Citoid tîne û qadên şablona jêder-* otomatîk tijî dike.",
classes: ["add-example-citoid-fetch"],
});
this._citoidButton.on("click", this._fillFromCitoid.bind(this));
// Clears the URL field and any filled jêder-* fields without touching the example text/translation.
this._citoidClearButton = new OO.ui.ButtonWidget({
label: "Vala bike",
icon: "trash",
framed: false,
title: "Lînkê û qadên jêder-* yên vê beşê vala bike",
classes: ["add-example-citoid-clear"],
});
this._citoidClearButton.on("click", function() {
self._sourceURLInput.setValue("");
Object.keys(self._jederFieldWidgets).forEach(function(key) {
self._jederFieldWidgets[key].setValue("");
});
});
var citoidButtonsLayout = new OO.ui.HorizontalLayout({
classes: ["add-example-citoid-buttons"],
items: [this._citoidButton, this._citoidClearButton],
});
// Fieldset that holds the fields for whichever jêder-* template is selected.
this._jederFieldsFieldset = new OO.ui.FieldsetLayout({
classes: ["add-example-jeder-fields"],
});
// Citoid button + jêder-* fields, framed as one "template" step — unlike the URL field above, this box only makes sense once a jêder-* template is active (there's nothing here for Citoid to fill in free-text mode, since it has no bibliographic fields to populate), so it's hidden for free text (see _setSourceType).
this._citoidBox = new OO.ui.PanelLayout({
expanded: false,
framed: true,
padded: true,
classes: ["add-example-citoid-box"],
content: [
new OO.ui.LabelWidget({
label: "Ji Citoid an bi destan tijî bike:",
classes: ["add-example-citoid-box-title"],
}),
citoidButtonsLayout,
this._jederFieldsFieldset,
],
});
this._translationInput = new OO.ui.MultilineTextInputWidget();
var translationInputLayout = new OO.ui.FieldLayout(this._translationInput, {
label: "Tercimeya kurmancî ya nimûneyê",
align: "top",
});
watchForLinebreaks(this._translationInput);
this._transcriptionInput = new OO.ui.MultilineTextInputWidget();
var transcriptionInputLayout = new OO.ui.FieldLayout(this._transcriptionInput, {
label: "Transkrîpsiyona nimûneyê",
align: "top",
help: "Tenê lê zêde bike eger metna di nimûneyê de bi alfabeya latînî nehatibe nivîsandin.",
helpInline: true,
});
watchForLinebreaks(this._transcriptionInput);
this._applyButton = new OO.ui.ButtonWidget({
label: "Biweşîne",
icon: "check",
title: "Nimûneyê ji bo vê tarîfê nimûneyê lê zêde bike",
flags: ["progressive", "primary"],
disabled: true,
});
this._applyButton.on("click", this.submit.bind(this));
this._cancelButton = new OO.ui.ButtonWidget({
label: "Betal bike",
icon: "close",
title: "Formê bigire",
flags: ["destructive"],
});
this._cancelButton.on("click", function() {
self.setVisible(false);
});
this._clearButton = new OO.ui.ButtonWidget({
label: "Paqij bike",
icon: "trash",
title: "Hemû qadan vala bike û pêşnûyisên hilanîbûyî jê bibe",
});
this._clearButton.on("click", function() {
self.clear();
self._clearDraft();
});
// Native CSS spinner (see Gadget-wikt.add-examples.css) instead of an external Commons GIF, so there's no network request and it matches dark/light mode.
this._loadingImage = new OO.ui.Widget({
classes: ["add-example-loading"],
});
this._loadingImage.$element.append($('<span class="add-example-spinner" aria-hidden="true"></span>'));
this._loadingImage.toggle(false);
var content = [textInputLayout, sourceTypeLayout, this._sourceInputLayout, this._sourceURLInputLayout, this._citoidBox];
if (language !== "ku") {
content.push(translationInputLayout, transcriptionInputLayout);
}
// Saved on the instance (not just a local var) so _setSourceType() can swap the URL field's label/help wording in and out of it when switching to/from free text.
this._fieldsLayout = new OO.ui.FieldsetLayout({
label: "Nimûneyeke bi " + (languages[this._language] || "zimanekî nenas") + " lê zêde dikî.",
items: content,
classes: ["add-example-fieldset"],
});
var buttonsLayout = new OO.ui.HorizontalLayout({
classes: ["add-example-main-buttons"],
items: [
this._applyButton,
this._cancelButton,
this._clearButton,
this._loadingImage,
]
});
this._frame = new OO.ui.PanelLayout({
id: "add-example-definition-{0}-form".format(this._definitionLevel.join("-")),
classes: ["add-example-form"],
expanded: false,
content: [
this._fieldsLayout,
buttonsLayout,
],
});
// Default to "citoid" mode; selectItemByData() doesn't fire "choose" (that only fires for interactive selection), so _setSourceType() must also be called explicitly to set up the initial UI.
this._sourceTypeDropdown.getMenu().selectItemByData("citoid");
this._setSourceType("citoid");
}
Form.prototype = {
// Returns the jQuery object for this form.
get $element() {
return this._frame.$element;
},
// Switches the source section between free text, Citoid auto-detect (no template chosen yet), and a specific jêder-* template, rebuilding the field list to match. The URL field itself is always visible in every mode (see the constructor); only the free-text textarea, the Citoid button box, and the manual jêder-* fields toggle here.
_setSourceType: function(jederKey) {
var self = this;
this._currentJederKey = jederKey;
this._jederFieldsFieldset.clearItems();
this._jederFieldWidgets = {};
var isRealJederKey = jederKey && jederDefs[jederKey];
if (isRealJederKey) {
var def = jederDefs[jederKey];
var items = [];
def.fields.forEach(function(field) {
var widget = field.multiline
? new OO.ui.MultilineTextInputWidget({ rows: 2, autosize: false })
: new OO.ui.TextInputWidget();
self._jederFieldWidgets[field.key] = widget;
var widthClass = field.width === "narrow" ? "add-example-field-narrow"
: field.width === "wide" ? "add-example-field-wide"
: "add-example-field-medium";
items.push(new OO.ui.FieldLayout(widget, {
label: field.label,
align: "top",
classes: [widthClass],
}));
});
this._jederFieldsFieldset.addItems(items);
}
this._jederFieldsFieldset.toggle(!!isRealJederKey);
// Free text textarea only for "" (free text); hidden for "citoid" and any real jêder-* key.
this._sourceInputLayout.toggle(jederKey === "");
// Citoid button box: hidden for free text (nothing there for it to fill in), shown for "citoid" auto-detect and any real jêder-* key.
this._citoidBox.toggle(jederKey !== "");
// URL field wording: plain "attach a link" phrasing for free text (no Citoid box visible there to explain), Citoid-oriented phrasing otherwise. Only recreated when actually crossing that boundary, not on every dropdown change (e.g. switching between two jêder-* types keeps the same wording, no need to touch the DOM).
var isFreeText = jederKey === "";
if (this._urlFieldIsFreeTextWording !== isFreeText) {
this._urlFieldIsFreeTextWording = isFreeText;
this._sourceURLInput.setPlaceholder(isFreeText ? "URLyeke wekî https://…" : "URLyek wekî https://… an jî DOI/ISBN");
var index = this._fieldsLayout.items.indexOf(this._sourceURLInputLayout);
this._fieldsLayout.removeItems([this._sourceURLInputLayout]);
this._sourceURLInputLayout = new OO.ui.FieldLayout(this._sourceURLInput, isFreeText ? {
label: "Adresa webê ya nimûneyê",
align: "top",
help: "Tenê binivîse eger lînk jixwe di referansa çavkaniyê de tinebe.",
helpInline: true,
} : {
label: "Lînk, DOI an ISBNya çavkaniyê",
align: "top",
help: "Ev dibe lînka çavkaniyê (url=). Ji bo şablonên jêder-*, dikare bi Citoid an bi destan jî bên dagirtin.",
helpInline: true,
});
this._fieldsLayout.addItems([this._sourceURLInputLayout], index);
}
},
// Fetches data from MediaWiki:Gadget-citoid-helper.js, picks the matching jêder-* template, and fills its empty fields; citoid-helper is a registered gadget dependency so it's already loaded here.
_fillFromCitoid: function() {
var self = this;
var query = this._sourceURLInput.getValue().trim();
if (!query) {
mw.notify("Ji kerema xwe re pêşî URL, DOI an ISBNyekê binivîse.");
return;
}
this._citoidButton.setDisabled(true);
this._loadingImage.toggle(true);
wikt.citoid.fetchJederFields(query).then(function(result) {
// Only let Citoid pick the template type when nothing's been chosen yet (the "citoid" auto-detect default). If the user already selected a specific jêder-* type (or free text), that choice is respected — e.g. picking "Websîte" and fetching a tweet must not silently switch to "Kovar" just because Citoid guessed differently.
var wasAutoDetect = self._currentJederKey === "citoid";
if (wasAutoDetect) {
var menu = self._sourceTypeDropdown.getMenu();
var item = menu.findItemFromData(result.jederKey);
if (item) {
menu.chooseItem(item); // this calls _setSourceType(jederKey) automatically
}
}
var targetJederKey = self._currentJederKey;
// Fields Citoid returned were shaped for its own detected type; if the active template differs (the case above where the user's choice was kept), re-derive fields for that template instead so e.g. "Websîte" still gets its own website-shaped fields (websîte, tarîx, ...) rather than leftover kovar-shaped ones.
var fields = targetJederKey === result.jederKey ? result.fields : wikt.citoid.dataToJederFields(targetJederKey, result.raw);
Object.keys(fields).forEach(function(key) {
var widget = self._jederFieldWidgets[key];
if (widget && !widget.getValue()) {
widget.setValue(fields[key]);
}
});
mw.notify("Agahî ji Citoid hatin barkirin.");
}, function(errorMsg) {
mw.notify(typeof errorMsg === "string" ? errorMsg : "Nekarî agahiyan ji Citoid bistîne. Kontrol bike ka URL/DOI/ISBN rast e.");
}).always(function() {
self._citoidButton.setDisabled(false);
self._loadingImage.toggle(false);
});
},
// Toggles the visibility of this form and restores any saved draft when shown.
setVisible: function(visible) {
this._$button.toggle(!visible);
this._frame.toggle(visible);
if (visible) {
var draft = draftStorage.Get() || {};
if (!this._textInput.getValue() && draft.text) {
this._textInput.setValue(draft.text);
}
if (!this._sourceInput.getValue() && draft.source) {
this._sourceInput.setValue(draft.source);
}
if (!this._sourceURLInput.getValue() && draft.sourceURL) {
this._sourceURLInput.setValue(draft.sourceURL);
}
if (!this._translationInput.getValue() && draft.translation) {
this._translationInput.setValue(draft.translation);
}
if (!this._transcriptionInput.getValue() && draft.transcription) {
this._transcriptionInput.setValue(draft.transcription);
}
}
},
// Removes any saved draft (localStorage/cookie via MediaWiki:Gadget-StorageUtils.js) so it can't resurface on other pages.
_clearDraft: function() {
draftStorage.Set({});
},
// Clears all fields in this form.
clear: function() {
this._textInput.setValue("");
this._sourceInput.setValue("");
this._sourceURLInput.setValue("");
this._translationInput.setValue("");
this._transcriptionInput.setValue("");
this._sourceTypeDropdown.getMenu().selectItemByData("citoid");
this._setSourceType("citoid");
},
// Generates and submits the wikicode, then inserts the resulting HTML element if no errors occurred.
submit: function() {
var self = this;
self._textInput.setDisabled(true);
self._sourceInput.setDisabled(true);
self._sourceURLInput.setDisabled(true);
self._translationInput.setDisabled(true);
self._transcriptionInput.setDisabled(true);
self._sourceTypeDropdown.setDisabled(true);
Object.keys(self._jederFieldWidgets).forEach(function(key) {
self._jederFieldWidgets[key].setDisabled(true);
});
// self._disableTranslationChk.setDisabled(true);
this._applyButton.setDisabled(true);
this._clearButton.setDisabled(true);
this._loadingImage.toggle(true);
var source = this._sourceInput.getValue().trim();
var sourceURL = this._sourceURLInput.getValue().trim();
var text = this._textInput.getValue().trim();
// If a jêder-* template is selected, collect its filled-in fields.
var jederParams = [];
if (this._currentJederKey && jederDefs[this._currentJederKey]) {
jederDefs[this._currentJederKey].fields.forEach(function(field) {
var widget = self._jederFieldWidgets[field.key];
var value = widget ? widget.getValue().trim() : "";
if (value) {
jederParams.push(field.key + "=" + value);
}
});
}
var usingJederTemplate = this._currentJederKey && jederParams.length > 0;
var minakAnNa, sablon;
if (usingJederTemplate) {
// The jêder-* template itself is used as the template, not as the "2=" content.
minakAnNa = "*";
sablon = this._currentJederKey;
} else if (source || sourceURL) {
minakAnNa = "*";
sablon = "jêder";
} else {
minakAnNa = ":";
sablon = "nimûne";
}
var listMarker = "".padStart(this._definitionLevel.length - 1, "#") + minakAnNa;
var title = mw.config.get('wgTitle');
// jêder-* template, jêder, or nimûne
var code = listMarker + " {{" + sablon;
// 1= language code
code += "|" + this._language;
if (usingJederTemplate) {
// Fields of the selected jêder-* template, passed straight through as its parameters.
jederParams.forEach(function(param) {
code += "|" + param;
});
} else {
// 2= source (free text)
if (source) {
code += "|2=" + source;
}
if (sourceURL) {
code += "|url=" + sourceURL;
}
}
// jêgirtin/nimûne (quotation text)
code += "|";
if (sablon !== "nimûne") {
code += "jêgirtin=";
}
// bold the page title, then convert any literal linebreak in the example text to <br> (see nlToBr) so it can't break the single-line "#*" wikitext
code += nlToBr(text.replace(new RegExp("(" + title + "([^( |,|;|?|.|!)]+)?)", "ig"), "'''$1'''"));
if (this._language !== "ku") {
var translation = nlToBr(this._translationInput.getValue().trim());
var transcription = nlToBr(this._transcriptionInput.getValue().trim());
if (translation) {
code += "|tercime=" + translation;
}
if (transcription) {
code += "|tr=" + transcription;
}
}
code += "}}";
// var escapedLangCode = languages[this._language].charAt(0).toUpperCase() + languages[this._language].slice(1);
// console.log("escapedLangCode: ", escapedLangCode);
var sectionIDPattern = new RegExp("^([\\wîêçş_]+?)_?(\\d+)?_?(\\d+)?$");
console.log("this._definitionLevel[0]: ", this._definitionLevel[0]);
var matchSectionID = sectionIDPattern.exec(this._definitionLevel[0]);
//var isInflection;
var sectionType = matchSectionID[1].replace(/_/, ' ');
sectionType = sectionType.replace(/_\d+$/, '');
console.log("sectionType: ", sectionType);
var sectionNum = matchSectionID[2] ? parseInt(matchSectionID[2]) : "";
console.log("Section Number:", sectionNum);
// Insert new example into page’s code
api.get({
action: "query",
titles: mw.config.get("wgPageName"),
prop: "revisions",
rvprop: "content",
rvslots: "main",
}).then(function(data) {
var pageContent;
for (var pageID in data.query.pages) {
if (data.query.pages.hasOwnProperty(pageID)) {
// noinspection JSUnresolvedVariable
pageContent = data.query.pages[pageID].revisions[0].slots.main["*"];
break;
}
}
// Look for correct language section
var langSectionRegex = new RegExp("==[ ]*{{ziman\\|{0}}}[ ]*==".format(self._language));
var langSectionIndex = pageContent.search(langSectionRegex);
console.log("langSectionIndex:", langSectionIndex);
if (langSectionIndex === -1) {
console.log("langSectionIndex === -1");
error("Xeletiyeke bi koda zimanî heye. Koda zimanî:" + self._language);
return;
}
// Look for correct word type section
var lines = pageContent.slice(langSectionIndex).split("\n");
var sectionNamesRegex = Object.keys(sectionNames).join('|');
var sectionRegex = new RegExp('^===[ ]*(' + sectionNamesRegex + ')\\s*(\\d+)?');
var targetLineIndex;
for (targetLineIndex = 0; targetLineIndex < lines.length; targetLineIndex++) {
var line = lines[targetLineIndex];
console.log("line:", line);
var matchSection = sectionRegex.exec(line);
if (matchSection) {
console.log("matchSection:", matchSection[1]);
// Extract section name and number from the matched result
var matchedSectionName = matchSection[1];
var matchedSectionNum = matchSection[2]; // It could be undefined
if (!sectionNames[sectionType]) {
error('Navê beşê xelet e. Di beşên "Ji wêjêyê" û "Ji wêjêya klasîk" ev amûr nayê bikaranîn.');
return; // Exit the function
}
// Check if the matched section name is in the expected list
if (sectionNames[sectionType].includes(matchedSectionName)) {
// Check if the line includes the section number (if present)
if (!matchedSectionNum || line.includes(" " + matchedSectionNum)) {
// Add more conditions if needed for inflection, e.g., (isInflection === line.includes("Formeke "))
break;
}
}
}
}
if (targetLineIndex === lines.length) {
console.log("targetLineIndex === lines.length");
error("Di navê beşê de xeletî heye. Îhtimalen bi vî navê beşê çend heb hene.");
return;
}
// Look for correct definition
var defIndex = -1;
var level = 1;
for (; targetLineIndex < lines.length; targetLineIndex++) {
var m = /^(#+)[^*#:]/.exec(lines[targetLineIndex]);
console.log("lines[targetLineIndex]:", lines[targetLineIndex]);
if (m) {
console.log("m:", m);
if (level === m[1].length) {
console.log("m[1]:", m[1]);
defIndex++;
console.log("defIndex:", defIndex);
if (self._definitionLevel[level] === defIndex) {
console.log("self._definitionLevel[level] === defIndex");
console.log("self._definitionLevel[level]", self._definitionLevel[level]);
if (level === self._definitionLevel.length - 1) {
console.log("level:", level);
break;
} else {
level++;
defIndex = -1;
}
}
}
}
}
// Find where to insert within this definition's "#:"/"#*" block: walk lines after the definition (findBlockEnd() tracks multi-line templates), and use exampleTemplateNames to tell real examples from annotations (synonyms, antonyms, alt-forms, etc.) rather than hard-blocking specific names.
var insertionFound = false;
var lastRelevantBlockEnd = -1;
var isJederFamily = (sablon === "jêder" || Object.prototype.hasOwnProperty.call(jederDefs, sablon));
var scanIndex = targetLineIndex + 1;
var emptyTemplate = false;
for (; scanIndex < lines.length; scanIndex++) {
var scanLine = lines[scanIndex];
if (!scanLine.startsWith("#:") && !scanLine.startsWith("#*")) {
// Left this definition's "#:"/"#*" block (e.g. a new definition or section starts).
break;
}
var blockEnd = findBlockEnd(lines, scanIndex);
var templateName = getLineTemplateName(scanLine);
var isExampleLine = templateName !== null &&
exampleTemplateNames.indexOf(templateName) !== -1;
if (isJederFamily) {
// jêder-family examples go after all "#:"/"#*" lines of this definition (both real examples and annotations).
lastRelevantBlockEnd = blockEnd;
insertionFound = true;
} else if (sablon === "nimûne") {
// "nimûne" examples go before any "#*" line, but after "#:" lines.
if (scanLine.startsWith("#*")) {
break;
}
lastRelevantBlockEnd = blockEnd;
insertionFound = true;
}
scanIndex = blockEnd; // Skip past the whole (possibly multi-line) block
}
var insertAt = lastRelevantBlockEnd >= 0 ? lastRelevantBlockEnd + 1 : scanIndex;
if (lastRelevantBlockEnd >= 0) {
emptyTemplate = /#+\*\s*{{[ ]*b?ê?(nimûne|mînak|jêgirtin)\??\s*\|\s*\|?\s*[^|}]+}}/.test(lines[lastRelevantBlockEnd]);
}
if (emptyTemplate) {
console.log("empty Template found", sablon);
// Replace empty template with new example
lines.splice(lastRelevantBlockEnd, 1, code);
} else {
console.log("empty Template not found", sablon);
// Insert the new example (right after the definition if it had no existing "#:"/"#*" lines yet, or after the relevant block otherwise).
lines.splice(insertAt, 0, code);
}
// Submit new page content
api.edit(mw.config.get("wgPageName"), function(_) {
return {
text: pageContent.slice(0, langSectionIndex) + lines.join("\n"),
summary: "+nimûneya bikaranînê bi amûra « {0} » (v{1}).".format(NAME, VERSION),
};
}).then(function() {
api.parse(code).done(function(data) {
var $renderedExample = $(data).find("ul > li").html();
var $item;
// Insert rendered example into page
if (emptyTemplate) {
self._$lastExample.html($renderedExample);
$item = self._$lastExample;
} else {
self._$lastExample.after($item = $("<li>").append($renderedExample));
}
$item.css("background-color", "lightgreen");
setTimeout(function() {
$item.css("background-color", "inherit");
}, 1000);
self._$lastExample = $item;
});
self.setVisible(false);
self.clear();
self._clearDraft();
reenable();
});
});
function error(errorMessage) {
mw.notify(errorMessage || "Nimûne nehat weşandin, îhtimalen rûpel hate guhartin. Ji kerema xwe re rûpelê dîsa bar bike û dîsa biceribîne.");
draftStorage.Set({
text: self._textInput.getValue(),
source: self._sourceInput.getValue(),
sourceURL: self._sourceURLInput.getValue(),
translation: self._translationInput.getValue(),
transcription: self._transcriptionInput.getValue(),
});
reenable();
}
function reenable() {
self._textInput.setDisabled(false);
self._sourceInput.setDisabled(false);
self._sourceURLInput.setDisabled(false);
self._translationInput.setDisabled(false);
self._transcriptionInput.setDisabled(false);
self._sourceTypeDropdown.setDisabled(false);
Object.keys(self._jederFieldWidgets).forEach(function(key) {
self._jederFieldWidgets[key].setDisabled(false);
});
// self._disableTranslationChk.setDisabled(false);
self._applyButton.setDisabled(false);
self._cancelButton.setDisabled(false);
self._clearButton.setDisabled(false);
self._loadingImage.toggle(false);
}
},
};
});
// </nowiki>
9r2csnh0x9nxvn7uikjonresja8jhwy
MediaWiki:Gadget-Site.css
8
1324818
6333631
6329682
2026-08-14T14:25:29Z
Bikarhêner
3719
6333631
css
text/css
/* ----------
Ji @[[en:MediaWiki:Gadget-Site.css]]
<nowiki>
CSS Style
* Indent with tab characters
* One line space between each declaration
* One selector per line
* Opening brace on the same line as the last selector
* Don't omit optional semicolons
* Closing brace on its own line
* Closing brace indented to match the preceding style declarations
* Alternatively, very short style rules may be all on one line
---------- */
/* csslint adjoining-classes:false */
/* See also [[MediaWiki:Minerva.css]], [[MediaWiki:Vector.css]] */
/* ku-Arab: Format ji bo tabloyên ku di aliyê rastê de ne */
.tablo-flip {
float: right;
margin-left: 0.5em;
margin-right: 0;
clear: right;
}
.tablo-flip .row-flip {
text-align: left;
}
/* @noflip */
:lang(ku-arab) .tablo-flip {
float: left;
margin-left: 0;
margin-right: 0.5em;
clear: left;
}
/* @noflip */
:lang(ku-arab) .tablo-flip .row-flip {
text-align: right;
}
/* Ji bo {{werger-ser}} */
/* @noflip */
:lang(ku-arab) .translations {
text-align: right;
}
/* @noflip */
:lang(ku-arab) div.NavFrame > ul, :lang(ku-arab) div.NavFrame > ol {
text-align: right;
}
/* @noflip */
:lang(ku-arab) div.NavFrame div.NavHead,
:lang(ku-arab) details.NavFrame summary.NavHead {
text-align: right;
}
/* @noflip */
:lang(ku-arab) span.NavToggle {
float: left;
}
/* @noflip */
:lang(ku-arab) .list-switcher-element .NavToggle {
float: none;
}
/* "Flipping" ji bo tagên HTMLê (div, span, ...) yên din.
Li şûna "float:right", "text-align:left" vana werin bikaranîn (ji bo "flipping").
Ji ber ku dema ku di nav kodî de style="float:right" tê nivîsandin flipping naşuxile: hertim 'float:right' e.
*/
.float-right-flip {
float: right;
}
.float-left-flip {
float: left;
}
.align-right-flip {
text-align: right;
}
.align-left-flip {
text-align: left;
}
.clear-right-flip {
clear: right;
}
.clear-left-flip {
clear: left;
}
/* @noflip */
:lang(ku-arab) .float-right-flip {
float: left;
}
/* @noflip */
:lang(ku-arab) .float-left-flip {
float: right;
}
/* @noflip */
:lang(ku-arab) .align-right-flip {
text-align: left;
}
/* @noflip */
:lang(ku-arab) .align-left-flip {
text-align: right;
}
/* @noflip */
:lang(ku-arab) .clear-right-flip {
clear: left;
}
/* @noflip */
:lang(ku-arab) .clear-left-flip {
clear: right;
}
/* Ji bo {{wîkîpediya}} */
.sister-box {
float: right;
border: solid #aaa 1px;
font-size: 90%;
background: #f9f9f9;
width: 250px;
padding: 4px;
text-align: left;
}
.sister-wiki-logo {
float: left;
}
.sister-wiki-links {
margin-left: 15px;
}
.sister-wiki-content {
margin-left: 60px;
}
/* @noflip */
:lang(ku-arab) .sister-box {
clear:left;
float: left;
border: solid #aaa 1px;
font-size: 90%;
background: #f9f9f9;
width: 250px;
padding: 4px;
text-align: right;
}
/* @noflip */
:lang(ku-arab) .sister-wiki-logo {
float: right;
}
/* @noflip */
:lang(ku-arab) .sister-wiki-links {
margin-left: 15px;
}
/* @noflip */
:lang(ku-arab) .sister-wiki-content {
margin-left:5px;
margin-right:60px
}
:lang(ku-arab) .sister-wiki-content {
}
/* Editsection */
.mw-editsection {
font-size: x-small;
}
/* Jêgirtin */
.jegirtin-text {
font-style: italic;
}
:lang(ku-arab) .jegirtin-text {
font-style: normal;
}
/* Beşa zimanî */
.ns-0 #mw-content-text .mw-heading2, .ns-108 #mw-content-text .mw-heading2 {
clear: both;
background: #eaecf0;
padding-left: 0.2em;
font-size: 180%;
font-weight: 500;
margin-top: 1em;
margin-bottom: 0.5em;
}
/* Rengê "teal" bo beşên cureyên peyvan*/
.ns-0 #mw-content-text .mw-heading3, .ns-108 #mw-content-text .mw-heading3 {
color:teal;
border-bottom: dotted 1px #aaa;
}
.ns-0 #mw-content-text .mw-heading4, .ns-108 #mw-content-text .mw-heading4
{
border-bottom: dotted 1px #ddd;
}
/* Valahiya di navber mînakan */
.ns-0 ol li, .ns-0 ol li li{
margin-bottom: .4em;
}
/* Sernavê Destpêkê veşêre */
.page-Destpêk h1.firstHeading,
.page-Destpêk #lastmod,
.page-Destpêk #siteSub,
.page-Destpêk #contentSub,
.page-Destpêk #catlinks {
display: none;
}
sup,
sub {
/* prevent odd line-height for raised and lowered characters */
line-height: 1em;
}
/* and keep links at normal font size/weight, else they inherit the header
attributes */
.editsection {
font-size: 100%;
font-weight: normal;
}
pre code,
code code {
border: none;
padding: 0;
}
pre var,
code var {
color: #777;
}
/* This fixes a bug where certain Tibetan terms are cut off at the bottom... */
#firstHeading {
overflow: visible;
}
.ns-0 .timed-text {
display: none;
}
.client-js .audiometa {
display: none;
}
.client-nojs .audiofile {
display: none;
}
.nowrap {
white-space: nowrap;
}
/* wikitable is part of core. prettytable is deprecated but still used in some
places, until fully replaced: */
table.prettytable {
margin: 1em 1em 1em 0;
background: var(--wikt-palette-paleblue, #f8f9fa);
border: 1px var(--border-color-base, #aaaaaa) solid;
border-collapse: collapse;
}
table.prettytable th,
table.prettytable td {
border: 1px var(--border-color-base, #aaaaaa) solid;
padding: 0.2em;
}
table.prettytable th {
background: var(--wikt-palette-lightergrey, #eeeeee);
text-align: center;
}
table.prettytable caption {
margin-left: inherit;
margin-right: inherit;
}
/* default setting for {{qualifier}} and {{sense}}.
(Related classes that can be overridden: .qualifier-comma,
.qualifier-content, .ib-brac, .qualifier-brac, .sense-qualifier-colon.) */
.ib-comma {
font-style: normal;
}
.ib-content {
font-style: italic;
}
.ib-content i,
.ib-content em {
font-style: normal;
}
.context-qualifier-colon {
display: none;
}
/* default style for indented "see also" */
.disambig-see-also {
text-indent: 2em;
}
.mention-tr {
font-style: italic;
}
/* add left-to-right mark */
.mention-gloss-paren::before,
.mention-tr-paren::before {
content: "";
}
/* non-italic and non-bold gloss */
.mention-gloss,
.mention-gloss-double-quote,
.mention-gloss-paren,
.mention-tr-gloss-separator-comma,
.mention-tr-paren,
.mention-tr-gloss-separator-comma {
font-style: normal;
font-weight: inherit;
}
/* default style for "form of" definitions */
.use-with-mention,
.form-of-definition {
font-style: italic;
}
.use-with-mention i,
.form-of-definition-link {
font-style: normal;
}
.use-with-mention .mention,
.form-of-definition-link .mention {
font-style: normal;
font-weight: bold;
}
/* display normalization in {{ux}}/{{usex}}, {{quote}}, {{quote-*}} in italics */
.e-normalization {
font-style: italic;
}
/* Inflection tables
----------------------------- */
/* To colour links in inflection tables (currently done with
{{notred}}) black without using #ifexist and allowing for user
override */
.inflection-table a.new {
color: inherit;
}
/* fill a parent NavContent collapsing box */
.NavContent table.inflection,
.NavContent table.inflection-table {
margin-top: 0;
width: 100%;
display: table;
border: 0;
}
/* basic inflection table styles */
table.inflection {
border-collapse: collapse;
border: 1px solid;
background: #ffffff;
/* TODO consider palettizing */
}
table.inflection caption {
caption-side: bottom;
padding: 0.33em 1em;
text-align: left;
font-size: smaller;
}
/* subtle grey for alternate row backgrounds */
table.inflection tr:nth-child(odd) {
background: #fcfcfc;
/* TODO consider palettizing */
}
/* and for row headers */
table.inflection tr:nth-child(odd):not(.rowgroup) th {
background: #f6f6f6;
/* TODO consider palettizing */
}
/* dark mode background colors for table.inflection */
@media screen {
html.skin-theme-clientpref-night table.inflection { background-color: #242424; }
html.skin-theme-clientpref-night table.inflection tr:nth-child(odd) { background-color: #2E2E2E; }
html.skin-theme-clientpref-night table.inflection tr:nth-child(odd):not(.rowgroup) th { background-color: #303030; }
}
@media screen and (prefers-color-scheme: dark) {
html.skin-theme-clientpref-os table.inflection { background-color: #242424; }
html.skin-theme-clientpref-os table.inflection tr:nth-child(odd) { background-color: #2E2E2E; }
html.skin-theme-clientpref-os table.inflection tr:nth-child(odd):not(.rowgroup) th { background-color: #303030; }
}
table.inflection td,
table.inflection th {
padding: 0.33em 1em;
vertical-align: baseline;
}
/* but vertically center multi-row cells */
table.inflection td[rowspan] {
vertical-align: middle;
}
table.inflection td {
text-align: center;
}
/* regular row headers, in the left column */
table.inflection th {
background: var(--wikt-palette-paleblue, #f8f9fa);
text-align: left;
}
/* rowgroup header rows */
table.inflection tr.rowgroup th {
background: var(--wikt-palette-lightergrey, #eeeeee);
text-align: center;
}
/* first-of-several rowgroup header cells is aligned left */
table.inflection tr.rowgroup th:first-child {
text-align: left;
}
table.inflection tr.rowgroup th:first-child:only-child {
text-align: center;
}
/* rows with dividers above */
table.inflection tr.divider th {
border-top: 3px solid #999999;
}
/* transliterations */
table.inflection .translit {
color: #888;
}
/* header links aren’t coloured until hover/active */
table.inflection th a:link,
table.inflection th a:visited {
color: inherit;
text-decoration: inherit;
}
table.inflection th a:hover {
color: #0645ad;
text-decoration: underline;
}
table.inflection th a:active {
color: #faa700;
text-decoration: underline;
}
/* ----
end of Inflection tables */
/* Hide interproject links used by [[MediaWiki:Gadget-AggregateInterprojectLinks.js]] */
.interProject {
display: none;
clear: both;
border-top: 2px dotted #AAAAAA;
margin-top: 2em;
}
/* Translation styling */
.checktrans,
.rfc-trans,
.trreq,
.ttbc {
background: var(--wikt-palette-palegreen, #f0fff0);
}
/* t+ t t- templates: */
.tneg,
.tpos,
.tunk {
vertical-align: 20%;
font-size: 80%;
}
.tneg a {
color: #cc2200 !important;
}
/* monobook redlink colour, standard #ba0000 */
.tneg a:visited {
color: #a55858 !important;
}
/* standard visited redlink colour */
.tpos a {
color: var(--wikt-palette-deepblue);
}
/* standard bluelink colour */
.tpos a:visited {
color: var(--wikt-palette-blue);
}
/* standard bluelink colour */
.tunk a {
color: #3366BB !important;
}
/* standard external interwiki colour */
.tunk a:active {
color: #3366BB !important;
}
/* redundant */
/* for parentheses, we use .tlc and .tlcp, the latter has no definition here
(display:inline) */
.tlc {
display: none;
}
/* Main page fixes */
#interwiki-completelist {
font-weight: bold;
}
/* Try to make search results more obviously links */
.mw-special-Search #bodyContent li a {
font-weight: bold;
}
.mw-special-Search .searchmatch {
font-weight: normal;
color: var(--wikt-palette-black, #000000);
background-color: var(--wikt-palette-brightyellow, #FFEE77);
}
/* [[WT:FEED]] */
#p-feedback a {
cursor: pointer;
}
/* Old revisions */
#mw-revision-info {
border: 2px solid #8888FF;
/* TODO consider palettizing */
border-left: 0px;
border-right: 0px;
font-size: 110%;
margin: 5px;
margin-left: 0px;
}
/* dark mode border color for #mw-revision-info */
@media screen { html.skin-theme-clientpref-night #mw-revision-info { border-color: #4444BB; } }
@media screen and (prefers-color-scheme: dark) { html.skin-theme-clientpref-os #mw-revision-info { border-color: #4444BB; } }
#mw-editingold {
margin-left: 15px;
margin: 5px;
padding: 5px;
border: 2px solid #CC0000;
border-width: 2px 0px;
}
/* maintenance line */
.maintenance-line {
color: #777777;
/* TODO consider palettizing */
}
/* dark mode text color for maintenance line */
@media screen { html.skin-theme-clientpref-night .maintenance-line { color: #adb7bf; } }
@media screen and (prefers-color-scheme: dark) { html.skin-theme-clientpref-os .maintenance-line { color: #adb7bf; } }
/* Night mode logo appearance, see [[Wiktionary:Grease pit/2025/January#Top left Wiktionary logo in dark mode]] */
@media screen {
html.skin-theme-clientpref-night img.mw-logo-icon {
color-scheme: light;
filter: invert(1) brightness(55%) contrast(250%) hue-rotate(180deg);
}
}
@media screen and (prefers-color-scheme: dark) {
html.skin-theme-clientpref-os img.mw-logo-icon {
color-scheme: light;
filter: invert(1) brightness(55%) contrast(250%) hue-rotate(180deg);
}
}
/* Make Recent changes look nice again */
span.newpage,
span.minor,
span.searchmatch,
span.bot,
span.unpatrolled {
font-family: sans-serif !important;
}
/* Styling for the different kinds of collapsible boxes and lists */
/* NavFrames */
div.NavFrame,
details.NavFrame {
border: 1px solid var(--wikt-palette-grey, #9e9e9e);
text-align: center;
border-collapse: collapse;
font-size: 95%;
overflow: auto;
width: auto;
}
div.NavFrame > ul, div.NavFrame > ol {
text-align: left;
}
div.NavFrame div.NavHead,
details.NavFrame summary.NavHead {
margin: 2px;
min-height: 1.6em;
font-weight: bold;
font-size: 100%;
text-align: left;
padding: 1px 5px 1px 10px;
background-color: var(--wikt-palette-dullcyan, #eaecf0);
}
div.NavFrame p {
font-size: 100%;
}
div.NavFrame div.NavContent,
details.NavFrame div.NavContent {
font-size: 100%;
border-top: 1px solid var(--wikt-palette-grey, #9e9e9e);
}
div.NavFrame div.NavContent p,
details.NavFrame div.NavContent p {
font-size: 100%;
}
/* Used by box-top/box-bottom */
.NavContent.boxcontent {
padding: 0.25em 0.5em;
}
.NavContent.boxcontent > p:last-child {
margin-bottom: 0.5em; /* from 1em to avoid some extra asymmetric space */
}
/* Override default added margins which mess up the background */
.NavContent.derivedterms > p,
.NavContent.columns-bg > p {
margin: 0;
}
.NavContent.derivedterms > p,
.NavContent.derivedterms > ul,
.NavContent.columns-bg > p,
.NavContent.columns-bg > ul {
padding: 0.5em;
}
span.NavToggle {
cursor: pointer;
float: right;
font-weight: normal;
font-style: normal;
font-size: smaller;
margin-top: 1px;
}
/* add slight gap between NavToggle and rest of the heading */
.NavToggle {
margin-left: 0.5em;
}
/* Collapsible term lists */
.list-switcher {
/* This is a hack so we can use getComputedStyle to find the
maximum permissible height value of a list-switcher.
It must be kept in sync with .list-switcher-collapsed `max-height` */
bottom: calc(3.2 * 1.6em); /* for browsers that don't support `lh` units */
bottom: 3.2lh;
}
.list-switcher-wrapper,
:not(.list-switcher-wrapper) > .list-switcher {
contain: layout; /* stop floating elements from messing with layout */
margin-top: 0.3em; /* replaces margin lost on <ul> in following ruleset */
}
.list-switcher-wrapper + .list-switcher-wrapper {
margin-top: 0.6em;
}
.list-switcher > div > ul,
.list-switcher-wrapper > div > ul {
margin-top: 0; /* needed to avoid jumps when collapsing/uncollapsing */
}
.list-switcher ul ul {
margin-top: 0.1em; /* make margin above nested lists equal to margin at bottom of <li>s */
}
.list-switcher-collapsed {
/* If changing this value, change .list-switcher `bottom` above */
max-height: calc(3.2 * 1.6em); /* for browsers that don't support `lh` units */
max-height: 3.2lh;
overflow-y: hidden;
}
.list-switcher-header {
background: var(--wikt-palette-grey-indigo-2);
font-weight: bold;
font-size: 95%;
padding: 0.2em 0.4em 0.1em 0.6em;
border-top-left-radius: 0.3lh;
border-top-right-radius: 0.3lh;
}
.list-switcher-header + .list-switcher .term-list,
.list-switcher-header + .term-list {
padding-top: 0.1em;
}
.list-switcher-edit {
margin-left: 1.5em;
font-size: 87.75%; /* exactly match font size of [show more] button (in Chromium-based browsers at least) */
font-weight: normal;
}
.list-switcher-edit::before {
content: "[";
}
.list-switcher-edit::after {
content: "]";
}
.list-switcher-large-text {
/* Keep in sync with next ruleset */
bottom: calc(4 * 1.6em); /* for browsers that don't support `lh` units */
bottom: 4lh;
}
.list-switcher-large-text.list-switcher-collapsed {
/* Keep in sync with previous ruleset */
max-height: calc(4 * 1.6em); /* for browsers that don't support `lh` units */
max-height: 4lh;
}
.list-switcher-element {
text-align: center;
cursor: pointer;
background: var(--wikt-palette-grey-indigo-2);
}
.list-switcher-element .NavToggle {
float: none;
}
/* this is a legacy rule that only applies to {{rootsee}} and
{{script appendix}} - these need a fairly wide width */
.columns-bg:not(.term-list) > div > div > .CategoryTreeChildren,
.columns-bg:not(.term-list) > div > .CategoryTreeChildren {
-moz-column-width: 25em;
column-width: 25em;
}
/* Hidden Quotes and *nyms toggle */
.HQToggle,
.nyms-toggle,
.usex-toggle {
font-size: smaller;
position: relative;
bottom: 1px;
left: 5px;
}
/* Hidden quotes */
.client-js .ns-0 ol>li>ul {
display: none;
}
/* wrap toggle links with [ and ] */
.HQToggle:before,
.NavToggle:before,
.nyms-toggle:before,
.usex-toggle:before {
content: '[';
}
.HQToggle:after,
.NavToggle:after,
.nyms-toggle:after,
.usex-toggle:after {
content: ']';
}
.HQToggle a,
.NavToggle a,
.nyms-toggle a,
.usex-toggle a {
-webkit-user-select: none;
-moz-user-select: none;
user-select: none;
}
.client-js .NavFrame .NavContent {
display: none;
}
.client-js .not .NavContent {
/* ??? */
display: block;
}
/* View switcher */
.vsShow {
display: none;
}
/* End styling for collapsible lists */
/* Quote clarifications, e.g. {{quote-gloss}}, {{quote-qualifier}} */
.quote-note {
color: #999;
}
/* stuff visible when previewing an edit only */
.previewonly {
display: none;
}
#wikiPreview .previewonly {
display: inline;
}
/* Highlight the relevant sense when the user follows a link to a {{senseid}}.
The class="senseid" should ideally be on the enclosing <li> tag. We attempt to make the
highlight work when the class="senseid" is on a <span> inside the <li>, but the :has
selector was not supported by all browsers as of late 2023. This feature was nonetheless
requested by Benwing at [[Wiktionary:Grease_pit/2023/November#Why_does_Template%3Asenseid_use_HTML_li_tag%3F]].
THe version with :has is provided as a separate declaration to ensure maximum compatibility. */
.senseid:target {
background: var(--wikt-palette-lightblue, #DEF);
}
li:has(> span.senseid:target) {
background: var(--wikt-palette-lightblue, #DEF);
}
.etymid:target {
background: var(--wikt-palette-lightblue, #DEF);
}
p:has(> span.etymid:target) {
background: var(--wikt-palette-lightblue, #DEF);
}
/* fix extra gap if there is something between etymid and rest of etymology */
p:has(> span.etymid:only-child) {
display: inline;
}
/* and highlight the next paragraph too if that happened,
since otherwise the highlight may be lost entirely on the invisible etymid */
p:has(> span.etymid:target:only-child) + p {
background: var(--wikt-palette-lightblue, #DEF);
}
/* Skin CSS highlights table rows targeted by the current browser location
(tr:target). This rule highlight table rows containing target cells so that
there can be multiple IDs in a table row in [[Wiktionary:List of languages]]
and [[Wiktionary:List of languages/special#Etymology-only languages]]. */
tr:has(> :target),
tr:has(> td > code:target) {
background: var(--wikt-palette-lightblue, #DEF);
}
/* show the "serial and" in the disambiguation see also */
.serial-and {
display: inline;
}
/* hide the serial commas */
.serial-comma {
display: none;
}
/* Gender and number templates */
.gender,
.number,
.noun-class {
font-style: italic;
}
abbr {
border-bottom-width: 0;
}
/* hide "did you mean" on Noarticletext self-links */
.did-you-mean strong {
display: none;
}
/* make script/module errors smaller */
.scribunto-error {
font-size: 75%;
}
/* allow inline hieroglyphs */
.mw-hiero-outer {
display: inline-table !important; /* override skin styling on mobile */
vertical-align: middle;
font-size: 10px;
}
/* allow mirrored custom hieroglyph (and other) images */
.mw-mirrored img {
transform: scaleX(-1);
}
/* softer highlighting of 'updated since last visit' */
span.updatedmarker {
background-color: var(--wikt-palette-mint, #c0e4c0);
}
/* {{TOC limit}} */
/* Allow limiting of which header levels are shown in a TOC;
<div class="toclimit-3">, for instance, will limit to showing ==headings==
and ===headings=== but no further (as long as there are no =headings= on the
page, which there shouldn't be according to the MoS). */
.toclimit-2 .toclevel-1 ul,
.toclimit-3 .toclevel-2 ul,
.toclimit-4 .toclevel-3 ul,
.toclimit-5 .toclevel-4 ul,
.toclimit-6 .toclevel-5 ul,
.toclimit-7 .toclevel-6 ul {
display: none;
}
/*
* Script and language-related styles are in [[MediaWiki:Gadget-LanguagesAndScripts.css]]
*/
/* A kludge that lets the members of [[:Category:Redirected combining characters]] be displayed. */
body.page-Category_Combining_characters div#mw-pages li,
body.page-Category_Redirected_combining_characters div#mw-pages li,
body.page-Category_IPA_combining_characters div#mw-pages li {
letter-spacing: 0.3em;
}
/* Definition dates, in {{defdate}} */
.defdate {
font-size: smaller;
}
/* unit tests filter */
table.unit-tests.unit-tests-hide-passing tr.unit-test-pass {
display: none;
}
table.unit-tests th.unit-tests-img-corner {
background: var(--wikt-palette-lightblue, #d9ebff);
min-width: 1em;
}
table.unit-tests.unit-tests-hide-passing th.unit-tests-img-corner {
background: red;
}
/* multi-column lists */
li,
.group-in-column {
-moz-column-break-inside: avoid;
break-inside: avoid;
}
/* {{shortcut}} */
.shortcut-box,
.category-edit-box {
border: 1px solid var(--border-color-base, #aaaaaa);
color: var(--color-base, black);
background: var(--wikt-palette-paleblue, #f9f9f9);
margin: 0 0 .5em 1em;
text-align: center;
padding: 5px;
float: right;
clear: both;
font-weight: bold;
font-size: smaller;
}
/* Display tabs with 4 spaces, see [[phab:T59824]] and [[phab:T59825]] */
textarea#wpTextbox1+div:last-child,
/* workaround for [[mw:User:Remember the dot/Syntax highlighter]] */
textarea,
pre,
code,
.mw-highlight {
-moz-tab-size: 4;
-o-tab-size: 4;
tab-size: 4;
}
/* stop double-bolding of self-links like in [[acquit]], [[fishbone]] */
/* old code: b .selflink, strong .selflink { font-weight: inherit; } */
b,
strong {
font-weight: bold;
}
tr:target {
background: var(--wikt-palette-lightblue, #DEF);
}
#firstHeading var,
.headword var {
color: #888;
}
/* Display a {{tlb}} / {{term-label}} template on its own line if it comes right after a headword template.
It is too easy to miss after headwords (especially long ones). */
p .headword-line ~ .usage-label-term::before {
content: "\a"; /* newline */
white-space: pre;
}
/* Temporary kludge to be used because categoryTree is generating a newline. This CSS line should be removed after the developers fix it. */
.CategoryTreeTag+p br:first-child {
display: none;
}
/* Used by column templates (see [[Module:columns]]). */
.ul-column-count>ul,
.ul-column-count>ol,
.ul-column-count>dl {
-moz-column-gap: 20px;
column-gap: 20px;
}
.ul-column-count[data-column-count="2"]>ul,
.ul-column-count[data-column-count="2"]>ol,
.ul-column-count[data-column-count="2"]>dl {
-moz-column-count: 2;
column-count: 2;
}
.ul-column-count[data-column-count="3"]>ul,
.ul-column-count[data-column-count="3"]>ol,
.ul-column-count[data-column-count="3"]>dl {
-moz-column-count: 3;
column-count: 3;
}
.ul-column-count[data-column-count="4"]>ul,
.ul-column-count[data-column-count="4"]>ol,
.ul-column-count[data-column-count="4"]>dl {
-moz-column-count: 4;
column-count: 4;
}
.ul-column-count[data-column-count="5"]>ul,
.ul-column-count[data-column-count="5"]>ol,
.ul-column-count[data-column-count="5"]>dl {
-moz-column-count: 5;
column-count: 5;
}
.ul-column-count[data-column-count="6"]>ul,
.ul-column-count[data-column-count="6"]>ol,
.ul-column-count[data-column-count="6"]>dl {
-moz-column-count: 6;
column-count: 6;
}
.columns-bg {
/* Default background color for multi-column lists. */
background: var(--wikt-palette-lavender, #f8f8ff);
/* prevent text crashing into edge of box */
padding-right: 0.3em;
}
/* Default style for hypothetical inflections -- currently italic. */
.hypothetical {
font-style: italic;
}
/* Style for entries using deprecated templates */
.deprecated {
color: olivedrab;
}
.deprecated a {
color: darkgreen;
}
/* Style for entries using deprecated labels */
.deprecated-label {
color: olivedrab;
text-decoration: line-through;
}
.deprecated-label a {
color: darkgreen;
text-decoration: line-through;
}
/* Style for notes added using the bad= param in {{audio}} */
.bad-audio-note {
color: #FF2200;
font-weight: bold;
}
/* WikiHiero kludge */
/* disable for now, apparently not necessary and breaks wrapping
.wikt-hierokludge {
display: inline-block;
} */
/* Support lists that automatically split into limited-width columns (for translations tables and the like): */
.multicolumn-list>ul {
-moz-column-width: 25em;
column-width: 25em;
-moz-column-gap: 20px;
column-gap: 20px;
}
.multicolumn-list-wide>ul {
-moz-column-width: 55em;
column-width: 55em;
-moz-column-gap: 20px;
column-gap: 20px;
}
.multicolumn-list-narrow>ul {
-moz-column-width: 22em;
column-width: 22em;
-moz-column-gap: 20px;
column-gap: 20px;
}
/* [[phab:T156351]]: Support for Parsoid's Cite implementation */
a[ rel="mw:referencedBy"]::before {
content: " ^";
}
/* [[phab:T316670]]: fix header issues */
.mw-heading * {
word-break: normal;
}
/* From [[Module:shortcut box/styles.css]] */
a .redlink {
color: var(--color-destructive, #d73333);
}
a:visited .redlink {
color: var(--color-destructive--visited, #a55858);
}
a:visited:hover .redlink {
color: var(--color-destructive--visited, #a55858);
}
a:hover .redlink {
color: var(--color-destructive--hover, #ff4242);
text-decoration: underline;
}
a:active .redlink {
color: var(--color-destructive--active, #b32424);
text-decoration: underline;
}
a:focus .redlink {
outline-color: var(--outline-color-progressive--focus, #36c);
}
/* approximate replacement for .toccolours, which is not defined in the Vector 2022 skin */
.standard-box {
background-color: var(--wikt-palette-paleblue, #f8f9fa);
border: 1px solid var(--wikt-palette-grey, #9e9e9e); /* was #aabbdd but no real equivalent in our palette */
padding: 5px;
}
.mw-parser-output a[role="button"] {
color: var(--wikt-palette-black);
font-weight: normal;
}
/* override default behaviour for button links */
.mw-parser-output a[role="button"]:focus:not(:hover) {
text-decoration: none;
}
/* Make the list of references smaller */
ol.references {
font-size: 90%; /* Default font-size */
margin-bottom: 0.5em;
}
/*** Dark mode ***/
/* Beşa zimanî */
html.skin-theme-clientpref-night .ns-0 #mw-content-text .mw-heading2,
html.skin-theme-clientpref-night .ns-108 #mw-content-text .mw-heading2 {
background-color: #27292d;
}
/* Rengê "teal" bo beşên cureyên peyvan*/
html.skin-theme-clientpref-night .ns-0 #mw-content-text .mw-heading3,
html.skin-theme-clientpref-night .ns-108 #mw-content-text .mw-heading3 {
color: #B0D493;
}
html.skin-theme-clientpref-night div#editpage-specialchars a {
background-color: transparent;
}
html.skin-theme-clientpref-night div.NavFrame div.NavHead,
html.skin-theme-clientpref-night details.NavFrame summary.NavHead {
background-color: #27292d;
}
html.skin-theme-clientpref-night div.NavFrame, details.NavFrame {
background-color: #202122;
}
/* Dark mode end */
/* Change the external link icon to a PDF icon for all PDF files */
.mw-parser-output a[href$=".pdf"].external,
.mw-parser-output a[href*=".pdf?"].external,
.mw-parser-output a[href*=".pdf#"].external,
.mw-parser-output a[href$=".PDF"].external,
.mw-parser-output a[href*=".PDF?"].external,
.mw-parser-output a[href*=".PDF#"].external {
background: url("//upload.wikimedia.org/wikipedia/commons/4/4d/Icon_pdf_file.png") no-repeat right;
/* @noflip */
padding: 8px 18px 8px 0;
}
/* Add YouTube icon after links to YouTube. */
.mw-parser-output a[href*="youtube.com"].external,
.mw-parser-output a[href*="youtu.be"].external {
background: url("//upload.wikimedia.org/wikipedia/commons/f/fd/YouTube_full-color_icon_(2024).svg") no-repeat right;
background-size: auto;
padding: 8px 18px 8px 0;
background-size: 16px;
}
/* </nowiki> */
mpv5sjbr5c773w463z5s1cjtmy2lj4j
6333728
6333631
2026-08-14T20:31:29Z
Bikarhêner
3719
6333728
css
text/css
/* ----------
Ji @[[en:MediaWiki:Gadget-Site.css]]
<nowiki>
CSS Style
* Indent with tab characters
* One line space between each declaration
* One selector per line
* Opening brace on the same line as the last selector
* Don't omit optional semicolons
* Closing brace on its own line
* Closing brace indented to match the preceding style declarations
* Alternatively, very short style rules may be all on one line
---------- */
/* csslint adjoining-classes:false */
/* See also [[MediaWiki:Minerva.css]], [[MediaWiki:Vector.css]] */
/* ku-Arab: Format ji bo tabloyên ku di aliyê rastê de ne */
.tablo-flip {
float: right;
margin-left: 0.5em;
margin-right: 0;
clear: right;
}
.tablo-flip .row-flip {
text-align: left;
}
/* @noflip */
:lang(ku-arab) .tablo-flip {
float: left;
margin-left: 0;
margin-right: 0.5em;
clear: left;
}
/* @noflip */
:lang(ku-arab) .tablo-flip .row-flip {
text-align: right;
}
/* Ji bo {{werger-ser}} */
/* @noflip */
:lang(ku-arab) .translations {
text-align: right;
}
/* @noflip */
:lang(ku-arab) div.NavFrame > ul, :lang(ku-arab) div.NavFrame > ol {
text-align: right;
}
/* @noflip */
:lang(ku-arab) div.NavFrame div.NavHead,
:lang(ku-arab) details.NavFrame summary.NavHead {
text-align: right;
}
/* @noflip */
:lang(ku-arab) span.NavToggle {
float: left;
}
/* @noflip */
:lang(ku-arab) .list-switcher-element .NavToggle {
float: none;
}
/* "Flipping" ji bo tagên HTMLê (div, span, ...) yên din.
Li şûna "float:right", "text-align:left" vana werin bikaranîn (ji bo "flipping").
Ji ber ku dema ku di nav kodî de style="float:right" tê nivîsandin flipping naşuxile: hertim 'float:right' e.
*/
.float-right-flip {
float: right;
}
.float-left-flip {
float: left;
}
.align-right-flip {
text-align: right;
}
.align-left-flip {
text-align: left;
}
.clear-right-flip {
clear: right;
}
.clear-left-flip {
clear: left;
}
/* @noflip */
:lang(ku-arab) .float-right-flip {
float: left;
}
/* @noflip */
:lang(ku-arab) .float-left-flip {
float: right;
}
/* @noflip */
:lang(ku-arab) .align-right-flip {
text-align: left;
}
/* @noflip */
:lang(ku-arab) .align-left-flip {
text-align: right;
}
/* @noflip */
:lang(ku-arab) .clear-right-flip {
clear: left;
}
/* @noflip */
:lang(ku-arab) .clear-left-flip {
clear: right;
}
/* Ji bo {{wîkîpediya}} */
.sister-box {
float: right;
border: solid #aaa 1px;
font-size: 90%;
background: #f9f9f9;
width: 250px;
padding: 4px;
text-align: left;
}
.sister-wiki-logo {
float: left;
}
.sister-wiki-links {
margin-left: 15px;
}
.sister-wiki-content {
margin-left: 60px;
}
/* @noflip */
:lang(ku-arab) .sister-box {
clear:left;
float: left;
border: solid #aaa 1px;
font-size: 90%;
background: #f9f9f9;
width: 250px;
padding: 4px;
text-align: right;
}
/* @noflip */
:lang(ku-arab) .sister-wiki-logo {
float: right;
}
/* @noflip */
:lang(ku-arab) .sister-wiki-links {
margin-left: 15px;
}
/* @noflip */
:lang(ku-arab) .sister-wiki-content {
margin-left:5px;
margin-right:60px
}
:lang(ku-arab) .sister-wiki-content {
}
/* Editsection */
.mw-editsection {
font-size: x-small;
}
/* Jêgirtin */
.jegirtin-text {
font-style: italic;
}
:lang(ku-arab) .jegirtin-text {
font-style: normal;
}
/* Beşa zimanî */
.ns-0 #mw-content-text .mw-heading2, .ns-108 #mw-content-text .mw-heading2 {
clear: both;
background: #eaecf0;
padding-left: 0.2em;
font-size: 180%;
font-weight: 500;
margin-top: 1em;
margin-bottom: 0.5em;
}
/* Rengê "teal" bo beşên cureyên peyvan*/
.ns-0 #mw-content-text .mw-heading3, .ns-108 #mw-content-text .mw-heading3 {
color:teal;
border-bottom: dotted 1px #aaa;
}
.ns-0 #mw-content-text .mw-heading4, .ns-108 #mw-content-text .mw-heading4
{
border-bottom: dotted 1px #ddd;
}
/* Valahiya di navber mînakan */
.ns-0 ol li, .ns-0 ol li li{
margin-bottom: .4em;
}
/* Sernavê Destpêkê veşêre */
.page-Destpêk h1.firstHeading,
.page-Destpêk #lastmod,
.page-Destpêk #siteSub,
.page-Destpêk #contentSub,
.page-Destpêk #catlinks {
display: none;
}
sup,
sub {
/* prevent odd line-height for raised and lowered characters */
line-height: 1em;
}
/* and keep links at normal font size/weight, else they inherit the header
attributes */
.editsection {
font-size: 100%;
font-weight: normal;
}
pre code,
code code {
border: none;
padding: 0;
}
pre var,
code var {
color: #777;
}
/* This fixes a bug where certain Tibetan terms are cut off at the bottom... */
#firstHeading {
overflow: visible;
}
.ns-0 .timed-text {
display: none;
}
.client-js .audiometa {
display: none;
}
.client-nojs .audiofile {
display: none;
}
.nowrap {
white-space: nowrap;
}
/* wikitable is part of core. prettytable is deprecated but still used in some
places, until fully replaced: */
table.prettytable {
margin: 1em 1em 1em 0;
background: var(--wikt-palette-paleblue, #f8f9fa);
border: 1px var(--border-color-base, #aaaaaa) solid;
border-collapse: collapse;
}
table.prettytable th,
table.prettytable td {
border: 1px var(--border-color-base, #aaaaaa) solid;
padding: 0.2em;
}
table.prettytable th {
background: var(--wikt-palette-lightergrey, #eeeeee);
text-align: center;
}
table.prettytable caption {
margin-left: inherit;
margin-right: inherit;
}
/* default setting for {{qualifier}} and {{sense}}.
(Related classes that can be overridden: .qualifier-comma,
.qualifier-content, .ib-brac, .qualifier-brac, .sense-qualifier-colon.) */
.ib-comma {
font-style: normal;
}
.ib-content {
font-style: italic;
}
.ib-content i,
.ib-content em {
font-style: normal;
}
.context-qualifier-colon {
display: none;
}
/* default style for indented "see also" */
.disambig-see-also {
text-indent: 2em;
}
.mention-tr {
font-style: italic;
}
/* add left-to-right mark */
.mention-gloss-paren::before,
.mention-tr-paren::before {
content: "";
}
/* non-italic and non-bold gloss */
.mention-gloss,
.mention-gloss-double-quote,
.mention-gloss-paren,
.mention-tr-gloss-separator-comma,
.mention-tr-paren,
.mention-tr-gloss-separator-comma {
font-style: normal;
font-weight: inherit;
}
/* default style for "form of" definitions */
.use-with-mention,
.form-of-definition {
font-style: italic;
}
.use-with-mention i,
.form-of-definition-link {
font-style: normal;
}
.use-with-mention .mention,
.form-of-definition-link .mention {
font-style: normal;
font-weight: bold;
}
/* display normalization in {{ux}}/{{usex}}, {{quote}}, {{quote-*}} in italics */
.e-normalization {
font-style: italic;
}
/* Inflection tables
----------------------------- */
/* To colour links in inflection tables (currently done with
{{notred}}) black without using #ifexist and allowing for user
override */
.inflection-table a.new {
color: inherit;
}
/* fill a parent NavContent collapsing box */
.NavContent table.inflection,
.NavContent table.inflection-table {
margin-top: 0;
width: 100%;
display: table;
border: 0;
}
/* basic inflection table styles */
table.inflection {
border-collapse: collapse;
border: 1px solid;
background: #ffffff;
/* TODO consider palettizing */
}
table.inflection caption {
caption-side: bottom;
padding: 0.33em 1em;
text-align: left;
font-size: smaller;
}
/* subtle grey for alternate row backgrounds */
table.inflection tr:nth-child(odd) {
background: #fcfcfc;
/* TODO consider palettizing */
}
/* and for row headers */
table.inflection tr:nth-child(odd):not(.rowgroup) th {
background: #f6f6f6;
/* TODO consider palettizing */
}
/* dark mode background colors for table.inflection */
@media screen {
html.skin-theme-clientpref-night table.inflection { background-color: #242424; }
html.skin-theme-clientpref-night table.inflection tr:nth-child(odd) { background-color: #2E2E2E; }
html.skin-theme-clientpref-night table.inflection tr:nth-child(odd):not(.rowgroup) th { background-color: #303030; }
}
@media screen and (prefers-color-scheme: dark) {
html.skin-theme-clientpref-os table.inflection { background-color: #242424; }
html.skin-theme-clientpref-os table.inflection tr:nth-child(odd) { background-color: #2E2E2E; }
html.skin-theme-clientpref-os table.inflection tr:nth-child(odd):not(.rowgroup) th { background-color: #303030; }
}
table.inflection td,
table.inflection th {
padding: 0.33em 1em;
vertical-align: baseline;
}
/* but vertically center multi-row cells */
table.inflection td[rowspan] {
vertical-align: middle;
}
table.inflection td {
text-align: center;
}
/* regular row headers, in the left column */
table.inflection th {
background: var(--wikt-palette-paleblue, #f8f9fa);
text-align: left;
}
/* rowgroup header rows */
table.inflection tr.rowgroup th {
background: var(--wikt-palette-lightergrey, #eeeeee);
text-align: center;
}
/* first-of-several rowgroup header cells is aligned left */
table.inflection tr.rowgroup th:first-child {
text-align: left;
}
table.inflection tr.rowgroup th:first-child:only-child {
text-align: center;
}
/* rows with dividers above */
table.inflection tr.divider th {
border-top: 3px solid #999999;
}
/* transliterations */
table.inflection .translit {
color: #888;
}
/* header links aren’t coloured until hover/active */
table.inflection th a:link,
table.inflection th a:visited {
color: inherit;
text-decoration: inherit;
}
table.inflection th a:hover {
color: #0645ad;
text-decoration: underline;
}
table.inflection th a:active {
color: #faa700;
text-decoration: underline;
}
/* ----
end of Inflection tables */
/* Hide interproject links used by [[MediaWiki:Gadget-AggregateInterprojectLinks.js]] */
.interProject {
display: none;
clear: both;
border-top: 2px dotted #AAAAAA;
margin-top: 2em;
}
/* Translation styling */
.checktrans,
.rfc-trans,
.trreq,
.ttbc {
background: var(--wikt-palette-palegreen, #f0fff0);
}
/* t+ t t- templates: */
.tneg,
.tpos,
.tunk {
vertical-align: 20%;
font-size: 80%;
}
.tneg a {
color: #cc2200 !important;
}
/* monobook redlink colour, standard #ba0000 */
.tneg a:visited {
color: #a55858 !important;
}
/* standard visited redlink colour */
.tpos a {
color: var(--wikt-palette-deepblue);
}
/* standard bluelink colour */
.tpos a:visited {
color: var(--wikt-palette-blue);
}
/* standard bluelink colour */
.tunk a {
color: #3366BB !important;
}
/* standard external interwiki colour */
.tunk a:active {
color: #3366BB !important;
}
/* redundant */
/* for parentheses, we use .tlc and .tlcp, the latter has no definition here
(display:inline) */
.tlc {
display: none;
}
/* Main page fixes */
#interwiki-completelist {
font-weight: bold;
}
/* Try to make search results more obviously links */
.mw-special-Search #bodyContent li a {
font-weight: bold;
}
.mw-special-Search .searchmatch {
font-weight: normal;
color: var(--wikt-palette-black, #000000);
background-color: var(--wikt-palette-brightyellow, #FFEE77);
}
/* [[WT:FEED]] */
#p-feedback a {
cursor: pointer;
}
/* Old revisions */
#mw-revision-info {
border: 2px solid #8888FF;
/* TODO consider palettizing */
border-left: 0px;
border-right: 0px;
font-size: 110%;
margin: 5px;
margin-left: 0px;
}
/* dark mode border color for #mw-revision-info */
@media screen { html.skin-theme-clientpref-night #mw-revision-info { border-color: #4444BB; } }
@media screen and (prefers-color-scheme: dark) { html.skin-theme-clientpref-os #mw-revision-info { border-color: #4444BB; } }
#mw-editingold {
margin-left: 15px;
margin: 5px;
padding: 5px;
border: 2px solid #CC0000;
border-width: 2px 0px;
}
/* maintenance line */
.maintenance-line {
color: #777777;
/* TODO consider palettizing */
}
/* dark mode text color for maintenance line */
@media screen { html.skin-theme-clientpref-night .maintenance-line { color: #adb7bf; } }
@media screen and (prefers-color-scheme: dark) { html.skin-theme-clientpref-os .maintenance-line { color: #adb7bf; } }
/* Night mode logo appearance, see [[Wiktionary:Grease pit/2025/January#Top left Wiktionary logo in dark mode]] */
@media screen {
html.skin-theme-clientpref-night img.mw-logo-icon {
color-scheme: light;
filter: invert(1) brightness(55%) contrast(250%) hue-rotate(180deg);
}
}
@media screen and (prefers-color-scheme: dark) {
html.skin-theme-clientpref-os img.mw-logo-icon {
color-scheme: light;
filter: invert(1) brightness(55%) contrast(250%) hue-rotate(180deg);
}
}
/* Make Recent changes look nice again */
span.newpage,
span.minor,
span.searchmatch,
span.bot,
span.unpatrolled {
font-family: sans-serif !important;
}
/* Styling for the different kinds of collapsible boxes and lists */
/* NavFrames */
div.NavFrame,
details.NavFrame {
border: 1px solid var(--wikt-palette-grey, #9e9e9e);
text-align: center;
border-collapse: collapse;
font-size: 95%;
overflow: auto;
width: auto;
}
div.NavFrame > ul, div.NavFrame > ol {
text-align: left;
}
div.NavFrame div.NavHead,
details.NavFrame summary.NavHead {
margin: 2px;
min-height: 1.6em;
font-weight: bold;
font-size: 100%;
text-align: left;
padding: 1px 5px 1px 10px;
background-color: var(--wikt-palette-dullcyan, #eaecf0);
}
div.NavFrame p {
font-size: 100%;
}
div.NavFrame div.NavContent,
details.NavFrame div.NavContent {
font-size: 100%;
border-top: 1px solid var(--wikt-palette-grey, #9e9e9e);
}
div.NavFrame div.NavContent p,
details.NavFrame div.NavContent p {
font-size: 100%;
}
/* Used by box-top/box-bottom */
.NavContent.boxcontent {
padding: 0.25em 0.5em;
}
.NavContent.boxcontent > p:last-child {
margin-bottom: 0.5em; /* from 1em to avoid some extra asymmetric space */
}
/* Override default added margins which mess up the background */
.NavContent.derivedterms > p,
.NavContent.columns-bg > p {
margin: 0;
}
.NavContent.derivedterms > p,
.NavContent.derivedterms > ul,
.NavContent.columns-bg > p,
.NavContent.columns-bg > ul {
padding: 0.5em;
}
span.NavToggle {
cursor: pointer;
float: right;
font-weight: normal;
font-style: normal;
font-size: smaller;
margin-top: 1px;
}
/* add slight gap between NavToggle and rest of the heading */
.NavToggle {
margin-left: 0.5em;
}
/* Collapsible term lists */
.list-switcher {
/* This is a hack so we can use getComputedStyle to find the
maximum permissible height value of a list-switcher.
It must be kept in sync with .list-switcher-collapsed `max-height` */
bottom: calc(3.2 * 1.6em); /* for browsers that don't support `lh` units */
bottom: 3.2lh;
}
.list-switcher-wrapper,
:not(.list-switcher-wrapper) > .list-switcher {
contain: layout; /* stop floating elements from messing with layout */
margin-top: 0.3em; /* replaces margin lost on <ul> in following ruleset */
}
.list-switcher-wrapper + .list-switcher-wrapper {
margin-top: 0.6em;
}
.list-switcher > div > ul,
.list-switcher-wrapper > div > ul {
margin-top: 0; /* needed to avoid jumps when collapsing/uncollapsing */
}
.list-switcher ul ul {
margin-top: 0.1em; /* make margin above nested lists equal to margin at bottom of <li>s */
}
.list-switcher-collapsed {
/* If changing this value, change .list-switcher `bottom` above */
max-height: calc(3.2 * 1.6em); /* for browsers that don't support `lh` units */
max-height: 3.2lh;
overflow-y: hidden;
}
.list-switcher-header {
background: var(--wikt-palette-grey-indigo-2);
font-weight: bold;
font-size: 95%;
padding: 0.2em 0.4em 0.1em 0.6em;
border-top-left-radius: 0.3lh;
border-top-right-radius: 0.3lh;
}
.list-switcher-header + .list-switcher .term-list,
.list-switcher-header + .term-list {
padding-top: 0.1em;
}
.list-switcher-edit {
margin-left: 1.5em;
font-size: 87.75%; /* exactly match font size of [show more] button (in Chromium-based browsers at least) */
font-weight: normal;
}
.list-switcher-edit::before {
content: "[";
}
.list-switcher-edit::after {
content: "]";
}
.list-switcher-large-text {
/* Keep in sync with next ruleset */
bottom: calc(4 * 1.6em); /* for browsers that don't support `lh` units */
bottom: 4lh;
}
.list-switcher-large-text.list-switcher-collapsed {
/* Keep in sync with previous ruleset */
max-height: calc(4 * 1.6em); /* for browsers that don't support `lh` units */
max-height: 4lh;
}
.list-switcher-element {
text-align: center;
cursor: pointer;
background: var(--wikt-palette-grey-indigo-2);
}
.list-switcher-element .NavToggle {
float: none;
}
/* this is a legacy rule that only applies to {{rootsee}} and
{{script appendix}} - these need a fairly wide width */
.columns-bg:not(.term-list) > div > div > .CategoryTreeChildren,
.columns-bg:not(.term-list) > div > .CategoryTreeChildren {
-moz-column-width: 25em;
column-width: 25em;
}
/* Hidden Quotes and *nyms toggle */
.HQToggle,
.nyms-toggle,
.usex-toggle {
font-size: smaller;
position: relative;
bottom: 1px;
left: 5px;
}
/* Hidden quotes */
.client-js .ns-0 ol>li>ul {
display: none;
}
/* wrap toggle links with [ and ] */
.HQToggle:before,
.NavToggle:before,
.nyms-toggle:before,
.usex-toggle:before {
content: '[';
}
.HQToggle:after,
.NavToggle:after,
.nyms-toggle:after,
.usex-toggle:after {
content: ']';
}
.HQToggle a,
.NavToggle a,
.nyms-toggle a,
.usex-toggle a {
-webkit-user-select: none;
-moz-user-select: none;
user-select: none;
}
.client-js .NavFrame .NavContent {
display: none;
}
.client-js .not .NavContent {
/* ??? */
display: block;
}
/* View switcher */
.vsShow {
display: none;
}
/* End styling for collapsible lists */
/* Quote clarifications, e.g. {{quote-gloss}}, {{quote-qualifier}} */
.quote-note {
color: #999;
}
/* stuff visible when previewing an edit only */
.previewonly {
display: none;
}
#wikiPreview .previewonly {
display: inline;
}
/* Highlight the relevant sense when the user follows a link to a {{senseid}}.
The class="senseid" should ideally be on the enclosing <li> tag. We attempt to make the
highlight work when the class="senseid" is on a <span> inside the <li>, but the :has
selector was not supported by all browsers as of late 2023. This feature was nonetheless
requested by Benwing at [[Wiktionary:Grease_pit/2023/November#Why_does_Template%3Asenseid_use_HTML_li_tag%3F]].
THe version with :has is provided as a separate declaration to ensure maximum compatibility. */
.senseid:target {
background: var(--wikt-palette-lightblue, #DEF);
}
li:has(> span.senseid:target) {
background: var(--wikt-palette-lightblue, #DEF);
}
.etymid:target {
background: var(--wikt-palette-lightblue, #DEF);
}
p:has(> span.etymid:target) {
background: var(--wikt-palette-lightblue, #DEF);
}
/* fix extra gap if there is something between etymid and rest of etymology */
p:has(> span.etymid:only-child) {
display: inline;
}
/* and highlight the next paragraph too if that happened,
since otherwise the highlight may be lost entirely on the invisible etymid */
p:has(> span.etymid:target:only-child) + p {
background: var(--wikt-palette-lightblue, #DEF);
}
/* Skin CSS highlights table rows targeted by the current browser location
(tr:target). This rule highlight table rows containing target cells so that
there can be multiple IDs in a table row in [[Wiktionary:List of languages]]
and [[Wiktionary:List of languages/special#Etymology-only languages]]. */
tr:has(> :target),
tr:has(> td > code:target) {
background: var(--wikt-palette-lightblue, #DEF);
}
/* show the "serial and" in the disambiguation see also */
.serial-and {
display: inline;
}
/* hide the serial commas */
.serial-comma {
display: none;
}
/* Gender and number templates */
.gender,
.number,
.noun-class {
font-style: italic;
}
abbr {
border-bottom-width: 0;
}
/* hide "did you mean" on Noarticletext self-links */
.did-you-mean strong {
display: none;
}
/* make script/module errors smaller */
.scribunto-error {
font-size: 75%;
}
/* allow inline hieroglyphs */
.mw-hiero-outer {
display: inline-table !important; /* override skin styling on mobile */
vertical-align: middle;
font-size: 10px;
}
/* allow mirrored custom hieroglyph (and other) images */
.mw-mirrored img {
transform: scaleX(-1);
}
/* softer highlighting of 'updated since last visit' */
span.updatedmarker {
background-color: var(--wikt-palette-mint, #c0e4c0);
}
/* {{TOC limit}} */
/* Allow limiting of which header levels are shown in a TOC;
<div class="toclimit-3">, for instance, will limit to showing ==headings==
and ===headings=== but no further (as long as there are no =headings= on the
page, which there shouldn't be according to the MoS). */
.toclimit-2 .toclevel-1 ul,
.toclimit-3 .toclevel-2 ul,
.toclimit-4 .toclevel-3 ul,
.toclimit-5 .toclevel-4 ul,
.toclimit-6 .toclevel-5 ul,
.toclimit-7 .toclevel-6 ul {
display: none;
}
/*
* Script and language-related styles are in [[MediaWiki:Gadget-LanguagesAndScripts.css]]
*/
/* A kludge that lets the members of [[:Category:Redirected combining characters]] be displayed. */
body.page-Category_Combining_characters div#mw-pages li,
body.page-Category_Redirected_combining_characters div#mw-pages li,
body.page-Category_IPA_combining_characters div#mw-pages li {
letter-spacing: 0.3em;
}
/* Definition dates, in {{defdate}} */
.defdate {
font-size: smaller;
}
/* unit tests filter */
table.unit-tests.unit-tests-hide-passing tr.unit-test-pass {
display: none;
}
table.unit-tests th.unit-tests-img-corner {
background: var(--wikt-palette-lightblue, #d9ebff);
min-width: 1em;
}
table.unit-tests.unit-tests-hide-passing th.unit-tests-img-corner {
background: red;
}
/* multi-column lists */
li,
.group-in-column {
-moz-column-break-inside: avoid;
break-inside: avoid;
}
/* {{shortcut}} */
.shortcut-box,
.category-edit-box {
border: 1px solid var(--border-color-base, #aaaaaa);
color: var(--color-base, black);
background: var(--wikt-palette-paleblue, #f9f9f9);
margin: 0 0 .5em 1em;
text-align: center;
padding: 5px;
float: right;
clear: both;
font-weight: bold;
font-size: smaller;
}
/* Display tabs with 4 spaces, see [[phab:T59824]] and [[phab:T59825]] */
textarea#wpTextbox1+div:last-child,
/* workaround for [[mw:User:Remember the dot/Syntax highlighter]] */
textarea,
pre,
code,
.mw-highlight {
-moz-tab-size: 4;
-o-tab-size: 4;
tab-size: 4;
}
/* stop double-bolding of self-links like in [[acquit]], [[fishbone]] */
/* old code: b .selflink, strong .selflink { font-weight: inherit; } */
b,
strong {
font-weight: bold;
}
tr:target {
background: var(--wikt-palette-lightblue, #DEF);
}
#firstHeading var,
.headword var {
color: #888;
}
/* Display a {{tlb}} / {{term-label}} template on its own line if it comes right after a headword template.
It is too easy to miss after headwords (especially long ones). */
p .headword-line ~ .usage-label-term::before {
content: "\a"; /* newline */
white-space: pre;
}
/* Temporary kludge to be used because categoryTree is generating a newline. This CSS line should be removed after the developers fix it. */
.CategoryTreeTag+p br:first-child {
display: none;
}
/* Used by column templates (see [[Module:columns]]). */
.ul-column-count>ul,
.ul-column-count>ol,
.ul-column-count>dl {
-moz-column-gap: 20px;
column-gap: 20px;
}
.ul-column-count[data-column-count="2"]>ul,
.ul-column-count[data-column-count="2"]>ol,
.ul-column-count[data-column-count="2"]>dl {
-moz-column-count: 2;
column-count: 2;
}
.ul-column-count[data-column-count="3"]>ul,
.ul-column-count[data-column-count="3"]>ol,
.ul-column-count[data-column-count="3"]>dl {
-moz-column-count: 3;
column-count: 3;
}
.ul-column-count[data-column-count="4"]>ul,
.ul-column-count[data-column-count="4"]>ol,
.ul-column-count[data-column-count="4"]>dl {
-moz-column-count: 4;
column-count: 4;
}
.ul-column-count[data-column-count="5"]>ul,
.ul-column-count[data-column-count="5"]>ol,
.ul-column-count[data-column-count="5"]>dl {
-moz-column-count: 5;
column-count: 5;
}
.ul-column-count[data-column-count="6"]>ul,
.ul-column-count[data-column-count="6"]>ol,
.ul-column-count[data-column-count="6"]>dl {
-moz-column-count: 6;
column-count: 6;
}
.columns-bg {
/* Default background color for multi-column lists. */
background: var(--wikt-palette-lavender, #f8f8ff);
/* prevent text crashing into edge of box */
padding-right: 0.3em;
}
/* Default style for hypothetical inflections -- currently italic. */
.hypothetical {
font-style: italic;
}
/* Style for entries using deprecated templates */
.deprecated {
color: olivedrab;
}
.deprecated a {
color: darkgreen;
}
/* Style for entries using deprecated labels */
.deprecated-label {
color: olivedrab;
text-decoration: line-through;
}
.deprecated-label a {
color: darkgreen;
text-decoration: line-through;
}
/* Style for notes added using the bad= param in {{audio}} */
.bad-audio-note {
color: #FF2200;
font-weight: bold;
}
/* WikiHiero kludge */
/* disable for now, apparently not necessary and breaks wrapping
.wikt-hierokludge {
display: inline-block;
} */
/* Support lists that automatically split into limited-width columns (for translations tables and the like): */
.multicolumn-list>ul {
-moz-column-width: 25em;
column-width: 25em;
-moz-column-gap: 20px;
column-gap: 20px;
}
.multicolumn-list-wide>ul {
-moz-column-width: 55em;
column-width: 55em;
-moz-column-gap: 20px;
column-gap: 20px;
}
.multicolumn-list-narrow>ul {
-moz-column-width: 22em;
column-width: 22em;
-moz-column-gap: 20px;
column-gap: 20px;
}
/* [[phab:T156351]]: Support for Parsoid's Cite implementation */
a[ rel="mw:referencedBy"]::before {
content: " ^";
}
/* [[phab:T316670]]: fix header issues */
.mw-heading * {
word-break: normal;
}
/* From [[Module:shortcut box/styles.css]] */
a .redlink {
color: var(--color-destructive, #d73333);
}
a:visited .redlink {
color: var(--color-destructive--visited, #a55858);
}
a:visited:hover .redlink {
color: var(--color-destructive--visited, #a55858);
}
a:hover .redlink {
color: var(--color-destructive--hover, #ff4242);
text-decoration: underline;
}
a:active .redlink {
color: var(--color-destructive--active, #b32424);
text-decoration: underline;
}
a:focus .redlink {
outline-color: var(--outline-color-progressive--focus, #36c);
}
/* approximate replacement for .toccolours, which is not defined in the Vector 2022 skin */
.standard-box {
background-color: var(--wikt-palette-paleblue, #f8f9fa);
border: 1px solid var(--wikt-palette-grey, #9e9e9e); /* was #aabbdd but no real equivalent in our palette */
padding: 5px;
}
.mw-parser-output a[role="button"] {
color: var(--wikt-palette-black);
font-weight: normal;
}
/* override default behaviour for button links */
.mw-parser-output a[role="button"]:focus:not(:hover) {
text-decoration: none;
}
/* Make the list of references smaller */
ol.references {
font-size: 90%; /* Default font-size */
margin-bottom: 0.5em;
}
/*** Dark mode ***/
/* Beşa zimanî */
html.skin-theme-clientpref-night .ns-0 #mw-content-text .mw-heading2,
html.skin-theme-clientpref-night .ns-108 #mw-content-text .mw-heading2 {
background-color: #27292d;
}
/* Rengê "teal" bo beşên cureyên peyvan*/
html.skin-theme-clientpref-night .ns-0 #mw-content-text .mw-heading3,
html.skin-theme-clientpref-night .ns-108 #mw-content-text .mw-heading3 {
color: #B0D493;
}
html.skin-theme-clientpref-night div#editpage-specialchars a {
background-color: transparent;
}
html.skin-theme-clientpref-night div.NavFrame div.NavHead,
html.skin-theme-clientpref-night details.NavFrame summary.NavHead {
background-color: #27292d;
}
html.skin-theme-clientpref-night div.NavFrame, details.NavFrame {
background-color: #202122;
}
/* Dark mode end */
/* Change the external link icon to a PDF icon for all PDF files */
.mw-parser-output a[href$=".pdf"].external,
.mw-parser-output a[href*=".pdf?"].external,
.mw-parser-output a[href*=".pdf#"].external,
.mw-parser-output a[href$=".PDF"].external,
.mw-parser-output a[href*=".PDF?"].external,
.mw-parser-output a[href*=".PDF#"].external {
background: url("//upload.wikimedia.org/wikipedia/commons/4/4d/Icon_pdf_file.png") no-repeat right;
/* @noflip */
padding: 8px 18px 8px 0;
}
/* Add YouTube icon after links to YouTube. */
.mw-parser-output a[href*="youtube.com"].external,
.mw-parser-output a[href*="youtu.be"].external {
background: url("//upload.wikimedia.org/wikipedia/commons/f/fd/YouTube_full-color_icon_(2024).svg") no-repeat right;
background-size: auto;
padding: 8px 18px 8px 0;
background-size: 16px;
}
/* Add X icon after links to X. */
.mw-parser-output a[href*="twitter.com"].external,
.mw-parser-output a[href*="://x.com"].external {
background: url("//upload.wikimedia.org/wikipedia/commons/c/ce/X_logo_2023.svg") no-repeat right;
background-size: auto;
padding: 8px 15px 8px 0;
background-size: 12px;
}
/* </nowiki> */
rqawbnmbptjo9xak4rxha80tcqyutdl
Gotûbêja MediaWiki:Gadget-Site.css
9
1324905
6333639
6330010
2026-08-14T15:03:04Z
Ghybu
1393
/* Îkonên YouTube û PDFê */ Bersiv
6333639
wikitext
text/x-wiki
== Nowiki ==
{{silav|Bikarhêner}} bira dikarî nivîsa li jêr kopî bikî û deynî herî jor li [[MediaWiki:Gadget-Site.css|vê rûpelê]]
<syntaxhighlight lang="css">
/* <nowiki> */
</syntaxhighlight>
Ya li jêr jî herî dawiyê li eynî sayfeyê:
<syntaxhighlight lang="css">
/* </nowiki> */
</syntaxhighlight>
--[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 19:05, 7 sibat 2025 (UTC)
:Çêbû? [[Bikarhêner:Bikarhêner|Bikarhêner]] ([[Gotûbêja bikarhêner:Bikarhêner|gotûbêj]]) 19:51, 7 sibat 2025 (UTC)
::Erê, destxweş! [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 20:00, 7 sibat 2025 (UTC)
== ku-Arab (tablo, ''margin'') ==
{{silav|Bikarhêner}} Tablo: di formata ku-Arabê de li aliyê rastê valahî tune, bnr [https://ku.wiktionary.org/w/index.php?title=siwar_b%C3%BBn&variant=ku-arab#Bi_alfabey%C3%AAn_din]
<s>Tu dikarî vî kodî <code>margin: 0.5em 0 0.5em 0.5em;</code> tevlî bin vî kodî bikî [//ku.wiktionary.org/wiki/MediaWiki:Gadget-Site.css#L-6 L-6]</s>
<s>Vî kodê jî <code>margin: 0.5em 0.5em 0.5em 0</code> tevlî bin vî kodî [https://ku.wiktionary.org/wiki/MediaWiki:Gadget-Site.css#L-11 L-11]</s> Spas.
ping {{ping|Balyozxane}} [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 22:47, 12 sibat 2025 (UTC)
:: Min kodê guherand: [//ku.wiktionary.org/w/index.php?title=Bikarh%C3%AAner:Ghybu/common.css&oldid=6067057] --> şûnda [https://ku.wiktionary.org/wiki/MediaWiki:Gadget-Site.css#L-4 L-4 hata L-32]. Spas!--[[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 23:59, 12 sibat 2025 (UTC)
:Wextê te got wa bes e [https://ku.wiktionary.org/wiki/Wîkîferheng:Dîwan#c-Ghybu-20250212120100-Ghybu-20250212115500] min wisa fêm kir ku em tenê bi common.css şablonê bidin aliyê çepê an rastê wekî din styleên din bila nav Şablon an jî Templatestyles de be baştir e ji ber Em classa "tewandin-tablo" bi hemû Şablonên tewandinê yên ku float dikin bi kar tînin. Ma tevlîhevî çênabe wisa? [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 22:53, 12 sibat 2025 (UTC)
::Erê :) feqet bi latînî "margin-left: 0.5em" / margin-right: 0 --> dibe "margin-left: 0" / "margin-right: 0.5em" ji bo ku-Arab. Berevajî ye. [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 23:02, 12 sibat 2025 (UTC)
:::{{r|Wikihez}} "text-align: left;" jî dibe --> "text-align: right", ew jî were guherandin. CSSên hêlê ne (rihgt/left), wekî "background-color" nîne. [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 23:19, 12 sibat 2025 (UTC)
::::{{r|Wikihez}} Em dikarin vana bi JSê jî çêkin: Dema ku lang="ku-Arab": "float:right" --> "float:left" / "margin-left: 0.5em" --> "margin-right: 0", ... [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 23:41, 12 sibat 2025 (UTC)
:::::Kîjan zûtir bar dibe? Js an css? [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 23:44, 12 sibat 2025 (UTC)
::::::Bi gelemperî CSS zûtir e, nizanim li vira pirr ferq diqe an na... Feqet bi JSê her tişt li ser "templatestyles"-ê tê nivîsandin. [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 23:47, 12 sibat 2025 (UTC)
:::::::Eger em karibin Templatestyles bi kar bînin baştir e :) [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 23:56, 12 sibat 2025 (UTC)
::::::::Erê, em ê biceribînin :) [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 00:05, 13 sibat 2025 (UTC)
:::::::::Ev [https://ku.wiktionary.org/wiki/MediaWiki:Gadget-Site.css#L-20] bêyî têketinê naxebite. Wextê dikevî hesabê xwe, dixebite lê wextê tênakevî naxebite :/ [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 05:16, 13 sibat 2025 (UTC)
::::::::::Me bar kir common.css dîsa bêyî têketinê naxebite. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 13:20, 13 sibat 2025 (UTC)
:::::::::::{{r|Bikarhêner|Wikihez}} [https://ku.wiktionary.org/w/index.php?title=Bikarh%C3%AAner:Ghybu/common.css&diff=prev&oldid=6067071 Vitira]? [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 13:47, 13 sibat 2025 (UTC)
::::::::::::Na, bêyî têketinê naşuxile. Bi JS biceribînin? [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 15:14, 13 sibat 2025 (UTC)
:::::::::::::Wisa [https://ku.wiktionary.org/w/index.php?title=Bikarh%C3%AAner:Wikihez/test.js&oldid=6067087 test] [https://ku.wiktionary.org/w/index.php?title=MediaWiki:Gadget-legacy.js&diff=prev&oldid=6067086 legacy.js] dişuxile. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:15, 13 sibat 2025 (UTC)
::::::::::::::Min ji yekî pirs kir, got tiştekî wisa [https://www.mediawiki.org/wiki/ResourceLoader/Architecture#Flipping ResourceLoader/Architecture#Flipping] heye. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 17:23, 13 sibat 2025 (UTC)
:::::::::::::::@Jon Harald Søby dibêje:
:::::::::::::::I haven't looked at it properly, but to me it looks like you're trying to "manually" flip stuff for RTL, but the result is that CSSJanus flips your flipped CSS back, so the end result is the opposite of what you want.
:::::::::::::::When it comes to this CSS, you can basically just code it as if it were for LTR, and it should flip automatically for RTL
:::::::::::::::… although, the logical CSS properties are becoming more common nowadays, so I would probably just use those instead. Logical CSS properties works with axes; so you have the inline axis (left-right) and the block axis (top-bottom). So instead of margin-left, you would use margin-inline-start. That will automatically be different for RTL languages, since the start then is at the right and not the left
:::::::::::::::and instead of padding-bottom, you would use padding-block-end. The beauty of this is that it doesn't only help LTR/RTL languages, but also languages that are written vertically, such as Mongolian and Manchu and sign languages written with SignWriting [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 18:15, 13 sibat 2025 (UTC)
::::::::::::::::{{r|Wikihez}} Erê, ji bo bikarhênerên ne qeydkirî bi xwe CSSê rtl dike (right --> left), bnr. [https://www.mediawiki.org/wiki/ResourceLoader/Architecture#Flipping ''Flipping'']. Min li ser Wîkîpediyaya kurdî ceriband, bnr [//ku.wikipedia.org/w/index.php?title=MediaWiki:Common.css&diff=prev&oldid=1924359] (''class'' "tablo") --> encam [https://ku.wikipedia.org/w/index.php?title=%C5%9Eablon:Ceribandin&diff=prev&oldid=1924358]. Feqet ji bo bikarhênerên qeydkirî naşuxile... [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 23:09, 13 sibat 2025 (UTC)
:::::::::::::::::Jixwe ti tiştê me ne rihet e {{=D}} ltr wekî ya niha bimîne ya rtl noflip bikin wisa em bi ser nekevin? [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 23:23, 13 sibat 2025 (UTC)
::::::::::::::::::Ji bo bikarhênerên qeydkiriî wekî Gadget yên din jî ''flipping'' {{=)}} ? [https://doc.wikimedia.org/cssjanus/master/#input/.tablo-rtl%20%7B%0A%20%20%20%20float%3A%20right%3B%0A%20%20%20%20margin-left%3A%200.5em%3B%0A%20%20%20%20margin-right%3A%200%3B%0A%20%20%20%20clear%3A%20right%3B%0A%7D%0A test] [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 23:31, 13 sibat 2025 (UTC)
:::::::::::::::::::Erê lê xêra xwe pêşî li ser Wîkîpediyayê "noflip" biceribîne, eger nebe, em gadget çêkin ji ber ku ew riya dirêjtir e :) [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 23:35, 13 sibat 2025 (UTC)
::::::::::::::::::::{{r|Wikihez}} Bi [//ku.wikipedia.org/w/index.php?title=MediaWiki:Common.css&oldid=1924368#L-620 vî] awayî çêbûb, bnr. înfoboksa gotara {{w|Amed}}ê. [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 00:28, 14 sibat 2025 (UTC)
:::::::::::::::::::::Çok şikir {{=D}} [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 08:10, 14 sibat 2025 (UTC)
::::::::::::::::::::::Divê nav jî werin guhartin: "tablo-rtl" --> "tablo-flip", "row-rtl" --> "row-flip" [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 10:06, 14 sibat 2025 (UTC)
{{outdent|::::::::::::::::::::::}} {{silav|Bikarhêner}} Dikarî hemû nivîsên vê [https://ku.wiktionary.org/w/index.php?title=Bikarh%C3%AAner:Wikihez/vector-2022.css&oldid=6067213] bixî [[MediaWiki:Gadget-Site.css]] ? [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 14:04, 14 sibat 2025 (UTC)
::Bira xêra xwe koda li jêr jî têxe [[MediaWiki:Gadget-legacy.js]] li herî dawiyê.
<syntaxhighlight lang="js">
/* ==Import [[Bikarhêner:Wikihez/skrîpt/js/fix-kuarab-title.js]]== */
jQuery(document).ready(function () {
importScript('Bikarhêner:Wikihez/skrîpt/js/fix-kuarab-title.js');
});
</syntaxhighlight>
Spas!--[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 15:43, 14 sibat 2025 (UTC)
:@[[Bikarhêner:Ghybu|Ghybu]] Çênebû :/ [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 17:05, 14 sibat 2025 (UTC)
::{{r|Wikihez}} Bi min çêbûye :) Hindekî bisekine ku ''cache'' vala bibe. [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 17:16, 14 sibat 2025 (UTC)
:::Temam îcar çêbû :) Formata jêderê wisa [https://ku.wiktionary.org/w/index.php?title=MediaWiki:Gadget-Site.css&diff=prev&oldid=6067255] baş e yan jî «« »» zêde bikin ji bo ku jêgirtin belî be? [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 17:49, 14 sibat 2025 (UTC)
::::{{silav|Ghybu}} [https://ku.wiktionary.org/w/index.php?title=tehnker%C3%AA&variant=ku-arab] ev sê sablon li kêleka hev xuya dikin bi ku-arab [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 22:38, 14 sibat 2025 (UTC)
:::::{{r|Wikihez}} Di nav ''style''-ê de "clear: right" hebû [//ku.wiktionary.org/w/index.php?title=%C5%9Eablon:ku-tew-nav&diff=prev&oldid=6068385]. [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 00:29, 15 sibat 2025 (UTC)
::::::Mala te ava! [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 00:30, 15 sibat 2025 (UTC)
:::::::{{r|Wikihez|Bikarhêner}} [//ku.wiktionary.org/w/index.php?title=%C5%9Eablon:ku-tew%C3%AEn-lk&diff=prev&oldid=6067073] Em nivîsên "berfireh bike" / "bigere" ([[MediaWiki:Collapsible-expand|Collapsible-expand]] / [[MediaWiki:Collapsible-collapse|Collapsible-collapse]]) wekî "+/-" biguhêrin ? [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 01:10, 15 sibat 2025 (UTC)
::::::::Gelo ew ê were fêmkirin? Hem pêlêkirina wê jî zor nebe? [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 01:25, 15 sibat 2025 (UTC)
:::::::::@[[Bikarhêner:Ghybu|Ghybu]] Ikoneke wisa [[File:Expand_-_Delapouite_-_game-icons.svg|20px|frameless]] ne çêtir e? Niha min ceriband, ê ku dibîne dibêje qey tu yê agahiyekê lê zêde bikî, ne wisa? [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 01:29, 15 sibat 2025 (UTC)
:::::::::Nizanim kîjan baş e :) Herwiha ew nîşan li aliyê çêpê jî tê danîn [https://www.mediawiki.org/wiki/Manual:Collapsible_elements#Move_toggle_link_to_the_left] [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 01:35, 15 sibat 2025 (UTC)
::::::::::+ dîsa baş e lê - qet nebû. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 01:56, 15 sibat 2025 (UTC)
:::::::::::[-] --> [ - ] an jî ▲/▼ an ĵî ∧/∨? [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 02:02, 15 sibat 2025 (UTC)
:::::::::::▲/▼ ev xweş bû. Wana ∧/∨ jî biceribînin? [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 02:14, 15 sibat 2025 (UTC)
::::::::::::Na. Spas! [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 02:15, 15 sibat 2025 (UTC)
== Xuyakirina çavkaniyan ==
{{silav|Bikarhêner}}: dikarî koda li jêr têxî vê rûpelê li herî dawiyê (berî nivîsa /* < /nowiki> */)
<syntaxhighlight lang="css">
/* Make the list of references smaller */
ol.references {
font-size: 90%; /* Default font-size */
margin-bottom: 0.5em;
}
</syntaxhighlight>
{{r|Bikarhêner}}--[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 11:16, 19 sibat 2025 (UTC)
:Çêbû? [[Bikarhêner:Bikarhêner|Bikarhêner]] ([[Gotûbêja bikarhêner:Bikarhêner|gotûbêj]]) 11:18, 19 sibat 2025 (UTC)
::Erê, destxweş! [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 11:22, 19 sibat 2025 (UTC)
== Rengê sernavê şablona {{ş|kol3}} ==
{{silav|Bikarhêner}} Tu dikarî vana sererast bikî:
* [https://ku.wiktionary.org/w/index.php?title=MediaWiki:Gadget-Site.css&oldid=6070748#L-311 L-311, 312]: "bottom" --> "top"
Mînak: [[ketin#Jê]]. Spas! Ping: {{b-|Balyozxane}} [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 22:40, 20 sibat 2025 (UTC)
:Min kir. Çêbû? -- [[Bikarhêner:Bikarhêner|Bikarhêner]] ([[Gotûbêja bikarhêner:Bikarhêner|gotûbêj]]) 08:13, 22 sibat 2025 (UTC)
::@[[Bikarhêner:Ghybu|Ghybu]] Gelo meriv nikare rengê (ê gewr/spî) li pişt nivîsa "kêmtir nîşan bide" rake? [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 10:41, 22 sibat 2025 (UTC)
== Tabloya wergerê ==
→ [[Şablon:werger-ser#Mînak]]
{{silav|Wikihez}}. Di nav taploya wergerê de nivîsa "Wergerekê lê zêde bike bi zimanê" li aliyê çepê hatiye nivîsandin; problem [https://ku.wiktionary.org/wiki/MediaWiki:Gadget-Site.css#L-41 va] ye (.Navcontent {text-align-left;}).
Vana hewce ne: [//ku.wiktionary.org/wiki/MediaWiki:Gadget-Site.css#L-38] [//ku.wiktionary.org/wiki/MediaWiki:Gadget-Site.css#L-31] , tenê ".translations" bes nebû. Herwhiha ducaran hatiye nivîsandin [//ku.wiktionary.org/wiki/MediaWiki:Gadget-Site.css#L-46]. [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 15:46, 27 sibat 2025 (UTC)
:Silav @[[Bikarhêner:Ghybu|Ghybu]] Gereg em çi bikin? [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 19:23, 27 sibat 2025 (UTC)
::Bi vî awayî nayê ceribandin, ji bo ceribandinê rakirina rêzên [https://ku.wiktionary.org/w/index.php?title=MediaWiki:Gadget-Site.css&oldid=6072824#L-29 L-29 heta L-50] hewce ye. ping {{r|Bikarhêner}} [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 21:58, 27 sibat 2025 (UTC)
:::Herwiha ji bo tagên HTMLê (div, span, ...) ''class''-ên [//ku.wiktionary.org/w/index.php?title=Bikarh%C3%AAner:Ghybu/common.css&oldid=6075662 wisa] jî hewce ne: me tenê ji bo tabloyan çêkiriye... Êdî li şûna "float:right", "text-align:left" vana werin bikaranîn (ji bo ''flipping''). Ji ber ku dema ku em di nav kodî de <code>style="float:right"</code> dinivîsin ''flipping'' naşuxile: hertim <code>float:right</code> e. [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 22:12, 27 sibat 2025 (UTC)
::::@[[Bikarhêner:Bikarhêner|Bikarhêner]] bira di vê sayfeyê de ji rêza 29 ê ku bi
::::<nowiki>/* Ji bo {{werger-ser}} */ </nowiki> dest pê dike heta rêza 50 (tê de) dikarî jê bibî?
::::https://ku.wiktionary.org/w/index.php?title=MediaWiki:Gadget-Site.css&oldid=6072824#L-29 [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 07:30, 28 sibat 2025 (UTC)
:::::{{r|Bikarhêner|Wikihez}} Bi min bi [https://ku.wiktionary.org/w/index.php?title=Bikarh%C3%AAner:Ghybu/common.css&oldid=6076340 vî] awayî çêbûye (Ez li ser Linuxê me + Firefox/Chrome) [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 19:24, 28 sibat 2025 (UTC)
::::::@[[Bikarhêner:Ghybu|Ghybu]] Bnr [[izin#Jê]] li Windows(Chrome/Firefox) xelet xuya dikin (nivîs bi ku-arab aliyê çepê de ye). [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 19:34, 28 sibat 2025 (UTC)
:::::::{{r|Wikihez}} [//ku.wiktionary.org/w/index.php?title=%C5%9Eablon:(&diff=prev&oldid=6076357] bi ''class''-ê. [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 19:44, 28 sibat 2025 (UTC)
::::::::Temam çêbû. Spas! Tiştek din heye? [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 19:49, 28 sibat 2025 (UTC)
:::::::::Na {{=)}} [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 19:51, 28 sibat 2025 (UTC)
::::::::::{{silav|Bikarhêner}} Tu dikarî kodê [//ku.wiktionary.org/w/index.php?title=Bikarh%C3%AAner:Ghybu/common.css&oldid=6076340 vira] tevlî [//ku.wiktionary.org/w/index.php?title=MediaWiki:Gadget-Site.css&oldid=6076268#L-29 vira] bikî. Spas! [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 19:57, 28 sibat 2025 (UTC)
:::::::::::Min kir. Rast çêbû? - [[Bikarhêner:Bikarhêner|Bikarhêner]] ([[Gotûbêja bikarhêner:Bikarhêner|gotûbêj]]) 03:44, 1 adar 2025 (UTC)
::::::::::::{{r|Bikarhêner}} Gelek spas! Tu dikarî va jî sererast bikî: [https://ku.wiktionary.org/w/index.php?title=Bikarh%C3%AAner:Ghybu/common.css&oldid=6076648] --> [https://ku.wiktionary.org/wiki/MediaWiki:Gadget-Site.css#L-50 L-50]. Ji ber ku (ji bo bikarhênerên neqeydkirî) li [//ku.wiktionary.org/w/index.php?title=kurd%C3%AE&variant=ku-arab#J%C3%AA vira] "kêmitir nîşab bide" li orteyê de nehatiye nivîsandin.. [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 11:57, 1 adar 2025 (UTC)
:::::::::::::Min çêkir, bûye? -- [[Bikarhêner:Bikarhêner|Bikarhêner]] ([[Gotûbêja bikarhêner:Bikarhêner|gotûbêj]]) 13:04, 1 adar 2025 (UTC)
::::::::::::::{{çêbû}} Spas! [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 13:18, 1 adar 2025 (UTC)
== Beşa zimanî ==
Silav {{r|Bikarhêner|Wikihez}}. Formata pêş ([https://ku.wiktionary.org/wiki/MediaWiki:Gadget-Site.css#L-195 L-195]) û formata en.wikt-ê [https://ku.wiktionary.org/wiki/MediaWiki:Gadget-Site.css#L-1186 L-1186] tevlî hev bûne... yek zêde ye {{=)}}. Bnr. [[rosa]]. [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 22:20, 24 gulan 2025 (UTC)
:Çêbû? -- [[Bikarhêner:Bikarhêner|Bikarhêner]] ([[Gotûbêja bikarhêner:Bikarhêner|gotûbêj]]) 14:13, 29 gulan 2025 (UTC)
::Erê, spas! [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 19:22, 29 gulan 2025 (UTC)
== Îkonên YouTube û PDFê ==
{{silav|Bikarhêner}} Tu dikarî van CSSan jî tevlî vê rûbelê bikî: [https://en.wiktionary.org/wiki/MediaWiki:Gadget-Site.css#L-1045] û [https://en.wiktionary.org/wiki/MediaWiki:Gadget-Site.css#L-1057]. Bnr. {{q|ku|gong}}; îkonên YouTube û PDFê dikevin pêş URLên xwe. Spas! [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 16:38, 13 tebax 2026 (UTC)
:Îkona X (twitter) jî were tevlî kirin [https://ku.wiktionary.org/w/index.php?title=Bikarh%C3%AAner:Ghybu/common.css&oldid=6333636#L-1] ? [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 15:03, 14 tebax 2026 (UTC)
lgjwn8jrxen33g4hfgn35nn4vr8gj99
6333649
6333639
2026-08-14T15:22:32Z
Ghybu
1393
/* Îkonên YouTube û PDFê */
6333649
wikitext
text/x-wiki
== Nowiki ==
{{silav|Bikarhêner}} bira dikarî nivîsa li jêr kopî bikî û deynî herî jor li [[MediaWiki:Gadget-Site.css|vê rûpelê]]
<syntaxhighlight lang="css">
/* <nowiki> */
</syntaxhighlight>
Ya li jêr jî herî dawiyê li eynî sayfeyê:
<syntaxhighlight lang="css">
/* </nowiki> */
</syntaxhighlight>
--[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 19:05, 7 sibat 2025 (UTC)
:Çêbû? [[Bikarhêner:Bikarhêner|Bikarhêner]] ([[Gotûbêja bikarhêner:Bikarhêner|gotûbêj]]) 19:51, 7 sibat 2025 (UTC)
::Erê, destxweş! [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 20:00, 7 sibat 2025 (UTC)
== ku-Arab (tablo, ''margin'') ==
{{silav|Bikarhêner}} Tablo: di formata ku-Arabê de li aliyê rastê valahî tune, bnr [https://ku.wiktionary.org/w/index.php?title=siwar_b%C3%BBn&variant=ku-arab#Bi_alfabey%C3%AAn_din]
<s>Tu dikarî vî kodî <code>margin: 0.5em 0 0.5em 0.5em;</code> tevlî bin vî kodî bikî [//ku.wiktionary.org/wiki/MediaWiki:Gadget-Site.css#L-6 L-6]</s>
<s>Vî kodê jî <code>margin: 0.5em 0.5em 0.5em 0</code> tevlî bin vî kodî [https://ku.wiktionary.org/wiki/MediaWiki:Gadget-Site.css#L-11 L-11]</s> Spas.
ping {{ping|Balyozxane}} [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 22:47, 12 sibat 2025 (UTC)
:: Min kodê guherand: [//ku.wiktionary.org/w/index.php?title=Bikarh%C3%AAner:Ghybu/common.css&oldid=6067057] --> şûnda [https://ku.wiktionary.org/wiki/MediaWiki:Gadget-Site.css#L-4 L-4 hata L-32]. Spas!--[[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 23:59, 12 sibat 2025 (UTC)
:Wextê te got wa bes e [https://ku.wiktionary.org/wiki/Wîkîferheng:Dîwan#c-Ghybu-20250212120100-Ghybu-20250212115500] min wisa fêm kir ku em tenê bi common.css şablonê bidin aliyê çepê an rastê wekî din styleên din bila nav Şablon an jî Templatestyles de be baştir e ji ber Em classa "tewandin-tablo" bi hemû Şablonên tewandinê yên ku float dikin bi kar tînin. Ma tevlîhevî çênabe wisa? [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 22:53, 12 sibat 2025 (UTC)
::Erê :) feqet bi latînî "margin-left: 0.5em" / margin-right: 0 --> dibe "margin-left: 0" / "margin-right: 0.5em" ji bo ku-Arab. Berevajî ye. [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 23:02, 12 sibat 2025 (UTC)
:::{{r|Wikihez}} "text-align: left;" jî dibe --> "text-align: right", ew jî were guherandin. CSSên hêlê ne (rihgt/left), wekî "background-color" nîne. [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 23:19, 12 sibat 2025 (UTC)
::::{{r|Wikihez}} Em dikarin vana bi JSê jî çêkin: Dema ku lang="ku-Arab": "float:right" --> "float:left" / "margin-left: 0.5em" --> "margin-right: 0", ... [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 23:41, 12 sibat 2025 (UTC)
:::::Kîjan zûtir bar dibe? Js an css? [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 23:44, 12 sibat 2025 (UTC)
::::::Bi gelemperî CSS zûtir e, nizanim li vira pirr ferq diqe an na... Feqet bi JSê her tişt li ser "templatestyles"-ê tê nivîsandin. [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 23:47, 12 sibat 2025 (UTC)
:::::::Eger em karibin Templatestyles bi kar bînin baştir e :) [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 23:56, 12 sibat 2025 (UTC)
::::::::Erê, em ê biceribînin :) [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 00:05, 13 sibat 2025 (UTC)
:::::::::Ev [https://ku.wiktionary.org/wiki/MediaWiki:Gadget-Site.css#L-20] bêyî têketinê naxebite. Wextê dikevî hesabê xwe, dixebite lê wextê tênakevî naxebite :/ [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 05:16, 13 sibat 2025 (UTC)
::::::::::Me bar kir common.css dîsa bêyî têketinê naxebite. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 13:20, 13 sibat 2025 (UTC)
:::::::::::{{r|Bikarhêner|Wikihez}} [https://ku.wiktionary.org/w/index.php?title=Bikarh%C3%AAner:Ghybu/common.css&diff=prev&oldid=6067071 Vitira]? [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 13:47, 13 sibat 2025 (UTC)
::::::::::::Na, bêyî têketinê naşuxile. Bi JS biceribînin? [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 15:14, 13 sibat 2025 (UTC)
:::::::::::::Wisa [https://ku.wiktionary.org/w/index.php?title=Bikarh%C3%AAner:Wikihez/test.js&oldid=6067087 test] [https://ku.wiktionary.org/w/index.php?title=MediaWiki:Gadget-legacy.js&diff=prev&oldid=6067086 legacy.js] dişuxile. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:15, 13 sibat 2025 (UTC)
::::::::::::::Min ji yekî pirs kir, got tiştekî wisa [https://www.mediawiki.org/wiki/ResourceLoader/Architecture#Flipping ResourceLoader/Architecture#Flipping] heye. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 17:23, 13 sibat 2025 (UTC)
:::::::::::::::@Jon Harald Søby dibêje:
:::::::::::::::I haven't looked at it properly, but to me it looks like you're trying to "manually" flip stuff for RTL, but the result is that CSSJanus flips your flipped CSS back, so the end result is the opposite of what you want.
:::::::::::::::When it comes to this CSS, you can basically just code it as if it were for LTR, and it should flip automatically for RTL
:::::::::::::::… although, the logical CSS properties are becoming more common nowadays, so I would probably just use those instead. Logical CSS properties works with axes; so you have the inline axis (left-right) and the block axis (top-bottom). So instead of margin-left, you would use margin-inline-start. That will automatically be different for RTL languages, since the start then is at the right and not the left
:::::::::::::::and instead of padding-bottom, you would use padding-block-end. The beauty of this is that it doesn't only help LTR/RTL languages, but also languages that are written vertically, such as Mongolian and Manchu and sign languages written with SignWriting [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 18:15, 13 sibat 2025 (UTC)
::::::::::::::::{{r|Wikihez}} Erê, ji bo bikarhênerên ne qeydkirî bi xwe CSSê rtl dike (right --> left), bnr. [https://www.mediawiki.org/wiki/ResourceLoader/Architecture#Flipping ''Flipping'']. Min li ser Wîkîpediyaya kurdî ceriband, bnr [//ku.wikipedia.org/w/index.php?title=MediaWiki:Common.css&diff=prev&oldid=1924359] (''class'' "tablo") --> encam [https://ku.wikipedia.org/w/index.php?title=%C5%9Eablon:Ceribandin&diff=prev&oldid=1924358]. Feqet ji bo bikarhênerên qeydkirî naşuxile... [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 23:09, 13 sibat 2025 (UTC)
:::::::::::::::::Jixwe ti tiştê me ne rihet e {{=D}} ltr wekî ya niha bimîne ya rtl noflip bikin wisa em bi ser nekevin? [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 23:23, 13 sibat 2025 (UTC)
::::::::::::::::::Ji bo bikarhênerên qeydkiriî wekî Gadget yên din jî ''flipping'' {{=)}} ? [https://doc.wikimedia.org/cssjanus/master/#input/.tablo-rtl%20%7B%0A%20%20%20%20float%3A%20right%3B%0A%20%20%20%20margin-left%3A%200.5em%3B%0A%20%20%20%20margin-right%3A%200%3B%0A%20%20%20%20clear%3A%20right%3B%0A%7D%0A test] [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 23:31, 13 sibat 2025 (UTC)
:::::::::::::::::::Erê lê xêra xwe pêşî li ser Wîkîpediyayê "noflip" biceribîne, eger nebe, em gadget çêkin ji ber ku ew riya dirêjtir e :) [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 23:35, 13 sibat 2025 (UTC)
::::::::::::::::::::{{r|Wikihez}} Bi [//ku.wikipedia.org/w/index.php?title=MediaWiki:Common.css&oldid=1924368#L-620 vî] awayî çêbûb, bnr. înfoboksa gotara {{w|Amed}}ê. [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 00:28, 14 sibat 2025 (UTC)
:::::::::::::::::::::Çok şikir {{=D}} [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 08:10, 14 sibat 2025 (UTC)
::::::::::::::::::::::Divê nav jî werin guhartin: "tablo-rtl" --> "tablo-flip", "row-rtl" --> "row-flip" [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 10:06, 14 sibat 2025 (UTC)
{{outdent|::::::::::::::::::::::}} {{silav|Bikarhêner}} Dikarî hemû nivîsên vê [https://ku.wiktionary.org/w/index.php?title=Bikarh%C3%AAner:Wikihez/vector-2022.css&oldid=6067213] bixî [[MediaWiki:Gadget-Site.css]] ? [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 14:04, 14 sibat 2025 (UTC)
::Bira xêra xwe koda li jêr jî têxe [[MediaWiki:Gadget-legacy.js]] li herî dawiyê.
<syntaxhighlight lang="js">
/* ==Import [[Bikarhêner:Wikihez/skrîpt/js/fix-kuarab-title.js]]== */
jQuery(document).ready(function () {
importScript('Bikarhêner:Wikihez/skrîpt/js/fix-kuarab-title.js');
});
</syntaxhighlight>
Spas!--[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 15:43, 14 sibat 2025 (UTC)
:@[[Bikarhêner:Ghybu|Ghybu]] Çênebû :/ [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 17:05, 14 sibat 2025 (UTC)
::{{r|Wikihez}} Bi min çêbûye :) Hindekî bisekine ku ''cache'' vala bibe. [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 17:16, 14 sibat 2025 (UTC)
:::Temam îcar çêbû :) Formata jêderê wisa [https://ku.wiktionary.org/w/index.php?title=MediaWiki:Gadget-Site.css&diff=prev&oldid=6067255] baş e yan jî «« »» zêde bikin ji bo ku jêgirtin belî be? [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 17:49, 14 sibat 2025 (UTC)
::::{{silav|Ghybu}} [https://ku.wiktionary.org/w/index.php?title=tehnker%C3%AA&variant=ku-arab] ev sê sablon li kêleka hev xuya dikin bi ku-arab [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 22:38, 14 sibat 2025 (UTC)
:::::{{r|Wikihez}} Di nav ''style''-ê de "clear: right" hebû [//ku.wiktionary.org/w/index.php?title=%C5%9Eablon:ku-tew-nav&diff=prev&oldid=6068385]. [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 00:29, 15 sibat 2025 (UTC)
::::::Mala te ava! [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 00:30, 15 sibat 2025 (UTC)
:::::::{{r|Wikihez|Bikarhêner}} [//ku.wiktionary.org/w/index.php?title=%C5%9Eablon:ku-tew%C3%AEn-lk&diff=prev&oldid=6067073] Em nivîsên "berfireh bike" / "bigere" ([[MediaWiki:Collapsible-expand|Collapsible-expand]] / [[MediaWiki:Collapsible-collapse|Collapsible-collapse]]) wekî "+/-" biguhêrin ? [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 01:10, 15 sibat 2025 (UTC)
::::::::Gelo ew ê were fêmkirin? Hem pêlêkirina wê jî zor nebe? [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 01:25, 15 sibat 2025 (UTC)
:::::::::@[[Bikarhêner:Ghybu|Ghybu]] Ikoneke wisa [[File:Expand_-_Delapouite_-_game-icons.svg|20px|frameless]] ne çêtir e? Niha min ceriband, ê ku dibîne dibêje qey tu yê agahiyekê lê zêde bikî, ne wisa? [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 01:29, 15 sibat 2025 (UTC)
:::::::::Nizanim kîjan baş e :) Herwiha ew nîşan li aliyê çêpê jî tê danîn [https://www.mediawiki.org/wiki/Manual:Collapsible_elements#Move_toggle_link_to_the_left] [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 01:35, 15 sibat 2025 (UTC)
::::::::::+ dîsa baş e lê - qet nebû. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 01:56, 15 sibat 2025 (UTC)
:::::::::::[-] --> [ - ] an jî ▲/▼ an ĵî ∧/∨? [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 02:02, 15 sibat 2025 (UTC)
:::::::::::▲/▼ ev xweş bû. Wana ∧/∨ jî biceribînin? [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 02:14, 15 sibat 2025 (UTC)
::::::::::::Na. Spas! [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 02:15, 15 sibat 2025 (UTC)
== Xuyakirina çavkaniyan ==
{{silav|Bikarhêner}}: dikarî koda li jêr têxî vê rûpelê li herî dawiyê (berî nivîsa /* < /nowiki> */)
<syntaxhighlight lang="css">
/* Make the list of references smaller */
ol.references {
font-size: 90%; /* Default font-size */
margin-bottom: 0.5em;
}
</syntaxhighlight>
{{r|Bikarhêner}}--[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 11:16, 19 sibat 2025 (UTC)
:Çêbû? [[Bikarhêner:Bikarhêner|Bikarhêner]] ([[Gotûbêja bikarhêner:Bikarhêner|gotûbêj]]) 11:18, 19 sibat 2025 (UTC)
::Erê, destxweş! [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 11:22, 19 sibat 2025 (UTC)
== Rengê sernavê şablona {{ş|kol3}} ==
{{silav|Bikarhêner}} Tu dikarî vana sererast bikî:
* [https://ku.wiktionary.org/w/index.php?title=MediaWiki:Gadget-Site.css&oldid=6070748#L-311 L-311, 312]: "bottom" --> "top"
Mînak: [[ketin#Jê]]. Spas! Ping: {{b-|Balyozxane}} [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 22:40, 20 sibat 2025 (UTC)
:Min kir. Çêbû? -- [[Bikarhêner:Bikarhêner|Bikarhêner]] ([[Gotûbêja bikarhêner:Bikarhêner|gotûbêj]]) 08:13, 22 sibat 2025 (UTC)
::@[[Bikarhêner:Ghybu|Ghybu]] Gelo meriv nikare rengê (ê gewr/spî) li pişt nivîsa "kêmtir nîşan bide" rake? [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 10:41, 22 sibat 2025 (UTC)
== Tabloya wergerê ==
→ [[Şablon:werger-ser#Mînak]]
{{silav|Wikihez}}. Di nav taploya wergerê de nivîsa "Wergerekê lê zêde bike bi zimanê" li aliyê çepê hatiye nivîsandin; problem [https://ku.wiktionary.org/wiki/MediaWiki:Gadget-Site.css#L-41 va] ye (.Navcontent {text-align-left;}).
Vana hewce ne: [//ku.wiktionary.org/wiki/MediaWiki:Gadget-Site.css#L-38] [//ku.wiktionary.org/wiki/MediaWiki:Gadget-Site.css#L-31] , tenê ".translations" bes nebû. Herwhiha ducaran hatiye nivîsandin [//ku.wiktionary.org/wiki/MediaWiki:Gadget-Site.css#L-46]. [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 15:46, 27 sibat 2025 (UTC)
:Silav @[[Bikarhêner:Ghybu|Ghybu]] Gereg em çi bikin? [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 19:23, 27 sibat 2025 (UTC)
::Bi vî awayî nayê ceribandin, ji bo ceribandinê rakirina rêzên [https://ku.wiktionary.org/w/index.php?title=MediaWiki:Gadget-Site.css&oldid=6072824#L-29 L-29 heta L-50] hewce ye. ping {{r|Bikarhêner}} [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 21:58, 27 sibat 2025 (UTC)
:::Herwiha ji bo tagên HTMLê (div, span, ...) ''class''-ên [//ku.wiktionary.org/w/index.php?title=Bikarh%C3%AAner:Ghybu/common.css&oldid=6075662 wisa] jî hewce ne: me tenê ji bo tabloyan çêkiriye... Êdî li şûna "float:right", "text-align:left" vana werin bikaranîn (ji bo ''flipping''). Ji ber ku dema ku em di nav kodî de <code>style="float:right"</code> dinivîsin ''flipping'' naşuxile: hertim <code>float:right</code> e. [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 22:12, 27 sibat 2025 (UTC)
::::@[[Bikarhêner:Bikarhêner|Bikarhêner]] bira di vê sayfeyê de ji rêza 29 ê ku bi
::::<nowiki>/* Ji bo {{werger-ser}} */ </nowiki> dest pê dike heta rêza 50 (tê de) dikarî jê bibî?
::::https://ku.wiktionary.org/w/index.php?title=MediaWiki:Gadget-Site.css&oldid=6072824#L-29 [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 07:30, 28 sibat 2025 (UTC)
:::::{{r|Bikarhêner|Wikihez}} Bi min bi [https://ku.wiktionary.org/w/index.php?title=Bikarh%C3%AAner:Ghybu/common.css&oldid=6076340 vî] awayî çêbûye (Ez li ser Linuxê me + Firefox/Chrome) [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 19:24, 28 sibat 2025 (UTC)
::::::@[[Bikarhêner:Ghybu|Ghybu]] Bnr [[izin#Jê]] li Windows(Chrome/Firefox) xelet xuya dikin (nivîs bi ku-arab aliyê çepê de ye). [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 19:34, 28 sibat 2025 (UTC)
:::::::{{r|Wikihez}} [//ku.wiktionary.org/w/index.php?title=%C5%9Eablon:(&diff=prev&oldid=6076357] bi ''class''-ê. [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 19:44, 28 sibat 2025 (UTC)
::::::::Temam çêbû. Spas! Tiştek din heye? [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 19:49, 28 sibat 2025 (UTC)
:::::::::Na {{=)}} [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 19:51, 28 sibat 2025 (UTC)
::::::::::{{silav|Bikarhêner}} Tu dikarî kodê [//ku.wiktionary.org/w/index.php?title=Bikarh%C3%AAner:Ghybu/common.css&oldid=6076340 vira] tevlî [//ku.wiktionary.org/w/index.php?title=MediaWiki:Gadget-Site.css&oldid=6076268#L-29 vira] bikî. Spas! [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 19:57, 28 sibat 2025 (UTC)
:::::::::::Min kir. Rast çêbû? - [[Bikarhêner:Bikarhêner|Bikarhêner]] ([[Gotûbêja bikarhêner:Bikarhêner|gotûbêj]]) 03:44, 1 adar 2025 (UTC)
::::::::::::{{r|Bikarhêner}} Gelek spas! Tu dikarî va jî sererast bikî: [https://ku.wiktionary.org/w/index.php?title=Bikarh%C3%AAner:Ghybu/common.css&oldid=6076648] --> [https://ku.wiktionary.org/wiki/MediaWiki:Gadget-Site.css#L-50 L-50]. Ji ber ku (ji bo bikarhênerên neqeydkirî) li [//ku.wiktionary.org/w/index.php?title=kurd%C3%AE&variant=ku-arab#J%C3%AA vira] "kêmitir nîşab bide" li orteyê de nehatiye nivîsandin.. [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 11:57, 1 adar 2025 (UTC)
:::::::::::::Min çêkir, bûye? -- [[Bikarhêner:Bikarhêner|Bikarhêner]] ([[Gotûbêja bikarhêner:Bikarhêner|gotûbêj]]) 13:04, 1 adar 2025 (UTC)
::::::::::::::{{çêbû}} Spas! [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 13:18, 1 adar 2025 (UTC)
== Beşa zimanî ==
Silav {{r|Bikarhêner|Wikihez}}. Formata pêş ([https://ku.wiktionary.org/wiki/MediaWiki:Gadget-Site.css#L-195 L-195]) û formata en.wikt-ê [https://ku.wiktionary.org/wiki/MediaWiki:Gadget-Site.css#L-1186 L-1186] tevlî hev bûne... yek zêde ye {{=)}}. Bnr. [[rosa]]. [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 22:20, 24 gulan 2025 (UTC)
:Çêbû? -- [[Bikarhêner:Bikarhêner|Bikarhêner]] ([[Gotûbêja bikarhêner:Bikarhêner|gotûbêj]]) 14:13, 29 gulan 2025 (UTC)
::Erê, spas! [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 19:22, 29 gulan 2025 (UTC)
== Îkonên YouTube û PDFê ==
{{silav|Bikarhêner}} Tu dikarî van CSSan jî tevlî vê rûbelê bikî: [https://en.wiktionary.org/wiki/MediaWiki:Gadget-Site.css#L-1045] û [https://en.wiktionary.org/wiki/MediaWiki:Gadget-Site.css#L-1057]. Bnr. {{q|ku|gong}}; îkonên YouTube û PDFê dikevin pêş URLên xwe. Spas! [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 16:38, 13 tebax 2026 (UTC)
:Îkona X (twitter) jî were tevlî kirin [//ku.wiktionary.org/w/index.php?title=Bikarh%C3%AAner:Ghybu/common.css&oldid=6333647#L-1] ? [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 15:03, 14 tebax 2026 (UTC)
ikmnrwlrudvcua78d1lt645h3fzpx5s
6333663
6333649
2026-08-14T16:03:10Z
Wikihez
7344
/* Îkonên YouTube û PDFê */ Bersiv
6333663
wikitext
text/x-wiki
== Nowiki ==
{{silav|Bikarhêner}} bira dikarî nivîsa li jêr kopî bikî û deynî herî jor li [[MediaWiki:Gadget-Site.css|vê rûpelê]]
<syntaxhighlight lang="css">
/* <nowiki> */
</syntaxhighlight>
Ya li jêr jî herî dawiyê li eynî sayfeyê:
<syntaxhighlight lang="css">
/* </nowiki> */
</syntaxhighlight>
--[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 19:05, 7 sibat 2025 (UTC)
:Çêbû? [[Bikarhêner:Bikarhêner|Bikarhêner]] ([[Gotûbêja bikarhêner:Bikarhêner|gotûbêj]]) 19:51, 7 sibat 2025 (UTC)
::Erê, destxweş! [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 20:00, 7 sibat 2025 (UTC)
== ku-Arab (tablo, ''margin'') ==
{{silav|Bikarhêner}} Tablo: di formata ku-Arabê de li aliyê rastê valahî tune, bnr [https://ku.wiktionary.org/w/index.php?title=siwar_b%C3%BBn&variant=ku-arab#Bi_alfabey%C3%AAn_din]
<s>Tu dikarî vî kodî <code>margin: 0.5em 0 0.5em 0.5em;</code> tevlî bin vî kodî bikî [//ku.wiktionary.org/wiki/MediaWiki:Gadget-Site.css#L-6 L-6]</s>
<s>Vî kodê jî <code>margin: 0.5em 0.5em 0.5em 0</code> tevlî bin vî kodî [https://ku.wiktionary.org/wiki/MediaWiki:Gadget-Site.css#L-11 L-11]</s> Spas.
ping {{ping|Balyozxane}} [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 22:47, 12 sibat 2025 (UTC)
:: Min kodê guherand: [//ku.wiktionary.org/w/index.php?title=Bikarh%C3%AAner:Ghybu/common.css&oldid=6067057] --> şûnda [https://ku.wiktionary.org/wiki/MediaWiki:Gadget-Site.css#L-4 L-4 hata L-32]. Spas!--[[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 23:59, 12 sibat 2025 (UTC)
:Wextê te got wa bes e [https://ku.wiktionary.org/wiki/Wîkîferheng:Dîwan#c-Ghybu-20250212120100-Ghybu-20250212115500] min wisa fêm kir ku em tenê bi common.css şablonê bidin aliyê çepê an rastê wekî din styleên din bila nav Şablon an jî Templatestyles de be baştir e ji ber Em classa "tewandin-tablo" bi hemû Şablonên tewandinê yên ku float dikin bi kar tînin. Ma tevlîhevî çênabe wisa? [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 22:53, 12 sibat 2025 (UTC)
::Erê :) feqet bi latînî "margin-left: 0.5em" / margin-right: 0 --> dibe "margin-left: 0" / "margin-right: 0.5em" ji bo ku-Arab. Berevajî ye. [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 23:02, 12 sibat 2025 (UTC)
:::{{r|Wikihez}} "text-align: left;" jî dibe --> "text-align: right", ew jî were guherandin. CSSên hêlê ne (rihgt/left), wekî "background-color" nîne. [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 23:19, 12 sibat 2025 (UTC)
::::{{r|Wikihez}} Em dikarin vana bi JSê jî çêkin: Dema ku lang="ku-Arab": "float:right" --> "float:left" / "margin-left: 0.5em" --> "margin-right: 0", ... [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 23:41, 12 sibat 2025 (UTC)
:::::Kîjan zûtir bar dibe? Js an css? [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 23:44, 12 sibat 2025 (UTC)
::::::Bi gelemperî CSS zûtir e, nizanim li vira pirr ferq diqe an na... Feqet bi JSê her tişt li ser "templatestyles"-ê tê nivîsandin. [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 23:47, 12 sibat 2025 (UTC)
:::::::Eger em karibin Templatestyles bi kar bînin baştir e :) [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 23:56, 12 sibat 2025 (UTC)
::::::::Erê, em ê biceribînin :) [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 00:05, 13 sibat 2025 (UTC)
:::::::::Ev [https://ku.wiktionary.org/wiki/MediaWiki:Gadget-Site.css#L-20] bêyî têketinê naxebite. Wextê dikevî hesabê xwe, dixebite lê wextê tênakevî naxebite :/ [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 05:16, 13 sibat 2025 (UTC)
::::::::::Me bar kir common.css dîsa bêyî têketinê naxebite. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 13:20, 13 sibat 2025 (UTC)
:::::::::::{{r|Bikarhêner|Wikihez}} [https://ku.wiktionary.org/w/index.php?title=Bikarh%C3%AAner:Ghybu/common.css&diff=prev&oldid=6067071 Vitira]? [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 13:47, 13 sibat 2025 (UTC)
::::::::::::Na, bêyî têketinê naşuxile. Bi JS biceribînin? [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 15:14, 13 sibat 2025 (UTC)
:::::::::::::Wisa [https://ku.wiktionary.org/w/index.php?title=Bikarh%C3%AAner:Wikihez/test.js&oldid=6067087 test] [https://ku.wiktionary.org/w/index.php?title=MediaWiki:Gadget-legacy.js&diff=prev&oldid=6067086 legacy.js] dişuxile. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:15, 13 sibat 2025 (UTC)
::::::::::::::Min ji yekî pirs kir, got tiştekî wisa [https://www.mediawiki.org/wiki/ResourceLoader/Architecture#Flipping ResourceLoader/Architecture#Flipping] heye. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 17:23, 13 sibat 2025 (UTC)
:::::::::::::::@Jon Harald Søby dibêje:
:::::::::::::::I haven't looked at it properly, but to me it looks like you're trying to "manually" flip stuff for RTL, but the result is that CSSJanus flips your flipped CSS back, so the end result is the opposite of what you want.
:::::::::::::::When it comes to this CSS, you can basically just code it as if it were for LTR, and it should flip automatically for RTL
:::::::::::::::… although, the logical CSS properties are becoming more common nowadays, so I would probably just use those instead. Logical CSS properties works with axes; so you have the inline axis (left-right) and the block axis (top-bottom). So instead of margin-left, you would use margin-inline-start. That will automatically be different for RTL languages, since the start then is at the right and not the left
:::::::::::::::and instead of padding-bottom, you would use padding-block-end. The beauty of this is that it doesn't only help LTR/RTL languages, but also languages that are written vertically, such as Mongolian and Manchu and sign languages written with SignWriting [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 18:15, 13 sibat 2025 (UTC)
::::::::::::::::{{r|Wikihez}} Erê, ji bo bikarhênerên ne qeydkirî bi xwe CSSê rtl dike (right --> left), bnr. [https://www.mediawiki.org/wiki/ResourceLoader/Architecture#Flipping ''Flipping'']. Min li ser Wîkîpediyaya kurdî ceriband, bnr [//ku.wikipedia.org/w/index.php?title=MediaWiki:Common.css&diff=prev&oldid=1924359] (''class'' "tablo") --> encam [https://ku.wikipedia.org/w/index.php?title=%C5%9Eablon:Ceribandin&diff=prev&oldid=1924358]. Feqet ji bo bikarhênerên qeydkirî naşuxile... [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 23:09, 13 sibat 2025 (UTC)
:::::::::::::::::Jixwe ti tiştê me ne rihet e {{=D}} ltr wekî ya niha bimîne ya rtl noflip bikin wisa em bi ser nekevin? [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 23:23, 13 sibat 2025 (UTC)
::::::::::::::::::Ji bo bikarhênerên qeydkiriî wekî Gadget yên din jî ''flipping'' {{=)}} ? [https://doc.wikimedia.org/cssjanus/master/#input/.tablo-rtl%20%7B%0A%20%20%20%20float%3A%20right%3B%0A%20%20%20%20margin-left%3A%200.5em%3B%0A%20%20%20%20margin-right%3A%200%3B%0A%20%20%20%20clear%3A%20right%3B%0A%7D%0A test] [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 23:31, 13 sibat 2025 (UTC)
:::::::::::::::::::Erê lê xêra xwe pêşî li ser Wîkîpediyayê "noflip" biceribîne, eger nebe, em gadget çêkin ji ber ku ew riya dirêjtir e :) [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 23:35, 13 sibat 2025 (UTC)
::::::::::::::::::::{{r|Wikihez}} Bi [//ku.wikipedia.org/w/index.php?title=MediaWiki:Common.css&oldid=1924368#L-620 vî] awayî çêbûb, bnr. înfoboksa gotara {{w|Amed}}ê. [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 00:28, 14 sibat 2025 (UTC)
:::::::::::::::::::::Çok şikir {{=D}} [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 08:10, 14 sibat 2025 (UTC)
::::::::::::::::::::::Divê nav jî werin guhartin: "tablo-rtl" --> "tablo-flip", "row-rtl" --> "row-flip" [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 10:06, 14 sibat 2025 (UTC)
{{outdent|::::::::::::::::::::::}} {{silav|Bikarhêner}} Dikarî hemû nivîsên vê [https://ku.wiktionary.org/w/index.php?title=Bikarh%C3%AAner:Wikihez/vector-2022.css&oldid=6067213] bixî [[MediaWiki:Gadget-Site.css]] ? [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 14:04, 14 sibat 2025 (UTC)
::Bira xêra xwe koda li jêr jî têxe [[MediaWiki:Gadget-legacy.js]] li herî dawiyê.
<syntaxhighlight lang="js">
/* ==Import [[Bikarhêner:Wikihez/skrîpt/js/fix-kuarab-title.js]]== */
jQuery(document).ready(function () {
importScript('Bikarhêner:Wikihez/skrîpt/js/fix-kuarab-title.js');
});
</syntaxhighlight>
Spas!--[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 15:43, 14 sibat 2025 (UTC)
:@[[Bikarhêner:Ghybu|Ghybu]] Çênebû :/ [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 17:05, 14 sibat 2025 (UTC)
::{{r|Wikihez}} Bi min çêbûye :) Hindekî bisekine ku ''cache'' vala bibe. [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 17:16, 14 sibat 2025 (UTC)
:::Temam îcar çêbû :) Formata jêderê wisa [https://ku.wiktionary.org/w/index.php?title=MediaWiki:Gadget-Site.css&diff=prev&oldid=6067255] baş e yan jî «« »» zêde bikin ji bo ku jêgirtin belî be? [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 17:49, 14 sibat 2025 (UTC)
::::{{silav|Ghybu}} [https://ku.wiktionary.org/w/index.php?title=tehnker%C3%AA&variant=ku-arab] ev sê sablon li kêleka hev xuya dikin bi ku-arab [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 22:38, 14 sibat 2025 (UTC)
:::::{{r|Wikihez}} Di nav ''style''-ê de "clear: right" hebû [//ku.wiktionary.org/w/index.php?title=%C5%9Eablon:ku-tew-nav&diff=prev&oldid=6068385]. [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 00:29, 15 sibat 2025 (UTC)
::::::Mala te ava! [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 00:30, 15 sibat 2025 (UTC)
:::::::{{r|Wikihez|Bikarhêner}} [//ku.wiktionary.org/w/index.php?title=%C5%9Eablon:ku-tew%C3%AEn-lk&diff=prev&oldid=6067073] Em nivîsên "berfireh bike" / "bigere" ([[MediaWiki:Collapsible-expand|Collapsible-expand]] / [[MediaWiki:Collapsible-collapse|Collapsible-collapse]]) wekî "+/-" biguhêrin ? [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 01:10, 15 sibat 2025 (UTC)
::::::::Gelo ew ê were fêmkirin? Hem pêlêkirina wê jî zor nebe? [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 01:25, 15 sibat 2025 (UTC)
:::::::::@[[Bikarhêner:Ghybu|Ghybu]] Ikoneke wisa [[File:Expand_-_Delapouite_-_game-icons.svg|20px|frameless]] ne çêtir e? Niha min ceriband, ê ku dibîne dibêje qey tu yê agahiyekê lê zêde bikî, ne wisa? [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 01:29, 15 sibat 2025 (UTC)
:::::::::Nizanim kîjan baş e :) Herwiha ew nîşan li aliyê çêpê jî tê danîn [https://www.mediawiki.org/wiki/Manual:Collapsible_elements#Move_toggle_link_to_the_left] [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 01:35, 15 sibat 2025 (UTC)
::::::::::+ dîsa baş e lê - qet nebû. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 01:56, 15 sibat 2025 (UTC)
:::::::::::[-] --> [ - ] an jî ▲/▼ an ĵî ∧/∨? [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 02:02, 15 sibat 2025 (UTC)
:::::::::::▲/▼ ev xweş bû. Wana ∧/∨ jî biceribînin? [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 02:14, 15 sibat 2025 (UTC)
::::::::::::Na. Spas! [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 02:15, 15 sibat 2025 (UTC)
== Xuyakirina çavkaniyan ==
{{silav|Bikarhêner}}: dikarî koda li jêr têxî vê rûpelê li herî dawiyê (berî nivîsa /* < /nowiki> */)
<syntaxhighlight lang="css">
/* Make the list of references smaller */
ol.references {
font-size: 90%; /* Default font-size */
margin-bottom: 0.5em;
}
</syntaxhighlight>
{{r|Bikarhêner}}--[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 11:16, 19 sibat 2025 (UTC)
:Çêbû? [[Bikarhêner:Bikarhêner|Bikarhêner]] ([[Gotûbêja bikarhêner:Bikarhêner|gotûbêj]]) 11:18, 19 sibat 2025 (UTC)
::Erê, destxweş! [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 11:22, 19 sibat 2025 (UTC)
== Rengê sernavê şablona {{ş|kol3}} ==
{{silav|Bikarhêner}} Tu dikarî vana sererast bikî:
* [https://ku.wiktionary.org/w/index.php?title=MediaWiki:Gadget-Site.css&oldid=6070748#L-311 L-311, 312]: "bottom" --> "top"
Mînak: [[ketin#Jê]]. Spas! Ping: {{b-|Balyozxane}} [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 22:40, 20 sibat 2025 (UTC)
:Min kir. Çêbû? -- [[Bikarhêner:Bikarhêner|Bikarhêner]] ([[Gotûbêja bikarhêner:Bikarhêner|gotûbêj]]) 08:13, 22 sibat 2025 (UTC)
::@[[Bikarhêner:Ghybu|Ghybu]] Gelo meriv nikare rengê (ê gewr/spî) li pişt nivîsa "kêmtir nîşan bide" rake? [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 10:41, 22 sibat 2025 (UTC)
== Tabloya wergerê ==
→ [[Şablon:werger-ser#Mînak]]
{{silav|Wikihez}}. Di nav taploya wergerê de nivîsa "Wergerekê lê zêde bike bi zimanê" li aliyê çepê hatiye nivîsandin; problem [https://ku.wiktionary.org/wiki/MediaWiki:Gadget-Site.css#L-41 va] ye (.Navcontent {text-align-left;}).
Vana hewce ne: [//ku.wiktionary.org/wiki/MediaWiki:Gadget-Site.css#L-38] [//ku.wiktionary.org/wiki/MediaWiki:Gadget-Site.css#L-31] , tenê ".translations" bes nebû. Herwhiha ducaran hatiye nivîsandin [//ku.wiktionary.org/wiki/MediaWiki:Gadget-Site.css#L-46]. [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 15:46, 27 sibat 2025 (UTC)
:Silav @[[Bikarhêner:Ghybu|Ghybu]] Gereg em çi bikin? [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 19:23, 27 sibat 2025 (UTC)
::Bi vî awayî nayê ceribandin, ji bo ceribandinê rakirina rêzên [https://ku.wiktionary.org/w/index.php?title=MediaWiki:Gadget-Site.css&oldid=6072824#L-29 L-29 heta L-50] hewce ye. ping {{r|Bikarhêner}} [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 21:58, 27 sibat 2025 (UTC)
:::Herwiha ji bo tagên HTMLê (div, span, ...) ''class''-ên [//ku.wiktionary.org/w/index.php?title=Bikarh%C3%AAner:Ghybu/common.css&oldid=6075662 wisa] jî hewce ne: me tenê ji bo tabloyan çêkiriye... Êdî li şûna "float:right", "text-align:left" vana werin bikaranîn (ji bo ''flipping''). Ji ber ku dema ku em di nav kodî de <code>style="float:right"</code> dinivîsin ''flipping'' naşuxile: hertim <code>float:right</code> e. [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 22:12, 27 sibat 2025 (UTC)
::::@[[Bikarhêner:Bikarhêner|Bikarhêner]] bira di vê sayfeyê de ji rêza 29 ê ku bi
::::<nowiki>/* Ji bo {{werger-ser}} */ </nowiki> dest pê dike heta rêza 50 (tê de) dikarî jê bibî?
::::https://ku.wiktionary.org/w/index.php?title=MediaWiki:Gadget-Site.css&oldid=6072824#L-29 [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 07:30, 28 sibat 2025 (UTC)
:::::{{r|Bikarhêner|Wikihez}} Bi min bi [https://ku.wiktionary.org/w/index.php?title=Bikarh%C3%AAner:Ghybu/common.css&oldid=6076340 vî] awayî çêbûye (Ez li ser Linuxê me + Firefox/Chrome) [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 19:24, 28 sibat 2025 (UTC)
::::::@[[Bikarhêner:Ghybu|Ghybu]] Bnr [[izin#Jê]] li Windows(Chrome/Firefox) xelet xuya dikin (nivîs bi ku-arab aliyê çepê de ye). [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 19:34, 28 sibat 2025 (UTC)
:::::::{{r|Wikihez}} [//ku.wiktionary.org/w/index.php?title=%C5%9Eablon:(&diff=prev&oldid=6076357] bi ''class''-ê. [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 19:44, 28 sibat 2025 (UTC)
::::::::Temam çêbû. Spas! Tiştek din heye? [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 19:49, 28 sibat 2025 (UTC)
:::::::::Na {{=)}} [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 19:51, 28 sibat 2025 (UTC)
::::::::::{{silav|Bikarhêner}} Tu dikarî kodê [//ku.wiktionary.org/w/index.php?title=Bikarh%C3%AAner:Ghybu/common.css&oldid=6076340 vira] tevlî [//ku.wiktionary.org/w/index.php?title=MediaWiki:Gadget-Site.css&oldid=6076268#L-29 vira] bikî. Spas! [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 19:57, 28 sibat 2025 (UTC)
:::::::::::Min kir. Rast çêbû? - [[Bikarhêner:Bikarhêner|Bikarhêner]] ([[Gotûbêja bikarhêner:Bikarhêner|gotûbêj]]) 03:44, 1 adar 2025 (UTC)
::::::::::::{{r|Bikarhêner}} Gelek spas! Tu dikarî va jî sererast bikî: [https://ku.wiktionary.org/w/index.php?title=Bikarh%C3%AAner:Ghybu/common.css&oldid=6076648] --> [https://ku.wiktionary.org/wiki/MediaWiki:Gadget-Site.css#L-50 L-50]. Ji ber ku (ji bo bikarhênerên neqeydkirî) li [//ku.wiktionary.org/w/index.php?title=kurd%C3%AE&variant=ku-arab#J%C3%AA vira] "kêmitir nîşab bide" li orteyê de nehatiye nivîsandin.. [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 11:57, 1 adar 2025 (UTC)
:::::::::::::Min çêkir, bûye? -- [[Bikarhêner:Bikarhêner|Bikarhêner]] ([[Gotûbêja bikarhêner:Bikarhêner|gotûbêj]]) 13:04, 1 adar 2025 (UTC)
::::::::::::::{{çêbû}} Spas! [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 13:18, 1 adar 2025 (UTC)
== Beşa zimanî ==
Silav {{r|Bikarhêner|Wikihez}}. Formata pêş ([https://ku.wiktionary.org/wiki/MediaWiki:Gadget-Site.css#L-195 L-195]) û formata en.wikt-ê [https://ku.wiktionary.org/wiki/MediaWiki:Gadget-Site.css#L-1186 L-1186] tevlî hev bûne... yek zêde ye {{=)}}. Bnr. [[rosa]]. [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 22:20, 24 gulan 2025 (UTC)
:Çêbû? -- [[Bikarhêner:Bikarhêner|Bikarhêner]] ([[Gotûbêja bikarhêner:Bikarhêner|gotûbêj]]) 14:13, 29 gulan 2025 (UTC)
::Erê, spas! [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 19:22, 29 gulan 2025 (UTC)
== Îkonên YouTube û PDFê ==
{{silav|Bikarhêner}} Tu dikarî van CSSan jî tevlî vê rûbelê bikî: [https://en.wiktionary.org/wiki/MediaWiki:Gadget-Site.css#L-1045] û [https://en.wiktionary.org/wiki/MediaWiki:Gadget-Site.css#L-1057]. Bnr. {{q|ku|gong}}; îkonên YouTube û PDFê dikevin pêş URLên xwe. Spas! [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 16:38, 13 tebax 2026 (UTC)
:Îkona X (twitter) jî were tevlî kirin [//ku.wiktionary.org/w/index.php?title=Bikarh%C3%AAner:Ghybu/common.css&oldid=6333647#L-1] ? [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 15:03, 14 tebax 2026 (UTC)
::Em dikarin îkona PDFê hinek biçûktir bikin? Niha ji min re zêde mezin xuya dike. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:03, 14 tebax 2026 (UTC)
6mp3flbpt254va7pomc2wt97lpbxdnh
6333729
6333663
2026-08-14T21:09:54Z
Ghybu
1393
/* Îkonên YouTube û PDFê */ Bersiv
6333729
wikitext
text/x-wiki
== Nowiki ==
{{silav|Bikarhêner}} bira dikarî nivîsa li jêr kopî bikî û deynî herî jor li [[MediaWiki:Gadget-Site.css|vê rûpelê]]
<syntaxhighlight lang="css">
/* <nowiki> */
</syntaxhighlight>
Ya li jêr jî herî dawiyê li eynî sayfeyê:
<syntaxhighlight lang="css">
/* </nowiki> */
</syntaxhighlight>
--[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 19:05, 7 sibat 2025 (UTC)
:Çêbû? [[Bikarhêner:Bikarhêner|Bikarhêner]] ([[Gotûbêja bikarhêner:Bikarhêner|gotûbêj]]) 19:51, 7 sibat 2025 (UTC)
::Erê, destxweş! [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 20:00, 7 sibat 2025 (UTC)
== ku-Arab (tablo, ''margin'') ==
{{silav|Bikarhêner}} Tablo: di formata ku-Arabê de li aliyê rastê valahî tune, bnr [https://ku.wiktionary.org/w/index.php?title=siwar_b%C3%BBn&variant=ku-arab#Bi_alfabey%C3%AAn_din]
<s>Tu dikarî vî kodî <code>margin: 0.5em 0 0.5em 0.5em;</code> tevlî bin vî kodî bikî [//ku.wiktionary.org/wiki/MediaWiki:Gadget-Site.css#L-6 L-6]</s>
<s>Vî kodê jî <code>margin: 0.5em 0.5em 0.5em 0</code> tevlî bin vî kodî [https://ku.wiktionary.org/wiki/MediaWiki:Gadget-Site.css#L-11 L-11]</s> Spas.
ping {{ping|Balyozxane}} [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 22:47, 12 sibat 2025 (UTC)
:: Min kodê guherand: [//ku.wiktionary.org/w/index.php?title=Bikarh%C3%AAner:Ghybu/common.css&oldid=6067057] --> şûnda [https://ku.wiktionary.org/wiki/MediaWiki:Gadget-Site.css#L-4 L-4 hata L-32]. Spas!--[[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 23:59, 12 sibat 2025 (UTC)
:Wextê te got wa bes e [https://ku.wiktionary.org/wiki/Wîkîferheng:Dîwan#c-Ghybu-20250212120100-Ghybu-20250212115500] min wisa fêm kir ku em tenê bi common.css şablonê bidin aliyê çepê an rastê wekî din styleên din bila nav Şablon an jî Templatestyles de be baştir e ji ber Em classa "tewandin-tablo" bi hemû Şablonên tewandinê yên ku float dikin bi kar tînin. Ma tevlîhevî çênabe wisa? [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 22:53, 12 sibat 2025 (UTC)
::Erê :) feqet bi latînî "margin-left: 0.5em" / margin-right: 0 --> dibe "margin-left: 0" / "margin-right: 0.5em" ji bo ku-Arab. Berevajî ye. [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 23:02, 12 sibat 2025 (UTC)
:::{{r|Wikihez}} "text-align: left;" jî dibe --> "text-align: right", ew jî were guherandin. CSSên hêlê ne (rihgt/left), wekî "background-color" nîne. [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 23:19, 12 sibat 2025 (UTC)
::::{{r|Wikihez}} Em dikarin vana bi JSê jî çêkin: Dema ku lang="ku-Arab": "float:right" --> "float:left" / "margin-left: 0.5em" --> "margin-right: 0", ... [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 23:41, 12 sibat 2025 (UTC)
:::::Kîjan zûtir bar dibe? Js an css? [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 23:44, 12 sibat 2025 (UTC)
::::::Bi gelemperî CSS zûtir e, nizanim li vira pirr ferq diqe an na... Feqet bi JSê her tişt li ser "templatestyles"-ê tê nivîsandin. [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 23:47, 12 sibat 2025 (UTC)
:::::::Eger em karibin Templatestyles bi kar bînin baştir e :) [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 23:56, 12 sibat 2025 (UTC)
::::::::Erê, em ê biceribînin :) [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 00:05, 13 sibat 2025 (UTC)
:::::::::Ev [https://ku.wiktionary.org/wiki/MediaWiki:Gadget-Site.css#L-20] bêyî têketinê naxebite. Wextê dikevî hesabê xwe, dixebite lê wextê tênakevî naxebite :/ [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 05:16, 13 sibat 2025 (UTC)
::::::::::Me bar kir common.css dîsa bêyî têketinê naxebite. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 13:20, 13 sibat 2025 (UTC)
:::::::::::{{r|Bikarhêner|Wikihez}} [https://ku.wiktionary.org/w/index.php?title=Bikarh%C3%AAner:Ghybu/common.css&diff=prev&oldid=6067071 Vitira]? [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 13:47, 13 sibat 2025 (UTC)
::::::::::::Na, bêyî têketinê naşuxile. Bi JS biceribînin? [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 15:14, 13 sibat 2025 (UTC)
:::::::::::::Wisa [https://ku.wiktionary.org/w/index.php?title=Bikarh%C3%AAner:Wikihez/test.js&oldid=6067087 test] [https://ku.wiktionary.org/w/index.php?title=MediaWiki:Gadget-legacy.js&diff=prev&oldid=6067086 legacy.js] dişuxile. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:15, 13 sibat 2025 (UTC)
::::::::::::::Min ji yekî pirs kir, got tiştekî wisa [https://www.mediawiki.org/wiki/ResourceLoader/Architecture#Flipping ResourceLoader/Architecture#Flipping] heye. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 17:23, 13 sibat 2025 (UTC)
:::::::::::::::@Jon Harald Søby dibêje:
:::::::::::::::I haven't looked at it properly, but to me it looks like you're trying to "manually" flip stuff for RTL, but the result is that CSSJanus flips your flipped CSS back, so the end result is the opposite of what you want.
:::::::::::::::When it comes to this CSS, you can basically just code it as if it were for LTR, and it should flip automatically for RTL
:::::::::::::::… although, the logical CSS properties are becoming more common nowadays, so I would probably just use those instead. Logical CSS properties works with axes; so you have the inline axis (left-right) and the block axis (top-bottom). So instead of margin-left, you would use margin-inline-start. That will automatically be different for RTL languages, since the start then is at the right and not the left
:::::::::::::::and instead of padding-bottom, you would use padding-block-end. The beauty of this is that it doesn't only help LTR/RTL languages, but also languages that are written vertically, such as Mongolian and Manchu and sign languages written with SignWriting [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 18:15, 13 sibat 2025 (UTC)
::::::::::::::::{{r|Wikihez}} Erê, ji bo bikarhênerên ne qeydkirî bi xwe CSSê rtl dike (right --> left), bnr. [https://www.mediawiki.org/wiki/ResourceLoader/Architecture#Flipping ''Flipping'']. Min li ser Wîkîpediyaya kurdî ceriband, bnr [//ku.wikipedia.org/w/index.php?title=MediaWiki:Common.css&diff=prev&oldid=1924359] (''class'' "tablo") --> encam [https://ku.wikipedia.org/w/index.php?title=%C5%9Eablon:Ceribandin&diff=prev&oldid=1924358]. Feqet ji bo bikarhênerên qeydkirî naşuxile... [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 23:09, 13 sibat 2025 (UTC)
:::::::::::::::::Jixwe ti tiştê me ne rihet e {{=D}} ltr wekî ya niha bimîne ya rtl noflip bikin wisa em bi ser nekevin? [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 23:23, 13 sibat 2025 (UTC)
::::::::::::::::::Ji bo bikarhênerên qeydkiriî wekî Gadget yên din jî ''flipping'' {{=)}} ? [https://doc.wikimedia.org/cssjanus/master/#input/.tablo-rtl%20%7B%0A%20%20%20%20float%3A%20right%3B%0A%20%20%20%20margin-left%3A%200.5em%3B%0A%20%20%20%20margin-right%3A%200%3B%0A%20%20%20%20clear%3A%20right%3B%0A%7D%0A test] [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 23:31, 13 sibat 2025 (UTC)
:::::::::::::::::::Erê lê xêra xwe pêşî li ser Wîkîpediyayê "noflip" biceribîne, eger nebe, em gadget çêkin ji ber ku ew riya dirêjtir e :) [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 23:35, 13 sibat 2025 (UTC)
::::::::::::::::::::{{r|Wikihez}} Bi [//ku.wikipedia.org/w/index.php?title=MediaWiki:Common.css&oldid=1924368#L-620 vî] awayî çêbûb, bnr. înfoboksa gotara {{w|Amed}}ê. [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 00:28, 14 sibat 2025 (UTC)
:::::::::::::::::::::Çok şikir {{=D}} [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 08:10, 14 sibat 2025 (UTC)
::::::::::::::::::::::Divê nav jî werin guhartin: "tablo-rtl" --> "tablo-flip", "row-rtl" --> "row-flip" [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 10:06, 14 sibat 2025 (UTC)
{{outdent|::::::::::::::::::::::}} {{silav|Bikarhêner}} Dikarî hemû nivîsên vê [https://ku.wiktionary.org/w/index.php?title=Bikarh%C3%AAner:Wikihez/vector-2022.css&oldid=6067213] bixî [[MediaWiki:Gadget-Site.css]] ? [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 14:04, 14 sibat 2025 (UTC)
::Bira xêra xwe koda li jêr jî têxe [[MediaWiki:Gadget-legacy.js]] li herî dawiyê.
<syntaxhighlight lang="js">
/* ==Import [[Bikarhêner:Wikihez/skrîpt/js/fix-kuarab-title.js]]== */
jQuery(document).ready(function () {
importScript('Bikarhêner:Wikihez/skrîpt/js/fix-kuarab-title.js');
});
</syntaxhighlight>
Spas!--[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 15:43, 14 sibat 2025 (UTC)
:@[[Bikarhêner:Ghybu|Ghybu]] Çênebû :/ [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 17:05, 14 sibat 2025 (UTC)
::{{r|Wikihez}} Bi min çêbûye :) Hindekî bisekine ku ''cache'' vala bibe. [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 17:16, 14 sibat 2025 (UTC)
:::Temam îcar çêbû :) Formata jêderê wisa [https://ku.wiktionary.org/w/index.php?title=MediaWiki:Gadget-Site.css&diff=prev&oldid=6067255] baş e yan jî «« »» zêde bikin ji bo ku jêgirtin belî be? [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 17:49, 14 sibat 2025 (UTC)
::::{{silav|Ghybu}} [https://ku.wiktionary.org/w/index.php?title=tehnker%C3%AA&variant=ku-arab] ev sê sablon li kêleka hev xuya dikin bi ku-arab [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 22:38, 14 sibat 2025 (UTC)
:::::{{r|Wikihez}} Di nav ''style''-ê de "clear: right" hebû [//ku.wiktionary.org/w/index.php?title=%C5%9Eablon:ku-tew-nav&diff=prev&oldid=6068385]. [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 00:29, 15 sibat 2025 (UTC)
::::::Mala te ava! [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 00:30, 15 sibat 2025 (UTC)
:::::::{{r|Wikihez|Bikarhêner}} [//ku.wiktionary.org/w/index.php?title=%C5%9Eablon:ku-tew%C3%AEn-lk&diff=prev&oldid=6067073] Em nivîsên "berfireh bike" / "bigere" ([[MediaWiki:Collapsible-expand|Collapsible-expand]] / [[MediaWiki:Collapsible-collapse|Collapsible-collapse]]) wekî "+/-" biguhêrin ? [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 01:10, 15 sibat 2025 (UTC)
::::::::Gelo ew ê were fêmkirin? Hem pêlêkirina wê jî zor nebe? [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 01:25, 15 sibat 2025 (UTC)
:::::::::@[[Bikarhêner:Ghybu|Ghybu]] Ikoneke wisa [[File:Expand_-_Delapouite_-_game-icons.svg|20px|frameless]] ne çêtir e? Niha min ceriband, ê ku dibîne dibêje qey tu yê agahiyekê lê zêde bikî, ne wisa? [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 01:29, 15 sibat 2025 (UTC)
:::::::::Nizanim kîjan baş e :) Herwiha ew nîşan li aliyê çêpê jî tê danîn [https://www.mediawiki.org/wiki/Manual:Collapsible_elements#Move_toggle_link_to_the_left] [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 01:35, 15 sibat 2025 (UTC)
::::::::::+ dîsa baş e lê - qet nebû. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 01:56, 15 sibat 2025 (UTC)
:::::::::::[-] --> [ - ] an jî ▲/▼ an ĵî ∧/∨? [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 02:02, 15 sibat 2025 (UTC)
:::::::::::▲/▼ ev xweş bû. Wana ∧/∨ jî biceribînin? [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 02:14, 15 sibat 2025 (UTC)
::::::::::::Na. Spas! [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 02:15, 15 sibat 2025 (UTC)
== Xuyakirina çavkaniyan ==
{{silav|Bikarhêner}}: dikarî koda li jêr têxî vê rûpelê li herî dawiyê (berî nivîsa /* < /nowiki> */)
<syntaxhighlight lang="css">
/* Make the list of references smaller */
ol.references {
font-size: 90%; /* Default font-size */
margin-bottom: 0.5em;
}
</syntaxhighlight>
{{r|Bikarhêner}}--[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 11:16, 19 sibat 2025 (UTC)
:Çêbû? [[Bikarhêner:Bikarhêner|Bikarhêner]] ([[Gotûbêja bikarhêner:Bikarhêner|gotûbêj]]) 11:18, 19 sibat 2025 (UTC)
::Erê, destxweş! [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 11:22, 19 sibat 2025 (UTC)
== Rengê sernavê şablona {{ş|kol3}} ==
{{silav|Bikarhêner}} Tu dikarî vana sererast bikî:
* [https://ku.wiktionary.org/w/index.php?title=MediaWiki:Gadget-Site.css&oldid=6070748#L-311 L-311, 312]: "bottom" --> "top"
Mînak: [[ketin#Jê]]. Spas! Ping: {{b-|Balyozxane}} [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 22:40, 20 sibat 2025 (UTC)
:Min kir. Çêbû? -- [[Bikarhêner:Bikarhêner|Bikarhêner]] ([[Gotûbêja bikarhêner:Bikarhêner|gotûbêj]]) 08:13, 22 sibat 2025 (UTC)
::@[[Bikarhêner:Ghybu|Ghybu]] Gelo meriv nikare rengê (ê gewr/spî) li pişt nivîsa "kêmtir nîşan bide" rake? [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 10:41, 22 sibat 2025 (UTC)
== Tabloya wergerê ==
→ [[Şablon:werger-ser#Mînak]]
{{silav|Wikihez}}. Di nav taploya wergerê de nivîsa "Wergerekê lê zêde bike bi zimanê" li aliyê çepê hatiye nivîsandin; problem [https://ku.wiktionary.org/wiki/MediaWiki:Gadget-Site.css#L-41 va] ye (.Navcontent {text-align-left;}).
Vana hewce ne: [//ku.wiktionary.org/wiki/MediaWiki:Gadget-Site.css#L-38] [//ku.wiktionary.org/wiki/MediaWiki:Gadget-Site.css#L-31] , tenê ".translations" bes nebû. Herwhiha ducaran hatiye nivîsandin [//ku.wiktionary.org/wiki/MediaWiki:Gadget-Site.css#L-46]. [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 15:46, 27 sibat 2025 (UTC)
:Silav @[[Bikarhêner:Ghybu|Ghybu]] Gereg em çi bikin? [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 19:23, 27 sibat 2025 (UTC)
::Bi vî awayî nayê ceribandin, ji bo ceribandinê rakirina rêzên [https://ku.wiktionary.org/w/index.php?title=MediaWiki:Gadget-Site.css&oldid=6072824#L-29 L-29 heta L-50] hewce ye. ping {{r|Bikarhêner}} [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 21:58, 27 sibat 2025 (UTC)
:::Herwiha ji bo tagên HTMLê (div, span, ...) ''class''-ên [//ku.wiktionary.org/w/index.php?title=Bikarh%C3%AAner:Ghybu/common.css&oldid=6075662 wisa] jî hewce ne: me tenê ji bo tabloyan çêkiriye... Êdî li şûna "float:right", "text-align:left" vana werin bikaranîn (ji bo ''flipping''). Ji ber ku dema ku em di nav kodî de <code>style="float:right"</code> dinivîsin ''flipping'' naşuxile: hertim <code>float:right</code> e. [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 22:12, 27 sibat 2025 (UTC)
::::@[[Bikarhêner:Bikarhêner|Bikarhêner]] bira di vê sayfeyê de ji rêza 29 ê ku bi
::::<nowiki>/* Ji bo {{werger-ser}} */ </nowiki> dest pê dike heta rêza 50 (tê de) dikarî jê bibî?
::::https://ku.wiktionary.org/w/index.php?title=MediaWiki:Gadget-Site.css&oldid=6072824#L-29 [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 07:30, 28 sibat 2025 (UTC)
:::::{{r|Bikarhêner|Wikihez}} Bi min bi [https://ku.wiktionary.org/w/index.php?title=Bikarh%C3%AAner:Ghybu/common.css&oldid=6076340 vî] awayî çêbûye (Ez li ser Linuxê me + Firefox/Chrome) [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 19:24, 28 sibat 2025 (UTC)
::::::@[[Bikarhêner:Ghybu|Ghybu]] Bnr [[izin#Jê]] li Windows(Chrome/Firefox) xelet xuya dikin (nivîs bi ku-arab aliyê çepê de ye). [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 19:34, 28 sibat 2025 (UTC)
:::::::{{r|Wikihez}} [//ku.wiktionary.org/w/index.php?title=%C5%9Eablon:(&diff=prev&oldid=6076357] bi ''class''-ê. [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 19:44, 28 sibat 2025 (UTC)
::::::::Temam çêbû. Spas! Tiştek din heye? [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 19:49, 28 sibat 2025 (UTC)
:::::::::Na {{=)}} [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 19:51, 28 sibat 2025 (UTC)
::::::::::{{silav|Bikarhêner}} Tu dikarî kodê [//ku.wiktionary.org/w/index.php?title=Bikarh%C3%AAner:Ghybu/common.css&oldid=6076340 vira] tevlî [//ku.wiktionary.org/w/index.php?title=MediaWiki:Gadget-Site.css&oldid=6076268#L-29 vira] bikî. Spas! [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 19:57, 28 sibat 2025 (UTC)
:::::::::::Min kir. Rast çêbû? - [[Bikarhêner:Bikarhêner|Bikarhêner]] ([[Gotûbêja bikarhêner:Bikarhêner|gotûbêj]]) 03:44, 1 adar 2025 (UTC)
::::::::::::{{r|Bikarhêner}} Gelek spas! Tu dikarî va jî sererast bikî: [https://ku.wiktionary.org/w/index.php?title=Bikarh%C3%AAner:Ghybu/common.css&oldid=6076648] --> [https://ku.wiktionary.org/wiki/MediaWiki:Gadget-Site.css#L-50 L-50]. Ji ber ku (ji bo bikarhênerên neqeydkirî) li [//ku.wiktionary.org/w/index.php?title=kurd%C3%AE&variant=ku-arab#J%C3%AA vira] "kêmitir nîşab bide" li orteyê de nehatiye nivîsandin.. [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 11:57, 1 adar 2025 (UTC)
:::::::::::::Min çêkir, bûye? -- [[Bikarhêner:Bikarhêner|Bikarhêner]] ([[Gotûbêja bikarhêner:Bikarhêner|gotûbêj]]) 13:04, 1 adar 2025 (UTC)
::::::::::::::{{çêbû}} Spas! [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 13:18, 1 adar 2025 (UTC)
== Beşa zimanî ==
Silav {{r|Bikarhêner|Wikihez}}. Formata pêş ([https://ku.wiktionary.org/wiki/MediaWiki:Gadget-Site.css#L-195 L-195]) û formata en.wikt-ê [https://ku.wiktionary.org/wiki/MediaWiki:Gadget-Site.css#L-1186 L-1186] tevlî hev bûne... yek zêde ye {{=)}}. Bnr. [[rosa]]. [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 22:20, 24 gulan 2025 (UTC)
:Çêbû? -- [[Bikarhêner:Bikarhêner|Bikarhêner]] ([[Gotûbêja bikarhêner:Bikarhêner|gotûbêj]]) 14:13, 29 gulan 2025 (UTC)
::Erê, spas! [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 19:22, 29 gulan 2025 (UTC)
== Îkonên YouTube û PDFê ==
{{silav|Bikarhêner}} Tu dikarî van CSSan jî tevlî vê rûbelê bikî: [https://en.wiktionary.org/wiki/MediaWiki:Gadget-Site.css#L-1045] û [https://en.wiktionary.org/wiki/MediaWiki:Gadget-Site.css#L-1057]. Bnr. {{q|ku|gong}}; îkonên YouTube û PDFê dikevin pêş URLên xwe. Spas! [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 16:38, 13 tebax 2026 (UTC)
:Îkona X (twitter) jî were tevlî kirin [//ku.wiktionary.org/w/index.php?title=Bikarh%C3%AAner:Ghybu/common.css&oldid=6333647#L-1] ? [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 15:03, 14 tebax 2026 (UTC)
::Em dikarin îkona PDFê hinek biçûktir bikin? Niha ji min re zêde mezin xuya dike. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:03, 14 tebax 2026 (UTC)
:::Bin [//ku.wiktionary.org/wiki/MediaWiki:Gadget-Site.css#L-1278vira] bo {{kod|background-size:16px}} Niha "16px" e, normal e. [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 21:09, 14 tebax 2026 (UTC)
0lda803j7jlpxa2dj3nz7q9h9wuzj6g
6333730
6333729
2026-08-14T21:10:14Z
Ghybu
1393
/* Îkonên YouTube û PDFê */
6333730
wikitext
text/x-wiki
== Nowiki ==
{{silav|Bikarhêner}} bira dikarî nivîsa li jêr kopî bikî û deynî herî jor li [[MediaWiki:Gadget-Site.css|vê rûpelê]]
<syntaxhighlight lang="css">
/* <nowiki> */
</syntaxhighlight>
Ya li jêr jî herî dawiyê li eynî sayfeyê:
<syntaxhighlight lang="css">
/* </nowiki> */
</syntaxhighlight>
--[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 19:05, 7 sibat 2025 (UTC)
:Çêbû? [[Bikarhêner:Bikarhêner|Bikarhêner]] ([[Gotûbêja bikarhêner:Bikarhêner|gotûbêj]]) 19:51, 7 sibat 2025 (UTC)
::Erê, destxweş! [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 20:00, 7 sibat 2025 (UTC)
== ku-Arab (tablo, ''margin'') ==
{{silav|Bikarhêner}} Tablo: di formata ku-Arabê de li aliyê rastê valahî tune, bnr [https://ku.wiktionary.org/w/index.php?title=siwar_b%C3%BBn&variant=ku-arab#Bi_alfabey%C3%AAn_din]
<s>Tu dikarî vî kodî <code>margin: 0.5em 0 0.5em 0.5em;</code> tevlî bin vî kodî bikî [//ku.wiktionary.org/wiki/MediaWiki:Gadget-Site.css#L-6 L-6]</s>
<s>Vî kodê jî <code>margin: 0.5em 0.5em 0.5em 0</code> tevlî bin vî kodî [https://ku.wiktionary.org/wiki/MediaWiki:Gadget-Site.css#L-11 L-11]</s> Spas.
ping {{ping|Balyozxane}} [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 22:47, 12 sibat 2025 (UTC)
:: Min kodê guherand: [//ku.wiktionary.org/w/index.php?title=Bikarh%C3%AAner:Ghybu/common.css&oldid=6067057] --> şûnda [https://ku.wiktionary.org/wiki/MediaWiki:Gadget-Site.css#L-4 L-4 hata L-32]. Spas!--[[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 23:59, 12 sibat 2025 (UTC)
:Wextê te got wa bes e [https://ku.wiktionary.org/wiki/Wîkîferheng:Dîwan#c-Ghybu-20250212120100-Ghybu-20250212115500] min wisa fêm kir ku em tenê bi common.css şablonê bidin aliyê çepê an rastê wekî din styleên din bila nav Şablon an jî Templatestyles de be baştir e ji ber Em classa "tewandin-tablo" bi hemû Şablonên tewandinê yên ku float dikin bi kar tînin. Ma tevlîhevî çênabe wisa? [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 22:53, 12 sibat 2025 (UTC)
::Erê :) feqet bi latînî "margin-left: 0.5em" / margin-right: 0 --> dibe "margin-left: 0" / "margin-right: 0.5em" ji bo ku-Arab. Berevajî ye. [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 23:02, 12 sibat 2025 (UTC)
:::{{r|Wikihez}} "text-align: left;" jî dibe --> "text-align: right", ew jî were guherandin. CSSên hêlê ne (rihgt/left), wekî "background-color" nîne. [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 23:19, 12 sibat 2025 (UTC)
::::{{r|Wikihez}} Em dikarin vana bi JSê jî çêkin: Dema ku lang="ku-Arab": "float:right" --> "float:left" / "margin-left: 0.5em" --> "margin-right: 0", ... [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 23:41, 12 sibat 2025 (UTC)
:::::Kîjan zûtir bar dibe? Js an css? [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 23:44, 12 sibat 2025 (UTC)
::::::Bi gelemperî CSS zûtir e, nizanim li vira pirr ferq diqe an na... Feqet bi JSê her tişt li ser "templatestyles"-ê tê nivîsandin. [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 23:47, 12 sibat 2025 (UTC)
:::::::Eger em karibin Templatestyles bi kar bînin baştir e :) [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 23:56, 12 sibat 2025 (UTC)
::::::::Erê, em ê biceribînin :) [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 00:05, 13 sibat 2025 (UTC)
:::::::::Ev [https://ku.wiktionary.org/wiki/MediaWiki:Gadget-Site.css#L-20] bêyî têketinê naxebite. Wextê dikevî hesabê xwe, dixebite lê wextê tênakevî naxebite :/ [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 05:16, 13 sibat 2025 (UTC)
::::::::::Me bar kir common.css dîsa bêyî têketinê naxebite. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 13:20, 13 sibat 2025 (UTC)
:::::::::::{{r|Bikarhêner|Wikihez}} [https://ku.wiktionary.org/w/index.php?title=Bikarh%C3%AAner:Ghybu/common.css&diff=prev&oldid=6067071 Vitira]? [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 13:47, 13 sibat 2025 (UTC)
::::::::::::Na, bêyî têketinê naşuxile. Bi JS biceribînin? [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 15:14, 13 sibat 2025 (UTC)
:::::::::::::Wisa [https://ku.wiktionary.org/w/index.php?title=Bikarh%C3%AAner:Wikihez/test.js&oldid=6067087 test] [https://ku.wiktionary.org/w/index.php?title=MediaWiki:Gadget-legacy.js&diff=prev&oldid=6067086 legacy.js] dişuxile. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:15, 13 sibat 2025 (UTC)
::::::::::::::Min ji yekî pirs kir, got tiştekî wisa [https://www.mediawiki.org/wiki/ResourceLoader/Architecture#Flipping ResourceLoader/Architecture#Flipping] heye. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 17:23, 13 sibat 2025 (UTC)
:::::::::::::::@Jon Harald Søby dibêje:
:::::::::::::::I haven't looked at it properly, but to me it looks like you're trying to "manually" flip stuff for RTL, but the result is that CSSJanus flips your flipped CSS back, so the end result is the opposite of what you want.
:::::::::::::::When it comes to this CSS, you can basically just code it as if it were for LTR, and it should flip automatically for RTL
:::::::::::::::… although, the logical CSS properties are becoming more common nowadays, so I would probably just use those instead. Logical CSS properties works with axes; so you have the inline axis (left-right) and the block axis (top-bottom). So instead of margin-left, you would use margin-inline-start. That will automatically be different for RTL languages, since the start then is at the right and not the left
:::::::::::::::and instead of padding-bottom, you would use padding-block-end. The beauty of this is that it doesn't only help LTR/RTL languages, but also languages that are written vertically, such as Mongolian and Manchu and sign languages written with SignWriting [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 18:15, 13 sibat 2025 (UTC)
::::::::::::::::{{r|Wikihez}} Erê, ji bo bikarhênerên ne qeydkirî bi xwe CSSê rtl dike (right --> left), bnr. [https://www.mediawiki.org/wiki/ResourceLoader/Architecture#Flipping ''Flipping'']. Min li ser Wîkîpediyaya kurdî ceriband, bnr [//ku.wikipedia.org/w/index.php?title=MediaWiki:Common.css&diff=prev&oldid=1924359] (''class'' "tablo") --> encam [https://ku.wikipedia.org/w/index.php?title=%C5%9Eablon:Ceribandin&diff=prev&oldid=1924358]. Feqet ji bo bikarhênerên qeydkirî naşuxile... [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 23:09, 13 sibat 2025 (UTC)
:::::::::::::::::Jixwe ti tiştê me ne rihet e {{=D}} ltr wekî ya niha bimîne ya rtl noflip bikin wisa em bi ser nekevin? [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 23:23, 13 sibat 2025 (UTC)
::::::::::::::::::Ji bo bikarhênerên qeydkiriî wekî Gadget yên din jî ''flipping'' {{=)}} ? [https://doc.wikimedia.org/cssjanus/master/#input/.tablo-rtl%20%7B%0A%20%20%20%20float%3A%20right%3B%0A%20%20%20%20margin-left%3A%200.5em%3B%0A%20%20%20%20margin-right%3A%200%3B%0A%20%20%20%20clear%3A%20right%3B%0A%7D%0A test] [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 23:31, 13 sibat 2025 (UTC)
:::::::::::::::::::Erê lê xêra xwe pêşî li ser Wîkîpediyayê "noflip" biceribîne, eger nebe, em gadget çêkin ji ber ku ew riya dirêjtir e :) [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 23:35, 13 sibat 2025 (UTC)
::::::::::::::::::::{{r|Wikihez}} Bi [//ku.wikipedia.org/w/index.php?title=MediaWiki:Common.css&oldid=1924368#L-620 vî] awayî çêbûb, bnr. înfoboksa gotara {{w|Amed}}ê. [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 00:28, 14 sibat 2025 (UTC)
:::::::::::::::::::::Çok şikir {{=D}} [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 08:10, 14 sibat 2025 (UTC)
::::::::::::::::::::::Divê nav jî werin guhartin: "tablo-rtl" --> "tablo-flip", "row-rtl" --> "row-flip" [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 10:06, 14 sibat 2025 (UTC)
{{outdent|::::::::::::::::::::::}} {{silav|Bikarhêner}} Dikarî hemû nivîsên vê [https://ku.wiktionary.org/w/index.php?title=Bikarh%C3%AAner:Wikihez/vector-2022.css&oldid=6067213] bixî [[MediaWiki:Gadget-Site.css]] ? [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 14:04, 14 sibat 2025 (UTC)
::Bira xêra xwe koda li jêr jî têxe [[MediaWiki:Gadget-legacy.js]] li herî dawiyê.
<syntaxhighlight lang="js">
/* ==Import [[Bikarhêner:Wikihez/skrîpt/js/fix-kuarab-title.js]]== */
jQuery(document).ready(function () {
importScript('Bikarhêner:Wikihez/skrîpt/js/fix-kuarab-title.js');
});
</syntaxhighlight>
Spas!--[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 15:43, 14 sibat 2025 (UTC)
:@[[Bikarhêner:Ghybu|Ghybu]] Çênebû :/ [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 17:05, 14 sibat 2025 (UTC)
::{{r|Wikihez}} Bi min çêbûye :) Hindekî bisekine ku ''cache'' vala bibe. [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 17:16, 14 sibat 2025 (UTC)
:::Temam îcar çêbû :) Formata jêderê wisa [https://ku.wiktionary.org/w/index.php?title=MediaWiki:Gadget-Site.css&diff=prev&oldid=6067255] baş e yan jî «« »» zêde bikin ji bo ku jêgirtin belî be? [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 17:49, 14 sibat 2025 (UTC)
::::{{silav|Ghybu}} [https://ku.wiktionary.org/w/index.php?title=tehnker%C3%AA&variant=ku-arab] ev sê sablon li kêleka hev xuya dikin bi ku-arab [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 22:38, 14 sibat 2025 (UTC)
:::::{{r|Wikihez}} Di nav ''style''-ê de "clear: right" hebû [//ku.wiktionary.org/w/index.php?title=%C5%9Eablon:ku-tew-nav&diff=prev&oldid=6068385]. [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 00:29, 15 sibat 2025 (UTC)
::::::Mala te ava! [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 00:30, 15 sibat 2025 (UTC)
:::::::{{r|Wikihez|Bikarhêner}} [//ku.wiktionary.org/w/index.php?title=%C5%9Eablon:ku-tew%C3%AEn-lk&diff=prev&oldid=6067073] Em nivîsên "berfireh bike" / "bigere" ([[MediaWiki:Collapsible-expand|Collapsible-expand]] / [[MediaWiki:Collapsible-collapse|Collapsible-collapse]]) wekî "+/-" biguhêrin ? [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 01:10, 15 sibat 2025 (UTC)
::::::::Gelo ew ê were fêmkirin? Hem pêlêkirina wê jî zor nebe? [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 01:25, 15 sibat 2025 (UTC)
:::::::::@[[Bikarhêner:Ghybu|Ghybu]] Ikoneke wisa [[File:Expand_-_Delapouite_-_game-icons.svg|20px|frameless]] ne çêtir e? Niha min ceriband, ê ku dibîne dibêje qey tu yê agahiyekê lê zêde bikî, ne wisa? [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 01:29, 15 sibat 2025 (UTC)
:::::::::Nizanim kîjan baş e :) Herwiha ew nîşan li aliyê çêpê jî tê danîn [https://www.mediawiki.org/wiki/Manual:Collapsible_elements#Move_toggle_link_to_the_left] [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 01:35, 15 sibat 2025 (UTC)
::::::::::+ dîsa baş e lê - qet nebû. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 01:56, 15 sibat 2025 (UTC)
:::::::::::[-] --> [ - ] an jî ▲/▼ an ĵî ∧/∨? [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 02:02, 15 sibat 2025 (UTC)
:::::::::::▲/▼ ev xweş bû. Wana ∧/∨ jî biceribînin? [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 02:14, 15 sibat 2025 (UTC)
::::::::::::Na. Spas! [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 02:15, 15 sibat 2025 (UTC)
== Xuyakirina çavkaniyan ==
{{silav|Bikarhêner}}: dikarî koda li jêr têxî vê rûpelê li herî dawiyê (berî nivîsa /* < /nowiki> */)
<syntaxhighlight lang="css">
/* Make the list of references smaller */
ol.references {
font-size: 90%; /* Default font-size */
margin-bottom: 0.5em;
}
</syntaxhighlight>
{{r|Bikarhêner}}--[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 11:16, 19 sibat 2025 (UTC)
:Çêbû? [[Bikarhêner:Bikarhêner|Bikarhêner]] ([[Gotûbêja bikarhêner:Bikarhêner|gotûbêj]]) 11:18, 19 sibat 2025 (UTC)
::Erê, destxweş! [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 11:22, 19 sibat 2025 (UTC)
== Rengê sernavê şablona {{ş|kol3}} ==
{{silav|Bikarhêner}} Tu dikarî vana sererast bikî:
* [https://ku.wiktionary.org/w/index.php?title=MediaWiki:Gadget-Site.css&oldid=6070748#L-311 L-311, 312]: "bottom" --> "top"
Mînak: [[ketin#Jê]]. Spas! Ping: {{b-|Balyozxane}} [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 22:40, 20 sibat 2025 (UTC)
:Min kir. Çêbû? -- [[Bikarhêner:Bikarhêner|Bikarhêner]] ([[Gotûbêja bikarhêner:Bikarhêner|gotûbêj]]) 08:13, 22 sibat 2025 (UTC)
::@[[Bikarhêner:Ghybu|Ghybu]] Gelo meriv nikare rengê (ê gewr/spî) li pişt nivîsa "kêmtir nîşan bide" rake? [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 10:41, 22 sibat 2025 (UTC)
== Tabloya wergerê ==
→ [[Şablon:werger-ser#Mînak]]
{{silav|Wikihez}}. Di nav taploya wergerê de nivîsa "Wergerekê lê zêde bike bi zimanê" li aliyê çepê hatiye nivîsandin; problem [https://ku.wiktionary.org/wiki/MediaWiki:Gadget-Site.css#L-41 va] ye (.Navcontent {text-align-left;}).
Vana hewce ne: [//ku.wiktionary.org/wiki/MediaWiki:Gadget-Site.css#L-38] [//ku.wiktionary.org/wiki/MediaWiki:Gadget-Site.css#L-31] , tenê ".translations" bes nebû. Herwhiha ducaran hatiye nivîsandin [//ku.wiktionary.org/wiki/MediaWiki:Gadget-Site.css#L-46]. [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 15:46, 27 sibat 2025 (UTC)
:Silav @[[Bikarhêner:Ghybu|Ghybu]] Gereg em çi bikin? [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 19:23, 27 sibat 2025 (UTC)
::Bi vî awayî nayê ceribandin, ji bo ceribandinê rakirina rêzên [https://ku.wiktionary.org/w/index.php?title=MediaWiki:Gadget-Site.css&oldid=6072824#L-29 L-29 heta L-50] hewce ye. ping {{r|Bikarhêner}} [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 21:58, 27 sibat 2025 (UTC)
:::Herwiha ji bo tagên HTMLê (div, span, ...) ''class''-ên [//ku.wiktionary.org/w/index.php?title=Bikarh%C3%AAner:Ghybu/common.css&oldid=6075662 wisa] jî hewce ne: me tenê ji bo tabloyan çêkiriye... Êdî li şûna "float:right", "text-align:left" vana werin bikaranîn (ji bo ''flipping''). Ji ber ku dema ku em di nav kodî de <code>style="float:right"</code> dinivîsin ''flipping'' naşuxile: hertim <code>float:right</code> e. [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 22:12, 27 sibat 2025 (UTC)
::::@[[Bikarhêner:Bikarhêner|Bikarhêner]] bira di vê sayfeyê de ji rêza 29 ê ku bi
::::<nowiki>/* Ji bo {{werger-ser}} */ </nowiki> dest pê dike heta rêza 50 (tê de) dikarî jê bibî?
::::https://ku.wiktionary.org/w/index.php?title=MediaWiki:Gadget-Site.css&oldid=6072824#L-29 [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 07:30, 28 sibat 2025 (UTC)
:::::{{r|Bikarhêner|Wikihez}} Bi min bi [https://ku.wiktionary.org/w/index.php?title=Bikarh%C3%AAner:Ghybu/common.css&oldid=6076340 vî] awayî çêbûye (Ez li ser Linuxê me + Firefox/Chrome) [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 19:24, 28 sibat 2025 (UTC)
::::::@[[Bikarhêner:Ghybu|Ghybu]] Bnr [[izin#Jê]] li Windows(Chrome/Firefox) xelet xuya dikin (nivîs bi ku-arab aliyê çepê de ye). [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 19:34, 28 sibat 2025 (UTC)
:::::::{{r|Wikihez}} [//ku.wiktionary.org/w/index.php?title=%C5%9Eablon:(&diff=prev&oldid=6076357] bi ''class''-ê. [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 19:44, 28 sibat 2025 (UTC)
::::::::Temam çêbû. Spas! Tiştek din heye? [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 19:49, 28 sibat 2025 (UTC)
:::::::::Na {{=)}} [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 19:51, 28 sibat 2025 (UTC)
::::::::::{{silav|Bikarhêner}} Tu dikarî kodê [//ku.wiktionary.org/w/index.php?title=Bikarh%C3%AAner:Ghybu/common.css&oldid=6076340 vira] tevlî [//ku.wiktionary.org/w/index.php?title=MediaWiki:Gadget-Site.css&oldid=6076268#L-29 vira] bikî. Spas! [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 19:57, 28 sibat 2025 (UTC)
:::::::::::Min kir. Rast çêbû? - [[Bikarhêner:Bikarhêner|Bikarhêner]] ([[Gotûbêja bikarhêner:Bikarhêner|gotûbêj]]) 03:44, 1 adar 2025 (UTC)
::::::::::::{{r|Bikarhêner}} Gelek spas! Tu dikarî va jî sererast bikî: [https://ku.wiktionary.org/w/index.php?title=Bikarh%C3%AAner:Ghybu/common.css&oldid=6076648] --> [https://ku.wiktionary.org/wiki/MediaWiki:Gadget-Site.css#L-50 L-50]. Ji ber ku (ji bo bikarhênerên neqeydkirî) li [//ku.wiktionary.org/w/index.php?title=kurd%C3%AE&variant=ku-arab#J%C3%AA vira] "kêmitir nîşab bide" li orteyê de nehatiye nivîsandin.. [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 11:57, 1 adar 2025 (UTC)
:::::::::::::Min çêkir, bûye? -- [[Bikarhêner:Bikarhêner|Bikarhêner]] ([[Gotûbêja bikarhêner:Bikarhêner|gotûbêj]]) 13:04, 1 adar 2025 (UTC)
::::::::::::::{{çêbû}} Spas! [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 13:18, 1 adar 2025 (UTC)
== Beşa zimanî ==
Silav {{r|Bikarhêner|Wikihez}}. Formata pêş ([https://ku.wiktionary.org/wiki/MediaWiki:Gadget-Site.css#L-195 L-195]) û formata en.wikt-ê [https://ku.wiktionary.org/wiki/MediaWiki:Gadget-Site.css#L-1186 L-1186] tevlî hev bûne... yek zêde ye {{=)}}. Bnr. [[rosa]]. [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 22:20, 24 gulan 2025 (UTC)
:Çêbû? -- [[Bikarhêner:Bikarhêner|Bikarhêner]] ([[Gotûbêja bikarhêner:Bikarhêner|gotûbêj]]) 14:13, 29 gulan 2025 (UTC)
::Erê, spas! [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 19:22, 29 gulan 2025 (UTC)
== Îkonên YouTube û PDFê ==
{{silav|Bikarhêner}} Tu dikarî van CSSan jî tevlî vê rûbelê bikî: [https://en.wiktionary.org/wiki/MediaWiki:Gadget-Site.css#L-1045] û [https://en.wiktionary.org/wiki/MediaWiki:Gadget-Site.css#L-1057]. Bnr. {{q|ku|gong}}; îkonên YouTube û PDFê dikevin pêş URLên xwe. Spas! [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 16:38, 13 tebax 2026 (UTC)
:Îkona X (twitter) jî were tevlî kirin [//ku.wiktionary.org/w/index.php?title=Bikarh%C3%AAner:Ghybu/common.css&oldid=6333647#L-1] ? [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 15:03, 14 tebax 2026 (UTC)
::Em dikarin îkona PDFê hinek biçûktir bikin? Niha ji min re zêde mezin xuya dike. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:03, 14 tebax 2026 (UTC)
:::Bin [//ku.wiktionary.org/wiki/MediaWiki:Gadget-Site.css#L-1278 vira] bo {{kod|background-size:16px}} Niha "16px" e, normal e. [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 21:09, 14 tebax 2026 (UTC)
7rh56670uo4kw10vbojz06zj0ejjtip
6333732
6333730
2026-08-14T21:11:36Z
Ghybu
1393
/* Îkonên YouTube û PDFê */
6333732
wikitext
text/x-wiki
== Nowiki ==
{{silav|Bikarhêner}} bira dikarî nivîsa li jêr kopî bikî û deynî herî jor li [[MediaWiki:Gadget-Site.css|vê rûpelê]]
<syntaxhighlight lang="css">
/* <nowiki> */
</syntaxhighlight>
Ya li jêr jî herî dawiyê li eynî sayfeyê:
<syntaxhighlight lang="css">
/* </nowiki> */
</syntaxhighlight>
--[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 19:05, 7 sibat 2025 (UTC)
:Çêbû? [[Bikarhêner:Bikarhêner|Bikarhêner]] ([[Gotûbêja bikarhêner:Bikarhêner|gotûbêj]]) 19:51, 7 sibat 2025 (UTC)
::Erê, destxweş! [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 20:00, 7 sibat 2025 (UTC)
== ku-Arab (tablo, ''margin'') ==
{{silav|Bikarhêner}} Tablo: di formata ku-Arabê de li aliyê rastê valahî tune, bnr [https://ku.wiktionary.org/w/index.php?title=siwar_b%C3%BBn&variant=ku-arab#Bi_alfabey%C3%AAn_din]
<s>Tu dikarî vî kodî <code>margin: 0.5em 0 0.5em 0.5em;</code> tevlî bin vî kodî bikî [//ku.wiktionary.org/wiki/MediaWiki:Gadget-Site.css#L-6 L-6]</s>
<s>Vî kodê jî <code>margin: 0.5em 0.5em 0.5em 0</code> tevlî bin vî kodî [https://ku.wiktionary.org/wiki/MediaWiki:Gadget-Site.css#L-11 L-11]</s> Spas.
ping {{ping|Balyozxane}} [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 22:47, 12 sibat 2025 (UTC)
:: Min kodê guherand: [//ku.wiktionary.org/w/index.php?title=Bikarh%C3%AAner:Ghybu/common.css&oldid=6067057] --> şûnda [https://ku.wiktionary.org/wiki/MediaWiki:Gadget-Site.css#L-4 L-4 hata L-32]. Spas!--[[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 23:59, 12 sibat 2025 (UTC)
:Wextê te got wa bes e [https://ku.wiktionary.org/wiki/Wîkîferheng:Dîwan#c-Ghybu-20250212120100-Ghybu-20250212115500] min wisa fêm kir ku em tenê bi common.css şablonê bidin aliyê çepê an rastê wekî din styleên din bila nav Şablon an jî Templatestyles de be baştir e ji ber Em classa "tewandin-tablo" bi hemû Şablonên tewandinê yên ku float dikin bi kar tînin. Ma tevlîhevî çênabe wisa? [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 22:53, 12 sibat 2025 (UTC)
::Erê :) feqet bi latînî "margin-left: 0.5em" / margin-right: 0 --> dibe "margin-left: 0" / "margin-right: 0.5em" ji bo ku-Arab. Berevajî ye. [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 23:02, 12 sibat 2025 (UTC)
:::{{r|Wikihez}} "text-align: left;" jî dibe --> "text-align: right", ew jî were guherandin. CSSên hêlê ne (rihgt/left), wekî "background-color" nîne. [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 23:19, 12 sibat 2025 (UTC)
::::{{r|Wikihez}} Em dikarin vana bi JSê jî çêkin: Dema ku lang="ku-Arab": "float:right" --> "float:left" / "margin-left: 0.5em" --> "margin-right: 0", ... [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 23:41, 12 sibat 2025 (UTC)
:::::Kîjan zûtir bar dibe? Js an css? [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 23:44, 12 sibat 2025 (UTC)
::::::Bi gelemperî CSS zûtir e, nizanim li vira pirr ferq diqe an na... Feqet bi JSê her tişt li ser "templatestyles"-ê tê nivîsandin. [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 23:47, 12 sibat 2025 (UTC)
:::::::Eger em karibin Templatestyles bi kar bînin baştir e :) [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 23:56, 12 sibat 2025 (UTC)
::::::::Erê, em ê biceribînin :) [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 00:05, 13 sibat 2025 (UTC)
:::::::::Ev [https://ku.wiktionary.org/wiki/MediaWiki:Gadget-Site.css#L-20] bêyî têketinê naxebite. Wextê dikevî hesabê xwe, dixebite lê wextê tênakevî naxebite :/ [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 05:16, 13 sibat 2025 (UTC)
::::::::::Me bar kir common.css dîsa bêyî têketinê naxebite. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 13:20, 13 sibat 2025 (UTC)
:::::::::::{{r|Bikarhêner|Wikihez}} [https://ku.wiktionary.org/w/index.php?title=Bikarh%C3%AAner:Ghybu/common.css&diff=prev&oldid=6067071 Vitira]? [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 13:47, 13 sibat 2025 (UTC)
::::::::::::Na, bêyî têketinê naşuxile. Bi JS biceribînin? [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 15:14, 13 sibat 2025 (UTC)
:::::::::::::Wisa [https://ku.wiktionary.org/w/index.php?title=Bikarh%C3%AAner:Wikihez/test.js&oldid=6067087 test] [https://ku.wiktionary.org/w/index.php?title=MediaWiki:Gadget-legacy.js&diff=prev&oldid=6067086 legacy.js] dişuxile. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:15, 13 sibat 2025 (UTC)
::::::::::::::Min ji yekî pirs kir, got tiştekî wisa [https://www.mediawiki.org/wiki/ResourceLoader/Architecture#Flipping ResourceLoader/Architecture#Flipping] heye. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 17:23, 13 sibat 2025 (UTC)
:::::::::::::::@Jon Harald Søby dibêje:
:::::::::::::::I haven't looked at it properly, but to me it looks like you're trying to "manually" flip stuff for RTL, but the result is that CSSJanus flips your flipped CSS back, so the end result is the opposite of what you want.
:::::::::::::::When it comes to this CSS, you can basically just code it as if it were for LTR, and it should flip automatically for RTL
:::::::::::::::… although, the logical CSS properties are becoming more common nowadays, so I would probably just use those instead. Logical CSS properties works with axes; so you have the inline axis (left-right) and the block axis (top-bottom). So instead of margin-left, you would use margin-inline-start. That will automatically be different for RTL languages, since the start then is at the right and not the left
:::::::::::::::and instead of padding-bottom, you would use padding-block-end. The beauty of this is that it doesn't only help LTR/RTL languages, but also languages that are written vertically, such as Mongolian and Manchu and sign languages written with SignWriting [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 18:15, 13 sibat 2025 (UTC)
::::::::::::::::{{r|Wikihez}} Erê, ji bo bikarhênerên ne qeydkirî bi xwe CSSê rtl dike (right --> left), bnr. [https://www.mediawiki.org/wiki/ResourceLoader/Architecture#Flipping ''Flipping'']. Min li ser Wîkîpediyaya kurdî ceriband, bnr [//ku.wikipedia.org/w/index.php?title=MediaWiki:Common.css&diff=prev&oldid=1924359] (''class'' "tablo") --> encam [https://ku.wikipedia.org/w/index.php?title=%C5%9Eablon:Ceribandin&diff=prev&oldid=1924358]. Feqet ji bo bikarhênerên qeydkirî naşuxile... [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 23:09, 13 sibat 2025 (UTC)
:::::::::::::::::Jixwe ti tiştê me ne rihet e {{=D}} ltr wekî ya niha bimîne ya rtl noflip bikin wisa em bi ser nekevin? [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 23:23, 13 sibat 2025 (UTC)
::::::::::::::::::Ji bo bikarhênerên qeydkiriî wekî Gadget yên din jî ''flipping'' {{=)}} ? [https://doc.wikimedia.org/cssjanus/master/#input/.tablo-rtl%20%7B%0A%20%20%20%20float%3A%20right%3B%0A%20%20%20%20margin-left%3A%200.5em%3B%0A%20%20%20%20margin-right%3A%200%3B%0A%20%20%20%20clear%3A%20right%3B%0A%7D%0A test] [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 23:31, 13 sibat 2025 (UTC)
:::::::::::::::::::Erê lê xêra xwe pêşî li ser Wîkîpediyayê "noflip" biceribîne, eger nebe, em gadget çêkin ji ber ku ew riya dirêjtir e :) [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 23:35, 13 sibat 2025 (UTC)
::::::::::::::::::::{{r|Wikihez}} Bi [//ku.wikipedia.org/w/index.php?title=MediaWiki:Common.css&oldid=1924368#L-620 vî] awayî çêbûb, bnr. înfoboksa gotara {{w|Amed}}ê. [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 00:28, 14 sibat 2025 (UTC)
:::::::::::::::::::::Çok şikir {{=D}} [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 08:10, 14 sibat 2025 (UTC)
::::::::::::::::::::::Divê nav jî werin guhartin: "tablo-rtl" --> "tablo-flip", "row-rtl" --> "row-flip" [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 10:06, 14 sibat 2025 (UTC)
{{outdent|::::::::::::::::::::::}} {{silav|Bikarhêner}} Dikarî hemû nivîsên vê [https://ku.wiktionary.org/w/index.php?title=Bikarh%C3%AAner:Wikihez/vector-2022.css&oldid=6067213] bixî [[MediaWiki:Gadget-Site.css]] ? [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 14:04, 14 sibat 2025 (UTC)
::Bira xêra xwe koda li jêr jî têxe [[MediaWiki:Gadget-legacy.js]] li herî dawiyê.
<syntaxhighlight lang="js">
/* ==Import [[Bikarhêner:Wikihez/skrîpt/js/fix-kuarab-title.js]]== */
jQuery(document).ready(function () {
importScript('Bikarhêner:Wikihez/skrîpt/js/fix-kuarab-title.js');
});
</syntaxhighlight>
Spas!--[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 15:43, 14 sibat 2025 (UTC)
:@[[Bikarhêner:Ghybu|Ghybu]] Çênebû :/ [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 17:05, 14 sibat 2025 (UTC)
::{{r|Wikihez}} Bi min çêbûye :) Hindekî bisekine ku ''cache'' vala bibe. [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 17:16, 14 sibat 2025 (UTC)
:::Temam îcar çêbû :) Formata jêderê wisa [https://ku.wiktionary.org/w/index.php?title=MediaWiki:Gadget-Site.css&diff=prev&oldid=6067255] baş e yan jî «« »» zêde bikin ji bo ku jêgirtin belî be? [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 17:49, 14 sibat 2025 (UTC)
::::{{silav|Ghybu}} [https://ku.wiktionary.org/w/index.php?title=tehnker%C3%AA&variant=ku-arab] ev sê sablon li kêleka hev xuya dikin bi ku-arab [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 22:38, 14 sibat 2025 (UTC)
:::::{{r|Wikihez}} Di nav ''style''-ê de "clear: right" hebû [//ku.wiktionary.org/w/index.php?title=%C5%9Eablon:ku-tew-nav&diff=prev&oldid=6068385]. [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 00:29, 15 sibat 2025 (UTC)
::::::Mala te ava! [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 00:30, 15 sibat 2025 (UTC)
:::::::{{r|Wikihez|Bikarhêner}} [//ku.wiktionary.org/w/index.php?title=%C5%9Eablon:ku-tew%C3%AEn-lk&diff=prev&oldid=6067073] Em nivîsên "berfireh bike" / "bigere" ([[MediaWiki:Collapsible-expand|Collapsible-expand]] / [[MediaWiki:Collapsible-collapse|Collapsible-collapse]]) wekî "+/-" biguhêrin ? [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 01:10, 15 sibat 2025 (UTC)
::::::::Gelo ew ê were fêmkirin? Hem pêlêkirina wê jî zor nebe? [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 01:25, 15 sibat 2025 (UTC)
:::::::::@[[Bikarhêner:Ghybu|Ghybu]] Ikoneke wisa [[File:Expand_-_Delapouite_-_game-icons.svg|20px|frameless]] ne çêtir e? Niha min ceriband, ê ku dibîne dibêje qey tu yê agahiyekê lê zêde bikî, ne wisa? [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 01:29, 15 sibat 2025 (UTC)
:::::::::Nizanim kîjan baş e :) Herwiha ew nîşan li aliyê çêpê jî tê danîn [https://www.mediawiki.org/wiki/Manual:Collapsible_elements#Move_toggle_link_to_the_left] [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 01:35, 15 sibat 2025 (UTC)
::::::::::+ dîsa baş e lê - qet nebû. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 01:56, 15 sibat 2025 (UTC)
:::::::::::[-] --> [ - ] an jî ▲/▼ an ĵî ∧/∨? [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 02:02, 15 sibat 2025 (UTC)
:::::::::::▲/▼ ev xweş bû. Wana ∧/∨ jî biceribînin? [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 02:14, 15 sibat 2025 (UTC)
::::::::::::Na. Spas! [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 02:15, 15 sibat 2025 (UTC)
== Xuyakirina çavkaniyan ==
{{silav|Bikarhêner}}: dikarî koda li jêr têxî vê rûpelê li herî dawiyê (berî nivîsa /* < /nowiki> */)
<syntaxhighlight lang="css">
/* Make the list of references smaller */
ol.references {
font-size: 90%; /* Default font-size */
margin-bottom: 0.5em;
}
</syntaxhighlight>
{{r|Bikarhêner}}--[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 11:16, 19 sibat 2025 (UTC)
:Çêbû? [[Bikarhêner:Bikarhêner|Bikarhêner]] ([[Gotûbêja bikarhêner:Bikarhêner|gotûbêj]]) 11:18, 19 sibat 2025 (UTC)
::Erê, destxweş! [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 11:22, 19 sibat 2025 (UTC)
== Rengê sernavê şablona {{ş|kol3}} ==
{{silav|Bikarhêner}} Tu dikarî vana sererast bikî:
* [https://ku.wiktionary.org/w/index.php?title=MediaWiki:Gadget-Site.css&oldid=6070748#L-311 L-311, 312]: "bottom" --> "top"
Mînak: [[ketin#Jê]]. Spas! Ping: {{b-|Balyozxane}} [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 22:40, 20 sibat 2025 (UTC)
:Min kir. Çêbû? -- [[Bikarhêner:Bikarhêner|Bikarhêner]] ([[Gotûbêja bikarhêner:Bikarhêner|gotûbêj]]) 08:13, 22 sibat 2025 (UTC)
::@[[Bikarhêner:Ghybu|Ghybu]] Gelo meriv nikare rengê (ê gewr/spî) li pişt nivîsa "kêmtir nîşan bide" rake? [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 10:41, 22 sibat 2025 (UTC)
== Tabloya wergerê ==
→ [[Şablon:werger-ser#Mînak]]
{{silav|Wikihez}}. Di nav taploya wergerê de nivîsa "Wergerekê lê zêde bike bi zimanê" li aliyê çepê hatiye nivîsandin; problem [https://ku.wiktionary.org/wiki/MediaWiki:Gadget-Site.css#L-41 va] ye (.Navcontent {text-align-left;}).
Vana hewce ne: [//ku.wiktionary.org/wiki/MediaWiki:Gadget-Site.css#L-38] [//ku.wiktionary.org/wiki/MediaWiki:Gadget-Site.css#L-31] , tenê ".translations" bes nebû. Herwhiha ducaran hatiye nivîsandin [//ku.wiktionary.org/wiki/MediaWiki:Gadget-Site.css#L-46]. [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 15:46, 27 sibat 2025 (UTC)
:Silav @[[Bikarhêner:Ghybu|Ghybu]] Gereg em çi bikin? [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 19:23, 27 sibat 2025 (UTC)
::Bi vî awayî nayê ceribandin, ji bo ceribandinê rakirina rêzên [https://ku.wiktionary.org/w/index.php?title=MediaWiki:Gadget-Site.css&oldid=6072824#L-29 L-29 heta L-50] hewce ye. ping {{r|Bikarhêner}} [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 21:58, 27 sibat 2025 (UTC)
:::Herwiha ji bo tagên HTMLê (div, span, ...) ''class''-ên [//ku.wiktionary.org/w/index.php?title=Bikarh%C3%AAner:Ghybu/common.css&oldid=6075662 wisa] jî hewce ne: me tenê ji bo tabloyan çêkiriye... Êdî li şûna "float:right", "text-align:left" vana werin bikaranîn (ji bo ''flipping''). Ji ber ku dema ku em di nav kodî de <code>style="float:right"</code> dinivîsin ''flipping'' naşuxile: hertim <code>float:right</code> e. [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 22:12, 27 sibat 2025 (UTC)
::::@[[Bikarhêner:Bikarhêner|Bikarhêner]] bira di vê sayfeyê de ji rêza 29 ê ku bi
::::<nowiki>/* Ji bo {{werger-ser}} */ </nowiki> dest pê dike heta rêza 50 (tê de) dikarî jê bibî?
::::https://ku.wiktionary.org/w/index.php?title=MediaWiki:Gadget-Site.css&oldid=6072824#L-29 [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 07:30, 28 sibat 2025 (UTC)
:::::{{r|Bikarhêner|Wikihez}} Bi min bi [https://ku.wiktionary.org/w/index.php?title=Bikarh%C3%AAner:Ghybu/common.css&oldid=6076340 vî] awayî çêbûye (Ez li ser Linuxê me + Firefox/Chrome) [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 19:24, 28 sibat 2025 (UTC)
::::::@[[Bikarhêner:Ghybu|Ghybu]] Bnr [[izin#Jê]] li Windows(Chrome/Firefox) xelet xuya dikin (nivîs bi ku-arab aliyê çepê de ye). [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 19:34, 28 sibat 2025 (UTC)
:::::::{{r|Wikihez}} [//ku.wiktionary.org/w/index.php?title=%C5%9Eablon:(&diff=prev&oldid=6076357] bi ''class''-ê. [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 19:44, 28 sibat 2025 (UTC)
::::::::Temam çêbû. Spas! Tiştek din heye? [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 19:49, 28 sibat 2025 (UTC)
:::::::::Na {{=)}} [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 19:51, 28 sibat 2025 (UTC)
::::::::::{{silav|Bikarhêner}} Tu dikarî kodê [//ku.wiktionary.org/w/index.php?title=Bikarh%C3%AAner:Ghybu/common.css&oldid=6076340 vira] tevlî [//ku.wiktionary.org/w/index.php?title=MediaWiki:Gadget-Site.css&oldid=6076268#L-29 vira] bikî. Spas! [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 19:57, 28 sibat 2025 (UTC)
:::::::::::Min kir. Rast çêbû? - [[Bikarhêner:Bikarhêner|Bikarhêner]] ([[Gotûbêja bikarhêner:Bikarhêner|gotûbêj]]) 03:44, 1 adar 2025 (UTC)
::::::::::::{{r|Bikarhêner}} Gelek spas! Tu dikarî va jî sererast bikî: [https://ku.wiktionary.org/w/index.php?title=Bikarh%C3%AAner:Ghybu/common.css&oldid=6076648] --> [https://ku.wiktionary.org/wiki/MediaWiki:Gadget-Site.css#L-50 L-50]. Ji ber ku (ji bo bikarhênerên neqeydkirî) li [//ku.wiktionary.org/w/index.php?title=kurd%C3%AE&variant=ku-arab#J%C3%AA vira] "kêmitir nîşab bide" li orteyê de nehatiye nivîsandin.. [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 11:57, 1 adar 2025 (UTC)
:::::::::::::Min çêkir, bûye? -- [[Bikarhêner:Bikarhêner|Bikarhêner]] ([[Gotûbêja bikarhêner:Bikarhêner|gotûbêj]]) 13:04, 1 adar 2025 (UTC)
::::::::::::::{{çêbû}} Spas! [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 13:18, 1 adar 2025 (UTC)
== Beşa zimanî ==
Silav {{r|Bikarhêner|Wikihez}}. Formata pêş ([https://ku.wiktionary.org/wiki/MediaWiki:Gadget-Site.css#L-195 L-195]) û formata en.wikt-ê [https://ku.wiktionary.org/wiki/MediaWiki:Gadget-Site.css#L-1186 L-1186] tevlî hev bûne... yek zêde ye {{=)}}. Bnr. [[rosa]]. [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 22:20, 24 gulan 2025 (UTC)
:Çêbû? -- [[Bikarhêner:Bikarhêner|Bikarhêner]] ([[Gotûbêja bikarhêner:Bikarhêner|gotûbêj]]) 14:13, 29 gulan 2025 (UTC)
::Erê, spas! [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 19:22, 29 gulan 2025 (UTC)
== Îkonên YouTube û PDFê ==
{{silav|Bikarhêner}} Tu dikarî van CSSan jî tevlî vê rûbelê bikî: [https://en.wiktionary.org/wiki/MediaWiki:Gadget-Site.css#L-1045] û [https://en.wiktionary.org/wiki/MediaWiki:Gadget-Site.css#L-1057]. Bnr. {{q|ku|gong}}; îkonên YouTube û PDFê dikevin pêş URLên xwe. Spas! [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 16:38, 13 tebax 2026 (UTC)
:Îkona X (twitter) jî were tevlî kirin [//ku.wiktionary.org/w/index.php?title=Bikarh%C3%AAner:Ghybu/common.css&oldid=6333647#L-1] ? [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 15:03, 14 tebax 2026 (UTC)
::Em dikarin îkona PDFê hinek biçûktir bikin? Niha ji min re zêde mezin xuya dike. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:03, 14 tebax 2026 (UTC)
:::Bin [//ku.wiktionary.org/wiki/MediaWiki:Gadget-Site.css#L-1278 vira] bo {{kod|background-size:16px}} Niha "16px" e, normal e (bnr. [[bilîn#Lêker]]). [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 21:09, 14 tebax 2026 (UTC)
scrv4i1l4ns91kbagm9q7rdfhhujwm0
6333736
6333732
2026-08-14T21:25:41Z
Wikihez
7344
/* Îkonên YouTube û PDFê */ Bersiv
6333736
wikitext
text/x-wiki
== Nowiki ==
{{silav|Bikarhêner}} bira dikarî nivîsa li jêr kopî bikî û deynî herî jor li [[MediaWiki:Gadget-Site.css|vê rûpelê]]
<syntaxhighlight lang="css">
/* <nowiki> */
</syntaxhighlight>
Ya li jêr jî herî dawiyê li eynî sayfeyê:
<syntaxhighlight lang="css">
/* </nowiki> */
</syntaxhighlight>
--[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 19:05, 7 sibat 2025 (UTC)
:Çêbû? [[Bikarhêner:Bikarhêner|Bikarhêner]] ([[Gotûbêja bikarhêner:Bikarhêner|gotûbêj]]) 19:51, 7 sibat 2025 (UTC)
::Erê, destxweş! [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 20:00, 7 sibat 2025 (UTC)
== ku-Arab (tablo, ''margin'') ==
{{silav|Bikarhêner}} Tablo: di formata ku-Arabê de li aliyê rastê valahî tune, bnr [https://ku.wiktionary.org/w/index.php?title=siwar_b%C3%BBn&variant=ku-arab#Bi_alfabey%C3%AAn_din]
<s>Tu dikarî vî kodî <code>margin: 0.5em 0 0.5em 0.5em;</code> tevlî bin vî kodî bikî [//ku.wiktionary.org/wiki/MediaWiki:Gadget-Site.css#L-6 L-6]</s>
<s>Vî kodê jî <code>margin: 0.5em 0.5em 0.5em 0</code> tevlî bin vî kodî [https://ku.wiktionary.org/wiki/MediaWiki:Gadget-Site.css#L-11 L-11]</s> Spas.
ping {{ping|Balyozxane}} [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 22:47, 12 sibat 2025 (UTC)
:: Min kodê guherand: [//ku.wiktionary.org/w/index.php?title=Bikarh%C3%AAner:Ghybu/common.css&oldid=6067057] --> şûnda [https://ku.wiktionary.org/wiki/MediaWiki:Gadget-Site.css#L-4 L-4 hata L-32]. Spas!--[[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 23:59, 12 sibat 2025 (UTC)
:Wextê te got wa bes e [https://ku.wiktionary.org/wiki/Wîkîferheng:Dîwan#c-Ghybu-20250212120100-Ghybu-20250212115500] min wisa fêm kir ku em tenê bi common.css şablonê bidin aliyê çepê an rastê wekî din styleên din bila nav Şablon an jî Templatestyles de be baştir e ji ber Em classa "tewandin-tablo" bi hemû Şablonên tewandinê yên ku float dikin bi kar tînin. Ma tevlîhevî çênabe wisa? [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 22:53, 12 sibat 2025 (UTC)
::Erê :) feqet bi latînî "margin-left: 0.5em" / margin-right: 0 --> dibe "margin-left: 0" / "margin-right: 0.5em" ji bo ku-Arab. Berevajî ye. [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 23:02, 12 sibat 2025 (UTC)
:::{{r|Wikihez}} "text-align: left;" jî dibe --> "text-align: right", ew jî were guherandin. CSSên hêlê ne (rihgt/left), wekî "background-color" nîne. [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 23:19, 12 sibat 2025 (UTC)
::::{{r|Wikihez}} Em dikarin vana bi JSê jî çêkin: Dema ku lang="ku-Arab": "float:right" --> "float:left" / "margin-left: 0.5em" --> "margin-right: 0", ... [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 23:41, 12 sibat 2025 (UTC)
:::::Kîjan zûtir bar dibe? Js an css? [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 23:44, 12 sibat 2025 (UTC)
::::::Bi gelemperî CSS zûtir e, nizanim li vira pirr ferq diqe an na... Feqet bi JSê her tişt li ser "templatestyles"-ê tê nivîsandin. [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 23:47, 12 sibat 2025 (UTC)
:::::::Eger em karibin Templatestyles bi kar bînin baştir e :) [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 23:56, 12 sibat 2025 (UTC)
::::::::Erê, em ê biceribînin :) [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 00:05, 13 sibat 2025 (UTC)
:::::::::Ev [https://ku.wiktionary.org/wiki/MediaWiki:Gadget-Site.css#L-20] bêyî têketinê naxebite. Wextê dikevî hesabê xwe, dixebite lê wextê tênakevî naxebite :/ [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 05:16, 13 sibat 2025 (UTC)
::::::::::Me bar kir common.css dîsa bêyî têketinê naxebite. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 13:20, 13 sibat 2025 (UTC)
:::::::::::{{r|Bikarhêner|Wikihez}} [https://ku.wiktionary.org/w/index.php?title=Bikarh%C3%AAner:Ghybu/common.css&diff=prev&oldid=6067071 Vitira]? [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 13:47, 13 sibat 2025 (UTC)
::::::::::::Na, bêyî têketinê naşuxile. Bi JS biceribînin? [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 15:14, 13 sibat 2025 (UTC)
:::::::::::::Wisa [https://ku.wiktionary.org/w/index.php?title=Bikarh%C3%AAner:Wikihez/test.js&oldid=6067087 test] [https://ku.wiktionary.org/w/index.php?title=MediaWiki:Gadget-legacy.js&diff=prev&oldid=6067086 legacy.js] dişuxile. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:15, 13 sibat 2025 (UTC)
::::::::::::::Min ji yekî pirs kir, got tiştekî wisa [https://www.mediawiki.org/wiki/ResourceLoader/Architecture#Flipping ResourceLoader/Architecture#Flipping] heye. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 17:23, 13 sibat 2025 (UTC)
:::::::::::::::@Jon Harald Søby dibêje:
:::::::::::::::I haven't looked at it properly, but to me it looks like you're trying to "manually" flip stuff for RTL, but the result is that CSSJanus flips your flipped CSS back, so the end result is the opposite of what you want.
:::::::::::::::When it comes to this CSS, you can basically just code it as if it were for LTR, and it should flip automatically for RTL
:::::::::::::::… although, the logical CSS properties are becoming more common nowadays, so I would probably just use those instead. Logical CSS properties works with axes; so you have the inline axis (left-right) and the block axis (top-bottom). So instead of margin-left, you would use margin-inline-start. That will automatically be different for RTL languages, since the start then is at the right and not the left
:::::::::::::::and instead of padding-bottom, you would use padding-block-end. The beauty of this is that it doesn't only help LTR/RTL languages, but also languages that are written vertically, such as Mongolian and Manchu and sign languages written with SignWriting [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 18:15, 13 sibat 2025 (UTC)
::::::::::::::::{{r|Wikihez}} Erê, ji bo bikarhênerên ne qeydkirî bi xwe CSSê rtl dike (right --> left), bnr. [https://www.mediawiki.org/wiki/ResourceLoader/Architecture#Flipping ''Flipping'']. Min li ser Wîkîpediyaya kurdî ceriband, bnr [//ku.wikipedia.org/w/index.php?title=MediaWiki:Common.css&diff=prev&oldid=1924359] (''class'' "tablo") --> encam [https://ku.wikipedia.org/w/index.php?title=%C5%9Eablon:Ceribandin&diff=prev&oldid=1924358]. Feqet ji bo bikarhênerên qeydkirî naşuxile... [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 23:09, 13 sibat 2025 (UTC)
:::::::::::::::::Jixwe ti tiştê me ne rihet e {{=D}} ltr wekî ya niha bimîne ya rtl noflip bikin wisa em bi ser nekevin? [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 23:23, 13 sibat 2025 (UTC)
::::::::::::::::::Ji bo bikarhênerên qeydkiriî wekî Gadget yên din jî ''flipping'' {{=)}} ? [https://doc.wikimedia.org/cssjanus/master/#input/.tablo-rtl%20%7B%0A%20%20%20%20float%3A%20right%3B%0A%20%20%20%20margin-left%3A%200.5em%3B%0A%20%20%20%20margin-right%3A%200%3B%0A%20%20%20%20clear%3A%20right%3B%0A%7D%0A test] [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 23:31, 13 sibat 2025 (UTC)
:::::::::::::::::::Erê lê xêra xwe pêşî li ser Wîkîpediyayê "noflip" biceribîne, eger nebe, em gadget çêkin ji ber ku ew riya dirêjtir e :) [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 23:35, 13 sibat 2025 (UTC)
::::::::::::::::::::{{r|Wikihez}} Bi [//ku.wikipedia.org/w/index.php?title=MediaWiki:Common.css&oldid=1924368#L-620 vî] awayî çêbûb, bnr. înfoboksa gotara {{w|Amed}}ê. [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 00:28, 14 sibat 2025 (UTC)
:::::::::::::::::::::Çok şikir {{=D}} [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 08:10, 14 sibat 2025 (UTC)
::::::::::::::::::::::Divê nav jî werin guhartin: "tablo-rtl" --> "tablo-flip", "row-rtl" --> "row-flip" [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 10:06, 14 sibat 2025 (UTC)
{{outdent|::::::::::::::::::::::}} {{silav|Bikarhêner}} Dikarî hemû nivîsên vê [https://ku.wiktionary.org/w/index.php?title=Bikarh%C3%AAner:Wikihez/vector-2022.css&oldid=6067213] bixî [[MediaWiki:Gadget-Site.css]] ? [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 14:04, 14 sibat 2025 (UTC)
::Bira xêra xwe koda li jêr jî têxe [[MediaWiki:Gadget-legacy.js]] li herî dawiyê.
<syntaxhighlight lang="js">
/* ==Import [[Bikarhêner:Wikihez/skrîpt/js/fix-kuarab-title.js]]== */
jQuery(document).ready(function () {
importScript('Bikarhêner:Wikihez/skrîpt/js/fix-kuarab-title.js');
});
</syntaxhighlight>
Spas!--[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 15:43, 14 sibat 2025 (UTC)
:@[[Bikarhêner:Ghybu|Ghybu]] Çênebû :/ [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 17:05, 14 sibat 2025 (UTC)
::{{r|Wikihez}} Bi min çêbûye :) Hindekî bisekine ku ''cache'' vala bibe. [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 17:16, 14 sibat 2025 (UTC)
:::Temam îcar çêbû :) Formata jêderê wisa [https://ku.wiktionary.org/w/index.php?title=MediaWiki:Gadget-Site.css&diff=prev&oldid=6067255] baş e yan jî «« »» zêde bikin ji bo ku jêgirtin belî be? [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 17:49, 14 sibat 2025 (UTC)
::::{{silav|Ghybu}} [https://ku.wiktionary.org/w/index.php?title=tehnker%C3%AA&variant=ku-arab] ev sê sablon li kêleka hev xuya dikin bi ku-arab [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 22:38, 14 sibat 2025 (UTC)
:::::{{r|Wikihez}} Di nav ''style''-ê de "clear: right" hebû [//ku.wiktionary.org/w/index.php?title=%C5%9Eablon:ku-tew-nav&diff=prev&oldid=6068385]. [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 00:29, 15 sibat 2025 (UTC)
::::::Mala te ava! [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 00:30, 15 sibat 2025 (UTC)
:::::::{{r|Wikihez|Bikarhêner}} [//ku.wiktionary.org/w/index.php?title=%C5%9Eablon:ku-tew%C3%AEn-lk&diff=prev&oldid=6067073] Em nivîsên "berfireh bike" / "bigere" ([[MediaWiki:Collapsible-expand|Collapsible-expand]] / [[MediaWiki:Collapsible-collapse|Collapsible-collapse]]) wekî "+/-" biguhêrin ? [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 01:10, 15 sibat 2025 (UTC)
::::::::Gelo ew ê were fêmkirin? Hem pêlêkirina wê jî zor nebe? [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 01:25, 15 sibat 2025 (UTC)
:::::::::@[[Bikarhêner:Ghybu|Ghybu]] Ikoneke wisa [[File:Expand_-_Delapouite_-_game-icons.svg|20px|frameless]] ne çêtir e? Niha min ceriband, ê ku dibîne dibêje qey tu yê agahiyekê lê zêde bikî, ne wisa? [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 01:29, 15 sibat 2025 (UTC)
:::::::::Nizanim kîjan baş e :) Herwiha ew nîşan li aliyê çêpê jî tê danîn [https://www.mediawiki.org/wiki/Manual:Collapsible_elements#Move_toggle_link_to_the_left] [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 01:35, 15 sibat 2025 (UTC)
::::::::::+ dîsa baş e lê - qet nebû. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 01:56, 15 sibat 2025 (UTC)
:::::::::::[-] --> [ - ] an jî ▲/▼ an ĵî ∧/∨? [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 02:02, 15 sibat 2025 (UTC)
:::::::::::▲/▼ ev xweş bû. Wana ∧/∨ jî biceribînin? [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 02:14, 15 sibat 2025 (UTC)
::::::::::::Na. Spas! [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 02:15, 15 sibat 2025 (UTC)
== Xuyakirina çavkaniyan ==
{{silav|Bikarhêner}}: dikarî koda li jêr têxî vê rûpelê li herî dawiyê (berî nivîsa /* < /nowiki> */)
<syntaxhighlight lang="css">
/* Make the list of references smaller */
ol.references {
font-size: 90%; /* Default font-size */
margin-bottom: 0.5em;
}
</syntaxhighlight>
{{r|Bikarhêner}}--[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 11:16, 19 sibat 2025 (UTC)
:Çêbû? [[Bikarhêner:Bikarhêner|Bikarhêner]] ([[Gotûbêja bikarhêner:Bikarhêner|gotûbêj]]) 11:18, 19 sibat 2025 (UTC)
::Erê, destxweş! [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 11:22, 19 sibat 2025 (UTC)
== Rengê sernavê şablona {{ş|kol3}} ==
{{silav|Bikarhêner}} Tu dikarî vana sererast bikî:
* [https://ku.wiktionary.org/w/index.php?title=MediaWiki:Gadget-Site.css&oldid=6070748#L-311 L-311, 312]: "bottom" --> "top"
Mînak: [[ketin#Jê]]. Spas! Ping: {{b-|Balyozxane}} [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 22:40, 20 sibat 2025 (UTC)
:Min kir. Çêbû? -- [[Bikarhêner:Bikarhêner|Bikarhêner]] ([[Gotûbêja bikarhêner:Bikarhêner|gotûbêj]]) 08:13, 22 sibat 2025 (UTC)
::@[[Bikarhêner:Ghybu|Ghybu]] Gelo meriv nikare rengê (ê gewr/spî) li pişt nivîsa "kêmtir nîşan bide" rake? [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 10:41, 22 sibat 2025 (UTC)
== Tabloya wergerê ==
→ [[Şablon:werger-ser#Mînak]]
{{silav|Wikihez}}. Di nav taploya wergerê de nivîsa "Wergerekê lê zêde bike bi zimanê" li aliyê çepê hatiye nivîsandin; problem [https://ku.wiktionary.org/wiki/MediaWiki:Gadget-Site.css#L-41 va] ye (.Navcontent {text-align-left;}).
Vana hewce ne: [//ku.wiktionary.org/wiki/MediaWiki:Gadget-Site.css#L-38] [//ku.wiktionary.org/wiki/MediaWiki:Gadget-Site.css#L-31] , tenê ".translations" bes nebû. Herwhiha ducaran hatiye nivîsandin [//ku.wiktionary.org/wiki/MediaWiki:Gadget-Site.css#L-46]. [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 15:46, 27 sibat 2025 (UTC)
:Silav @[[Bikarhêner:Ghybu|Ghybu]] Gereg em çi bikin? [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 19:23, 27 sibat 2025 (UTC)
::Bi vî awayî nayê ceribandin, ji bo ceribandinê rakirina rêzên [https://ku.wiktionary.org/w/index.php?title=MediaWiki:Gadget-Site.css&oldid=6072824#L-29 L-29 heta L-50] hewce ye. ping {{r|Bikarhêner}} [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 21:58, 27 sibat 2025 (UTC)
:::Herwiha ji bo tagên HTMLê (div, span, ...) ''class''-ên [//ku.wiktionary.org/w/index.php?title=Bikarh%C3%AAner:Ghybu/common.css&oldid=6075662 wisa] jî hewce ne: me tenê ji bo tabloyan çêkiriye... Êdî li şûna "float:right", "text-align:left" vana werin bikaranîn (ji bo ''flipping''). Ji ber ku dema ku em di nav kodî de <code>style="float:right"</code> dinivîsin ''flipping'' naşuxile: hertim <code>float:right</code> e. [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 22:12, 27 sibat 2025 (UTC)
::::@[[Bikarhêner:Bikarhêner|Bikarhêner]] bira di vê sayfeyê de ji rêza 29 ê ku bi
::::<nowiki>/* Ji bo {{werger-ser}} */ </nowiki> dest pê dike heta rêza 50 (tê de) dikarî jê bibî?
::::https://ku.wiktionary.org/w/index.php?title=MediaWiki:Gadget-Site.css&oldid=6072824#L-29 [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 07:30, 28 sibat 2025 (UTC)
:::::{{r|Bikarhêner|Wikihez}} Bi min bi [https://ku.wiktionary.org/w/index.php?title=Bikarh%C3%AAner:Ghybu/common.css&oldid=6076340 vî] awayî çêbûye (Ez li ser Linuxê me + Firefox/Chrome) [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 19:24, 28 sibat 2025 (UTC)
::::::@[[Bikarhêner:Ghybu|Ghybu]] Bnr [[izin#Jê]] li Windows(Chrome/Firefox) xelet xuya dikin (nivîs bi ku-arab aliyê çepê de ye). [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 19:34, 28 sibat 2025 (UTC)
:::::::{{r|Wikihez}} [//ku.wiktionary.org/w/index.php?title=%C5%9Eablon:(&diff=prev&oldid=6076357] bi ''class''-ê. [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 19:44, 28 sibat 2025 (UTC)
::::::::Temam çêbû. Spas! Tiştek din heye? [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 19:49, 28 sibat 2025 (UTC)
:::::::::Na {{=)}} [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 19:51, 28 sibat 2025 (UTC)
::::::::::{{silav|Bikarhêner}} Tu dikarî kodê [//ku.wiktionary.org/w/index.php?title=Bikarh%C3%AAner:Ghybu/common.css&oldid=6076340 vira] tevlî [//ku.wiktionary.org/w/index.php?title=MediaWiki:Gadget-Site.css&oldid=6076268#L-29 vira] bikî. Spas! [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 19:57, 28 sibat 2025 (UTC)
:::::::::::Min kir. Rast çêbû? - [[Bikarhêner:Bikarhêner|Bikarhêner]] ([[Gotûbêja bikarhêner:Bikarhêner|gotûbêj]]) 03:44, 1 adar 2025 (UTC)
::::::::::::{{r|Bikarhêner}} Gelek spas! Tu dikarî va jî sererast bikî: [https://ku.wiktionary.org/w/index.php?title=Bikarh%C3%AAner:Ghybu/common.css&oldid=6076648] --> [https://ku.wiktionary.org/wiki/MediaWiki:Gadget-Site.css#L-50 L-50]. Ji ber ku (ji bo bikarhênerên neqeydkirî) li [//ku.wiktionary.org/w/index.php?title=kurd%C3%AE&variant=ku-arab#J%C3%AA vira] "kêmitir nîşab bide" li orteyê de nehatiye nivîsandin.. [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 11:57, 1 adar 2025 (UTC)
:::::::::::::Min çêkir, bûye? -- [[Bikarhêner:Bikarhêner|Bikarhêner]] ([[Gotûbêja bikarhêner:Bikarhêner|gotûbêj]]) 13:04, 1 adar 2025 (UTC)
::::::::::::::{{çêbû}} Spas! [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 13:18, 1 adar 2025 (UTC)
== Beşa zimanî ==
Silav {{r|Bikarhêner|Wikihez}}. Formata pêş ([https://ku.wiktionary.org/wiki/MediaWiki:Gadget-Site.css#L-195 L-195]) û formata en.wikt-ê [https://ku.wiktionary.org/wiki/MediaWiki:Gadget-Site.css#L-1186 L-1186] tevlî hev bûne... yek zêde ye {{=)}}. Bnr. [[rosa]]. [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 22:20, 24 gulan 2025 (UTC)
:Çêbû? -- [[Bikarhêner:Bikarhêner|Bikarhêner]] ([[Gotûbêja bikarhêner:Bikarhêner|gotûbêj]]) 14:13, 29 gulan 2025 (UTC)
::Erê, spas! [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 19:22, 29 gulan 2025 (UTC)
== Îkonên YouTube û PDFê ==
{{silav|Bikarhêner}} Tu dikarî van CSSan jî tevlî vê rûbelê bikî: [https://en.wiktionary.org/wiki/MediaWiki:Gadget-Site.css#L-1045] û [https://en.wiktionary.org/wiki/MediaWiki:Gadget-Site.css#L-1057]. Bnr. {{q|ku|gong}}; îkonên YouTube û PDFê dikevin pêş URLên xwe. Spas! [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 16:38, 13 tebax 2026 (UTC)
:Îkona X (twitter) jî were tevlî kirin [//ku.wiktionary.org/w/index.php?title=Bikarh%C3%AAner:Ghybu/common.css&oldid=6333647#L-1] ? [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 15:03, 14 tebax 2026 (UTC)
::Em dikarin îkona PDFê hinek biçûktir bikin? Niha ji min re zêde mezin xuya dike. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:03, 14 tebax 2026 (UTC)
:::Bin [//ku.wiktionary.org/wiki/MediaWiki:Gadget-Site.css#L-1278 vira] bo {{kod|background-size:16px}} Niha "16px" e, normal e (bnr. [[bilîn#Lêker]]). [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 21:09, 14 tebax 2026 (UTC)
::::Min niha fêm kir ji ber ku metna jêder biçûk e li gorî metnê mezin xuya dike.. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 21:25, 14 tebax 2026 (UTC)
ll2trqqrnw6g7seuqhs98chqi398jtb
سپێر
0
1327126
6333610
6197888
2026-08-14T13:04:05Z
Ghybu
1393
/* Navdêr */
6333610
wikitext
text/x-wiki
== {{ziman|ckb}} ==
=== Navdêr ===
{{navdêr|ckb|tr=sipêr}}
# {{guharto|ckb|سپەر|tr=siper}}
bsaxgkwn4ed24lap2x6g79dad6zbd0g
Wîkîferheng:Xebat
4
1357857
6333690
6328712
2026-08-14T18:43:56Z
Wikihez
7344
/* MediaWiki:Gadget-start.js */
6333690
wikitext
text/x-wiki
{{/ser}}
= Karên ferhengî =
== Mane ==
* [[:Kategorî:Madeyên bê beşa mane]]
** [[:Kategorî:Madeyên bê beşa mane bi kurmancî]]
Li ser van rûpelan ev made hene ku maneyan wan nehatine nivîsin û divê werin nivîsin. —[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:17, 16 tîrmeh 2026 (UTC)
== Etîmolojî ==
*[[:Kategorî:Daxwazên etîmolojiyê]]
**[[:Kategorî:Daxwazên etîmolojiyê bi kurmancî]]
Li ser van rûpelan ev made hene ku etîmolojiya wan hîn nehatine nivîsin. Ji bo alîkariyê binêre [[WF:Etîmolojî]] —[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:17, 16 tîrmeh 2026 (UTC)
== Cureyê rêzimanî ==
* [[:Kategorî:Gotarên bê kategoriya rêzimanî]]
* [[:Kategorî:Gotarên bê kategoriya rêzimanî bi kurmancî]]
Li ser van rûpelan ev made hene ku cureyên wan yên rêzimanî hîn nehatine nivîsin. Ji bo alîkariyê binêre [[Alîkarî:Cureyên peyvan]] —[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:17, 16 tîrmeh 2026 (UTC)
== Kontrol ==
* [[:Kategorî:Kontrol]]
** [[:Kategorî:Kontrola maneyê]]
Ev madde bi botê hatine çêkirin, yek bi yek divê werin kontrolkirin. —[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:17, 16 tîrmeh 2026 (UTC)
= Şablon =
== IPA ==
* {{ş|IPA}} divê [[Modul:IPA]] bi kar bîne. —[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:17, 16 tîrmeh 2026 (UTC)
== Deng ==
Kurdîkirina belgekirina {{ş|deng}} lazim e.--[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 00:06, 19 tîrmeh 2026 (UTC)
= Modul =
== Modul:form of/templates ==
* [[Modul:form of/templates]]: Divê ev modul were rojanekirin û xeletiyên berê wekî ([[hevalê]]) werin rastkirin. —[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:17, 16 tîrmeh 2026 (UTC)
*:Merheba @[[Bikarhêner:Ghybu|Ghybu]] Te gotibû di vê modulê de xeletî hene, jkx tu dikarî li vir binivîsî çi kêmasî hene, daku wextê rojane dikim ez ji bîr nekim? [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:16, 21 tîrmeh 2026 (UTC)
*::Silav. Nizanim ji bîra min çûye... Herwiha ji bo çêkirina formên navdêran zanînên cîns û tîpa dawî bes e:
*::* (-ê, mê) => çemandî, bangkirin
*::* (-ê, nêr) => îzafe
*::* (-ê, mê û nêr) => îzafe (nêr), bangkirin (mê), çemandî (mê)
*::* (-a) => îzafe (mê)
*::* (-ekî) => îzafe û çemandî (nêr, nebinavkirî)
*::* (-eke) = > îzafe (mê, nebinavkirî)
*::* ...
*:: <code>if find(mw.title.getCurrentTitle().subpageText, 'ekî$') then ... end</code>
*::<code><nowiki>{{ku-tewîn-navForm|<navdêr>|<zayend>}</nowiki></code>
*::Tablo û nivîs di yekcarî de tên çêkirin...
*::Feqet problem lêzêdekirina mînakan e. [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 17:34, 21 tîrmeh 2026 (UTC)
*:::Lêzêdekirina kîjan nimûneyan? Ev koda js ji bo çi ye? Qisûrê nenêre min fêm nekir :/ [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 18:13, 21 tîrmeh 2026 (UTC)
*::::Li vira ([[hevalê#Formeke navdêrê]]) di bin maneyên 1. û 2. mînak nayên tevlî kirin :) [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 18:18, 21 tîrmeh 2026 (UTC)
*:::::Ev tercîh e, ne mecbûrî ye, em dikarin [https://ku.wiktionary.org/w/index.php?title=heval%C3%AA&diff=prev&oldid=6276350 wisa] bikin. Wekî din? [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 18:29, 21 tîrmeh 2026 (UTC)
*::::::Min li jor tênê got ku tenê parametreyên "navdêr" û "zayend" hewce nee. Bi '''[//ku.wiktionary.org/w/index.php?title=heval%C3%AA&curid=969734&diff=6276353&oldid=6276350 vî]''' awayî jî tê çêkirin. Parametreyên din ne hewce ne. [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 18:38, 21 tîrmeh 2026 (UTC)
*:::::::Ji bo wê şabloneke din lazim e, bila ev şablon wekî îngilîzî bimîne em ji bo kurmancî yekî din çêkin. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 18:42, 21 tîrmeh 2026 (UTC)
*::::::::[https://ku.wiktionary.org/w/index.php?title=heval%C3%AA&oldid=6276885 wisa] çawa ye? Bi min nivîsîna nimûneyan zêde ne lazim e ji ber ku ti kes serê xwe pê naêşîne. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 09:46, 23 tîrmeh 2026 (UTC)
*:::::::::@[[Bikarhêner:Ghybu|Ghybu]] Vê şablonê bi kar bînin an na? Navê şablonê kê çi be? [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 19:07, 24 tîrmeh 2026 (UTC)
== Modul:columns ==
* [[Modul:columns]] were rojanekirin û {{ş|kol3}} bila lînka ''nîşan bide'' deyne beriya sernavê, kolê di qutiya rengî de bila nebe. —[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:17, 16 tîrmeh 2026 (UTC)
== Modul:etymon ==
* [[Modul:etymon kevn]]: Rojanekirin hewce ye. —[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:17, 16 tîrmeh 2026 (UTC)
== [[Modul:ziman/code to canonical name]] ==
Belgekirina skrîptê û js divê were rastkirin. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 09:31, 22 tîrmeh 2026 (UTC)
:* [[MediaWiki:UpdateLanguageNameAndCode.js]]
:[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 09:50, 22 tîrmeh 2026 (UTC)
::* [[Modul:ziman/print]]
::[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 09:52, 22 tîrmeh 2026 (UTC)
:::*[[Modul:ziman/şablon]]
:::[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 09:56, 22 tîrmeh 2026 (UTC)
::::* [[MediaWiki:Gadget-translation editor.js/ziman.json]]
::::[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 11:06, 22 tîrmeh 2026 (UTC)
== [[Modul:quote]] ==
Piştî ev modul hate hazirkirin, lazim e navên jegirtinan werin rastkirin û li hemûyan {{param|jêgirtin}} were zêdekirin. Bnr. [[Gotûbêja şablonê:Jêgirtin/Ehmedê Xanî/Mem û Zîn]] [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 22:27, 5 tebax 2026 (UTC)
::Ev modul hema bêje hazir e. Hûn li ser van madeyan çi difikirin:
# {{para|tarîx}} lazim e full date be eger na, lazim e {{para|sal}} were bikaranîn. Feqat "'''2021''' kanûna pêşîn 23" bi vî şiklî bi min ne problem e çnkî derdê en.wikt "attestation" e delîla herî pêşî jî sal e.
#: {{demo|sep=wisa xuya dibe<br>|<nowiki>{{jêder-kitêb/ceribandin|en
|tarîx=23 December 2021|nivîskar=Harry Hobbs; George Williams|sernav=Micronations and the Search for Sovereignty|url=https://www.cambridge.org/core/books/micronations-and-the-search-for-sovereignty/B0414A3A322695D9EE71E4CDDFDA06DE|weşanxane=Cambridge University Press|rûpel=155|isbn=978-1-009-15012-5|jêgirtin=jêgirtin.|t=-}}</nowiki>}}
#{{para|amadekar}}/{{para|edîtor}}/{{para|terciman}} bi şiklê edîtoriya, amadekariya, tercimekirina
#: {{demo|sep=dide<br>|<nowiki>{{jêder-kitêb/ceribandin|en
|sernav=Medical Surgical Nursing|serî=Juta's Manual of Nursing|cildê-seriyê=volume 4|edîtor=Sophie Mataniele Mogotlane; Joyce Mokoena; Motshedisi Eunice Chauke; Anne Young|sal=2005|weşanxane=Juta Academic|isbn=978-0702171840|rûpel=!12-29|jêgirtin=jêgirtin|t=-}}</nowiki>}}
--[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 13:09, 10 tebax 2026 (UTC)
:@[[Bikarhêner:Bikarhêner|Bikarhêner]] û @[[Bikarhêner:Ghybu|Ghybu]] Hîn gelek tişt hene divê îzah bikin û fikrê we pirs bikim, feqat îzahkirin pir zor e, em dest bi bikaranînê bikin û dûre tiştên ku hûn naxwazin em dikarin biguherînîn, dibe? [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 13:11, 10 tebax 2026 (UTC)
::Dibe, piştî çêbû, em di praktîkê de bibînin ku çawa ye. -- [[Bikarhêner:Bikarhêner|Bikarhêner]] ([[Gotûbêja bikarhêner:Bikarhêner|gotûbêj]]) 18:05, 10 tebax 2026 (UTC)
= Javascript =
== [[Mediawiki:Gadget-citoid-helper.js]] ==
Ji bo bi citoidê kopîkirina malûmatên çavkaniyan amûreke wisa lazim e. Xisûsen ji ber ku bi çend amûrên din dikare were bikaranîn.
Feqat çend problem hene, şablonên me de kêmasiya parametreyan gelek in û xerîteyên citoidê hîn nehatine çêkirin. Wana sererast bikin dûre vê amûrê çêkin, piştre [[MediaWiki:Gadget-start.js|start.js]] û [[MediaWiki:Gadget-wikt.add-examples.js|add examples.js]] were rojanekirin.
- --[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 00:04, 19 tîrmeh 2026 (UTC)
:Merheba @[[Bikarhêner:Bikarhêner|Bikarhêner]], ez dibêjim karê Modul:quote zêde wext bistîne, bila em dest bi bikaranîna van amûran bikin dûre kêmasiyan em ê temam bikin înşela. Dikarî vana li cihên xwe yên rast kopî paste bikî?
# [[Special:PermanentLink/6291574|Bikarhêner:Wikihez/skrîpt/js/Gadget-citoid-helper.js]] --> [[Mediawiki:Gadget-citoid-helper.js]]
# Ya li jêr kopî bike qismê herî dawî ya AmûrênVeşartî li [[MediaWiki:Gadgets-definition]]:
## <code><nowiki>* citoid-helper[ResourceLoader|hidden|default|dependencies=mediawiki.util]|citoid-helper.js</nowiki></code>
--[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:58, 26 tîrmeh 2026 (UTC)
== [[MediaWiki:Gadget-start.js]] ==
Rojanekirin hewce ye. Min gelek tişt lê zêde kir lê ez niha test dikime. Piştre em bar bikin:
* [[Bikarhêner:Wikihez/Gadget-start.js]] --> [[MediaWiki:Gadget-start.js]]
* [[Bikarhêner:Wikihez/Gadget-start.css]] --> [[MediaWiki:Gadget-start.css]]
--[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 22:08, 17 tîrmeh 2026 (UTC)
:Min [[MediaWiki:Gadget-start/data.json|data.json]] çêkir ji bo ku bi hêsanî malûmatên heyî werin guhartin bêyî guhartina Javascriptê. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 19:49, 18 tîrmeh 2026 (UTC)
:Xeletiyên ku ji bîr nekim rast bikim:
:* Wextê min çavkanî "kitêb" hilbijart û bi destî tije kir xeletiyeke [https://ku.wiktionary.org/w/index.php?title=xezete&diff=prev&oldid=6265392 wisa] derket her kelîme hate lînkkirin.
:* <code>html("⠿")</code> ev ne lazim e.
:* textarea ji bo çavkaniyên jêgirtinan xaseten yên sernav hîn jî ne draggable e.
:* pêşdîtina zindî checkbox wextê tê rakirin, pêşdîtin winda nabe.
:* Butona mobîlê ya vekirina formê di moda tarî de belî nabe, tenê wekî qutiyeke tarî xuya dibe.
:* Metna hişyarkirinê di guhartina rûpelên heyî de lazim e baştir bikim.
:[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 23:51, 18 tîrmeh 2026 (UTC)
::Ev problem çêbûn, ez ê binêrim ka çi problemên din hene. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 14:15, 19 tîrmeh 2026 (UTC)
:::Çêke: Ji bo qismê çavkaniyê yek dikare API call û Kategorî:Çavkanî bi kar bîne ji bo ku şablon zêde bikî ji yên heyî. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 21:21, 19 tîrmeh 2026 (UTC)
::::Ev jî çêbû, min beşa çavkanî jî çêkir. Eger xeletî dernekeve û problema valahiya piştî etîketê ji bîr nekim, piştî rojanekirina amûrên linkify, û citoid em dikarin bar bikin. Ez ê ti tiştê nû îlawe nekim, zêde dirêj bû. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:14, 21 tîrmeh 2026 (UTC)
:::::Merheba @[[Bikarhêner:Bikarhêner|Bikarhêner]]. Dikarî wana bar bikî?
:::::* [[Bikarhêner:Wikihez/Gadget-start.js]] --> [[MediaWiki:Gadget-start.js]]
:::::* [[Bikarhêner:Wikihez/Gadget-start.css]] --> [[MediaWiki:Gadget-start.css]]
:::::* [[MediaWiki:Gadgets-definition]] wisa rojane bike:
:::::* start[ResourceLoader|default|package|dependencies=mediawiki.util,ext.gadget.StorageUtils,ext.gadget.citoid-helper]|start.js|start.css|start.js/data.json
:::::[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 09:39, 5 tebax 2026 (UTC)
{{şirove}} Dewama ''[[Special:PermanentLink/6333688|Gotûbêja bikarhêner:Rewiye tine#WF:Nû]]'' bila gotûbêja wî em spam nekin. :D
{{r|Ghybu}} dikarî [[Special:PermanentLink/6333689|vê htmlê]] binêrî claude rast fêm kiriye yan na? Daxîne û wek html qeyd bike. --[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 18:43, 14 tebax 2026 (UTC)
== [[Mediawiki:Gadget-QQ.js]] ==
Ev amûr di şikle Minerva de. Her daîm vê xeletiyê dide:
<syntaxhighlight lang="js">
TypeError: Cannot read properties of null (reading 'addEventListener') at css () at runScript () at Array.<anonymous> () at flushCssBuffer ()
</syntaxhighlight> [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 19:29, 18 tîrmeh 2026 (UTC)
:* [[Bikarhêner:Wikihez/skrîpt/js/Gadget-QQ.js]] --> [[Mediawiki:Gadget-QQ.js]]
:* [[Bikarhêner:Wikihez/Gadget-QQ.css]] --> [[Mediawiki:Gadget-QQ.css]]
:Ez dibêjim çêbû lê ka çend roj biceribînim. Tiştên ku hatin sererastkirin:
:# Google Books API Key dikarî zêde bikî, dixe cookies û di gerokê de dimîne. Berê bê API Key dixebitiya lê êdî mecbûr e ku API Key-a te hebe, bidestxistina wê ne zêde zor e lê dîsa jî tevlihev e.
:# Êdî di mobîlê de dixebite, heta di mobîlê de xweştir xuya dike.
:# Moda tarî
:# OOUI dewsa jquery.ui
:# Li qutiyê çi dixwazî zêde bikî, dikare li gorî îsm, sifet, fiîl bitewîne. Lê ji bo fiîl tenê dikare çend heb inflection bîne.
:# Butona paqij bike lê zêde kir.
:# Çend paqijiyên jêgirtinên Google Kitêbê niha hene.
:[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 23:38, 18 tîrmeh 2026 (UTC)
::Tewandina fiîlan û xeletiya modulê lazim e were rastkirin. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 14:40, 21 tîrmeh 2026 (UTC)
== [[MediaWiki:Gadget-wikt.add-examples.js]] ==
Min ev amûr hinek rojane kir feqat çend problem hene berî ku bar bikin.
Tiştên ku min guhart:
# Êdî li sayfeyên bi {{ş|maneid}} jî dixebite,
# Cihê di wîkîtekstê de yê ku jêgirtin were îlawekirin baştir bû,
# [[Mediawiki:Gadget-citoid-helper.js|citoid helper]] zêde kir ji bo ku bi hêsanî çavkanî bi riya doi, isbn an urlyê werin tijîkirin.
* [[Bikarhêner:Wikihez/Gadget-wikt.add-examples.css]] --> [[MediaWiki:Gadget-wikt.add-examples.css]]
* [[Bikarhêner:Wikihez/Gadget-wikt.add-examples.js]] --> [[MediaWiki:Gadget-wikt.add-examples.js]]
- --[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 00:50, 19 tîrmeh 2026 (UTC)
:Min "wikt." qismên cache kirinê ya wîkiya fransî bi [[MediaWiki:Gadget-StorageUtils.js]] guhartiye. loma ji bîr nekin wê amûrê li [[MediaWiki:Gadgets-definition]] zêde bikin. û navê amûrê jî biguhêrînin. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 09:15, 23 tîrmeh 2026 (UTC)
::Berê li ser WF:ceribandin dixebitî. niha naxebite. Divê were rastkirin. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 22:10, 7 tebax 2026 (UTC)
== Gadget-translation editor ==
* [[MediaWiki:Gadget-translation editor.js]]: divê formata en.wîktê were bikaranîn ji ber ku me gelek tercime ji en.wîktê kopî kir û ev js hîn nikare formata wekî li jêr bi kar bîne.
<syntaxhighlight lang="wikitext">
* {{Z|sh}}:
*: Kirîlî:
*: Latînî
</syntaxhighlight>
—[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:17, 16 tîrmeh 2026 (UTC)
== [[Mediawiki:Gadget-linkify.js]] ==
* ''rûpeleke'' wekî<syntaxhighlight lang="wikitext">[[rûpeleke]]</syntaxhighlight> lînk dike, bi regexê belkî dikare wisa bike <syntaxhighlight lang="wikitext">[[rûpel]]eke</syntaxhighlight>
—[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:17, 16 tîrmeh 2026 (UTC)
* Amûreke din wekî [[User:Wikihez/Gadget-linkify.js|linkify]] lazim e ku herfên mezin biçûk bike ji bo kurmancî.—[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:17, 16 tîrmeh 2026 (UTC)
:{{r|Bikarhêner}} Merheba bira, dikarî viya jî bar bikî?:
* [[Special:PermanentLink/6291974|linkify]] --> [[Mediawiki:Gadget-linkify.js]]
Spas--[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 11:42, 29 tîrmeh 2026 (UTC)
:Dûre [https://ku.wiktionary.org/wiki/MediaWiki:Gadget-start.js#L-283 li vir] wiktviLinkify bike kuLinkify xêra xwe [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 11:51, 29 tîrmeh 2026 (UTC)
::Min ji bîr kir lê zêde bikim niha nikare "Dİ" bike "di", xeletiyeke berbelav a di nivîsên kurdî de, herfên din ên wekî ll yan rr jî hewce ne werin zêdekirin. Dûre em zêde bikin. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 21:42, 29 tîrmeh 2026 (UTC)
:::Min nû ferq kir, sayfeyên ku hîn nehatine çêkirin wîkîlînk nake. Problemeke mezin e divê were rastkirin. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 18:15, 30 tîrmeh 2026 (UTC)
::::Na, lînk dike, tiştekî din heye... [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 10:49, 31 tîrmeh 2026 (UTC)
== Amûra manayê ==
Amûreke din ji bo nivîsina maneyê wekî Nimûne zêde bike lazim e [https://ku.wiktionary.org/w/index.php?title=Bikarh%C3%AAner:Wikihez/test.js&oldid=6276876 js] [https://ku.wiktionary.org/w/index.php?title=%C5%9Eablon:ceribandin2&oldid=6265629 şablon] [https://ku.wiktionary.org/w/index.php?title=Bikarh%C3%AAner:Wikihez/common.css&oldid=6265642 css] --[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 09:12, 23 tîrmeh 2026 (UTC)
== [[MediaWiki:Gadget-jeder.js]] ==
@[[Bikarhêner:Ghybu|Ghybu]] Çavkaniyên jêderê di moda pêşdîtinê de jêderê vedişêre, ew jî min gelek eciz dike wextê çavkanî zêde dikim. Min ji Claude pirsî û kodan nîşanî wê da, wisa cewab da:
Yes — and this file actually explains the whole thing precisely, better than my earlier guess about extract-stripping.
What's happening: the CSS rule
<syntaxhighlight lang="css">
.jeder{
display:none;
}
</syntaxhighlight>
hides every citation by default, *unconditionally*. The only thing that ever makes it visible again is the gadget's JS: it finds each `.jeder`, builds the short "`— (year, author, +)`" summary from the `.j-pewist` fields, and either reveals the short version or — for citations with no `.j-pewist` fields — explicitly sets `display:inline` on the original.
So visibility of citations depends entirely on this JS running. In the normal article view (Image 1) it runs, so you see the collapsed "`(1918, E. Rehmî Ji Mala Hekariyan, Amadekar: M. E. Bozarslan, +)`" form. In whatever generated Image 2 — a hover-preview/extract/API render — gadget JS doesn't execute, so nothing ever removes the `display:none`, and the citation vanishes completely rather than degrading to "still visible, just not collapsed."
<b>The fix:</b> flip the default so the *un-collapsed* state is the safe fallback, and let JS do the hiding only after it successfully builds the short version. That way, any context without JS shows the full citation instead of nothing.
CSS — remove the blanket hide:
<syntaxhighlight lang="css">
.jeder {
/* intentionally no display:none here — see Gadget-... .js */
}
</syntaxhighlight>
JS — do the hiding from script, after the short form exists:
{{veşêre-ser}}
<syntaxhighlight lang="js">
// Ji bo şablonên [[Şablon:jêder]] hatiye nivîsandin.
// Parametreyên ku di navbera "<span class="j-pewist">...</span>" an "{{j-pêwîst|...}}" de ne venaşêre.
$(function() {
function nivisaKurtTevliBike(sund, nivisKurt) {
var zede = $('<a>+</a>')
.addClass('click')
.attr('href', '#')
.attr('title', 'zêdetir')
.css('font-weight', 'bold');
var kurt = $(' <a>↩</a>')
.addClass('click-kurt')
.attr('href', '#')
.attr('title', 'veşêre')
.css('font-weight', 'bold');
$('<span>' + nivisKurt + '</span>')
.append(zede).append(')')
.addClass('jeder-kurt')
.css('font-size', '0.85em')
.insertAfter(sund);
sund.append(' ').append(kurt);
// Only hide the full citation once the short summary actually exists.
// If this script never runs (no-JS clients, hover-preview extracts,
// action=render, etc.), the full citation stays visible instead of
// silently disappearing.
sund.css('display', 'none');
}
function vesere() {
$('.jeder').each(function() {
var elmTab = $(this).find('.j-pewist').clone();
if (elmTab.length) {
var elm = '';
for (var i = elmTab.length - 1; i >= 0; i--) {
elm = elmTab.eq(i).html() + ', ' + elm;
}
var nivisKurt = ' — (' + elm;
nivisaKurtTevliBike($(this), nivisKurt);
}
// else: no j-pewist fields to shorten — leave the full citation
// as it already renders (visible), nothing to do.
});
}
vesere();
$(".click").click(function(e) {
e.preventDefault();
$(this).parent('.jeder-kurt').css('display', 'none');
$(this).parent('.jeder-kurt').prev().css('display', 'inline');
});
$(".click-kurt").click(function(e) {
e.preventDefault();
$(this).parent('.jeder').css('display', 'none');
$(this).parent('.jeder').next().css('display', 'inline');
});
});
</syntaxhighlight>
Net effect:
- JS-enabled readers (normal article view): identical experience to today — collapsed short form with `+`/`↩` toggle.
- No-JS contexts (previews, extracts, screen readers before JS loads, print, etc.): full citation is shown instead of nothing — a real regression fix rather than a cosmetic one.
One caveat worth being upfront about: this fixes it *if* the preview context renders the gadget's HTML/CSS but doesn't execute gadget JS (which is the far more common case, and what this code strongly suggests is happening). If Image 2 instead comes from a pipeline that strips the `.jeder`/`.jegirtin-text` elements out of the HTML entirely before this CSS/JS even gets a chance to apply, no on-wiki CSS/JS change can help — that'd need the extract-generation config changed instead. Given what this gadget file shows, though, I'd bet on the CSS-hide explanation.
{{veşêre-bin}}
Em dûre biceribînin eger xeletî tinebe, vî tiştî jî rast bikin. --[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 20:00, 23 tîrmeh 2026 (UTC)
:Ez APIya MediaWiki rind nizanim belkî Claude dizane:) Em nikarin bibêjin dema ku moda "''action=edit''" e fonksiyona <code>function vesere()</code> bi kar meyîne. [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 15:57, 24 tîrmeh 2026 (UTC)
::Na, di moda "edît"-ê de <code>var elmTab = null</code>... [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 16:13, 24 tîrmeh 2026 (UTC)
?:
<syntaxhighlight lang="js">
if (
mw.config.get('wgAction') === 'edit' ||
mw.config.get('wgAction') === 'submit'
){
var elmTab = [];
} else {
var elmTab = $(this).find('.j-pewist').clone();
}
</syntaxhighlight>
--[[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 16:31, 24 tîrmeh 2026 (UTC)
:Ez jî nizanim Claude çiqas ji mediawiki fêm dike lê heta niha ti tişt nîne ku min jê pirs kir û nikaribû çêke, bila wekî reklam nebe feqat Claude mikemmel e, dibêjim "li vir çima xeletiyeke wisa derdikeve" di dosyeya 2000 rêzî de diçe tiştê xelet tenê rast dike tiştekî din naguherîne. Chatgpt û aistudio qet wisa nakin, eynî dosyeyê deh cara dinivîsin, deh netîceyên cuda derdikevin :D
:Em dikarin vê amûrê wextê edit û submitê neaktîv bikin wekî <syntaxhighlight lang="js">if (!(action === "edit" || action === "submit")) {
:return;</syntaxhighlight> lê wê demê display:none wê çibe nizanim. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 18:23, 24 tîrmeh 2026 (UTC)
::display:none ne hewce ye ma jixwe di nav kodê [https://ku.wiktionary.org/w/index.php?title=MediaWiki:Gadget-jeder.js&oldid=6069025#L-49 L-49] de inline/none heye? [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 18:53, 24 tîrmeh 2026 (UTC)
:Min bi vî şiklî [https://ku.wiktionary.org/w/index.php?title=Bikarh%C3%AAner:Wikihez/vector-2022.js&diff=prev&oldid=6290816#L-28] ceriband feqat nexebitî. "display:none" di pêşdîtinê de dixebite feqat js naşixule. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 14:43, 25 tîrmeh 2026 (UTC)
::Kodên JSê pir hez nakim (pêşta hukurina APIya MWyê hewce bû) dîsa jî ez ê seh bikim :) [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 16:49, 27 tîrmeh 2026 (UTC)
:::Ez niha bi vî şiklî [https://ku.wiktionary.org/w/index.php?title=Bikarh%C3%AAner:Wikihez/test.js&oldid=6290820] [https://ku.wiktionary.org/w/index.php?title=Bikarh%C3%AAner:Wikihez/common.css&oldid=6290821#L-8] bi kar tînim ti problem nîne. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 17:09, 27 tîrmeh 2026 (UTC)
== [[MediaWiki:Gadget-PagePreviews.js]] ==
Ez dibêjim em vê amûrê jî çêkin [[:en:MediaWiki:Gadget-PagePreviews.js]] --[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 10:56, 3 tebax 2026 (UTC)
= Moda tarî =
== [[Şablon:wîkîpediya]] ==
Rengê tarî de xirab e.--[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 19:36, 4 tebax 2026 (UTC)
= Bot =
Karên ku bi botê werin çêkirin ji kerema xwe li vir binivîsin.
== Kategorî:Biwêj ==
[[:Kategorî:Biwêj]] divê were paqijkirin, lîsteya madeyên {{ş|biwêj}} çêke, yên ku tê de bûn, kirin, man hene filtre bike yên din bi destî tê çêkirin.—[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:17, 16 tîrmeh 2026 (UTC)
== Jêgirtin ==
Xistina jêgirtinên beşa [https://ku.wiktionary.org/w/index.php?search=insource%3A%2F%3D+*Ji+%5BWw%5D%C3%AAjey%C3%AA+*%3D%2F&title=Taybet%3AL%C3%AAger%C3%AEn&profile=advanced&fulltext=1&ns0=1&searchToken=8rh0bmw8dccsi7aynl6zli8uf ji wêjeyê] li beşa maneyê. —[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:17, 16 tîrmeh 2026 (UTC)
== Bota Toolforgeê ==
Botekî Toolforgeê lazim e ji bo ku xeletiyên biçûk wekî şablonên bi navên îngilîzî werin kurdîkirin yan jî valahiya beşan rast bike û hwd.—[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:17, 16 tîrmeh 2026 (UTC)
:Min [[Bikarhêner:Wikihez/skrîpt/py/kuwiktkozmetik.py|paqijiyen kozmetîk]] hazir kir feqat hîn navên şablonan naguhêre. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 20:05, 4 tebax 2026 (UTC)
== Updatew ==
Bota [[Bikarhêner:Wikihez/skrîpt/py/updateW.py|updateW]] divê were rojanekirin. Yan jî yekî nû were çêkirin. Şablonên {{ş|W}} di beşa tercimeyan de sererast dike û zimanan rêz dike. Ya niha xeletiya navê zimanî dide.—[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:17, 16 tîrmeh 2026 (UTC)
== sihir --> sêhr ==
Tercimeyên ''[[sêhr]]'' hemû dibêje ''sihir'' loma bi botê lazim e kirin ''sêhr''. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 17:43, 18 tîrmeh 2026 (UTC)
:Sihirbaz --> sêhrbaz [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 18:07, 18 tîrmeh 2026 (UTC)
== Tercimeyên dîroknas ==
Li tercimeyên [[dîroknas]], hevmaneyên wê hewce ye were îlawekirin. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 18:44, 18 tîrmeh 2026 (UTC)
== Mewlûd ==
Sererastkirina jêgirtinên mewlûdê [https://ku.wiktionary.org/w/index.php?search=insource%3A%2Fw%5C%3AMela+His%C3%AAn%C3%AA+Batey%C3%AE%2F&title=Taybet%3AL%C3%AAger%C3%AEn&ns0=1&searchToken=8m0tguy3sqt7edr4sg0u8hedo] wekî [https://ku.wiktionary.org/w/index.php?title=dax%C3%AEdar&curid=284303&diff=6265851&oldid=6142285] [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 09:43, 20 tîrmeh 2026 (UTC)
hx5ybrnon6n2dp6ue1tgcemtiww99rv
6333694
6333690
2026-08-14T19:01:50Z
Ghybu
1393
/* MediaWiki:Gadget-start.js */ Bersiv
6333694
wikitext
text/x-wiki
{{/ser}}
= Karên ferhengî =
== Mane ==
* [[:Kategorî:Madeyên bê beşa mane]]
** [[:Kategorî:Madeyên bê beşa mane bi kurmancî]]
Li ser van rûpelan ev made hene ku maneyan wan nehatine nivîsin û divê werin nivîsin. —[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:17, 16 tîrmeh 2026 (UTC)
== Etîmolojî ==
*[[:Kategorî:Daxwazên etîmolojiyê]]
**[[:Kategorî:Daxwazên etîmolojiyê bi kurmancî]]
Li ser van rûpelan ev made hene ku etîmolojiya wan hîn nehatine nivîsin. Ji bo alîkariyê binêre [[WF:Etîmolojî]] —[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:17, 16 tîrmeh 2026 (UTC)
== Cureyê rêzimanî ==
* [[:Kategorî:Gotarên bê kategoriya rêzimanî]]
* [[:Kategorî:Gotarên bê kategoriya rêzimanî bi kurmancî]]
Li ser van rûpelan ev made hene ku cureyên wan yên rêzimanî hîn nehatine nivîsin. Ji bo alîkariyê binêre [[Alîkarî:Cureyên peyvan]] —[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:17, 16 tîrmeh 2026 (UTC)
== Kontrol ==
* [[:Kategorî:Kontrol]]
** [[:Kategorî:Kontrola maneyê]]
Ev madde bi botê hatine çêkirin, yek bi yek divê werin kontrolkirin. —[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:17, 16 tîrmeh 2026 (UTC)
= Şablon =
== IPA ==
* {{ş|IPA}} divê [[Modul:IPA]] bi kar bîne. —[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:17, 16 tîrmeh 2026 (UTC)
== Deng ==
Kurdîkirina belgekirina {{ş|deng}} lazim e.--[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 00:06, 19 tîrmeh 2026 (UTC)
= Modul =
== Modul:form of/templates ==
* [[Modul:form of/templates]]: Divê ev modul were rojanekirin û xeletiyên berê wekî ([[hevalê]]) werin rastkirin. —[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:17, 16 tîrmeh 2026 (UTC)
*:Merheba @[[Bikarhêner:Ghybu|Ghybu]] Te gotibû di vê modulê de xeletî hene, jkx tu dikarî li vir binivîsî çi kêmasî hene, daku wextê rojane dikim ez ji bîr nekim? [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:16, 21 tîrmeh 2026 (UTC)
*::Silav. Nizanim ji bîra min çûye... Herwiha ji bo çêkirina formên navdêran zanînên cîns û tîpa dawî bes e:
*::* (-ê, mê) => çemandî, bangkirin
*::* (-ê, nêr) => îzafe
*::* (-ê, mê û nêr) => îzafe (nêr), bangkirin (mê), çemandî (mê)
*::* (-a) => îzafe (mê)
*::* (-ekî) => îzafe û çemandî (nêr, nebinavkirî)
*::* (-eke) = > îzafe (mê, nebinavkirî)
*::* ...
*:: <code>if find(mw.title.getCurrentTitle().subpageText, 'ekî$') then ... end</code>
*::<code><nowiki>{{ku-tewîn-navForm|<navdêr>|<zayend>}</nowiki></code>
*::Tablo û nivîs di yekcarî de tên çêkirin...
*::Feqet problem lêzêdekirina mînakan e. [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 17:34, 21 tîrmeh 2026 (UTC)
*:::Lêzêdekirina kîjan nimûneyan? Ev koda js ji bo çi ye? Qisûrê nenêre min fêm nekir :/ [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 18:13, 21 tîrmeh 2026 (UTC)
*::::Li vira ([[hevalê#Formeke navdêrê]]) di bin maneyên 1. û 2. mînak nayên tevlî kirin :) [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 18:18, 21 tîrmeh 2026 (UTC)
*:::::Ev tercîh e, ne mecbûrî ye, em dikarin [https://ku.wiktionary.org/w/index.php?title=heval%C3%AA&diff=prev&oldid=6276350 wisa] bikin. Wekî din? [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 18:29, 21 tîrmeh 2026 (UTC)
*::::::Min li jor tênê got ku tenê parametreyên "navdêr" û "zayend" hewce nee. Bi '''[//ku.wiktionary.org/w/index.php?title=heval%C3%AA&curid=969734&diff=6276353&oldid=6276350 vî]''' awayî jî tê çêkirin. Parametreyên din ne hewce ne. [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 18:38, 21 tîrmeh 2026 (UTC)
*:::::::Ji bo wê şabloneke din lazim e, bila ev şablon wekî îngilîzî bimîne em ji bo kurmancî yekî din çêkin. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 18:42, 21 tîrmeh 2026 (UTC)
*::::::::[https://ku.wiktionary.org/w/index.php?title=heval%C3%AA&oldid=6276885 wisa] çawa ye? Bi min nivîsîna nimûneyan zêde ne lazim e ji ber ku ti kes serê xwe pê naêşîne. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 09:46, 23 tîrmeh 2026 (UTC)
*:::::::::@[[Bikarhêner:Ghybu|Ghybu]] Vê şablonê bi kar bînin an na? Navê şablonê kê çi be? [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 19:07, 24 tîrmeh 2026 (UTC)
== Modul:columns ==
* [[Modul:columns]] were rojanekirin û {{ş|kol3}} bila lînka ''nîşan bide'' deyne beriya sernavê, kolê di qutiya rengî de bila nebe. —[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:17, 16 tîrmeh 2026 (UTC)
== Modul:etymon ==
* [[Modul:etymon kevn]]: Rojanekirin hewce ye. —[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:17, 16 tîrmeh 2026 (UTC)
== [[Modul:ziman/code to canonical name]] ==
Belgekirina skrîptê û js divê were rastkirin. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 09:31, 22 tîrmeh 2026 (UTC)
:* [[MediaWiki:UpdateLanguageNameAndCode.js]]
:[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 09:50, 22 tîrmeh 2026 (UTC)
::* [[Modul:ziman/print]]
::[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 09:52, 22 tîrmeh 2026 (UTC)
:::*[[Modul:ziman/şablon]]
:::[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 09:56, 22 tîrmeh 2026 (UTC)
::::* [[MediaWiki:Gadget-translation editor.js/ziman.json]]
::::[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 11:06, 22 tîrmeh 2026 (UTC)
== [[Modul:quote]] ==
Piştî ev modul hate hazirkirin, lazim e navên jegirtinan werin rastkirin û li hemûyan {{param|jêgirtin}} were zêdekirin. Bnr. [[Gotûbêja şablonê:Jêgirtin/Ehmedê Xanî/Mem û Zîn]] [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 22:27, 5 tebax 2026 (UTC)
::Ev modul hema bêje hazir e. Hûn li ser van madeyan çi difikirin:
# {{para|tarîx}} lazim e full date be eger na, lazim e {{para|sal}} were bikaranîn. Feqat "'''2021''' kanûna pêşîn 23" bi vî şiklî bi min ne problem e çnkî derdê en.wikt "attestation" e delîla herî pêşî jî sal e.
#: {{demo|sep=wisa xuya dibe<br>|<nowiki>{{jêder-kitêb/ceribandin|en
|tarîx=23 December 2021|nivîskar=Harry Hobbs; George Williams|sernav=Micronations and the Search for Sovereignty|url=https://www.cambridge.org/core/books/micronations-and-the-search-for-sovereignty/B0414A3A322695D9EE71E4CDDFDA06DE|weşanxane=Cambridge University Press|rûpel=155|isbn=978-1-009-15012-5|jêgirtin=jêgirtin.|t=-}}</nowiki>}}
#{{para|amadekar}}/{{para|edîtor}}/{{para|terciman}} bi şiklê edîtoriya, amadekariya, tercimekirina
#: {{demo|sep=dide<br>|<nowiki>{{jêder-kitêb/ceribandin|en
|sernav=Medical Surgical Nursing|serî=Juta's Manual of Nursing|cildê-seriyê=volume 4|edîtor=Sophie Mataniele Mogotlane; Joyce Mokoena; Motshedisi Eunice Chauke; Anne Young|sal=2005|weşanxane=Juta Academic|isbn=978-0702171840|rûpel=!12-29|jêgirtin=jêgirtin|t=-}}</nowiki>}}
--[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 13:09, 10 tebax 2026 (UTC)
:@[[Bikarhêner:Bikarhêner|Bikarhêner]] û @[[Bikarhêner:Ghybu|Ghybu]] Hîn gelek tişt hene divê îzah bikin û fikrê we pirs bikim, feqat îzahkirin pir zor e, em dest bi bikaranînê bikin û dûre tiştên ku hûn naxwazin em dikarin biguherînîn, dibe? [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 13:11, 10 tebax 2026 (UTC)
::Dibe, piştî çêbû, em di praktîkê de bibînin ku çawa ye. -- [[Bikarhêner:Bikarhêner|Bikarhêner]] ([[Gotûbêja bikarhêner:Bikarhêner|gotûbêj]]) 18:05, 10 tebax 2026 (UTC)
= Javascript =
== [[Mediawiki:Gadget-citoid-helper.js]] ==
Ji bo bi citoidê kopîkirina malûmatên çavkaniyan amûreke wisa lazim e. Xisûsen ji ber ku bi çend amûrên din dikare were bikaranîn.
Feqat çend problem hene, şablonên me de kêmasiya parametreyan gelek in û xerîteyên citoidê hîn nehatine çêkirin. Wana sererast bikin dûre vê amûrê çêkin, piştre [[MediaWiki:Gadget-start.js|start.js]] û [[MediaWiki:Gadget-wikt.add-examples.js|add examples.js]] were rojanekirin.
- --[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 00:04, 19 tîrmeh 2026 (UTC)
:Merheba @[[Bikarhêner:Bikarhêner|Bikarhêner]], ez dibêjim karê Modul:quote zêde wext bistîne, bila em dest bi bikaranîna van amûran bikin dûre kêmasiyan em ê temam bikin înşela. Dikarî vana li cihên xwe yên rast kopî paste bikî?
# [[Special:PermanentLink/6291574|Bikarhêner:Wikihez/skrîpt/js/Gadget-citoid-helper.js]] --> [[Mediawiki:Gadget-citoid-helper.js]]
# Ya li jêr kopî bike qismê herî dawî ya AmûrênVeşartî li [[MediaWiki:Gadgets-definition]]:
## <code><nowiki>* citoid-helper[ResourceLoader|hidden|default|dependencies=mediawiki.util]|citoid-helper.js</nowiki></code>
--[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:58, 26 tîrmeh 2026 (UTC)
== [[MediaWiki:Gadget-start.js]] ==
Rojanekirin hewce ye. Min gelek tişt lê zêde kir lê ez niha test dikime. Piştre em bar bikin:
* [[Bikarhêner:Wikihez/Gadget-start.js]] --> [[MediaWiki:Gadget-start.js]]
* [[Bikarhêner:Wikihez/Gadget-start.css]] --> [[MediaWiki:Gadget-start.css]]
--[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 22:08, 17 tîrmeh 2026 (UTC)
:Min [[MediaWiki:Gadget-start/data.json|data.json]] çêkir ji bo ku bi hêsanî malûmatên heyî werin guhartin bêyî guhartina Javascriptê. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 19:49, 18 tîrmeh 2026 (UTC)
:Xeletiyên ku ji bîr nekim rast bikim:
:* Wextê min çavkanî "kitêb" hilbijart û bi destî tije kir xeletiyeke [https://ku.wiktionary.org/w/index.php?title=xezete&diff=prev&oldid=6265392 wisa] derket her kelîme hate lînkkirin.
:* <code>html("⠿")</code> ev ne lazim e.
:* textarea ji bo çavkaniyên jêgirtinan xaseten yên sernav hîn jî ne draggable e.
:* pêşdîtina zindî checkbox wextê tê rakirin, pêşdîtin winda nabe.
:* Butona mobîlê ya vekirina formê di moda tarî de belî nabe, tenê wekî qutiyeke tarî xuya dibe.
:* Metna hişyarkirinê di guhartina rûpelên heyî de lazim e baştir bikim.
:[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 23:51, 18 tîrmeh 2026 (UTC)
::Ev problem çêbûn, ez ê binêrim ka çi problemên din hene. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 14:15, 19 tîrmeh 2026 (UTC)
:::Çêke: Ji bo qismê çavkaniyê yek dikare API call û Kategorî:Çavkanî bi kar bîne ji bo ku şablon zêde bikî ji yên heyî. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 21:21, 19 tîrmeh 2026 (UTC)
::::Ev jî çêbû, min beşa çavkanî jî çêkir. Eger xeletî dernekeve û problema valahiya piştî etîketê ji bîr nekim, piştî rojanekirina amûrên linkify, û citoid em dikarin bar bikin. Ez ê ti tiştê nû îlawe nekim, zêde dirêj bû. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:14, 21 tîrmeh 2026 (UTC)
:::::Merheba @[[Bikarhêner:Bikarhêner|Bikarhêner]]. Dikarî wana bar bikî?
:::::* [[Bikarhêner:Wikihez/Gadget-start.js]] --> [[MediaWiki:Gadget-start.js]]
:::::* [[Bikarhêner:Wikihez/Gadget-start.css]] --> [[MediaWiki:Gadget-start.css]]
:::::* [[MediaWiki:Gadgets-definition]] wisa rojane bike:
:::::* start[ResourceLoader|default|package|dependencies=mediawiki.util,ext.gadget.StorageUtils,ext.gadget.citoid-helper]|start.js|start.css|start.js/data.json
:::::[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 09:39, 5 tebax 2026 (UTC)
{{şirove}} Dewama ''[[Special:PermanentLink/6333688|Gotûbêja bikarhêner:Rewiye tine#WF:Nû]]'' bila gotûbêja wî em spam nekin. :D
{{r|Ghybu}} dikarî [[Special:PermanentLink/6333689|vê htmlê]] binêrî claude rast fêm kiriye yan na? Daxîne û wek html qeyd bike. --[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 18:43, 14 tebax 2026 (UTC)
:Min seh wîkîyên din jî kir, li wîkiya fransî tiştekî wekî daxwaza min çêkirine (tiştên ku ne hewce ne wekî "tab" çêkirine): [//fr.wiktionary.org/w/index.php?title=fdsdfdsf&action=edit&redlink=1]. Formata me yê berî jî bi vê lojîkê hatibû çêkirin, wekî de.wiktionary ([//de.wiktionary.org/w/index.php?title=sdfdsfsdfs&action=edit&preload=Vorlage:Formatvorlage_(Substantiv_vereinfacht)]) [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 19:01, 14 tebax 2026 (UTC)
== [[Mediawiki:Gadget-QQ.js]] ==
Ev amûr di şikle Minerva de. Her daîm vê xeletiyê dide:
<syntaxhighlight lang="js">
TypeError: Cannot read properties of null (reading 'addEventListener') at css () at runScript () at Array.<anonymous> () at flushCssBuffer ()
</syntaxhighlight> [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 19:29, 18 tîrmeh 2026 (UTC)
:* [[Bikarhêner:Wikihez/skrîpt/js/Gadget-QQ.js]] --> [[Mediawiki:Gadget-QQ.js]]
:* [[Bikarhêner:Wikihez/Gadget-QQ.css]] --> [[Mediawiki:Gadget-QQ.css]]
:Ez dibêjim çêbû lê ka çend roj biceribînim. Tiştên ku hatin sererastkirin:
:# Google Books API Key dikarî zêde bikî, dixe cookies û di gerokê de dimîne. Berê bê API Key dixebitiya lê êdî mecbûr e ku API Key-a te hebe, bidestxistina wê ne zêde zor e lê dîsa jî tevlihev e.
:# Êdî di mobîlê de dixebite, heta di mobîlê de xweştir xuya dike.
:# Moda tarî
:# OOUI dewsa jquery.ui
:# Li qutiyê çi dixwazî zêde bikî, dikare li gorî îsm, sifet, fiîl bitewîne. Lê ji bo fiîl tenê dikare çend heb inflection bîne.
:# Butona paqij bike lê zêde kir.
:# Çend paqijiyên jêgirtinên Google Kitêbê niha hene.
:[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 23:38, 18 tîrmeh 2026 (UTC)
::Tewandina fiîlan û xeletiya modulê lazim e were rastkirin. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 14:40, 21 tîrmeh 2026 (UTC)
== [[MediaWiki:Gadget-wikt.add-examples.js]] ==
Min ev amûr hinek rojane kir feqat çend problem hene berî ku bar bikin.
Tiştên ku min guhart:
# Êdî li sayfeyên bi {{ş|maneid}} jî dixebite,
# Cihê di wîkîtekstê de yê ku jêgirtin were îlawekirin baştir bû,
# [[Mediawiki:Gadget-citoid-helper.js|citoid helper]] zêde kir ji bo ku bi hêsanî çavkanî bi riya doi, isbn an urlyê werin tijîkirin.
* [[Bikarhêner:Wikihez/Gadget-wikt.add-examples.css]] --> [[MediaWiki:Gadget-wikt.add-examples.css]]
* [[Bikarhêner:Wikihez/Gadget-wikt.add-examples.js]] --> [[MediaWiki:Gadget-wikt.add-examples.js]]
- --[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 00:50, 19 tîrmeh 2026 (UTC)
:Min "wikt." qismên cache kirinê ya wîkiya fransî bi [[MediaWiki:Gadget-StorageUtils.js]] guhartiye. loma ji bîr nekin wê amûrê li [[MediaWiki:Gadgets-definition]] zêde bikin. û navê amûrê jî biguhêrînin. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 09:15, 23 tîrmeh 2026 (UTC)
::Berê li ser WF:ceribandin dixebitî. niha naxebite. Divê were rastkirin. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 22:10, 7 tebax 2026 (UTC)
== Gadget-translation editor ==
* [[MediaWiki:Gadget-translation editor.js]]: divê formata en.wîktê were bikaranîn ji ber ku me gelek tercime ji en.wîktê kopî kir û ev js hîn nikare formata wekî li jêr bi kar bîne.
<syntaxhighlight lang="wikitext">
* {{Z|sh}}:
*: Kirîlî:
*: Latînî
</syntaxhighlight>
—[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:17, 16 tîrmeh 2026 (UTC)
== [[Mediawiki:Gadget-linkify.js]] ==
* ''rûpeleke'' wekî<syntaxhighlight lang="wikitext">[[rûpeleke]]</syntaxhighlight> lînk dike, bi regexê belkî dikare wisa bike <syntaxhighlight lang="wikitext">[[rûpel]]eke</syntaxhighlight>
—[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:17, 16 tîrmeh 2026 (UTC)
* Amûreke din wekî [[User:Wikihez/Gadget-linkify.js|linkify]] lazim e ku herfên mezin biçûk bike ji bo kurmancî.—[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:17, 16 tîrmeh 2026 (UTC)
:{{r|Bikarhêner}} Merheba bira, dikarî viya jî bar bikî?:
* [[Special:PermanentLink/6291974|linkify]] --> [[Mediawiki:Gadget-linkify.js]]
Spas--[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 11:42, 29 tîrmeh 2026 (UTC)
:Dûre [https://ku.wiktionary.org/wiki/MediaWiki:Gadget-start.js#L-283 li vir] wiktviLinkify bike kuLinkify xêra xwe [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 11:51, 29 tîrmeh 2026 (UTC)
::Min ji bîr kir lê zêde bikim niha nikare "Dİ" bike "di", xeletiyeke berbelav a di nivîsên kurdî de, herfên din ên wekî ll yan rr jî hewce ne werin zêdekirin. Dûre em zêde bikin. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 21:42, 29 tîrmeh 2026 (UTC)
:::Min nû ferq kir, sayfeyên ku hîn nehatine çêkirin wîkîlînk nake. Problemeke mezin e divê were rastkirin. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 18:15, 30 tîrmeh 2026 (UTC)
::::Na, lînk dike, tiştekî din heye... [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 10:49, 31 tîrmeh 2026 (UTC)
== Amûra manayê ==
Amûreke din ji bo nivîsina maneyê wekî Nimûne zêde bike lazim e [https://ku.wiktionary.org/w/index.php?title=Bikarh%C3%AAner:Wikihez/test.js&oldid=6276876 js] [https://ku.wiktionary.org/w/index.php?title=%C5%9Eablon:ceribandin2&oldid=6265629 şablon] [https://ku.wiktionary.org/w/index.php?title=Bikarh%C3%AAner:Wikihez/common.css&oldid=6265642 css] --[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 09:12, 23 tîrmeh 2026 (UTC)
== [[MediaWiki:Gadget-jeder.js]] ==
@[[Bikarhêner:Ghybu|Ghybu]] Çavkaniyên jêderê di moda pêşdîtinê de jêderê vedişêre, ew jî min gelek eciz dike wextê çavkanî zêde dikim. Min ji Claude pirsî û kodan nîşanî wê da, wisa cewab da:
Yes — and this file actually explains the whole thing precisely, better than my earlier guess about extract-stripping.
What's happening: the CSS rule
<syntaxhighlight lang="css">
.jeder{
display:none;
}
</syntaxhighlight>
hides every citation by default, *unconditionally*. The only thing that ever makes it visible again is the gadget's JS: it finds each `.jeder`, builds the short "`— (year, author, +)`" summary from the `.j-pewist` fields, and either reveals the short version or — for citations with no `.j-pewist` fields — explicitly sets `display:inline` on the original.
So visibility of citations depends entirely on this JS running. In the normal article view (Image 1) it runs, so you see the collapsed "`(1918, E. Rehmî Ji Mala Hekariyan, Amadekar: M. E. Bozarslan, +)`" form. In whatever generated Image 2 — a hover-preview/extract/API render — gadget JS doesn't execute, so nothing ever removes the `display:none`, and the citation vanishes completely rather than degrading to "still visible, just not collapsed."
<b>The fix:</b> flip the default so the *un-collapsed* state is the safe fallback, and let JS do the hiding only after it successfully builds the short version. That way, any context without JS shows the full citation instead of nothing.
CSS — remove the blanket hide:
<syntaxhighlight lang="css">
.jeder {
/* intentionally no display:none here — see Gadget-... .js */
}
</syntaxhighlight>
JS — do the hiding from script, after the short form exists:
{{veşêre-ser}}
<syntaxhighlight lang="js">
// Ji bo şablonên [[Şablon:jêder]] hatiye nivîsandin.
// Parametreyên ku di navbera "<span class="j-pewist">...</span>" an "{{j-pêwîst|...}}" de ne venaşêre.
$(function() {
function nivisaKurtTevliBike(sund, nivisKurt) {
var zede = $('<a>+</a>')
.addClass('click')
.attr('href', '#')
.attr('title', 'zêdetir')
.css('font-weight', 'bold');
var kurt = $(' <a>↩</a>')
.addClass('click-kurt')
.attr('href', '#')
.attr('title', 'veşêre')
.css('font-weight', 'bold');
$('<span>' + nivisKurt + '</span>')
.append(zede).append(')')
.addClass('jeder-kurt')
.css('font-size', '0.85em')
.insertAfter(sund);
sund.append(' ').append(kurt);
// Only hide the full citation once the short summary actually exists.
// If this script never runs (no-JS clients, hover-preview extracts,
// action=render, etc.), the full citation stays visible instead of
// silently disappearing.
sund.css('display', 'none');
}
function vesere() {
$('.jeder').each(function() {
var elmTab = $(this).find('.j-pewist').clone();
if (elmTab.length) {
var elm = '';
for (var i = elmTab.length - 1; i >= 0; i--) {
elm = elmTab.eq(i).html() + ', ' + elm;
}
var nivisKurt = ' — (' + elm;
nivisaKurtTevliBike($(this), nivisKurt);
}
// else: no j-pewist fields to shorten — leave the full citation
// as it already renders (visible), nothing to do.
});
}
vesere();
$(".click").click(function(e) {
e.preventDefault();
$(this).parent('.jeder-kurt').css('display', 'none');
$(this).parent('.jeder-kurt').prev().css('display', 'inline');
});
$(".click-kurt").click(function(e) {
e.preventDefault();
$(this).parent('.jeder').css('display', 'none');
$(this).parent('.jeder').next().css('display', 'inline');
});
});
</syntaxhighlight>
Net effect:
- JS-enabled readers (normal article view): identical experience to today — collapsed short form with `+`/`↩` toggle.
- No-JS contexts (previews, extracts, screen readers before JS loads, print, etc.): full citation is shown instead of nothing — a real regression fix rather than a cosmetic one.
One caveat worth being upfront about: this fixes it *if* the preview context renders the gadget's HTML/CSS but doesn't execute gadget JS (which is the far more common case, and what this code strongly suggests is happening). If Image 2 instead comes from a pipeline that strips the `.jeder`/`.jegirtin-text` elements out of the HTML entirely before this CSS/JS even gets a chance to apply, no on-wiki CSS/JS change can help — that'd need the extract-generation config changed instead. Given what this gadget file shows, though, I'd bet on the CSS-hide explanation.
{{veşêre-bin}}
Em dûre biceribînin eger xeletî tinebe, vî tiştî jî rast bikin. --[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 20:00, 23 tîrmeh 2026 (UTC)
:Ez APIya MediaWiki rind nizanim belkî Claude dizane:) Em nikarin bibêjin dema ku moda "''action=edit''" e fonksiyona <code>function vesere()</code> bi kar meyîne. [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 15:57, 24 tîrmeh 2026 (UTC)
::Na, di moda "edît"-ê de <code>var elmTab = null</code>... [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 16:13, 24 tîrmeh 2026 (UTC)
?:
<syntaxhighlight lang="js">
if (
mw.config.get('wgAction') === 'edit' ||
mw.config.get('wgAction') === 'submit'
){
var elmTab = [];
} else {
var elmTab = $(this).find('.j-pewist').clone();
}
</syntaxhighlight>
--[[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 16:31, 24 tîrmeh 2026 (UTC)
:Ez jî nizanim Claude çiqas ji mediawiki fêm dike lê heta niha ti tişt nîne ku min jê pirs kir û nikaribû çêke, bila wekî reklam nebe feqat Claude mikemmel e, dibêjim "li vir çima xeletiyeke wisa derdikeve" di dosyeya 2000 rêzî de diçe tiştê xelet tenê rast dike tiştekî din naguherîne. Chatgpt û aistudio qet wisa nakin, eynî dosyeyê deh cara dinivîsin, deh netîceyên cuda derdikevin :D
:Em dikarin vê amûrê wextê edit û submitê neaktîv bikin wekî <syntaxhighlight lang="js">if (!(action === "edit" || action === "submit")) {
:return;</syntaxhighlight> lê wê demê display:none wê çibe nizanim. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 18:23, 24 tîrmeh 2026 (UTC)
::display:none ne hewce ye ma jixwe di nav kodê [https://ku.wiktionary.org/w/index.php?title=MediaWiki:Gadget-jeder.js&oldid=6069025#L-49 L-49] de inline/none heye? [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 18:53, 24 tîrmeh 2026 (UTC)
:Min bi vî şiklî [https://ku.wiktionary.org/w/index.php?title=Bikarh%C3%AAner:Wikihez/vector-2022.js&diff=prev&oldid=6290816#L-28] ceriband feqat nexebitî. "display:none" di pêşdîtinê de dixebite feqat js naşixule. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 14:43, 25 tîrmeh 2026 (UTC)
::Kodên JSê pir hez nakim (pêşta hukurina APIya MWyê hewce bû) dîsa jî ez ê seh bikim :) [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 16:49, 27 tîrmeh 2026 (UTC)
:::Ez niha bi vî şiklî [https://ku.wiktionary.org/w/index.php?title=Bikarh%C3%AAner:Wikihez/test.js&oldid=6290820] [https://ku.wiktionary.org/w/index.php?title=Bikarh%C3%AAner:Wikihez/common.css&oldid=6290821#L-8] bi kar tînim ti problem nîne. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 17:09, 27 tîrmeh 2026 (UTC)
== [[MediaWiki:Gadget-PagePreviews.js]] ==
Ez dibêjim em vê amûrê jî çêkin [[:en:MediaWiki:Gadget-PagePreviews.js]] --[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 10:56, 3 tebax 2026 (UTC)
= Moda tarî =
== [[Şablon:wîkîpediya]] ==
Rengê tarî de xirab e.--[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 19:36, 4 tebax 2026 (UTC)
= Bot =
Karên ku bi botê werin çêkirin ji kerema xwe li vir binivîsin.
== Kategorî:Biwêj ==
[[:Kategorî:Biwêj]] divê were paqijkirin, lîsteya madeyên {{ş|biwêj}} çêke, yên ku tê de bûn, kirin, man hene filtre bike yên din bi destî tê çêkirin.—[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:17, 16 tîrmeh 2026 (UTC)
== Jêgirtin ==
Xistina jêgirtinên beşa [https://ku.wiktionary.org/w/index.php?search=insource%3A%2F%3D+*Ji+%5BWw%5D%C3%AAjey%C3%AA+*%3D%2F&title=Taybet%3AL%C3%AAger%C3%AEn&profile=advanced&fulltext=1&ns0=1&searchToken=8rh0bmw8dccsi7aynl6zli8uf ji wêjeyê] li beşa maneyê. —[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:17, 16 tîrmeh 2026 (UTC)
== Bota Toolforgeê ==
Botekî Toolforgeê lazim e ji bo ku xeletiyên biçûk wekî şablonên bi navên îngilîzî werin kurdîkirin yan jî valahiya beşan rast bike û hwd.—[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:17, 16 tîrmeh 2026 (UTC)
:Min [[Bikarhêner:Wikihez/skrîpt/py/kuwiktkozmetik.py|paqijiyen kozmetîk]] hazir kir feqat hîn navên şablonan naguhêre. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 20:05, 4 tebax 2026 (UTC)
== Updatew ==
Bota [[Bikarhêner:Wikihez/skrîpt/py/updateW.py|updateW]] divê were rojanekirin. Yan jî yekî nû were çêkirin. Şablonên {{ş|W}} di beşa tercimeyan de sererast dike û zimanan rêz dike. Ya niha xeletiya navê zimanî dide.—[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:17, 16 tîrmeh 2026 (UTC)
== sihir --> sêhr ==
Tercimeyên ''[[sêhr]]'' hemû dibêje ''sihir'' loma bi botê lazim e kirin ''sêhr''. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 17:43, 18 tîrmeh 2026 (UTC)
:Sihirbaz --> sêhrbaz [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 18:07, 18 tîrmeh 2026 (UTC)
== Tercimeyên dîroknas ==
Li tercimeyên [[dîroknas]], hevmaneyên wê hewce ye were îlawekirin. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 18:44, 18 tîrmeh 2026 (UTC)
== Mewlûd ==
Sererastkirina jêgirtinên mewlûdê [https://ku.wiktionary.org/w/index.php?search=insource%3A%2Fw%5C%3AMela+His%C3%AAn%C3%AA+Batey%C3%AE%2F&title=Taybet%3AL%C3%AAger%C3%AEn&ns0=1&searchToken=8m0tguy3sqt7edr4sg0u8hedo] wekî [https://ku.wiktionary.org/w/index.php?title=dax%C3%AEdar&curid=284303&diff=6265851&oldid=6142285] [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 09:43, 20 tîrmeh 2026 (UTC)
c5ek3ogny5a9sitqwdfks6uxq358vko
6333696
6333694
2026-08-14T19:05:41Z
Ghybu
1393
/* MediaWiki:Gadget-start.js */
6333696
wikitext
text/x-wiki
{{/ser}}
= Karên ferhengî =
== Mane ==
* [[:Kategorî:Madeyên bê beşa mane]]
** [[:Kategorî:Madeyên bê beşa mane bi kurmancî]]
Li ser van rûpelan ev made hene ku maneyan wan nehatine nivîsin û divê werin nivîsin. —[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:17, 16 tîrmeh 2026 (UTC)
== Etîmolojî ==
*[[:Kategorî:Daxwazên etîmolojiyê]]
**[[:Kategorî:Daxwazên etîmolojiyê bi kurmancî]]
Li ser van rûpelan ev made hene ku etîmolojiya wan hîn nehatine nivîsin. Ji bo alîkariyê binêre [[WF:Etîmolojî]] —[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:17, 16 tîrmeh 2026 (UTC)
== Cureyê rêzimanî ==
* [[:Kategorî:Gotarên bê kategoriya rêzimanî]]
* [[:Kategorî:Gotarên bê kategoriya rêzimanî bi kurmancî]]
Li ser van rûpelan ev made hene ku cureyên wan yên rêzimanî hîn nehatine nivîsin. Ji bo alîkariyê binêre [[Alîkarî:Cureyên peyvan]] —[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:17, 16 tîrmeh 2026 (UTC)
== Kontrol ==
* [[:Kategorî:Kontrol]]
** [[:Kategorî:Kontrola maneyê]]
Ev madde bi botê hatine çêkirin, yek bi yek divê werin kontrolkirin. —[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:17, 16 tîrmeh 2026 (UTC)
= Şablon =
== IPA ==
* {{ş|IPA}} divê [[Modul:IPA]] bi kar bîne. —[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:17, 16 tîrmeh 2026 (UTC)
== Deng ==
Kurdîkirina belgekirina {{ş|deng}} lazim e.--[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 00:06, 19 tîrmeh 2026 (UTC)
= Modul =
== Modul:form of/templates ==
* [[Modul:form of/templates]]: Divê ev modul were rojanekirin û xeletiyên berê wekî ([[hevalê]]) werin rastkirin. —[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:17, 16 tîrmeh 2026 (UTC)
*:Merheba @[[Bikarhêner:Ghybu|Ghybu]] Te gotibû di vê modulê de xeletî hene, jkx tu dikarî li vir binivîsî çi kêmasî hene, daku wextê rojane dikim ez ji bîr nekim? [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:16, 21 tîrmeh 2026 (UTC)
*::Silav. Nizanim ji bîra min çûye... Herwiha ji bo çêkirina formên navdêran zanînên cîns û tîpa dawî bes e:
*::* (-ê, mê) => çemandî, bangkirin
*::* (-ê, nêr) => îzafe
*::* (-ê, mê û nêr) => îzafe (nêr), bangkirin (mê), çemandî (mê)
*::* (-a) => îzafe (mê)
*::* (-ekî) => îzafe û çemandî (nêr, nebinavkirî)
*::* (-eke) = > îzafe (mê, nebinavkirî)
*::* ...
*:: <code>if find(mw.title.getCurrentTitle().subpageText, 'ekî$') then ... end</code>
*::<code><nowiki>{{ku-tewîn-navForm|<navdêr>|<zayend>}</nowiki></code>
*::Tablo û nivîs di yekcarî de tên çêkirin...
*::Feqet problem lêzêdekirina mînakan e. [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 17:34, 21 tîrmeh 2026 (UTC)
*:::Lêzêdekirina kîjan nimûneyan? Ev koda js ji bo çi ye? Qisûrê nenêre min fêm nekir :/ [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 18:13, 21 tîrmeh 2026 (UTC)
*::::Li vira ([[hevalê#Formeke navdêrê]]) di bin maneyên 1. û 2. mînak nayên tevlî kirin :) [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 18:18, 21 tîrmeh 2026 (UTC)
*:::::Ev tercîh e, ne mecbûrî ye, em dikarin [https://ku.wiktionary.org/w/index.php?title=heval%C3%AA&diff=prev&oldid=6276350 wisa] bikin. Wekî din? [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 18:29, 21 tîrmeh 2026 (UTC)
*::::::Min li jor tênê got ku tenê parametreyên "navdêr" û "zayend" hewce nee. Bi '''[//ku.wiktionary.org/w/index.php?title=heval%C3%AA&curid=969734&diff=6276353&oldid=6276350 vî]''' awayî jî tê çêkirin. Parametreyên din ne hewce ne. [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 18:38, 21 tîrmeh 2026 (UTC)
*:::::::Ji bo wê şabloneke din lazim e, bila ev şablon wekî îngilîzî bimîne em ji bo kurmancî yekî din çêkin. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 18:42, 21 tîrmeh 2026 (UTC)
*::::::::[https://ku.wiktionary.org/w/index.php?title=heval%C3%AA&oldid=6276885 wisa] çawa ye? Bi min nivîsîna nimûneyan zêde ne lazim e ji ber ku ti kes serê xwe pê naêşîne. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 09:46, 23 tîrmeh 2026 (UTC)
*:::::::::@[[Bikarhêner:Ghybu|Ghybu]] Vê şablonê bi kar bînin an na? Navê şablonê kê çi be? [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 19:07, 24 tîrmeh 2026 (UTC)
== Modul:columns ==
* [[Modul:columns]] were rojanekirin û {{ş|kol3}} bila lînka ''nîşan bide'' deyne beriya sernavê, kolê di qutiya rengî de bila nebe. —[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:17, 16 tîrmeh 2026 (UTC)
== Modul:etymon ==
* [[Modul:etymon kevn]]: Rojanekirin hewce ye. —[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:17, 16 tîrmeh 2026 (UTC)
== [[Modul:ziman/code to canonical name]] ==
Belgekirina skrîptê û js divê were rastkirin. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 09:31, 22 tîrmeh 2026 (UTC)
:* [[MediaWiki:UpdateLanguageNameAndCode.js]]
:[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 09:50, 22 tîrmeh 2026 (UTC)
::* [[Modul:ziman/print]]
::[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 09:52, 22 tîrmeh 2026 (UTC)
:::*[[Modul:ziman/şablon]]
:::[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 09:56, 22 tîrmeh 2026 (UTC)
::::* [[MediaWiki:Gadget-translation editor.js/ziman.json]]
::::[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 11:06, 22 tîrmeh 2026 (UTC)
== [[Modul:quote]] ==
Piştî ev modul hate hazirkirin, lazim e navên jegirtinan werin rastkirin û li hemûyan {{param|jêgirtin}} were zêdekirin. Bnr. [[Gotûbêja şablonê:Jêgirtin/Ehmedê Xanî/Mem û Zîn]] [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 22:27, 5 tebax 2026 (UTC)
::Ev modul hema bêje hazir e. Hûn li ser van madeyan çi difikirin:
# {{para|tarîx}} lazim e full date be eger na, lazim e {{para|sal}} were bikaranîn. Feqat "'''2021''' kanûna pêşîn 23" bi vî şiklî bi min ne problem e çnkî derdê en.wikt "attestation" e delîla herî pêşî jî sal e.
#: {{demo|sep=wisa xuya dibe<br>|<nowiki>{{jêder-kitêb/ceribandin|en
|tarîx=23 December 2021|nivîskar=Harry Hobbs; George Williams|sernav=Micronations and the Search for Sovereignty|url=https://www.cambridge.org/core/books/micronations-and-the-search-for-sovereignty/B0414A3A322695D9EE71E4CDDFDA06DE|weşanxane=Cambridge University Press|rûpel=155|isbn=978-1-009-15012-5|jêgirtin=jêgirtin.|t=-}}</nowiki>}}
#{{para|amadekar}}/{{para|edîtor}}/{{para|terciman}} bi şiklê edîtoriya, amadekariya, tercimekirina
#: {{demo|sep=dide<br>|<nowiki>{{jêder-kitêb/ceribandin|en
|sernav=Medical Surgical Nursing|serî=Juta's Manual of Nursing|cildê-seriyê=volume 4|edîtor=Sophie Mataniele Mogotlane; Joyce Mokoena; Motshedisi Eunice Chauke; Anne Young|sal=2005|weşanxane=Juta Academic|isbn=978-0702171840|rûpel=!12-29|jêgirtin=jêgirtin|t=-}}</nowiki>}}
--[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 13:09, 10 tebax 2026 (UTC)
:@[[Bikarhêner:Bikarhêner|Bikarhêner]] û @[[Bikarhêner:Ghybu|Ghybu]] Hîn gelek tişt hene divê îzah bikin û fikrê we pirs bikim, feqat îzahkirin pir zor e, em dest bi bikaranînê bikin û dûre tiştên ku hûn naxwazin em dikarin biguherînîn, dibe? [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 13:11, 10 tebax 2026 (UTC)
::Dibe, piştî çêbû, em di praktîkê de bibînin ku çawa ye. -- [[Bikarhêner:Bikarhêner|Bikarhêner]] ([[Gotûbêja bikarhêner:Bikarhêner|gotûbêj]]) 18:05, 10 tebax 2026 (UTC)
= Javascript =
== [[Mediawiki:Gadget-citoid-helper.js]] ==
Ji bo bi citoidê kopîkirina malûmatên çavkaniyan amûreke wisa lazim e. Xisûsen ji ber ku bi çend amûrên din dikare were bikaranîn.
Feqat çend problem hene, şablonên me de kêmasiya parametreyan gelek in û xerîteyên citoidê hîn nehatine çêkirin. Wana sererast bikin dûre vê amûrê çêkin, piştre [[MediaWiki:Gadget-start.js|start.js]] û [[MediaWiki:Gadget-wikt.add-examples.js|add examples.js]] were rojanekirin.
- --[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 00:04, 19 tîrmeh 2026 (UTC)
:Merheba @[[Bikarhêner:Bikarhêner|Bikarhêner]], ez dibêjim karê Modul:quote zêde wext bistîne, bila em dest bi bikaranîna van amûran bikin dûre kêmasiyan em ê temam bikin înşela. Dikarî vana li cihên xwe yên rast kopî paste bikî?
# [[Special:PermanentLink/6291574|Bikarhêner:Wikihez/skrîpt/js/Gadget-citoid-helper.js]] --> [[Mediawiki:Gadget-citoid-helper.js]]
# Ya li jêr kopî bike qismê herî dawî ya AmûrênVeşartî li [[MediaWiki:Gadgets-definition]]:
## <code><nowiki>* citoid-helper[ResourceLoader|hidden|default|dependencies=mediawiki.util]|citoid-helper.js</nowiki></code>
--[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:58, 26 tîrmeh 2026 (UTC)
== [[MediaWiki:Gadget-start.js]] ==
Rojanekirin hewce ye. Min gelek tişt lê zêde kir lê ez niha test dikime. Piştre em bar bikin:
* [[Bikarhêner:Wikihez/Gadget-start.js]] --> [[MediaWiki:Gadget-start.js]]
* [[Bikarhêner:Wikihez/Gadget-start.css]] --> [[MediaWiki:Gadget-start.css]]
--[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 22:08, 17 tîrmeh 2026 (UTC)
:Min [[MediaWiki:Gadget-start/data.json|data.json]] çêkir ji bo ku bi hêsanî malûmatên heyî werin guhartin bêyî guhartina Javascriptê. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 19:49, 18 tîrmeh 2026 (UTC)
:Xeletiyên ku ji bîr nekim rast bikim:
:* Wextê min çavkanî "kitêb" hilbijart û bi destî tije kir xeletiyeke [https://ku.wiktionary.org/w/index.php?title=xezete&diff=prev&oldid=6265392 wisa] derket her kelîme hate lînkkirin.
:* <code>html("⠿")</code> ev ne lazim e.
:* textarea ji bo çavkaniyên jêgirtinan xaseten yên sernav hîn jî ne draggable e.
:* pêşdîtina zindî checkbox wextê tê rakirin, pêşdîtin winda nabe.
:* Butona mobîlê ya vekirina formê di moda tarî de belî nabe, tenê wekî qutiyeke tarî xuya dibe.
:* Metna hişyarkirinê di guhartina rûpelên heyî de lazim e baştir bikim.
:[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 23:51, 18 tîrmeh 2026 (UTC)
::Ev problem çêbûn, ez ê binêrim ka çi problemên din hene. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 14:15, 19 tîrmeh 2026 (UTC)
:::Çêke: Ji bo qismê çavkaniyê yek dikare API call û Kategorî:Çavkanî bi kar bîne ji bo ku şablon zêde bikî ji yên heyî. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 21:21, 19 tîrmeh 2026 (UTC)
::::Ev jî çêbû, min beşa çavkanî jî çêkir. Eger xeletî dernekeve û problema valahiya piştî etîketê ji bîr nekim, piştî rojanekirina amûrên linkify, û citoid em dikarin bar bikin. Ez ê ti tiştê nû îlawe nekim, zêde dirêj bû. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:14, 21 tîrmeh 2026 (UTC)
:::::Merheba @[[Bikarhêner:Bikarhêner|Bikarhêner]]. Dikarî wana bar bikî?
:::::* [[Bikarhêner:Wikihez/Gadget-start.js]] --> [[MediaWiki:Gadget-start.js]]
:::::* [[Bikarhêner:Wikihez/Gadget-start.css]] --> [[MediaWiki:Gadget-start.css]]
:::::* [[MediaWiki:Gadgets-definition]] wisa rojane bike:
:::::* start[ResourceLoader|default|package|dependencies=mediawiki.util,ext.gadget.StorageUtils,ext.gadget.citoid-helper]|start.js|start.css|start.js/data.json
:::::[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 09:39, 5 tebax 2026 (UTC)
{{şirove}} Dewama ''[[Special:PermanentLink/6333688|Gotûbêja bikarhêner:Rewiye tine#WF:Nû]]'' bila gotûbêja wî em spam nekin. :D
{{r|Ghybu}} dikarî [[Special:PermanentLink/6333689|vê htmlê]] binêrî claude rast fêm kiriye yan na? Daxîne û wek html qeyd bike. --[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 18:43, 14 tebax 2026 (UTC)
:Min seh wîkîyên din jî kir, li wîkiya fransî tiştekî wekî daxwaza min çêkirine (tiştên ku ne hewce ne wekî "tab" çêkirine an jî hatine vêşarin): [//fr.wiktionary.org/w/index.php?title=fdsdfdsf&action=edit&redlink=1]. Formata me yê berî jî bi vê lojîkê hatibû çêkirin, wekî de.wiktionary ([//de.wiktionary.org/w/index.php?title=sdfdsfsdfs&action=edit&preload=Vorlage:Formatvorlage_(Substantiv_vereinfacht)]) [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 19:01, 14 tebax 2026 (UTC)
== [[Mediawiki:Gadget-QQ.js]] ==
Ev amûr di şikle Minerva de. Her daîm vê xeletiyê dide:
<syntaxhighlight lang="js">
TypeError: Cannot read properties of null (reading 'addEventListener') at css () at runScript () at Array.<anonymous> () at flushCssBuffer ()
</syntaxhighlight> [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 19:29, 18 tîrmeh 2026 (UTC)
:* [[Bikarhêner:Wikihez/skrîpt/js/Gadget-QQ.js]] --> [[Mediawiki:Gadget-QQ.js]]
:* [[Bikarhêner:Wikihez/Gadget-QQ.css]] --> [[Mediawiki:Gadget-QQ.css]]
:Ez dibêjim çêbû lê ka çend roj biceribînim. Tiştên ku hatin sererastkirin:
:# Google Books API Key dikarî zêde bikî, dixe cookies û di gerokê de dimîne. Berê bê API Key dixebitiya lê êdî mecbûr e ku API Key-a te hebe, bidestxistina wê ne zêde zor e lê dîsa jî tevlihev e.
:# Êdî di mobîlê de dixebite, heta di mobîlê de xweştir xuya dike.
:# Moda tarî
:# OOUI dewsa jquery.ui
:# Li qutiyê çi dixwazî zêde bikî, dikare li gorî îsm, sifet, fiîl bitewîne. Lê ji bo fiîl tenê dikare çend heb inflection bîne.
:# Butona paqij bike lê zêde kir.
:# Çend paqijiyên jêgirtinên Google Kitêbê niha hene.
:[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 23:38, 18 tîrmeh 2026 (UTC)
::Tewandina fiîlan û xeletiya modulê lazim e were rastkirin. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 14:40, 21 tîrmeh 2026 (UTC)
== [[MediaWiki:Gadget-wikt.add-examples.js]] ==
Min ev amûr hinek rojane kir feqat çend problem hene berî ku bar bikin.
Tiştên ku min guhart:
# Êdî li sayfeyên bi {{ş|maneid}} jî dixebite,
# Cihê di wîkîtekstê de yê ku jêgirtin were îlawekirin baştir bû,
# [[Mediawiki:Gadget-citoid-helper.js|citoid helper]] zêde kir ji bo ku bi hêsanî çavkanî bi riya doi, isbn an urlyê werin tijîkirin.
* [[Bikarhêner:Wikihez/Gadget-wikt.add-examples.css]] --> [[MediaWiki:Gadget-wikt.add-examples.css]]
* [[Bikarhêner:Wikihez/Gadget-wikt.add-examples.js]] --> [[MediaWiki:Gadget-wikt.add-examples.js]]
- --[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 00:50, 19 tîrmeh 2026 (UTC)
:Min "wikt." qismên cache kirinê ya wîkiya fransî bi [[MediaWiki:Gadget-StorageUtils.js]] guhartiye. loma ji bîr nekin wê amûrê li [[MediaWiki:Gadgets-definition]] zêde bikin. û navê amûrê jî biguhêrînin. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 09:15, 23 tîrmeh 2026 (UTC)
::Berê li ser WF:ceribandin dixebitî. niha naxebite. Divê were rastkirin. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 22:10, 7 tebax 2026 (UTC)
== Gadget-translation editor ==
* [[MediaWiki:Gadget-translation editor.js]]: divê formata en.wîktê were bikaranîn ji ber ku me gelek tercime ji en.wîktê kopî kir û ev js hîn nikare formata wekî li jêr bi kar bîne.
<syntaxhighlight lang="wikitext">
* {{Z|sh}}:
*: Kirîlî:
*: Latînî
</syntaxhighlight>
—[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:17, 16 tîrmeh 2026 (UTC)
== [[Mediawiki:Gadget-linkify.js]] ==
* ''rûpeleke'' wekî<syntaxhighlight lang="wikitext">[[rûpeleke]]</syntaxhighlight> lînk dike, bi regexê belkî dikare wisa bike <syntaxhighlight lang="wikitext">[[rûpel]]eke</syntaxhighlight>
—[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:17, 16 tîrmeh 2026 (UTC)
* Amûreke din wekî [[User:Wikihez/Gadget-linkify.js|linkify]] lazim e ku herfên mezin biçûk bike ji bo kurmancî.—[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:17, 16 tîrmeh 2026 (UTC)
:{{r|Bikarhêner}} Merheba bira, dikarî viya jî bar bikî?:
* [[Special:PermanentLink/6291974|linkify]] --> [[Mediawiki:Gadget-linkify.js]]
Spas--[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 11:42, 29 tîrmeh 2026 (UTC)
:Dûre [https://ku.wiktionary.org/wiki/MediaWiki:Gadget-start.js#L-283 li vir] wiktviLinkify bike kuLinkify xêra xwe [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 11:51, 29 tîrmeh 2026 (UTC)
::Min ji bîr kir lê zêde bikim niha nikare "Dİ" bike "di", xeletiyeke berbelav a di nivîsên kurdî de, herfên din ên wekî ll yan rr jî hewce ne werin zêdekirin. Dûre em zêde bikin. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 21:42, 29 tîrmeh 2026 (UTC)
:::Min nû ferq kir, sayfeyên ku hîn nehatine çêkirin wîkîlînk nake. Problemeke mezin e divê were rastkirin. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 18:15, 30 tîrmeh 2026 (UTC)
::::Na, lînk dike, tiştekî din heye... [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 10:49, 31 tîrmeh 2026 (UTC)
== Amûra manayê ==
Amûreke din ji bo nivîsina maneyê wekî Nimûne zêde bike lazim e [https://ku.wiktionary.org/w/index.php?title=Bikarh%C3%AAner:Wikihez/test.js&oldid=6276876 js] [https://ku.wiktionary.org/w/index.php?title=%C5%9Eablon:ceribandin2&oldid=6265629 şablon] [https://ku.wiktionary.org/w/index.php?title=Bikarh%C3%AAner:Wikihez/common.css&oldid=6265642 css] --[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 09:12, 23 tîrmeh 2026 (UTC)
== [[MediaWiki:Gadget-jeder.js]] ==
@[[Bikarhêner:Ghybu|Ghybu]] Çavkaniyên jêderê di moda pêşdîtinê de jêderê vedişêre, ew jî min gelek eciz dike wextê çavkanî zêde dikim. Min ji Claude pirsî û kodan nîşanî wê da, wisa cewab da:
Yes — and this file actually explains the whole thing precisely, better than my earlier guess about extract-stripping.
What's happening: the CSS rule
<syntaxhighlight lang="css">
.jeder{
display:none;
}
</syntaxhighlight>
hides every citation by default, *unconditionally*. The only thing that ever makes it visible again is the gadget's JS: it finds each `.jeder`, builds the short "`— (year, author, +)`" summary from the `.j-pewist` fields, and either reveals the short version or — for citations with no `.j-pewist` fields — explicitly sets `display:inline` on the original.
So visibility of citations depends entirely on this JS running. In the normal article view (Image 1) it runs, so you see the collapsed "`(1918, E. Rehmî Ji Mala Hekariyan, Amadekar: M. E. Bozarslan, +)`" form. In whatever generated Image 2 — a hover-preview/extract/API render — gadget JS doesn't execute, so nothing ever removes the `display:none`, and the citation vanishes completely rather than degrading to "still visible, just not collapsed."
<b>The fix:</b> flip the default so the *un-collapsed* state is the safe fallback, and let JS do the hiding only after it successfully builds the short version. That way, any context without JS shows the full citation instead of nothing.
CSS — remove the blanket hide:
<syntaxhighlight lang="css">
.jeder {
/* intentionally no display:none here — see Gadget-... .js */
}
</syntaxhighlight>
JS — do the hiding from script, after the short form exists:
{{veşêre-ser}}
<syntaxhighlight lang="js">
// Ji bo şablonên [[Şablon:jêder]] hatiye nivîsandin.
// Parametreyên ku di navbera "<span class="j-pewist">...</span>" an "{{j-pêwîst|...}}" de ne venaşêre.
$(function() {
function nivisaKurtTevliBike(sund, nivisKurt) {
var zede = $('<a>+</a>')
.addClass('click')
.attr('href', '#')
.attr('title', 'zêdetir')
.css('font-weight', 'bold');
var kurt = $(' <a>↩</a>')
.addClass('click-kurt')
.attr('href', '#')
.attr('title', 'veşêre')
.css('font-weight', 'bold');
$('<span>' + nivisKurt + '</span>')
.append(zede).append(')')
.addClass('jeder-kurt')
.css('font-size', '0.85em')
.insertAfter(sund);
sund.append(' ').append(kurt);
// Only hide the full citation once the short summary actually exists.
// If this script never runs (no-JS clients, hover-preview extracts,
// action=render, etc.), the full citation stays visible instead of
// silently disappearing.
sund.css('display', 'none');
}
function vesere() {
$('.jeder').each(function() {
var elmTab = $(this).find('.j-pewist').clone();
if (elmTab.length) {
var elm = '';
for (var i = elmTab.length - 1; i >= 0; i--) {
elm = elmTab.eq(i).html() + ', ' + elm;
}
var nivisKurt = ' — (' + elm;
nivisaKurtTevliBike($(this), nivisKurt);
}
// else: no j-pewist fields to shorten — leave the full citation
// as it already renders (visible), nothing to do.
});
}
vesere();
$(".click").click(function(e) {
e.preventDefault();
$(this).parent('.jeder-kurt').css('display', 'none');
$(this).parent('.jeder-kurt').prev().css('display', 'inline');
});
$(".click-kurt").click(function(e) {
e.preventDefault();
$(this).parent('.jeder').css('display', 'none');
$(this).parent('.jeder').next().css('display', 'inline');
});
});
</syntaxhighlight>
Net effect:
- JS-enabled readers (normal article view): identical experience to today — collapsed short form with `+`/`↩` toggle.
- No-JS contexts (previews, extracts, screen readers before JS loads, print, etc.): full citation is shown instead of nothing — a real regression fix rather than a cosmetic one.
One caveat worth being upfront about: this fixes it *if* the preview context renders the gadget's HTML/CSS but doesn't execute gadget JS (which is the far more common case, and what this code strongly suggests is happening). If Image 2 instead comes from a pipeline that strips the `.jeder`/`.jegirtin-text` elements out of the HTML entirely before this CSS/JS even gets a chance to apply, no on-wiki CSS/JS change can help — that'd need the extract-generation config changed instead. Given what this gadget file shows, though, I'd bet on the CSS-hide explanation.
{{veşêre-bin}}
Em dûre biceribînin eger xeletî tinebe, vî tiştî jî rast bikin. --[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 20:00, 23 tîrmeh 2026 (UTC)
:Ez APIya MediaWiki rind nizanim belkî Claude dizane:) Em nikarin bibêjin dema ku moda "''action=edit''" e fonksiyona <code>function vesere()</code> bi kar meyîne. [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 15:57, 24 tîrmeh 2026 (UTC)
::Na, di moda "edît"-ê de <code>var elmTab = null</code>... [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 16:13, 24 tîrmeh 2026 (UTC)
?:
<syntaxhighlight lang="js">
if (
mw.config.get('wgAction') === 'edit' ||
mw.config.get('wgAction') === 'submit'
){
var elmTab = [];
} else {
var elmTab = $(this).find('.j-pewist').clone();
}
</syntaxhighlight>
--[[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 16:31, 24 tîrmeh 2026 (UTC)
:Ez jî nizanim Claude çiqas ji mediawiki fêm dike lê heta niha ti tişt nîne ku min jê pirs kir û nikaribû çêke, bila wekî reklam nebe feqat Claude mikemmel e, dibêjim "li vir çima xeletiyeke wisa derdikeve" di dosyeya 2000 rêzî de diçe tiştê xelet tenê rast dike tiştekî din naguherîne. Chatgpt û aistudio qet wisa nakin, eynî dosyeyê deh cara dinivîsin, deh netîceyên cuda derdikevin :D
:Em dikarin vê amûrê wextê edit û submitê neaktîv bikin wekî <syntaxhighlight lang="js">if (!(action === "edit" || action === "submit")) {
:return;</syntaxhighlight> lê wê demê display:none wê çibe nizanim. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 18:23, 24 tîrmeh 2026 (UTC)
::display:none ne hewce ye ma jixwe di nav kodê [https://ku.wiktionary.org/w/index.php?title=MediaWiki:Gadget-jeder.js&oldid=6069025#L-49 L-49] de inline/none heye? [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 18:53, 24 tîrmeh 2026 (UTC)
:Min bi vî şiklî [https://ku.wiktionary.org/w/index.php?title=Bikarh%C3%AAner:Wikihez/vector-2022.js&diff=prev&oldid=6290816#L-28] ceriband feqat nexebitî. "display:none" di pêşdîtinê de dixebite feqat js naşixule. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 14:43, 25 tîrmeh 2026 (UTC)
::Kodên JSê pir hez nakim (pêşta hukurina APIya MWyê hewce bû) dîsa jî ez ê seh bikim :) [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 16:49, 27 tîrmeh 2026 (UTC)
:::Ez niha bi vî şiklî [https://ku.wiktionary.org/w/index.php?title=Bikarh%C3%AAner:Wikihez/test.js&oldid=6290820] [https://ku.wiktionary.org/w/index.php?title=Bikarh%C3%AAner:Wikihez/common.css&oldid=6290821#L-8] bi kar tînim ti problem nîne. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 17:09, 27 tîrmeh 2026 (UTC)
== [[MediaWiki:Gadget-PagePreviews.js]] ==
Ez dibêjim em vê amûrê jî çêkin [[:en:MediaWiki:Gadget-PagePreviews.js]] --[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 10:56, 3 tebax 2026 (UTC)
= Moda tarî =
== [[Şablon:wîkîpediya]] ==
Rengê tarî de xirab e.--[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 19:36, 4 tebax 2026 (UTC)
= Bot =
Karên ku bi botê werin çêkirin ji kerema xwe li vir binivîsin.
== Kategorî:Biwêj ==
[[:Kategorî:Biwêj]] divê were paqijkirin, lîsteya madeyên {{ş|biwêj}} çêke, yên ku tê de bûn, kirin, man hene filtre bike yên din bi destî tê çêkirin.—[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:17, 16 tîrmeh 2026 (UTC)
== Jêgirtin ==
Xistina jêgirtinên beşa [https://ku.wiktionary.org/w/index.php?search=insource%3A%2F%3D+*Ji+%5BWw%5D%C3%AAjey%C3%AA+*%3D%2F&title=Taybet%3AL%C3%AAger%C3%AEn&profile=advanced&fulltext=1&ns0=1&searchToken=8rh0bmw8dccsi7aynl6zli8uf ji wêjeyê] li beşa maneyê. —[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:17, 16 tîrmeh 2026 (UTC)
== Bota Toolforgeê ==
Botekî Toolforgeê lazim e ji bo ku xeletiyên biçûk wekî şablonên bi navên îngilîzî werin kurdîkirin yan jî valahiya beşan rast bike û hwd.—[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:17, 16 tîrmeh 2026 (UTC)
:Min [[Bikarhêner:Wikihez/skrîpt/py/kuwiktkozmetik.py|paqijiyen kozmetîk]] hazir kir feqat hîn navên şablonan naguhêre. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 20:05, 4 tebax 2026 (UTC)
== Updatew ==
Bota [[Bikarhêner:Wikihez/skrîpt/py/updateW.py|updateW]] divê were rojanekirin. Yan jî yekî nû were çêkirin. Şablonên {{ş|W}} di beşa tercimeyan de sererast dike û zimanan rêz dike. Ya niha xeletiya navê zimanî dide.—[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:17, 16 tîrmeh 2026 (UTC)
== sihir --> sêhr ==
Tercimeyên ''[[sêhr]]'' hemû dibêje ''sihir'' loma bi botê lazim e kirin ''sêhr''. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 17:43, 18 tîrmeh 2026 (UTC)
:Sihirbaz --> sêhrbaz [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 18:07, 18 tîrmeh 2026 (UTC)
== Tercimeyên dîroknas ==
Li tercimeyên [[dîroknas]], hevmaneyên wê hewce ye were îlawekirin. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 18:44, 18 tîrmeh 2026 (UTC)
== Mewlûd ==
Sererastkirina jêgirtinên mewlûdê [https://ku.wiktionary.org/w/index.php?search=insource%3A%2Fw%5C%3AMela+His%C3%AAn%C3%AA+Batey%C3%AE%2F&title=Taybet%3AL%C3%AAger%C3%AEn&ns0=1&searchToken=8m0tguy3sqt7edr4sg0u8hedo] wekî [https://ku.wiktionary.org/w/index.php?title=dax%C3%AEdar&curid=284303&diff=6265851&oldid=6142285] [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 09:43, 20 tîrmeh 2026 (UTC)
fe1s5le6u8h8aw8wtr9fzsze867xfjd
6333697
6333696
2026-08-14T19:07:31Z
Ghybu
1393
/* MediaWiki:Gadget-start.js */
6333697
wikitext
text/x-wiki
{{/ser}}
= Karên ferhengî =
== Mane ==
* [[:Kategorî:Madeyên bê beşa mane]]
** [[:Kategorî:Madeyên bê beşa mane bi kurmancî]]
Li ser van rûpelan ev made hene ku maneyan wan nehatine nivîsin û divê werin nivîsin. —[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:17, 16 tîrmeh 2026 (UTC)
== Etîmolojî ==
*[[:Kategorî:Daxwazên etîmolojiyê]]
**[[:Kategorî:Daxwazên etîmolojiyê bi kurmancî]]
Li ser van rûpelan ev made hene ku etîmolojiya wan hîn nehatine nivîsin. Ji bo alîkariyê binêre [[WF:Etîmolojî]] —[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:17, 16 tîrmeh 2026 (UTC)
== Cureyê rêzimanî ==
* [[:Kategorî:Gotarên bê kategoriya rêzimanî]]
* [[:Kategorî:Gotarên bê kategoriya rêzimanî bi kurmancî]]
Li ser van rûpelan ev made hene ku cureyên wan yên rêzimanî hîn nehatine nivîsin. Ji bo alîkariyê binêre [[Alîkarî:Cureyên peyvan]] —[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:17, 16 tîrmeh 2026 (UTC)
== Kontrol ==
* [[:Kategorî:Kontrol]]
** [[:Kategorî:Kontrola maneyê]]
Ev madde bi botê hatine çêkirin, yek bi yek divê werin kontrolkirin. —[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:17, 16 tîrmeh 2026 (UTC)
= Şablon =
== IPA ==
* {{ş|IPA}} divê [[Modul:IPA]] bi kar bîne. —[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:17, 16 tîrmeh 2026 (UTC)
== Deng ==
Kurdîkirina belgekirina {{ş|deng}} lazim e.--[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 00:06, 19 tîrmeh 2026 (UTC)
= Modul =
== Modul:form of/templates ==
* [[Modul:form of/templates]]: Divê ev modul were rojanekirin û xeletiyên berê wekî ([[hevalê]]) werin rastkirin. —[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:17, 16 tîrmeh 2026 (UTC)
*:Merheba @[[Bikarhêner:Ghybu|Ghybu]] Te gotibû di vê modulê de xeletî hene, jkx tu dikarî li vir binivîsî çi kêmasî hene, daku wextê rojane dikim ez ji bîr nekim? [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:16, 21 tîrmeh 2026 (UTC)
*::Silav. Nizanim ji bîra min çûye... Herwiha ji bo çêkirina formên navdêran zanînên cîns û tîpa dawî bes e:
*::* (-ê, mê) => çemandî, bangkirin
*::* (-ê, nêr) => îzafe
*::* (-ê, mê û nêr) => îzafe (nêr), bangkirin (mê), çemandî (mê)
*::* (-a) => îzafe (mê)
*::* (-ekî) => îzafe û çemandî (nêr, nebinavkirî)
*::* (-eke) = > îzafe (mê, nebinavkirî)
*::* ...
*:: <code>if find(mw.title.getCurrentTitle().subpageText, 'ekî$') then ... end</code>
*::<code><nowiki>{{ku-tewîn-navForm|<navdêr>|<zayend>}</nowiki></code>
*::Tablo û nivîs di yekcarî de tên çêkirin...
*::Feqet problem lêzêdekirina mînakan e. [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 17:34, 21 tîrmeh 2026 (UTC)
*:::Lêzêdekirina kîjan nimûneyan? Ev koda js ji bo çi ye? Qisûrê nenêre min fêm nekir :/ [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 18:13, 21 tîrmeh 2026 (UTC)
*::::Li vira ([[hevalê#Formeke navdêrê]]) di bin maneyên 1. û 2. mînak nayên tevlî kirin :) [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 18:18, 21 tîrmeh 2026 (UTC)
*:::::Ev tercîh e, ne mecbûrî ye, em dikarin [https://ku.wiktionary.org/w/index.php?title=heval%C3%AA&diff=prev&oldid=6276350 wisa] bikin. Wekî din? [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 18:29, 21 tîrmeh 2026 (UTC)
*::::::Min li jor tênê got ku tenê parametreyên "navdêr" û "zayend" hewce nee. Bi '''[//ku.wiktionary.org/w/index.php?title=heval%C3%AA&curid=969734&diff=6276353&oldid=6276350 vî]''' awayî jî tê çêkirin. Parametreyên din ne hewce ne. [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 18:38, 21 tîrmeh 2026 (UTC)
*:::::::Ji bo wê şabloneke din lazim e, bila ev şablon wekî îngilîzî bimîne em ji bo kurmancî yekî din çêkin. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 18:42, 21 tîrmeh 2026 (UTC)
*::::::::[https://ku.wiktionary.org/w/index.php?title=heval%C3%AA&oldid=6276885 wisa] çawa ye? Bi min nivîsîna nimûneyan zêde ne lazim e ji ber ku ti kes serê xwe pê naêşîne. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 09:46, 23 tîrmeh 2026 (UTC)
*:::::::::@[[Bikarhêner:Ghybu|Ghybu]] Vê şablonê bi kar bînin an na? Navê şablonê kê çi be? [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 19:07, 24 tîrmeh 2026 (UTC)
== Modul:columns ==
* [[Modul:columns]] were rojanekirin û {{ş|kol3}} bila lînka ''nîşan bide'' deyne beriya sernavê, kolê di qutiya rengî de bila nebe. —[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:17, 16 tîrmeh 2026 (UTC)
== Modul:etymon ==
* [[Modul:etymon kevn]]: Rojanekirin hewce ye. —[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:17, 16 tîrmeh 2026 (UTC)
== [[Modul:ziman/code to canonical name]] ==
Belgekirina skrîptê û js divê were rastkirin. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 09:31, 22 tîrmeh 2026 (UTC)
:* [[MediaWiki:UpdateLanguageNameAndCode.js]]
:[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 09:50, 22 tîrmeh 2026 (UTC)
::* [[Modul:ziman/print]]
::[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 09:52, 22 tîrmeh 2026 (UTC)
:::*[[Modul:ziman/şablon]]
:::[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 09:56, 22 tîrmeh 2026 (UTC)
::::* [[MediaWiki:Gadget-translation editor.js/ziman.json]]
::::[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 11:06, 22 tîrmeh 2026 (UTC)
== [[Modul:quote]] ==
Piştî ev modul hate hazirkirin, lazim e navên jegirtinan werin rastkirin û li hemûyan {{param|jêgirtin}} were zêdekirin. Bnr. [[Gotûbêja şablonê:Jêgirtin/Ehmedê Xanî/Mem û Zîn]] [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 22:27, 5 tebax 2026 (UTC)
::Ev modul hema bêje hazir e. Hûn li ser van madeyan çi difikirin:
# {{para|tarîx}} lazim e full date be eger na, lazim e {{para|sal}} were bikaranîn. Feqat "'''2021''' kanûna pêşîn 23" bi vî şiklî bi min ne problem e çnkî derdê en.wikt "attestation" e delîla herî pêşî jî sal e.
#: {{demo|sep=wisa xuya dibe<br>|<nowiki>{{jêder-kitêb/ceribandin|en
|tarîx=23 December 2021|nivîskar=Harry Hobbs; George Williams|sernav=Micronations and the Search for Sovereignty|url=https://www.cambridge.org/core/books/micronations-and-the-search-for-sovereignty/B0414A3A322695D9EE71E4CDDFDA06DE|weşanxane=Cambridge University Press|rûpel=155|isbn=978-1-009-15012-5|jêgirtin=jêgirtin.|t=-}}</nowiki>}}
#{{para|amadekar}}/{{para|edîtor}}/{{para|terciman}} bi şiklê edîtoriya, amadekariya, tercimekirina
#: {{demo|sep=dide<br>|<nowiki>{{jêder-kitêb/ceribandin|en
|sernav=Medical Surgical Nursing|serî=Juta's Manual of Nursing|cildê-seriyê=volume 4|edîtor=Sophie Mataniele Mogotlane; Joyce Mokoena; Motshedisi Eunice Chauke; Anne Young|sal=2005|weşanxane=Juta Academic|isbn=978-0702171840|rûpel=!12-29|jêgirtin=jêgirtin|t=-}}</nowiki>}}
--[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 13:09, 10 tebax 2026 (UTC)
:@[[Bikarhêner:Bikarhêner|Bikarhêner]] û @[[Bikarhêner:Ghybu|Ghybu]] Hîn gelek tişt hene divê îzah bikin û fikrê we pirs bikim, feqat îzahkirin pir zor e, em dest bi bikaranînê bikin û dûre tiştên ku hûn naxwazin em dikarin biguherînîn, dibe? [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 13:11, 10 tebax 2026 (UTC)
::Dibe, piştî çêbû, em di praktîkê de bibînin ku çawa ye. -- [[Bikarhêner:Bikarhêner|Bikarhêner]] ([[Gotûbêja bikarhêner:Bikarhêner|gotûbêj]]) 18:05, 10 tebax 2026 (UTC)
= Javascript =
== [[Mediawiki:Gadget-citoid-helper.js]] ==
Ji bo bi citoidê kopîkirina malûmatên çavkaniyan amûreke wisa lazim e. Xisûsen ji ber ku bi çend amûrên din dikare were bikaranîn.
Feqat çend problem hene, şablonên me de kêmasiya parametreyan gelek in û xerîteyên citoidê hîn nehatine çêkirin. Wana sererast bikin dûre vê amûrê çêkin, piştre [[MediaWiki:Gadget-start.js|start.js]] û [[MediaWiki:Gadget-wikt.add-examples.js|add examples.js]] were rojanekirin.
- --[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 00:04, 19 tîrmeh 2026 (UTC)
:Merheba @[[Bikarhêner:Bikarhêner|Bikarhêner]], ez dibêjim karê Modul:quote zêde wext bistîne, bila em dest bi bikaranîna van amûran bikin dûre kêmasiyan em ê temam bikin înşela. Dikarî vana li cihên xwe yên rast kopî paste bikî?
# [[Special:PermanentLink/6291574|Bikarhêner:Wikihez/skrîpt/js/Gadget-citoid-helper.js]] --> [[Mediawiki:Gadget-citoid-helper.js]]
# Ya li jêr kopî bike qismê herî dawî ya AmûrênVeşartî li [[MediaWiki:Gadgets-definition]]:
## <code><nowiki>* citoid-helper[ResourceLoader|hidden|default|dependencies=mediawiki.util]|citoid-helper.js</nowiki></code>
--[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:58, 26 tîrmeh 2026 (UTC)
== [[MediaWiki:Gadget-start.js]] ==
Rojanekirin hewce ye. Min gelek tişt lê zêde kir lê ez niha test dikime. Piştre em bar bikin:
* [[Bikarhêner:Wikihez/Gadget-start.js]] --> [[MediaWiki:Gadget-start.js]]
* [[Bikarhêner:Wikihez/Gadget-start.css]] --> [[MediaWiki:Gadget-start.css]]
--[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 22:08, 17 tîrmeh 2026 (UTC)
:Min [[MediaWiki:Gadget-start/data.json|data.json]] çêkir ji bo ku bi hêsanî malûmatên heyî werin guhartin bêyî guhartina Javascriptê. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 19:49, 18 tîrmeh 2026 (UTC)
:Xeletiyên ku ji bîr nekim rast bikim:
:* Wextê min çavkanî "kitêb" hilbijart û bi destî tije kir xeletiyeke [https://ku.wiktionary.org/w/index.php?title=xezete&diff=prev&oldid=6265392 wisa] derket her kelîme hate lînkkirin.
:* <code>html("⠿")</code> ev ne lazim e.
:* textarea ji bo çavkaniyên jêgirtinan xaseten yên sernav hîn jî ne draggable e.
:* pêşdîtina zindî checkbox wextê tê rakirin, pêşdîtin winda nabe.
:* Butona mobîlê ya vekirina formê di moda tarî de belî nabe, tenê wekî qutiyeke tarî xuya dibe.
:* Metna hişyarkirinê di guhartina rûpelên heyî de lazim e baştir bikim.
:[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 23:51, 18 tîrmeh 2026 (UTC)
::Ev problem çêbûn, ez ê binêrim ka çi problemên din hene. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 14:15, 19 tîrmeh 2026 (UTC)
:::Çêke: Ji bo qismê çavkaniyê yek dikare API call û Kategorî:Çavkanî bi kar bîne ji bo ku şablon zêde bikî ji yên heyî. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 21:21, 19 tîrmeh 2026 (UTC)
::::Ev jî çêbû, min beşa çavkanî jî çêkir. Eger xeletî dernekeve û problema valahiya piştî etîketê ji bîr nekim, piştî rojanekirina amûrên linkify, û citoid em dikarin bar bikin. Ez ê ti tiştê nû îlawe nekim, zêde dirêj bû. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:14, 21 tîrmeh 2026 (UTC)
:::::Merheba @[[Bikarhêner:Bikarhêner|Bikarhêner]]. Dikarî wana bar bikî?
:::::* [[Bikarhêner:Wikihez/Gadget-start.js]] --> [[MediaWiki:Gadget-start.js]]
:::::* [[Bikarhêner:Wikihez/Gadget-start.css]] --> [[MediaWiki:Gadget-start.css]]
:::::* [[MediaWiki:Gadgets-definition]] wisa rojane bike:
:::::* start[ResourceLoader|default|package|dependencies=mediawiki.util,ext.gadget.StorageUtils,ext.gadget.citoid-helper]|start.js|start.css|start.js/data.json
:::::[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 09:39, 5 tebax 2026 (UTC)
{{şirove}} Dewama ''[[Special:PermanentLink/6333688|Gotûbêja bikarhêner:Rewiye tine#WF:Nû]]'' bila gotûbêja wî em spam nekin. :D
{{r|Ghybu}} dikarî [[Special:PermanentLink/6333689|vê htmlê]] binêrî claude rast fêm kiriye yan na? Daxîne û wek html qeyd bike. --[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 18:43, 14 tebax 2026 (UTC)
:Min seh wîkîyên din jî kir, li wîkiya fransî tiştekî wekî daxwaza min çêkirine (tiştên ku ne hewce ne wekî "tab" çêkirine an jî hatine vêşartin): [//fr.wiktionary.org/w/index.php?title=fdsdfdsf&action=edit&redlink=1]. Formata me yê berî jî bi vê lojîkê hatibû çêkirin, wekî de.wiktionary ([//de.wiktionary.org/w/index.php?title=sdfdsfsdfs&action=edit&preload=Vorlage:Formatvorlage_(Substantiv_vereinfacht)]) [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 19:01, 14 tebax 2026 (UTC)
== [[Mediawiki:Gadget-QQ.js]] ==
Ev amûr di şikle Minerva de. Her daîm vê xeletiyê dide:
<syntaxhighlight lang="js">
TypeError: Cannot read properties of null (reading 'addEventListener') at css () at runScript () at Array.<anonymous> () at flushCssBuffer ()
</syntaxhighlight> [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 19:29, 18 tîrmeh 2026 (UTC)
:* [[Bikarhêner:Wikihez/skrîpt/js/Gadget-QQ.js]] --> [[Mediawiki:Gadget-QQ.js]]
:* [[Bikarhêner:Wikihez/Gadget-QQ.css]] --> [[Mediawiki:Gadget-QQ.css]]
:Ez dibêjim çêbû lê ka çend roj biceribînim. Tiştên ku hatin sererastkirin:
:# Google Books API Key dikarî zêde bikî, dixe cookies û di gerokê de dimîne. Berê bê API Key dixebitiya lê êdî mecbûr e ku API Key-a te hebe, bidestxistina wê ne zêde zor e lê dîsa jî tevlihev e.
:# Êdî di mobîlê de dixebite, heta di mobîlê de xweştir xuya dike.
:# Moda tarî
:# OOUI dewsa jquery.ui
:# Li qutiyê çi dixwazî zêde bikî, dikare li gorî îsm, sifet, fiîl bitewîne. Lê ji bo fiîl tenê dikare çend heb inflection bîne.
:# Butona paqij bike lê zêde kir.
:# Çend paqijiyên jêgirtinên Google Kitêbê niha hene.
:[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 23:38, 18 tîrmeh 2026 (UTC)
::Tewandina fiîlan û xeletiya modulê lazim e were rastkirin. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 14:40, 21 tîrmeh 2026 (UTC)
== [[MediaWiki:Gadget-wikt.add-examples.js]] ==
Min ev amûr hinek rojane kir feqat çend problem hene berî ku bar bikin.
Tiştên ku min guhart:
# Êdî li sayfeyên bi {{ş|maneid}} jî dixebite,
# Cihê di wîkîtekstê de yê ku jêgirtin were îlawekirin baştir bû,
# [[Mediawiki:Gadget-citoid-helper.js|citoid helper]] zêde kir ji bo ku bi hêsanî çavkanî bi riya doi, isbn an urlyê werin tijîkirin.
* [[Bikarhêner:Wikihez/Gadget-wikt.add-examples.css]] --> [[MediaWiki:Gadget-wikt.add-examples.css]]
* [[Bikarhêner:Wikihez/Gadget-wikt.add-examples.js]] --> [[MediaWiki:Gadget-wikt.add-examples.js]]
- --[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 00:50, 19 tîrmeh 2026 (UTC)
:Min "wikt." qismên cache kirinê ya wîkiya fransî bi [[MediaWiki:Gadget-StorageUtils.js]] guhartiye. loma ji bîr nekin wê amûrê li [[MediaWiki:Gadgets-definition]] zêde bikin. û navê amûrê jî biguhêrînin. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 09:15, 23 tîrmeh 2026 (UTC)
::Berê li ser WF:ceribandin dixebitî. niha naxebite. Divê were rastkirin. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 22:10, 7 tebax 2026 (UTC)
== Gadget-translation editor ==
* [[MediaWiki:Gadget-translation editor.js]]: divê formata en.wîktê were bikaranîn ji ber ku me gelek tercime ji en.wîktê kopî kir û ev js hîn nikare formata wekî li jêr bi kar bîne.
<syntaxhighlight lang="wikitext">
* {{Z|sh}}:
*: Kirîlî:
*: Latînî
</syntaxhighlight>
—[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:17, 16 tîrmeh 2026 (UTC)
== [[Mediawiki:Gadget-linkify.js]] ==
* ''rûpeleke'' wekî<syntaxhighlight lang="wikitext">[[rûpeleke]]</syntaxhighlight> lînk dike, bi regexê belkî dikare wisa bike <syntaxhighlight lang="wikitext">[[rûpel]]eke</syntaxhighlight>
—[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:17, 16 tîrmeh 2026 (UTC)
* Amûreke din wekî [[User:Wikihez/Gadget-linkify.js|linkify]] lazim e ku herfên mezin biçûk bike ji bo kurmancî.—[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:17, 16 tîrmeh 2026 (UTC)
:{{r|Bikarhêner}} Merheba bira, dikarî viya jî bar bikî?:
* [[Special:PermanentLink/6291974|linkify]] --> [[Mediawiki:Gadget-linkify.js]]
Spas--[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 11:42, 29 tîrmeh 2026 (UTC)
:Dûre [https://ku.wiktionary.org/wiki/MediaWiki:Gadget-start.js#L-283 li vir] wiktviLinkify bike kuLinkify xêra xwe [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 11:51, 29 tîrmeh 2026 (UTC)
::Min ji bîr kir lê zêde bikim niha nikare "Dİ" bike "di", xeletiyeke berbelav a di nivîsên kurdî de, herfên din ên wekî ll yan rr jî hewce ne werin zêdekirin. Dûre em zêde bikin. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 21:42, 29 tîrmeh 2026 (UTC)
:::Min nû ferq kir, sayfeyên ku hîn nehatine çêkirin wîkîlînk nake. Problemeke mezin e divê were rastkirin. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 18:15, 30 tîrmeh 2026 (UTC)
::::Na, lînk dike, tiştekî din heye... [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 10:49, 31 tîrmeh 2026 (UTC)
== Amûra manayê ==
Amûreke din ji bo nivîsina maneyê wekî Nimûne zêde bike lazim e [https://ku.wiktionary.org/w/index.php?title=Bikarh%C3%AAner:Wikihez/test.js&oldid=6276876 js] [https://ku.wiktionary.org/w/index.php?title=%C5%9Eablon:ceribandin2&oldid=6265629 şablon] [https://ku.wiktionary.org/w/index.php?title=Bikarh%C3%AAner:Wikihez/common.css&oldid=6265642 css] --[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 09:12, 23 tîrmeh 2026 (UTC)
== [[MediaWiki:Gadget-jeder.js]] ==
@[[Bikarhêner:Ghybu|Ghybu]] Çavkaniyên jêderê di moda pêşdîtinê de jêderê vedişêre, ew jî min gelek eciz dike wextê çavkanî zêde dikim. Min ji Claude pirsî û kodan nîşanî wê da, wisa cewab da:
Yes — and this file actually explains the whole thing precisely, better than my earlier guess about extract-stripping.
What's happening: the CSS rule
<syntaxhighlight lang="css">
.jeder{
display:none;
}
</syntaxhighlight>
hides every citation by default, *unconditionally*. The only thing that ever makes it visible again is the gadget's JS: it finds each `.jeder`, builds the short "`— (year, author, +)`" summary from the `.j-pewist` fields, and either reveals the short version or — for citations with no `.j-pewist` fields — explicitly sets `display:inline` on the original.
So visibility of citations depends entirely on this JS running. In the normal article view (Image 1) it runs, so you see the collapsed "`(1918, E. Rehmî Ji Mala Hekariyan, Amadekar: M. E. Bozarslan, +)`" form. In whatever generated Image 2 — a hover-preview/extract/API render — gadget JS doesn't execute, so nothing ever removes the `display:none`, and the citation vanishes completely rather than degrading to "still visible, just not collapsed."
<b>The fix:</b> flip the default so the *un-collapsed* state is the safe fallback, and let JS do the hiding only after it successfully builds the short version. That way, any context without JS shows the full citation instead of nothing.
CSS — remove the blanket hide:
<syntaxhighlight lang="css">
.jeder {
/* intentionally no display:none here — see Gadget-... .js */
}
</syntaxhighlight>
JS — do the hiding from script, after the short form exists:
{{veşêre-ser}}
<syntaxhighlight lang="js">
// Ji bo şablonên [[Şablon:jêder]] hatiye nivîsandin.
// Parametreyên ku di navbera "<span class="j-pewist">...</span>" an "{{j-pêwîst|...}}" de ne venaşêre.
$(function() {
function nivisaKurtTevliBike(sund, nivisKurt) {
var zede = $('<a>+</a>')
.addClass('click')
.attr('href', '#')
.attr('title', 'zêdetir')
.css('font-weight', 'bold');
var kurt = $(' <a>↩</a>')
.addClass('click-kurt')
.attr('href', '#')
.attr('title', 'veşêre')
.css('font-weight', 'bold');
$('<span>' + nivisKurt + '</span>')
.append(zede).append(')')
.addClass('jeder-kurt')
.css('font-size', '0.85em')
.insertAfter(sund);
sund.append(' ').append(kurt);
// Only hide the full citation once the short summary actually exists.
// If this script never runs (no-JS clients, hover-preview extracts,
// action=render, etc.), the full citation stays visible instead of
// silently disappearing.
sund.css('display', 'none');
}
function vesere() {
$('.jeder').each(function() {
var elmTab = $(this).find('.j-pewist').clone();
if (elmTab.length) {
var elm = '';
for (var i = elmTab.length - 1; i >= 0; i--) {
elm = elmTab.eq(i).html() + ', ' + elm;
}
var nivisKurt = ' — (' + elm;
nivisaKurtTevliBike($(this), nivisKurt);
}
// else: no j-pewist fields to shorten — leave the full citation
// as it already renders (visible), nothing to do.
});
}
vesere();
$(".click").click(function(e) {
e.preventDefault();
$(this).parent('.jeder-kurt').css('display', 'none');
$(this).parent('.jeder-kurt').prev().css('display', 'inline');
});
$(".click-kurt").click(function(e) {
e.preventDefault();
$(this).parent('.jeder').css('display', 'none');
$(this).parent('.jeder').next().css('display', 'inline');
});
});
</syntaxhighlight>
Net effect:
- JS-enabled readers (normal article view): identical experience to today — collapsed short form with `+`/`↩` toggle.
- No-JS contexts (previews, extracts, screen readers before JS loads, print, etc.): full citation is shown instead of nothing — a real regression fix rather than a cosmetic one.
One caveat worth being upfront about: this fixes it *if* the preview context renders the gadget's HTML/CSS but doesn't execute gadget JS (which is the far more common case, and what this code strongly suggests is happening). If Image 2 instead comes from a pipeline that strips the `.jeder`/`.jegirtin-text` elements out of the HTML entirely before this CSS/JS even gets a chance to apply, no on-wiki CSS/JS change can help — that'd need the extract-generation config changed instead. Given what this gadget file shows, though, I'd bet on the CSS-hide explanation.
{{veşêre-bin}}
Em dûre biceribînin eger xeletî tinebe, vî tiştî jî rast bikin. --[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 20:00, 23 tîrmeh 2026 (UTC)
:Ez APIya MediaWiki rind nizanim belkî Claude dizane:) Em nikarin bibêjin dema ku moda "''action=edit''" e fonksiyona <code>function vesere()</code> bi kar meyîne. [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 15:57, 24 tîrmeh 2026 (UTC)
::Na, di moda "edît"-ê de <code>var elmTab = null</code>... [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 16:13, 24 tîrmeh 2026 (UTC)
?:
<syntaxhighlight lang="js">
if (
mw.config.get('wgAction') === 'edit' ||
mw.config.get('wgAction') === 'submit'
){
var elmTab = [];
} else {
var elmTab = $(this).find('.j-pewist').clone();
}
</syntaxhighlight>
--[[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 16:31, 24 tîrmeh 2026 (UTC)
:Ez jî nizanim Claude çiqas ji mediawiki fêm dike lê heta niha ti tişt nîne ku min jê pirs kir û nikaribû çêke, bila wekî reklam nebe feqat Claude mikemmel e, dibêjim "li vir çima xeletiyeke wisa derdikeve" di dosyeya 2000 rêzî de diçe tiştê xelet tenê rast dike tiştekî din naguherîne. Chatgpt û aistudio qet wisa nakin, eynî dosyeyê deh cara dinivîsin, deh netîceyên cuda derdikevin :D
:Em dikarin vê amûrê wextê edit û submitê neaktîv bikin wekî <syntaxhighlight lang="js">if (!(action === "edit" || action === "submit")) {
:return;</syntaxhighlight> lê wê demê display:none wê çibe nizanim. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 18:23, 24 tîrmeh 2026 (UTC)
::display:none ne hewce ye ma jixwe di nav kodê [https://ku.wiktionary.org/w/index.php?title=MediaWiki:Gadget-jeder.js&oldid=6069025#L-49 L-49] de inline/none heye? [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 18:53, 24 tîrmeh 2026 (UTC)
:Min bi vî şiklî [https://ku.wiktionary.org/w/index.php?title=Bikarh%C3%AAner:Wikihez/vector-2022.js&diff=prev&oldid=6290816#L-28] ceriband feqat nexebitî. "display:none" di pêşdîtinê de dixebite feqat js naşixule. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 14:43, 25 tîrmeh 2026 (UTC)
::Kodên JSê pir hez nakim (pêşta hukurina APIya MWyê hewce bû) dîsa jî ez ê seh bikim :) [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 16:49, 27 tîrmeh 2026 (UTC)
:::Ez niha bi vî şiklî [https://ku.wiktionary.org/w/index.php?title=Bikarh%C3%AAner:Wikihez/test.js&oldid=6290820] [https://ku.wiktionary.org/w/index.php?title=Bikarh%C3%AAner:Wikihez/common.css&oldid=6290821#L-8] bi kar tînim ti problem nîne. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 17:09, 27 tîrmeh 2026 (UTC)
== [[MediaWiki:Gadget-PagePreviews.js]] ==
Ez dibêjim em vê amûrê jî çêkin [[:en:MediaWiki:Gadget-PagePreviews.js]] --[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 10:56, 3 tebax 2026 (UTC)
= Moda tarî =
== [[Şablon:wîkîpediya]] ==
Rengê tarî de xirab e.--[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 19:36, 4 tebax 2026 (UTC)
= Bot =
Karên ku bi botê werin çêkirin ji kerema xwe li vir binivîsin.
== Kategorî:Biwêj ==
[[:Kategorî:Biwêj]] divê were paqijkirin, lîsteya madeyên {{ş|biwêj}} çêke, yên ku tê de bûn, kirin, man hene filtre bike yên din bi destî tê çêkirin.—[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:17, 16 tîrmeh 2026 (UTC)
== Jêgirtin ==
Xistina jêgirtinên beşa [https://ku.wiktionary.org/w/index.php?search=insource%3A%2F%3D+*Ji+%5BWw%5D%C3%AAjey%C3%AA+*%3D%2F&title=Taybet%3AL%C3%AAger%C3%AEn&profile=advanced&fulltext=1&ns0=1&searchToken=8rh0bmw8dccsi7aynl6zli8uf ji wêjeyê] li beşa maneyê. —[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:17, 16 tîrmeh 2026 (UTC)
== Bota Toolforgeê ==
Botekî Toolforgeê lazim e ji bo ku xeletiyên biçûk wekî şablonên bi navên îngilîzî werin kurdîkirin yan jî valahiya beşan rast bike û hwd.—[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:17, 16 tîrmeh 2026 (UTC)
:Min [[Bikarhêner:Wikihez/skrîpt/py/kuwiktkozmetik.py|paqijiyen kozmetîk]] hazir kir feqat hîn navên şablonan naguhêre. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 20:05, 4 tebax 2026 (UTC)
== Updatew ==
Bota [[Bikarhêner:Wikihez/skrîpt/py/updateW.py|updateW]] divê were rojanekirin. Yan jî yekî nû were çêkirin. Şablonên {{ş|W}} di beşa tercimeyan de sererast dike û zimanan rêz dike. Ya niha xeletiya navê zimanî dide.—[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:17, 16 tîrmeh 2026 (UTC)
== sihir --> sêhr ==
Tercimeyên ''[[sêhr]]'' hemû dibêje ''sihir'' loma bi botê lazim e kirin ''sêhr''. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 17:43, 18 tîrmeh 2026 (UTC)
:Sihirbaz --> sêhrbaz [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 18:07, 18 tîrmeh 2026 (UTC)
== Tercimeyên dîroknas ==
Li tercimeyên [[dîroknas]], hevmaneyên wê hewce ye were îlawekirin. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 18:44, 18 tîrmeh 2026 (UTC)
== Mewlûd ==
Sererastkirina jêgirtinên mewlûdê [https://ku.wiktionary.org/w/index.php?search=insource%3A%2Fw%5C%3AMela+His%C3%AAn%C3%AA+Batey%C3%AE%2F&title=Taybet%3AL%C3%AAger%C3%AEn&ns0=1&searchToken=8m0tguy3sqt7edr4sg0u8hedo] wekî [https://ku.wiktionary.org/w/index.php?title=dax%C3%AEdar&curid=284303&diff=6265851&oldid=6142285] [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 09:43, 20 tîrmeh 2026 (UTC)
9x0hjrv5kq8kfx07r7xwdydqpffj3gv
6333701
6333697
2026-08-14T19:17:36Z
Ghybu
1393
/* MediaWiki:Gadget-start.js */ Bersiv
6333701
wikitext
text/x-wiki
{{/ser}}
= Karên ferhengî =
== Mane ==
* [[:Kategorî:Madeyên bê beşa mane]]
** [[:Kategorî:Madeyên bê beşa mane bi kurmancî]]
Li ser van rûpelan ev made hene ku maneyan wan nehatine nivîsin û divê werin nivîsin. —[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:17, 16 tîrmeh 2026 (UTC)
== Etîmolojî ==
*[[:Kategorî:Daxwazên etîmolojiyê]]
**[[:Kategorî:Daxwazên etîmolojiyê bi kurmancî]]
Li ser van rûpelan ev made hene ku etîmolojiya wan hîn nehatine nivîsin. Ji bo alîkariyê binêre [[WF:Etîmolojî]] —[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:17, 16 tîrmeh 2026 (UTC)
== Cureyê rêzimanî ==
* [[:Kategorî:Gotarên bê kategoriya rêzimanî]]
* [[:Kategorî:Gotarên bê kategoriya rêzimanî bi kurmancî]]
Li ser van rûpelan ev made hene ku cureyên wan yên rêzimanî hîn nehatine nivîsin. Ji bo alîkariyê binêre [[Alîkarî:Cureyên peyvan]] —[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:17, 16 tîrmeh 2026 (UTC)
== Kontrol ==
* [[:Kategorî:Kontrol]]
** [[:Kategorî:Kontrola maneyê]]
Ev madde bi botê hatine çêkirin, yek bi yek divê werin kontrolkirin. —[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:17, 16 tîrmeh 2026 (UTC)
= Şablon =
== IPA ==
* {{ş|IPA}} divê [[Modul:IPA]] bi kar bîne. —[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:17, 16 tîrmeh 2026 (UTC)
== Deng ==
Kurdîkirina belgekirina {{ş|deng}} lazim e.--[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 00:06, 19 tîrmeh 2026 (UTC)
= Modul =
== Modul:form of/templates ==
* [[Modul:form of/templates]]: Divê ev modul were rojanekirin û xeletiyên berê wekî ([[hevalê]]) werin rastkirin. —[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:17, 16 tîrmeh 2026 (UTC)
*:Merheba @[[Bikarhêner:Ghybu|Ghybu]] Te gotibû di vê modulê de xeletî hene, jkx tu dikarî li vir binivîsî çi kêmasî hene, daku wextê rojane dikim ez ji bîr nekim? [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:16, 21 tîrmeh 2026 (UTC)
*::Silav. Nizanim ji bîra min çûye... Herwiha ji bo çêkirina formên navdêran zanînên cîns û tîpa dawî bes e:
*::* (-ê, mê) => çemandî, bangkirin
*::* (-ê, nêr) => îzafe
*::* (-ê, mê û nêr) => îzafe (nêr), bangkirin (mê), çemandî (mê)
*::* (-a) => îzafe (mê)
*::* (-ekî) => îzafe û çemandî (nêr, nebinavkirî)
*::* (-eke) = > îzafe (mê, nebinavkirî)
*::* ...
*:: <code>if find(mw.title.getCurrentTitle().subpageText, 'ekî$') then ... end</code>
*::<code><nowiki>{{ku-tewîn-navForm|<navdêr>|<zayend>}</nowiki></code>
*::Tablo û nivîs di yekcarî de tên çêkirin...
*::Feqet problem lêzêdekirina mînakan e. [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 17:34, 21 tîrmeh 2026 (UTC)
*:::Lêzêdekirina kîjan nimûneyan? Ev koda js ji bo çi ye? Qisûrê nenêre min fêm nekir :/ [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 18:13, 21 tîrmeh 2026 (UTC)
*::::Li vira ([[hevalê#Formeke navdêrê]]) di bin maneyên 1. û 2. mînak nayên tevlî kirin :) [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 18:18, 21 tîrmeh 2026 (UTC)
*:::::Ev tercîh e, ne mecbûrî ye, em dikarin [https://ku.wiktionary.org/w/index.php?title=heval%C3%AA&diff=prev&oldid=6276350 wisa] bikin. Wekî din? [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 18:29, 21 tîrmeh 2026 (UTC)
*::::::Min li jor tênê got ku tenê parametreyên "navdêr" û "zayend" hewce nee. Bi '''[//ku.wiktionary.org/w/index.php?title=heval%C3%AA&curid=969734&diff=6276353&oldid=6276350 vî]''' awayî jî tê çêkirin. Parametreyên din ne hewce ne. [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 18:38, 21 tîrmeh 2026 (UTC)
*:::::::Ji bo wê şabloneke din lazim e, bila ev şablon wekî îngilîzî bimîne em ji bo kurmancî yekî din çêkin. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 18:42, 21 tîrmeh 2026 (UTC)
*::::::::[https://ku.wiktionary.org/w/index.php?title=heval%C3%AA&oldid=6276885 wisa] çawa ye? Bi min nivîsîna nimûneyan zêde ne lazim e ji ber ku ti kes serê xwe pê naêşîne. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 09:46, 23 tîrmeh 2026 (UTC)
*:::::::::@[[Bikarhêner:Ghybu|Ghybu]] Vê şablonê bi kar bînin an na? Navê şablonê kê çi be? [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 19:07, 24 tîrmeh 2026 (UTC)
== Modul:columns ==
* [[Modul:columns]] were rojanekirin û {{ş|kol3}} bila lînka ''nîşan bide'' deyne beriya sernavê, kolê di qutiya rengî de bila nebe. —[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:17, 16 tîrmeh 2026 (UTC)
== Modul:etymon ==
* [[Modul:etymon kevn]]: Rojanekirin hewce ye. —[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:17, 16 tîrmeh 2026 (UTC)
== [[Modul:ziman/code to canonical name]] ==
Belgekirina skrîptê û js divê were rastkirin. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 09:31, 22 tîrmeh 2026 (UTC)
:* [[MediaWiki:UpdateLanguageNameAndCode.js]]
:[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 09:50, 22 tîrmeh 2026 (UTC)
::* [[Modul:ziman/print]]
::[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 09:52, 22 tîrmeh 2026 (UTC)
:::*[[Modul:ziman/şablon]]
:::[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 09:56, 22 tîrmeh 2026 (UTC)
::::* [[MediaWiki:Gadget-translation editor.js/ziman.json]]
::::[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 11:06, 22 tîrmeh 2026 (UTC)
== [[Modul:quote]] ==
Piştî ev modul hate hazirkirin, lazim e navên jegirtinan werin rastkirin û li hemûyan {{param|jêgirtin}} were zêdekirin. Bnr. [[Gotûbêja şablonê:Jêgirtin/Ehmedê Xanî/Mem û Zîn]] [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 22:27, 5 tebax 2026 (UTC)
::Ev modul hema bêje hazir e. Hûn li ser van madeyan çi difikirin:
# {{para|tarîx}} lazim e full date be eger na, lazim e {{para|sal}} were bikaranîn. Feqat "'''2021''' kanûna pêşîn 23" bi vî şiklî bi min ne problem e çnkî derdê en.wikt "attestation" e delîla herî pêşî jî sal e.
#: {{demo|sep=wisa xuya dibe<br>|<nowiki>{{jêder-kitêb/ceribandin|en
|tarîx=23 December 2021|nivîskar=Harry Hobbs; George Williams|sernav=Micronations and the Search for Sovereignty|url=https://www.cambridge.org/core/books/micronations-and-the-search-for-sovereignty/B0414A3A322695D9EE71E4CDDFDA06DE|weşanxane=Cambridge University Press|rûpel=155|isbn=978-1-009-15012-5|jêgirtin=jêgirtin.|t=-}}</nowiki>}}
#{{para|amadekar}}/{{para|edîtor}}/{{para|terciman}} bi şiklê edîtoriya, amadekariya, tercimekirina
#: {{demo|sep=dide<br>|<nowiki>{{jêder-kitêb/ceribandin|en
|sernav=Medical Surgical Nursing|serî=Juta's Manual of Nursing|cildê-seriyê=volume 4|edîtor=Sophie Mataniele Mogotlane; Joyce Mokoena; Motshedisi Eunice Chauke; Anne Young|sal=2005|weşanxane=Juta Academic|isbn=978-0702171840|rûpel=!12-29|jêgirtin=jêgirtin|t=-}}</nowiki>}}
--[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 13:09, 10 tebax 2026 (UTC)
:@[[Bikarhêner:Bikarhêner|Bikarhêner]] û @[[Bikarhêner:Ghybu|Ghybu]] Hîn gelek tişt hene divê îzah bikin û fikrê we pirs bikim, feqat îzahkirin pir zor e, em dest bi bikaranînê bikin û dûre tiştên ku hûn naxwazin em dikarin biguherînîn, dibe? [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 13:11, 10 tebax 2026 (UTC)
::Dibe, piştî çêbû, em di praktîkê de bibînin ku çawa ye. -- [[Bikarhêner:Bikarhêner|Bikarhêner]] ([[Gotûbêja bikarhêner:Bikarhêner|gotûbêj]]) 18:05, 10 tebax 2026 (UTC)
= Javascript =
== [[Mediawiki:Gadget-citoid-helper.js]] ==
Ji bo bi citoidê kopîkirina malûmatên çavkaniyan amûreke wisa lazim e. Xisûsen ji ber ku bi çend amûrên din dikare were bikaranîn.
Feqat çend problem hene, şablonên me de kêmasiya parametreyan gelek in û xerîteyên citoidê hîn nehatine çêkirin. Wana sererast bikin dûre vê amûrê çêkin, piştre [[MediaWiki:Gadget-start.js|start.js]] û [[MediaWiki:Gadget-wikt.add-examples.js|add examples.js]] were rojanekirin.
- --[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 00:04, 19 tîrmeh 2026 (UTC)
:Merheba @[[Bikarhêner:Bikarhêner|Bikarhêner]], ez dibêjim karê Modul:quote zêde wext bistîne, bila em dest bi bikaranîna van amûran bikin dûre kêmasiyan em ê temam bikin înşela. Dikarî vana li cihên xwe yên rast kopî paste bikî?
# [[Special:PermanentLink/6291574|Bikarhêner:Wikihez/skrîpt/js/Gadget-citoid-helper.js]] --> [[Mediawiki:Gadget-citoid-helper.js]]
# Ya li jêr kopî bike qismê herî dawî ya AmûrênVeşartî li [[MediaWiki:Gadgets-definition]]:
## <code><nowiki>* citoid-helper[ResourceLoader|hidden|default|dependencies=mediawiki.util]|citoid-helper.js</nowiki></code>
--[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:58, 26 tîrmeh 2026 (UTC)
== [[MediaWiki:Gadget-start.js]] ==
Rojanekirin hewce ye. Min gelek tişt lê zêde kir lê ez niha test dikime. Piştre em bar bikin:
* [[Bikarhêner:Wikihez/Gadget-start.js]] --> [[MediaWiki:Gadget-start.js]]
* [[Bikarhêner:Wikihez/Gadget-start.css]] --> [[MediaWiki:Gadget-start.css]]
--[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 22:08, 17 tîrmeh 2026 (UTC)
:Min [[MediaWiki:Gadget-start/data.json|data.json]] çêkir ji bo ku bi hêsanî malûmatên heyî werin guhartin bêyî guhartina Javascriptê. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 19:49, 18 tîrmeh 2026 (UTC)
:Xeletiyên ku ji bîr nekim rast bikim:
:* Wextê min çavkanî "kitêb" hilbijart û bi destî tije kir xeletiyeke [https://ku.wiktionary.org/w/index.php?title=xezete&diff=prev&oldid=6265392 wisa] derket her kelîme hate lînkkirin.
:* <code>html("⠿")</code> ev ne lazim e.
:* textarea ji bo çavkaniyên jêgirtinan xaseten yên sernav hîn jî ne draggable e.
:* pêşdîtina zindî checkbox wextê tê rakirin, pêşdîtin winda nabe.
:* Butona mobîlê ya vekirina formê di moda tarî de belî nabe, tenê wekî qutiyeke tarî xuya dibe.
:* Metna hişyarkirinê di guhartina rûpelên heyî de lazim e baştir bikim.
:[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 23:51, 18 tîrmeh 2026 (UTC)
::Ev problem çêbûn, ez ê binêrim ka çi problemên din hene. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 14:15, 19 tîrmeh 2026 (UTC)
:::Çêke: Ji bo qismê çavkaniyê yek dikare API call û Kategorî:Çavkanî bi kar bîne ji bo ku şablon zêde bikî ji yên heyî. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 21:21, 19 tîrmeh 2026 (UTC)
::::Ev jî çêbû, min beşa çavkanî jî çêkir. Eger xeletî dernekeve û problema valahiya piştî etîketê ji bîr nekim, piştî rojanekirina amûrên linkify, û citoid em dikarin bar bikin. Ez ê ti tiştê nû îlawe nekim, zêde dirêj bû. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:14, 21 tîrmeh 2026 (UTC)
:::::Merheba @[[Bikarhêner:Bikarhêner|Bikarhêner]]. Dikarî wana bar bikî?
:::::* [[Bikarhêner:Wikihez/Gadget-start.js]] --> [[MediaWiki:Gadget-start.js]]
:::::* [[Bikarhêner:Wikihez/Gadget-start.css]] --> [[MediaWiki:Gadget-start.css]]
:::::* [[MediaWiki:Gadgets-definition]] wisa rojane bike:
:::::* start[ResourceLoader|default|package|dependencies=mediawiki.util,ext.gadget.StorageUtils,ext.gadget.citoid-helper]|start.js|start.css|start.js/data.json
:::::[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 09:39, 5 tebax 2026 (UTC)
{{şirove}} Dewama ''[[Special:PermanentLink/6333688|Gotûbêja bikarhêner:Rewiye tine#WF:Nû]]'' bila gotûbêja wî em spam nekin. :D
{{r|Ghybu}} dikarî [[Special:PermanentLink/6333689|vê htmlê]] binêrî claude rast fêm kiriye yan na? Daxîne û wek html qeyd bike. --[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 18:43, 14 tebax 2026 (UTC)
:Min seh wîkîyên din jî kir, li wîkiya fransî tiştekî wekî daxwaza min çêkirine (tiştên ku ne hewce ne wekî "tab" çêkirine an jî hatine vêşartin): [//fr.wiktionary.org/w/index.php?title=fdsdfdsf&action=edit&redlink=1]. Formata me yê berî jî bi vê lojîkê hatibû çêkirin, wekî de.wiktionary ([//de.wiktionary.org/w/index.php?title=sdfdsfsdfs&action=edit&preload=Vorlage:Formatvorlage_(Substantiv_vereinfacht)]) [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 19:01, 14 tebax 2026 (UTC)
::PS: Dîsa jî Claude min rind fêm kiriye :)) [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 19:17, 14 tebax 2026 (UTC)
== [[Mediawiki:Gadget-QQ.js]] ==
Ev amûr di şikle Minerva de. Her daîm vê xeletiyê dide:
<syntaxhighlight lang="js">
TypeError: Cannot read properties of null (reading 'addEventListener') at css () at runScript () at Array.<anonymous> () at flushCssBuffer ()
</syntaxhighlight> [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 19:29, 18 tîrmeh 2026 (UTC)
:* [[Bikarhêner:Wikihez/skrîpt/js/Gadget-QQ.js]] --> [[Mediawiki:Gadget-QQ.js]]
:* [[Bikarhêner:Wikihez/Gadget-QQ.css]] --> [[Mediawiki:Gadget-QQ.css]]
:Ez dibêjim çêbû lê ka çend roj biceribînim. Tiştên ku hatin sererastkirin:
:# Google Books API Key dikarî zêde bikî, dixe cookies û di gerokê de dimîne. Berê bê API Key dixebitiya lê êdî mecbûr e ku API Key-a te hebe, bidestxistina wê ne zêde zor e lê dîsa jî tevlihev e.
:# Êdî di mobîlê de dixebite, heta di mobîlê de xweştir xuya dike.
:# Moda tarî
:# OOUI dewsa jquery.ui
:# Li qutiyê çi dixwazî zêde bikî, dikare li gorî îsm, sifet, fiîl bitewîne. Lê ji bo fiîl tenê dikare çend heb inflection bîne.
:# Butona paqij bike lê zêde kir.
:# Çend paqijiyên jêgirtinên Google Kitêbê niha hene.
:[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 23:38, 18 tîrmeh 2026 (UTC)
::Tewandina fiîlan û xeletiya modulê lazim e were rastkirin. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 14:40, 21 tîrmeh 2026 (UTC)
== [[MediaWiki:Gadget-wikt.add-examples.js]] ==
Min ev amûr hinek rojane kir feqat çend problem hene berî ku bar bikin.
Tiştên ku min guhart:
# Êdî li sayfeyên bi {{ş|maneid}} jî dixebite,
# Cihê di wîkîtekstê de yê ku jêgirtin were îlawekirin baştir bû,
# [[Mediawiki:Gadget-citoid-helper.js|citoid helper]] zêde kir ji bo ku bi hêsanî çavkanî bi riya doi, isbn an urlyê werin tijîkirin.
* [[Bikarhêner:Wikihez/Gadget-wikt.add-examples.css]] --> [[MediaWiki:Gadget-wikt.add-examples.css]]
* [[Bikarhêner:Wikihez/Gadget-wikt.add-examples.js]] --> [[MediaWiki:Gadget-wikt.add-examples.js]]
- --[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 00:50, 19 tîrmeh 2026 (UTC)
:Min "wikt." qismên cache kirinê ya wîkiya fransî bi [[MediaWiki:Gadget-StorageUtils.js]] guhartiye. loma ji bîr nekin wê amûrê li [[MediaWiki:Gadgets-definition]] zêde bikin. û navê amûrê jî biguhêrînin. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 09:15, 23 tîrmeh 2026 (UTC)
::Berê li ser WF:ceribandin dixebitî. niha naxebite. Divê were rastkirin. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 22:10, 7 tebax 2026 (UTC)
== Gadget-translation editor ==
* [[MediaWiki:Gadget-translation editor.js]]: divê formata en.wîktê were bikaranîn ji ber ku me gelek tercime ji en.wîktê kopî kir û ev js hîn nikare formata wekî li jêr bi kar bîne.
<syntaxhighlight lang="wikitext">
* {{Z|sh}}:
*: Kirîlî:
*: Latînî
</syntaxhighlight>
—[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:17, 16 tîrmeh 2026 (UTC)
== [[Mediawiki:Gadget-linkify.js]] ==
* ''rûpeleke'' wekî<syntaxhighlight lang="wikitext">[[rûpeleke]]</syntaxhighlight> lînk dike, bi regexê belkî dikare wisa bike <syntaxhighlight lang="wikitext">[[rûpel]]eke</syntaxhighlight>
—[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:17, 16 tîrmeh 2026 (UTC)
* Amûreke din wekî [[User:Wikihez/Gadget-linkify.js|linkify]] lazim e ku herfên mezin biçûk bike ji bo kurmancî.—[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:17, 16 tîrmeh 2026 (UTC)
:{{r|Bikarhêner}} Merheba bira, dikarî viya jî bar bikî?:
* [[Special:PermanentLink/6291974|linkify]] --> [[Mediawiki:Gadget-linkify.js]]
Spas--[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 11:42, 29 tîrmeh 2026 (UTC)
:Dûre [https://ku.wiktionary.org/wiki/MediaWiki:Gadget-start.js#L-283 li vir] wiktviLinkify bike kuLinkify xêra xwe [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 11:51, 29 tîrmeh 2026 (UTC)
::Min ji bîr kir lê zêde bikim niha nikare "Dİ" bike "di", xeletiyeke berbelav a di nivîsên kurdî de, herfên din ên wekî ll yan rr jî hewce ne werin zêdekirin. Dûre em zêde bikin. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 21:42, 29 tîrmeh 2026 (UTC)
:::Min nû ferq kir, sayfeyên ku hîn nehatine çêkirin wîkîlînk nake. Problemeke mezin e divê were rastkirin. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 18:15, 30 tîrmeh 2026 (UTC)
::::Na, lînk dike, tiştekî din heye... [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 10:49, 31 tîrmeh 2026 (UTC)
== Amûra manayê ==
Amûreke din ji bo nivîsina maneyê wekî Nimûne zêde bike lazim e [https://ku.wiktionary.org/w/index.php?title=Bikarh%C3%AAner:Wikihez/test.js&oldid=6276876 js] [https://ku.wiktionary.org/w/index.php?title=%C5%9Eablon:ceribandin2&oldid=6265629 şablon] [https://ku.wiktionary.org/w/index.php?title=Bikarh%C3%AAner:Wikihez/common.css&oldid=6265642 css] --[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 09:12, 23 tîrmeh 2026 (UTC)
== [[MediaWiki:Gadget-jeder.js]] ==
@[[Bikarhêner:Ghybu|Ghybu]] Çavkaniyên jêderê di moda pêşdîtinê de jêderê vedişêre, ew jî min gelek eciz dike wextê çavkanî zêde dikim. Min ji Claude pirsî û kodan nîşanî wê da, wisa cewab da:
Yes — and this file actually explains the whole thing precisely, better than my earlier guess about extract-stripping.
What's happening: the CSS rule
<syntaxhighlight lang="css">
.jeder{
display:none;
}
</syntaxhighlight>
hides every citation by default, *unconditionally*. The only thing that ever makes it visible again is the gadget's JS: it finds each `.jeder`, builds the short "`— (year, author, +)`" summary from the `.j-pewist` fields, and either reveals the short version or — for citations with no `.j-pewist` fields — explicitly sets `display:inline` on the original.
So visibility of citations depends entirely on this JS running. In the normal article view (Image 1) it runs, so you see the collapsed "`(1918, E. Rehmî Ji Mala Hekariyan, Amadekar: M. E. Bozarslan, +)`" form. In whatever generated Image 2 — a hover-preview/extract/API render — gadget JS doesn't execute, so nothing ever removes the `display:none`, and the citation vanishes completely rather than degrading to "still visible, just not collapsed."
<b>The fix:</b> flip the default so the *un-collapsed* state is the safe fallback, and let JS do the hiding only after it successfully builds the short version. That way, any context without JS shows the full citation instead of nothing.
CSS — remove the blanket hide:
<syntaxhighlight lang="css">
.jeder {
/* intentionally no display:none here — see Gadget-... .js */
}
</syntaxhighlight>
JS — do the hiding from script, after the short form exists:
{{veşêre-ser}}
<syntaxhighlight lang="js">
// Ji bo şablonên [[Şablon:jêder]] hatiye nivîsandin.
// Parametreyên ku di navbera "<span class="j-pewist">...</span>" an "{{j-pêwîst|...}}" de ne venaşêre.
$(function() {
function nivisaKurtTevliBike(sund, nivisKurt) {
var zede = $('<a>+</a>')
.addClass('click')
.attr('href', '#')
.attr('title', 'zêdetir')
.css('font-weight', 'bold');
var kurt = $(' <a>↩</a>')
.addClass('click-kurt')
.attr('href', '#')
.attr('title', 'veşêre')
.css('font-weight', 'bold');
$('<span>' + nivisKurt + '</span>')
.append(zede).append(')')
.addClass('jeder-kurt')
.css('font-size', '0.85em')
.insertAfter(sund);
sund.append(' ').append(kurt);
// Only hide the full citation once the short summary actually exists.
// If this script never runs (no-JS clients, hover-preview extracts,
// action=render, etc.), the full citation stays visible instead of
// silently disappearing.
sund.css('display', 'none');
}
function vesere() {
$('.jeder').each(function() {
var elmTab = $(this).find('.j-pewist').clone();
if (elmTab.length) {
var elm = '';
for (var i = elmTab.length - 1; i >= 0; i--) {
elm = elmTab.eq(i).html() + ', ' + elm;
}
var nivisKurt = ' — (' + elm;
nivisaKurtTevliBike($(this), nivisKurt);
}
// else: no j-pewist fields to shorten — leave the full citation
// as it already renders (visible), nothing to do.
});
}
vesere();
$(".click").click(function(e) {
e.preventDefault();
$(this).parent('.jeder-kurt').css('display', 'none');
$(this).parent('.jeder-kurt').prev().css('display', 'inline');
});
$(".click-kurt").click(function(e) {
e.preventDefault();
$(this).parent('.jeder').css('display', 'none');
$(this).parent('.jeder').next().css('display', 'inline');
});
});
</syntaxhighlight>
Net effect:
- JS-enabled readers (normal article view): identical experience to today — collapsed short form with `+`/`↩` toggle.
- No-JS contexts (previews, extracts, screen readers before JS loads, print, etc.): full citation is shown instead of nothing — a real regression fix rather than a cosmetic one.
One caveat worth being upfront about: this fixes it *if* the preview context renders the gadget's HTML/CSS but doesn't execute gadget JS (which is the far more common case, and what this code strongly suggests is happening). If Image 2 instead comes from a pipeline that strips the `.jeder`/`.jegirtin-text` elements out of the HTML entirely before this CSS/JS even gets a chance to apply, no on-wiki CSS/JS change can help — that'd need the extract-generation config changed instead. Given what this gadget file shows, though, I'd bet on the CSS-hide explanation.
{{veşêre-bin}}
Em dûre biceribînin eger xeletî tinebe, vî tiştî jî rast bikin. --[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 20:00, 23 tîrmeh 2026 (UTC)
:Ez APIya MediaWiki rind nizanim belkî Claude dizane:) Em nikarin bibêjin dema ku moda "''action=edit''" e fonksiyona <code>function vesere()</code> bi kar meyîne. [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 15:57, 24 tîrmeh 2026 (UTC)
::Na, di moda "edît"-ê de <code>var elmTab = null</code>... [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 16:13, 24 tîrmeh 2026 (UTC)
?:
<syntaxhighlight lang="js">
if (
mw.config.get('wgAction') === 'edit' ||
mw.config.get('wgAction') === 'submit'
){
var elmTab = [];
} else {
var elmTab = $(this).find('.j-pewist').clone();
}
</syntaxhighlight>
--[[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 16:31, 24 tîrmeh 2026 (UTC)
:Ez jî nizanim Claude çiqas ji mediawiki fêm dike lê heta niha ti tişt nîne ku min jê pirs kir û nikaribû çêke, bila wekî reklam nebe feqat Claude mikemmel e, dibêjim "li vir çima xeletiyeke wisa derdikeve" di dosyeya 2000 rêzî de diçe tiştê xelet tenê rast dike tiştekî din naguherîne. Chatgpt û aistudio qet wisa nakin, eynî dosyeyê deh cara dinivîsin, deh netîceyên cuda derdikevin :D
:Em dikarin vê amûrê wextê edit û submitê neaktîv bikin wekî <syntaxhighlight lang="js">if (!(action === "edit" || action === "submit")) {
:return;</syntaxhighlight> lê wê demê display:none wê çibe nizanim. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 18:23, 24 tîrmeh 2026 (UTC)
::display:none ne hewce ye ma jixwe di nav kodê [https://ku.wiktionary.org/w/index.php?title=MediaWiki:Gadget-jeder.js&oldid=6069025#L-49 L-49] de inline/none heye? [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 18:53, 24 tîrmeh 2026 (UTC)
:Min bi vî şiklî [https://ku.wiktionary.org/w/index.php?title=Bikarh%C3%AAner:Wikihez/vector-2022.js&diff=prev&oldid=6290816#L-28] ceriband feqat nexebitî. "display:none" di pêşdîtinê de dixebite feqat js naşixule. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 14:43, 25 tîrmeh 2026 (UTC)
::Kodên JSê pir hez nakim (pêşta hukurina APIya MWyê hewce bû) dîsa jî ez ê seh bikim :) [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 16:49, 27 tîrmeh 2026 (UTC)
:::Ez niha bi vî şiklî [https://ku.wiktionary.org/w/index.php?title=Bikarh%C3%AAner:Wikihez/test.js&oldid=6290820] [https://ku.wiktionary.org/w/index.php?title=Bikarh%C3%AAner:Wikihez/common.css&oldid=6290821#L-8] bi kar tînim ti problem nîne. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 17:09, 27 tîrmeh 2026 (UTC)
== [[MediaWiki:Gadget-PagePreviews.js]] ==
Ez dibêjim em vê amûrê jî çêkin [[:en:MediaWiki:Gadget-PagePreviews.js]] --[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 10:56, 3 tebax 2026 (UTC)
= Moda tarî =
== [[Şablon:wîkîpediya]] ==
Rengê tarî de xirab e.--[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 19:36, 4 tebax 2026 (UTC)
= Bot =
Karên ku bi botê werin çêkirin ji kerema xwe li vir binivîsin.
== Kategorî:Biwêj ==
[[:Kategorî:Biwêj]] divê were paqijkirin, lîsteya madeyên {{ş|biwêj}} çêke, yên ku tê de bûn, kirin, man hene filtre bike yên din bi destî tê çêkirin.—[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:17, 16 tîrmeh 2026 (UTC)
== Jêgirtin ==
Xistina jêgirtinên beşa [https://ku.wiktionary.org/w/index.php?search=insource%3A%2F%3D+*Ji+%5BWw%5D%C3%AAjey%C3%AA+*%3D%2F&title=Taybet%3AL%C3%AAger%C3%AEn&profile=advanced&fulltext=1&ns0=1&searchToken=8rh0bmw8dccsi7aynl6zli8uf ji wêjeyê] li beşa maneyê. —[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:17, 16 tîrmeh 2026 (UTC)
== Bota Toolforgeê ==
Botekî Toolforgeê lazim e ji bo ku xeletiyên biçûk wekî şablonên bi navên îngilîzî werin kurdîkirin yan jî valahiya beşan rast bike û hwd.—[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:17, 16 tîrmeh 2026 (UTC)
:Min [[Bikarhêner:Wikihez/skrîpt/py/kuwiktkozmetik.py|paqijiyen kozmetîk]] hazir kir feqat hîn navên şablonan naguhêre. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 20:05, 4 tebax 2026 (UTC)
== Updatew ==
Bota [[Bikarhêner:Wikihez/skrîpt/py/updateW.py|updateW]] divê were rojanekirin. Yan jî yekî nû were çêkirin. Şablonên {{ş|W}} di beşa tercimeyan de sererast dike û zimanan rêz dike. Ya niha xeletiya navê zimanî dide.—[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:17, 16 tîrmeh 2026 (UTC)
== sihir --> sêhr ==
Tercimeyên ''[[sêhr]]'' hemû dibêje ''sihir'' loma bi botê lazim e kirin ''sêhr''. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 17:43, 18 tîrmeh 2026 (UTC)
:Sihirbaz --> sêhrbaz [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 18:07, 18 tîrmeh 2026 (UTC)
== Tercimeyên dîroknas ==
Li tercimeyên [[dîroknas]], hevmaneyên wê hewce ye were îlawekirin. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 18:44, 18 tîrmeh 2026 (UTC)
== Mewlûd ==
Sererastkirina jêgirtinên mewlûdê [https://ku.wiktionary.org/w/index.php?search=insource%3A%2Fw%5C%3AMela+His%C3%AAn%C3%AA+Batey%C3%AE%2F&title=Taybet%3AL%C3%AAger%C3%AEn&ns0=1&searchToken=8m0tguy3sqt7edr4sg0u8hedo] wekî [https://ku.wiktionary.org/w/index.php?title=dax%C3%AEdar&curid=284303&diff=6265851&oldid=6142285] [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 09:43, 20 tîrmeh 2026 (UTC)
2lbf1qk37bugiv56flue06onhodudtl
6333702
6333701
2026-08-14T19:21:35Z
Ghybu
1393
/* MediaWiki:Gadget-start.js */
6333702
wikitext
text/x-wiki
{{/ser}}
= Karên ferhengî =
== Mane ==
* [[:Kategorî:Madeyên bê beşa mane]]
** [[:Kategorî:Madeyên bê beşa mane bi kurmancî]]
Li ser van rûpelan ev made hene ku maneyan wan nehatine nivîsin û divê werin nivîsin. —[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:17, 16 tîrmeh 2026 (UTC)
== Etîmolojî ==
*[[:Kategorî:Daxwazên etîmolojiyê]]
**[[:Kategorî:Daxwazên etîmolojiyê bi kurmancî]]
Li ser van rûpelan ev made hene ku etîmolojiya wan hîn nehatine nivîsin. Ji bo alîkariyê binêre [[WF:Etîmolojî]] —[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:17, 16 tîrmeh 2026 (UTC)
== Cureyê rêzimanî ==
* [[:Kategorî:Gotarên bê kategoriya rêzimanî]]
* [[:Kategorî:Gotarên bê kategoriya rêzimanî bi kurmancî]]
Li ser van rûpelan ev made hene ku cureyên wan yên rêzimanî hîn nehatine nivîsin. Ji bo alîkariyê binêre [[Alîkarî:Cureyên peyvan]] —[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:17, 16 tîrmeh 2026 (UTC)
== Kontrol ==
* [[:Kategorî:Kontrol]]
** [[:Kategorî:Kontrola maneyê]]
Ev madde bi botê hatine çêkirin, yek bi yek divê werin kontrolkirin. —[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:17, 16 tîrmeh 2026 (UTC)
= Şablon =
== IPA ==
* {{ş|IPA}} divê [[Modul:IPA]] bi kar bîne. —[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:17, 16 tîrmeh 2026 (UTC)
== Deng ==
Kurdîkirina belgekirina {{ş|deng}} lazim e.--[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 00:06, 19 tîrmeh 2026 (UTC)
= Modul =
== Modul:form of/templates ==
* [[Modul:form of/templates]]: Divê ev modul were rojanekirin û xeletiyên berê wekî ([[hevalê]]) werin rastkirin. —[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:17, 16 tîrmeh 2026 (UTC)
*:Merheba @[[Bikarhêner:Ghybu|Ghybu]] Te gotibû di vê modulê de xeletî hene, jkx tu dikarî li vir binivîsî çi kêmasî hene, daku wextê rojane dikim ez ji bîr nekim? [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:16, 21 tîrmeh 2026 (UTC)
*::Silav. Nizanim ji bîra min çûye... Herwiha ji bo çêkirina formên navdêran zanînên cîns û tîpa dawî bes e:
*::* (-ê, mê) => çemandî, bangkirin
*::* (-ê, nêr) => îzafe
*::* (-ê, mê û nêr) => îzafe (nêr), bangkirin (mê), çemandî (mê)
*::* (-a) => îzafe (mê)
*::* (-ekî) => îzafe û çemandî (nêr, nebinavkirî)
*::* (-eke) = > îzafe (mê, nebinavkirî)
*::* ...
*:: <code>if find(mw.title.getCurrentTitle().subpageText, 'ekî$') then ... end</code>
*::<code><nowiki>{{ku-tewîn-navForm|<navdêr>|<zayend>}</nowiki></code>
*::Tablo û nivîs di yekcarî de tên çêkirin...
*::Feqet problem lêzêdekirina mînakan e. [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 17:34, 21 tîrmeh 2026 (UTC)
*:::Lêzêdekirina kîjan nimûneyan? Ev koda js ji bo çi ye? Qisûrê nenêre min fêm nekir :/ [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 18:13, 21 tîrmeh 2026 (UTC)
*::::Li vira ([[hevalê#Formeke navdêrê]]) di bin maneyên 1. û 2. mînak nayên tevlî kirin :) [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 18:18, 21 tîrmeh 2026 (UTC)
*:::::Ev tercîh e, ne mecbûrî ye, em dikarin [https://ku.wiktionary.org/w/index.php?title=heval%C3%AA&diff=prev&oldid=6276350 wisa] bikin. Wekî din? [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 18:29, 21 tîrmeh 2026 (UTC)
*::::::Min li jor tênê got ku tenê parametreyên "navdêr" û "zayend" hewce nee. Bi '''[//ku.wiktionary.org/w/index.php?title=heval%C3%AA&curid=969734&diff=6276353&oldid=6276350 vî]''' awayî jî tê çêkirin. Parametreyên din ne hewce ne. [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 18:38, 21 tîrmeh 2026 (UTC)
*:::::::Ji bo wê şabloneke din lazim e, bila ev şablon wekî îngilîzî bimîne em ji bo kurmancî yekî din çêkin. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 18:42, 21 tîrmeh 2026 (UTC)
*::::::::[https://ku.wiktionary.org/w/index.php?title=heval%C3%AA&oldid=6276885 wisa] çawa ye? Bi min nivîsîna nimûneyan zêde ne lazim e ji ber ku ti kes serê xwe pê naêşîne. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 09:46, 23 tîrmeh 2026 (UTC)
*:::::::::@[[Bikarhêner:Ghybu|Ghybu]] Vê şablonê bi kar bînin an na? Navê şablonê kê çi be? [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 19:07, 24 tîrmeh 2026 (UTC)
== Modul:columns ==
* [[Modul:columns]] were rojanekirin û {{ş|kol3}} bila lînka ''nîşan bide'' deyne beriya sernavê, kolê di qutiya rengî de bila nebe. —[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:17, 16 tîrmeh 2026 (UTC)
== Modul:etymon ==
* [[Modul:etymon kevn]]: Rojanekirin hewce ye. —[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:17, 16 tîrmeh 2026 (UTC)
== [[Modul:ziman/code to canonical name]] ==
Belgekirina skrîptê û js divê were rastkirin. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 09:31, 22 tîrmeh 2026 (UTC)
:* [[MediaWiki:UpdateLanguageNameAndCode.js]]
:[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 09:50, 22 tîrmeh 2026 (UTC)
::* [[Modul:ziman/print]]
::[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 09:52, 22 tîrmeh 2026 (UTC)
:::*[[Modul:ziman/şablon]]
:::[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 09:56, 22 tîrmeh 2026 (UTC)
::::* [[MediaWiki:Gadget-translation editor.js/ziman.json]]
::::[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 11:06, 22 tîrmeh 2026 (UTC)
== [[Modul:quote]] ==
Piştî ev modul hate hazirkirin, lazim e navên jegirtinan werin rastkirin û li hemûyan {{param|jêgirtin}} were zêdekirin. Bnr. [[Gotûbêja şablonê:Jêgirtin/Ehmedê Xanî/Mem û Zîn]] [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 22:27, 5 tebax 2026 (UTC)
::Ev modul hema bêje hazir e. Hûn li ser van madeyan çi difikirin:
# {{para|tarîx}} lazim e full date be eger na, lazim e {{para|sal}} were bikaranîn. Feqat "'''2021''' kanûna pêşîn 23" bi vî şiklî bi min ne problem e çnkî derdê en.wikt "attestation" e delîla herî pêşî jî sal e.
#: {{demo|sep=wisa xuya dibe<br>|<nowiki>{{jêder-kitêb/ceribandin|en
|tarîx=23 December 2021|nivîskar=Harry Hobbs; George Williams|sernav=Micronations and the Search for Sovereignty|url=https://www.cambridge.org/core/books/micronations-and-the-search-for-sovereignty/B0414A3A322695D9EE71E4CDDFDA06DE|weşanxane=Cambridge University Press|rûpel=155|isbn=978-1-009-15012-5|jêgirtin=jêgirtin.|t=-}}</nowiki>}}
#{{para|amadekar}}/{{para|edîtor}}/{{para|terciman}} bi şiklê edîtoriya, amadekariya, tercimekirina
#: {{demo|sep=dide<br>|<nowiki>{{jêder-kitêb/ceribandin|en
|sernav=Medical Surgical Nursing|serî=Juta's Manual of Nursing|cildê-seriyê=volume 4|edîtor=Sophie Mataniele Mogotlane; Joyce Mokoena; Motshedisi Eunice Chauke; Anne Young|sal=2005|weşanxane=Juta Academic|isbn=978-0702171840|rûpel=!12-29|jêgirtin=jêgirtin|t=-}}</nowiki>}}
--[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 13:09, 10 tebax 2026 (UTC)
:@[[Bikarhêner:Bikarhêner|Bikarhêner]] û @[[Bikarhêner:Ghybu|Ghybu]] Hîn gelek tişt hene divê îzah bikin û fikrê we pirs bikim, feqat îzahkirin pir zor e, em dest bi bikaranînê bikin û dûre tiştên ku hûn naxwazin em dikarin biguherînîn, dibe? [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 13:11, 10 tebax 2026 (UTC)
::Dibe, piştî çêbû, em di praktîkê de bibînin ku çawa ye. -- [[Bikarhêner:Bikarhêner|Bikarhêner]] ([[Gotûbêja bikarhêner:Bikarhêner|gotûbêj]]) 18:05, 10 tebax 2026 (UTC)
= Javascript =
== [[Mediawiki:Gadget-citoid-helper.js]] ==
Ji bo bi citoidê kopîkirina malûmatên çavkaniyan amûreke wisa lazim e. Xisûsen ji ber ku bi çend amûrên din dikare were bikaranîn.
Feqat çend problem hene, şablonên me de kêmasiya parametreyan gelek in û xerîteyên citoidê hîn nehatine çêkirin. Wana sererast bikin dûre vê amûrê çêkin, piştre [[MediaWiki:Gadget-start.js|start.js]] û [[MediaWiki:Gadget-wikt.add-examples.js|add examples.js]] were rojanekirin.
- --[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 00:04, 19 tîrmeh 2026 (UTC)
:Merheba @[[Bikarhêner:Bikarhêner|Bikarhêner]], ez dibêjim karê Modul:quote zêde wext bistîne, bila em dest bi bikaranîna van amûran bikin dûre kêmasiyan em ê temam bikin înşela. Dikarî vana li cihên xwe yên rast kopî paste bikî?
# [[Special:PermanentLink/6291574|Bikarhêner:Wikihez/skrîpt/js/Gadget-citoid-helper.js]] --> [[Mediawiki:Gadget-citoid-helper.js]]
# Ya li jêr kopî bike qismê herî dawî ya AmûrênVeşartî li [[MediaWiki:Gadgets-definition]]:
## <code><nowiki>* citoid-helper[ResourceLoader|hidden|default|dependencies=mediawiki.util]|citoid-helper.js</nowiki></code>
--[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:58, 26 tîrmeh 2026 (UTC)
== [[MediaWiki:Gadget-start.js]] ==
Rojanekirin hewce ye. Min gelek tişt lê zêde kir lê ez niha test dikime. Piştre em bar bikin:
* [[Bikarhêner:Wikihez/Gadget-start.js]] --> [[MediaWiki:Gadget-start.js]]
* [[Bikarhêner:Wikihez/Gadget-start.css]] --> [[MediaWiki:Gadget-start.css]]
--[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 22:08, 17 tîrmeh 2026 (UTC)
:Min [[MediaWiki:Gadget-start/data.json|data.json]] çêkir ji bo ku bi hêsanî malûmatên heyî werin guhartin bêyî guhartina Javascriptê. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 19:49, 18 tîrmeh 2026 (UTC)
:Xeletiyên ku ji bîr nekim rast bikim:
:* Wextê min çavkanî "kitêb" hilbijart û bi destî tije kir xeletiyeke [https://ku.wiktionary.org/w/index.php?title=xezete&diff=prev&oldid=6265392 wisa] derket her kelîme hate lînkkirin.
:* <code>html("⠿")</code> ev ne lazim e.
:* textarea ji bo çavkaniyên jêgirtinan xaseten yên sernav hîn jî ne draggable e.
:* pêşdîtina zindî checkbox wextê tê rakirin, pêşdîtin winda nabe.
:* Butona mobîlê ya vekirina formê di moda tarî de belî nabe, tenê wekî qutiyeke tarî xuya dibe.
:* Metna hişyarkirinê di guhartina rûpelên heyî de lazim e baştir bikim.
:[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 23:51, 18 tîrmeh 2026 (UTC)
::Ev problem çêbûn, ez ê binêrim ka çi problemên din hene. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 14:15, 19 tîrmeh 2026 (UTC)
:::Çêke: Ji bo qismê çavkaniyê yek dikare API call û Kategorî:Çavkanî bi kar bîne ji bo ku şablon zêde bikî ji yên heyî. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 21:21, 19 tîrmeh 2026 (UTC)
::::Ev jî çêbû, min beşa çavkanî jî çêkir. Eger xeletî dernekeve û problema valahiya piştî etîketê ji bîr nekim, piştî rojanekirina amûrên linkify, û citoid em dikarin bar bikin. Ez ê ti tiştê nû îlawe nekim, zêde dirêj bû. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:14, 21 tîrmeh 2026 (UTC)
:::::Merheba @[[Bikarhêner:Bikarhêner|Bikarhêner]]. Dikarî wana bar bikî?
:::::* [[Bikarhêner:Wikihez/Gadget-start.js]] --> [[MediaWiki:Gadget-start.js]]
:::::* [[Bikarhêner:Wikihez/Gadget-start.css]] --> [[MediaWiki:Gadget-start.css]]
:::::* [[MediaWiki:Gadgets-definition]] wisa rojane bike:
:::::* start[ResourceLoader|default|package|dependencies=mediawiki.util,ext.gadget.StorageUtils,ext.gadget.citoid-helper]|start.js|start.css|start.js/data.json
:::::[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 09:39, 5 tebax 2026 (UTC)
{{şirove}} Dewama ''[[Special:PermanentLink/6333688|Gotûbêja bikarhêner:Rewiye tine#WF:Nû]]'' bila gotûbêja wî em spam nekin. :D
{{r|Ghybu}} dikarî [[Special:PermanentLink/6333689|vê htmlê]] binêrî claude rast fêm kiriye yan na? Daxîne û wek html qeyd bike. --[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 18:43, 14 tebax 2026 (UTC)
:Min seh wîkîyên din jî kir, li wîkiya fransî tiştekî wekî daxwaza min çêkirine (tiştên ku ne hewce ne wekî "tab" çêkirine an jî hatine vêşartin): [//fr.wiktionary.org/w/index.php?title=fdsdfdsf&action=edit&redlink=1]. Formata me yê berî jî bi vê lojîkê hatibû çêkirin, wekî de.wiktionary ([//de.wiktionary.org/w/index.php?title=sdfdsfsdfs&action=edit&preload=Vorlage:Formatvorlage_(Substantiv_vereinfacht)]) [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 19:01, 14 tebax 2026 (UTC)
::PS: Dîsa jî Claude min rind fêm kiriye :)) Feqet min got ku "Mane", "Bilêvkirin" û "Beşên din" cem hev. Û dema ku tu terê di nav "Besên din" Hevmane, Jê, ... li wira werin nivîsandin. Wêne/Resim û Nimûne jî bin beşa "Mane" [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 19:17, 14 tebax 2026 (UTC)
== [[Mediawiki:Gadget-QQ.js]] ==
Ev amûr di şikle Minerva de. Her daîm vê xeletiyê dide:
<syntaxhighlight lang="js">
TypeError: Cannot read properties of null (reading 'addEventListener') at css () at runScript () at Array.<anonymous> () at flushCssBuffer ()
</syntaxhighlight> [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 19:29, 18 tîrmeh 2026 (UTC)
:* [[Bikarhêner:Wikihez/skrîpt/js/Gadget-QQ.js]] --> [[Mediawiki:Gadget-QQ.js]]
:* [[Bikarhêner:Wikihez/Gadget-QQ.css]] --> [[Mediawiki:Gadget-QQ.css]]
:Ez dibêjim çêbû lê ka çend roj biceribînim. Tiştên ku hatin sererastkirin:
:# Google Books API Key dikarî zêde bikî, dixe cookies û di gerokê de dimîne. Berê bê API Key dixebitiya lê êdî mecbûr e ku API Key-a te hebe, bidestxistina wê ne zêde zor e lê dîsa jî tevlihev e.
:# Êdî di mobîlê de dixebite, heta di mobîlê de xweştir xuya dike.
:# Moda tarî
:# OOUI dewsa jquery.ui
:# Li qutiyê çi dixwazî zêde bikî, dikare li gorî îsm, sifet, fiîl bitewîne. Lê ji bo fiîl tenê dikare çend heb inflection bîne.
:# Butona paqij bike lê zêde kir.
:# Çend paqijiyên jêgirtinên Google Kitêbê niha hene.
:[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 23:38, 18 tîrmeh 2026 (UTC)
::Tewandina fiîlan û xeletiya modulê lazim e were rastkirin. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 14:40, 21 tîrmeh 2026 (UTC)
== [[MediaWiki:Gadget-wikt.add-examples.js]] ==
Min ev amûr hinek rojane kir feqat çend problem hene berî ku bar bikin.
Tiştên ku min guhart:
# Êdî li sayfeyên bi {{ş|maneid}} jî dixebite,
# Cihê di wîkîtekstê de yê ku jêgirtin were îlawekirin baştir bû,
# [[Mediawiki:Gadget-citoid-helper.js|citoid helper]] zêde kir ji bo ku bi hêsanî çavkanî bi riya doi, isbn an urlyê werin tijîkirin.
* [[Bikarhêner:Wikihez/Gadget-wikt.add-examples.css]] --> [[MediaWiki:Gadget-wikt.add-examples.css]]
* [[Bikarhêner:Wikihez/Gadget-wikt.add-examples.js]] --> [[MediaWiki:Gadget-wikt.add-examples.js]]
- --[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 00:50, 19 tîrmeh 2026 (UTC)
:Min "wikt." qismên cache kirinê ya wîkiya fransî bi [[MediaWiki:Gadget-StorageUtils.js]] guhartiye. loma ji bîr nekin wê amûrê li [[MediaWiki:Gadgets-definition]] zêde bikin. û navê amûrê jî biguhêrînin. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 09:15, 23 tîrmeh 2026 (UTC)
::Berê li ser WF:ceribandin dixebitî. niha naxebite. Divê were rastkirin. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 22:10, 7 tebax 2026 (UTC)
== Gadget-translation editor ==
* [[MediaWiki:Gadget-translation editor.js]]: divê formata en.wîktê were bikaranîn ji ber ku me gelek tercime ji en.wîktê kopî kir û ev js hîn nikare formata wekî li jêr bi kar bîne.
<syntaxhighlight lang="wikitext">
* {{Z|sh}}:
*: Kirîlî:
*: Latînî
</syntaxhighlight>
—[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:17, 16 tîrmeh 2026 (UTC)
== [[Mediawiki:Gadget-linkify.js]] ==
* ''rûpeleke'' wekî<syntaxhighlight lang="wikitext">[[rûpeleke]]</syntaxhighlight> lînk dike, bi regexê belkî dikare wisa bike <syntaxhighlight lang="wikitext">[[rûpel]]eke</syntaxhighlight>
—[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:17, 16 tîrmeh 2026 (UTC)
* Amûreke din wekî [[User:Wikihez/Gadget-linkify.js|linkify]] lazim e ku herfên mezin biçûk bike ji bo kurmancî.—[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:17, 16 tîrmeh 2026 (UTC)
:{{r|Bikarhêner}} Merheba bira, dikarî viya jî bar bikî?:
* [[Special:PermanentLink/6291974|linkify]] --> [[Mediawiki:Gadget-linkify.js]]
Spas--[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 11:42, 29 tîrmeh 2026 (UTC)
:Dûre [https://ku.wiktionary.org/wiki/MediaWiki:Gadget-start.js#L-283 li vir] wiktviLinkify bike kuLinkify xêra xwe [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 11:51, 29 tîrmeh 2026 (UTC)
::Min ji bîr kir lê zêde bikim niha nikare "Dİ" bike "di", xeletiyeke berbelav a di nivîsên kurdî de, herfên din ên wekî ll yan rr jî hewce ne werin zêdekirin. Dûre em zêde bikin. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 21:42, 29 tîrmeh 2026 (UTC)
:::Min nû ferq kir, sayfeyên ku hîn nehatine çêkirin wîkîlînk nake. Problemeke mezin e divê were rastkirin. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 18:15, 30 tîrmeh 2026 (UTC)
::::Na, lînk dike, tiştekî din heye... [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 10:49, 31 tîrmeh 2026 (UTC)
== Amûra manayê ==
Amûreke din ji bo nivîsina maneyê wekî Nimûne zêde bike lazim e [https://ku.wiktionary.org/w/index.php?title=Bikarh%C3%AAner:Wikihez/test.js&oldid=6276876 js] [https://ku.wiktionary.org/w/index.php?title=%C5%9Eablon:ceribandin2&oldid=6265629 şablon] [https://ku.wiktionary.org/w/index.php?title=Bikarh%C3%AAner:Wikihez/common.css&oldid=6265642 css] --[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 09:12, 23 tîrmeh 2026 (UTC)
== [[MediaWiki:Gadget-jeder.js]] ==
@[[Bikarhêner:Ghybu|Ghybu]] Çavkaniyên jêderê di moda pêşdîtinê de jêderê vedişêre, ew jî min gelek eciz dike wextê çavkanî zêde dikim. Min ji Claude pirsî û kodan nîşanî wê da, wisa cewab da:
Yes — and this file actually explains the whole thing precisely, better than my earlier guess about extract-stripping.
What's happening: the CSS rule
<syntaxhighlight lang="css">
.jeder{
display:none;
}
</syntaxhighlight>
hides every citation by default, *unconditionally*. The only thing that ever makes it visible again is the gadget's JS: it finds each `.jeder`, builds the short "`— (year, author, +)`" summary from the `.j-pewist` fields, and either reveals the short version or — for citations with no `.j-pewist` fields — explicitly sets `display:inline` on the original.
So visibility of citations depends entirely on this JS running. In the normal article view (Image 1) it runs, so you see the collapsed "`(1918, E. Rehmî Ji Mala Hekariyan, Amadekar: M. E. Bozarslan, +)`" form. In whatever generated Image 2 — a hover-preview/extract/API render — gadget JS doesn't execute, so nothing ever removes the `display:none`, and the citation vanishes completely rather than degrading to "still visible, just not collapsed."
<b>The fix:</b> flip the default so the *un-collapsed* state is the safe fallback, and let JS do the hiding only after it successfully builds the short version. That way, any context without JS shows the full citation instead of nothing.
CSS — remove the blanket hide:
<syntaxhighlight lang="css">
.jeder {
/* intentionally no display:none here — see Gadget-... .js */
}
</syntaxhighlight>
JS — do the hiding from script, after the short form exists:
{{veşêre-ser}}
<syntaxhighlight lang="js">
// Ji bo şablonên [[Şablon:jêder]] hatiye nivîsandin.
// Parametreyên ku di navbera "<span class="j-pewist">...</span>" an "{{j-pêwîst|...}}" de ne venaşêre.
$(function() {
function nivisaKurtTevliBike(sund, nivisKurt) {
var zede = $('<a>+</a>')
.addClass('click')
.attr('href', '#')
.attr('title', 'zêdetir')
.css('font-weight', 'bold');
var kurt = $(' <a>↩</a>')
.addClass('click-kurt')
.attr('href', '#')
.attr('title', 'veşêre')
.css('font-weight', 'bold');
$('<span>' + nivisKurt + '</span>')
.append(zede).append(')')
.addClass('jeder-kurt')
.css('font-size', '0.85em')
.insertAfter(sund);
sund.append(' ').append(kurt);
// Only hide the full citation once the short summary actually exists.
// If this script never runs (no-JS clients, hover-preview extracts,
// action=render, etc.), the full citation stays visible instead of
// silently disappearing.
sund.css('display', 'none');
}
function vesere() {
$('.jeder').each(function() {
var elmTab = $(this).find('.j-pewist').clone();
if (elmTab.length) {
var elm = '';
for (var i = elmTab.length - 1; i >= 0; i--) {
elm = elmTab.eq(i).html() + ', ' + elm;
}
var nivisKurt = ' — (' + elm;
nivisaKurtTevliBike($(this), nivisKurt);
}
// else: no j-pewist fields to shorten — leave the full citation
// as it already renders (visible), nothing to do.
});
}
vesere();
$(".click").click(function(e) {
e.preventDefault();
$(this).parent('.jeder-kurt').css('display', 'none');
$(this).parent('.jeder-kurt').prev().css('display', 'inline');
});
$(".click-kurt").click(function(e) {
e.preventDefault();
$(this).parent('.jeder').css('display', 'none');
$(this).parent('.jeder').next().css('display', 'inline');
});
});
</syntaxhighlight>
Net effect:
- JS-enabled readers (normal article view): identical experience to today — collapsed short form with `+`/`↩` toggle.
- No-JS contexts (previews, extracts, screen readers before JS loads, print, etc.): full citation is shown instead of nothing — a real regression fix rather than a cosmetic one.
One caveat worth being upfront about: this fixes it *if* the preview context renders the gadget's HTML/CSS but doesn't execute gadget JS (which is the far more common case, and what this code strongly suggests is happening). If Image 2 instead comes from a pipeline that strips the `.jeder`/`.jegirtin-text` elements out of the HTML entirely before this CSS/JS even gets a chance to apply, no on-wiki CSS/JS change can help — that'd need the extract-generation config changed instead. Given what this gadget file shows, though, I'd bet on the CSS-hide explanation.
{{veşêre-bin}}
Em dûre biceribînin eger xeletî tinebe, vî tiştî jî rast bikin. --[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 20:00, 23 tîrmeh 2026 (UTC)
:Ez APIya MediaWiki rind nizanim belkî Claude dizane:) Em nikarin bibêjin dema ku moda "''action=edit''" e fonksiyona <code>function vesere()</code> bi kar meyîne. [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 15:57, 24 tîrmeh 2026 (UTC)
::Na, di moda "edît"-ê de <code>var elmTab = null</code>... [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 16:13, 24 tîrmeh 2026 (UTC)
?:
<syntaxhighlight lang="js">
if (
mw.config.get('wgAction') === 'edit' ||
mw.config.get('wgAction') === 'submit'
){
var elmTab = [];
} else {
var elmTab = $(this).find('.j-pewist').clone();
}
</syntaxhighlight>
--[[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 16:31, 24 tîrmeh 2026 (UTC)
:Ez jî nizanim Claude çiqas ji mediawiki fêm dike lê heta niha ti tişt nîne ku min jê pirs kir û nikaribû çêke, bila wekî reklam nebe feqat Claude mikemmel e, dibêjim "li vir çima xeletiyeke wisa derdikeve" di dosyeya 2000 rêzî de diçe tiştê xelet tenê rast dike tiştekî din naguherîne. Chatgpt û aistudio qet wisa nakin, eynî dosyeyê deh cara dinivîsin, deh netîceyên cuda derdikevin :D
:Em dikarin vê amûrê wextê edit û submitê neaktîv bikin wekî <syntaxhighlight lang="js">if (!(action === "edit" || action === "submit")) {
:return;</syntaxhighlight> lê wê demê display:none wê çibe nizanim. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 18:23, 24 tîrmeh 2026 (UTC)
::display:none ne hewce ye ma jixwe di nav kodê [https://ku.wiktionary.org/w/index.php?title=MediaWiki:Gadget-jeder.js&oldid=6069025#L-49 L-49] de inline/none heye? [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 18:53, 24 tîrmeh 2026 (UTC)
:Min bi vî şiklî [https://ku.wiktionary.org/w/index.php?title=Bikarh%C3%AAner:Wikihez/vector-2022.js&diff=prev&oldid=6290816#L-28] ceriband feqat nexebitî. "display:none" di pêşdîtinê de dixebite feqat js naşixule. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 14:43, 25 tîrmeh 2026 (UTC)
::Kodên JSê pir hez nakim (pêşta hukurina APIya MWyê hewce bû) dîsa jî ez ê seh bikim :) [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 16:49, 27 tîrmeh 2026 (UTC)
:::Ez niha bi vî şiklî [https://ku.wiktionary.org/w/index.php?title=Bikarh%C3%AAner:Wikihez/test.js&oldid=6290820] [https://ku.wiktionary.org/w/index.php?title=Bikarh%C3%AAner:Wikihez/common.css&oldid=6290821#L-8] bi kar tînim ti problem nîne. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 17:09, 27 tîrmeh 2026 (UTC)
== [[MediaWiki:Gadget-PagePreviews.js]] ==
Ez dibêjim em vê amûrê jî çêkin [[:en:MediaWiki:Gadget-PagePreviews.js]] --[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 10:56, 3 tebax 2026 (UTC)
= Moda tarî =
== [[Şablon:wîkîpediya]] ==
Rengê tarî de xirab e.--[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 19:36, 4 tebax 2026 (UTC)
= Bot =
Karên ku bi botê werin çêkirin ji kerema xwe li vir binivîsin.
== Kategorî:Biwêj ==
[[:Kategorî:Biwêj]] divê were paqijkirin, lîsteya madeyên {{ş|biwêj}} çêke, yên ku tê de bûn, kirin, man hene filtre bike yên din bi destî tê çêkirin.—[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:17, 16 tîrmeh 2026 (UTC)
== Jêgirtin ==
Xistina jêgirtinên beşa [https://ku.wiktionary.org/w/index.php?search=insource%3A%2F%3D+*Ji+%5BWw%5D%C3%AAjey%C3%AA+*%3D%2F&title=Taybet%3AL%C3%AAger%C3%AEn&profile=advanced&fulltext=1&ns0=1&searchToken=8rh0bmw8dccsi7aynl6zli8uf ji wêjeyê] li beşa maneyê. —[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:17, 16 tîrmeh 2026 (UTC)
== Bota Toolforgeê ==
Botekî Toolforgeê lazim e ji bo ku xeletiyên biçûk wekî şablonên bi navên îngilîzî werin kurdîkirin yan jî valahiya beşan rast bike û hwd.—[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:17, 16 tîrmeh 2026 (UTC)
:Min [[Bikarhêner:Wikihez/skrîpt/py/kuwiktkozmetik.py|paqijiyen kozmetîk]] hazir kir feqat hîn navên şablonan naguhêre. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 20:05, 4 tebax 2026 (UTC)
== Updatew ==
Bota [[Bikarhêner:Wikihez/skrîpt/py/updateW.py|updateW]] divê were rojanekirin. Yan jî yekî nû were çêkirin. Şablonên {{ş|W}} di beşa tercimeyan de sererast dike û zimanan rêz dike. Ya niha xeletiya navê zimanî dide.—[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:17, 16 tîrmeh 2026 (UTC)
== sihir --> sêhr ==
Tercimeyên ''[[sêhr]]'' hemû dibêje ''sihir'' loma bi botê lazim e kirin ''sêhr''. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 17:43, 18 tîrmeh 2026 (UTC)
:Sihirbaz --> sêhrbaz [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 18:07, 18 tîrmeh 2026 (UTC)
== Tercimeyên dîroknas ==
Li tercimeyên [[dîroknas]], hevmaneyên wê hewce ye were îlawekirin. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 18:44, 18 tîrmeh 2026 (UTC)
== Mewlûd ==
Sererastkirina jêgirtinên mewlûdê [https://ku.wiktionary.org/w/index.php?search=insource%3A%2Fw%5C%3AMela+His%C3%AAn%C3%AA+Batey%C3%AE%2F&title=Taybet%3AL%C3%AAger%C3%AEn&ns0=1&searchToken=8m0tguy3sqt7edr4sg0u8hedo] wekî [https://ku.wiktionary.org/w/index.php?title=dax%C3%AEdar&curid=284303&diff=6265851&oldid=6142285] [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 09:43, 20 tîrmeh 2026 (UTC)
d03a8cjkw98q4f8bd6qvglgi70usoo8
6333704
6333702
2026-08-14T19:25:44Z
Ghybu
1393
/* MediaWiki:Gadget-start.js */
6333704
wikitext
text/x-wiki
{{/ser}}
= Karên ferhengî =
== Mane ==
* [[:Kategorî:Madeyên bê beşa mane]]
** [[:Kategorî:Madeyên bê beşa mane bi kurmancî]]
Li ser van rûpelan ev made hene ku maneyan wan nehatine nivîsin û divê werin nivîsin. —[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:17, 16 tîrmeh 2026 (UTC)
== Etîmolojî ==
*[[:Kategorî:Daxwazên etîmolojiyê]]
**[[:Kategorî:Daxwazên etîmolojiyê bi kurmancî]]
Li ser van rûpelan ev made hene ku etîmolojiya wan hîn nehatine nivîsin. Ji bo alîkariyê binêre [[WF:Etîmolojî]] —[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:17, 16 tîrmeh 2026 (UTC)
== Cureyê rêzimanî ==
* [[:Kategorî:Gotarên bê kategoriya rêzimanî]]
* [[:Kategorî:Gotarên bê kategoriya rêzimanî bi kurmancî]]
Li ser van rûpelan ev made hene ku cureyên wan yên rêzimanî hîn nehatine nivîsin. Ji bo alîkariyê binêre [[Alîkarî:Cureyên peyvan]] —[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:17, 16 tîrmeh 2026 (UTC)
== Kontrol ==
* [[:Kategorî:Kontrol]]
** [[:Kategorî:Kontrola maneyê]]
Ev madde bi botê hatine çêkirin, yek bi yek divê werin kontrolkirin. —[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:17, 16 tîrmeh 2026 (UTC)
= Şablon =
== IPA ==
* {{ş|IPA}} divê [[Modul:IPA]] bi kar bîne. —[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:17, 16 tîrmeh 2026 (UTC)
== Deng ==
Kurdîkirina belgekirina {{ş|deng}} lazim e.--[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 00:06, 19 tîrmeh 2026 (UTC)
= Modul =
== Modul:form of/templates ==
* [[Modul:form of/templates]]: Divê ev modul were rojanekirin û xeletiyên berê wekî ([[hevalê]]) werin rastkirin. —[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:17, 16 tîrmeh 2026 (UTC)
*:Merheba @[[Bikarhêner:Ghybu|Ghybu]] Te gotibû di vê modulê de xeletî hene, jkx tu dikarî li vir binivîsî çi kêmasî hene, daku wextê rojane dikim ez ji bîr nekim? [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:16, 21 tîrmeh 2026 (UTC)
*::Silav. Nizanim ji bîra min çûye... Herwiha ji bo çêkirina formên navdêran zanînên cîns û tîpa dawî bes e:
*::* (-ê, mê) => çemandî, bangkirin
*::* (-ê, nêr) => îzafe
*::* (-ê, mê û nêr) => îzafe (nêr), bangkirin (mê), çemandî (mê)
*::* (-a) => îzafe (mê)
*::* (-ekî) => îzafe û çemandî (nêr, nebinavkirî)
*::* (-eke) = > îzafe (mê, nebinavkirî)
*::* ...
*:: <code>if find(mw.title.getCurrentTitle().subpageText, 'ekî$') then ... end</code>
*::<code><nowiki>{{ku-tewîn-navForm|<navdêr>|<zayend>}</nowiki></code>
*::Tablo û nivîs di yekcarî de tên çêkirin...
*::Feqet problem lêzêdekirina mînakan e. [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 17:34, 21 tîrmeh 2026 (UTC)
*:::Lêzêdekirina kîjan nimûneyan? Ev koda js ji bo çi ye? Qisûrê nenêre min fêm nekir :/ [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 18:13, 21 tîrmeh 2026 (UTC)
*::::Li vira ([[hevalê#Formeke navdêrê]]) di bin maneyên 1. û 2. mînak nayên tevlî kirin :) [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 18:18, 21 tîrmeh 2026 (UTC)
*:::::Ev tercîh e, ne mecbûrî ye, em dikarin [https://ku.wiktionary.org/w/index.php?title=heval%C3%AA&diff=prev&oldid=6276350 wisa] bikin. Wekî din? [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 18:29, 21 tîrmeh 2026 (UTC)
*::::::Min li jor tênê got ku tenê parametreyên "navdêr" û "zayend" hewce nee. Bi '''[//ku.wiktionary.org/w/index.php?title=heval%C3%AA&curid=969734&diff=6276353&oldid=6276350 vî]''' awayî jî tê çêkirin. Parametreyên din ne hewce ne. [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 18:38, 21 tîrmeh 2026 (UTC)
*:::::::Ji bo wê şabloneke din lazim e, bila ev şablon wekî îngilîzî bimîne em ji bo kurmancî yekî din çêkin. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 18:42, 21 tîrmeh 2026 (UTC)
*::::::::[https://ku.wiktionary.org/w/index.php?title=heval%C3%AA&oldid=6276885 wisa] çawa ye? Bi min nivîsîna nimûneyan zêde ne lazim e ji ber ku ti kes serê xwe pê naêşîne. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 09:46, 23 tîrmeh 2026 (UTC)
*:::::::::@[[Bikarhêner:Ghybu|Ghybu]] Vê şablonê bi kar bînin an na? Navê şablonê kê çi be? [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 19:07, 24 tîrmeh 2026 (UTC)
== Modul:columns ==
* [[Modul:columns]] were rojanekirin û {{ş|kol3}} bila lînka ''nîşan bide'' deyne beriya sernavê, kolê di qutiya rengî de bila nebe. —[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:17, 16 tîrmeh 2026 (UTC)
== Modul:etymon ==
* [[Modul:etymon kevn]]: Rojanekirin hewce ye. —[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:17, 16 tîrmeh 2026 (UTC)
== [[Modul:ziman/code to canonical name]] ==
Belgekirina skrîptê û js divê were rastkirin. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 09:31, 22 tîrmeh 2026 (UTC)
:* [[MediaWiki:UpdateLanguageNameAndCode.js]]
:[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 09:50, 22 tîrmeh 2026 (UTC)
::* [[Modul:ziman/print]]
::[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 09:52, 22 tîrmeh 2026 (UTC)
:::*[[Modul:ziman/şablon]]
:::[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 09:56, 22 tîrmeh 2026 (UTC)
::::* [[MediaWiki:Gadget-translation editor.js/ziman.json]]
::::[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 11:06, 22 tîrmeh 2026 (UTC)
== [[Modul:quote]] ==
Piştî ev modul hate hazirkirin, lazim e navên jegirtinan werin rastkirin û li hemûyan {{param|jêgirtin}} were zêdekirin. Bnr. [[Gotûbêja şablonê:Jêgirtin/Ehmedê Xanî/Mem û Zîn]] [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 22:27, 5 tebax 2026 (UTC)
::Ev modul hema bêje hazir e. Hûn li ser van madeyan çi difikirin:
# {{para|tarîx}} lazim e full date be eger na, lazim e {{para|sal}} were bikaranîn. Feqat "'''2021''' kanûna pêşîn 23" bi vî şiklî bi min ne problem e çnkî derdê en.wikt "attestation" e delîla herî pêşî jî sal e.
#: {{demo|sep=wisa xuya dibe<br>|<nowiki>{{jêder-kitêb/ceribandin|en
|tarîx=23 December 2021|nivîskar=Harry Hobbs; George Williams|sernav=Micronations and the Search for Sovereignty|url=https://www.cambridge.org/core/books/micronations-and-the-search-for-sovereignty/B0414A3A322695D9EE71E4CDDFDA06DE|weşanxane=Cambridge University Press|rûpel=155|isbn=978-1-009-15012-5|jêgirtin=jêgirtin.|t=-}}</nowiki>}}
#{{para|amadekar}}/{{para|edîtor}}/{{para|terciman}} bi şiklê edîtoriya, amadekariya, tercimekirina
#: {{demo|sep=dide<br>|<nowiki>{{jêder-kitêb/ceribandin|en
|sernav=Medical Surgical Nursing|serî=Juta's Manual of Nursing|cildê-seriyê=volume 4|edîtor=Sophie Mataniele Mogotlane; Joyce Mokoena; Motshedisi Eunice Chauke; Anne Young|sal=2005|weşanxane=Juta Academic|isbn=978-0702171840|rûpel=!12-29|jêgirtin=jêgirtin|t=-}}</nowiki>}}
--[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 13:09, 10 tebax 2026 (UTC)
:@[[Bikarhêner:Bikarhêner|Bikarhêner]] û @[[Bikarhêner:Ghybu|Ghybu]] Hîn gelek tişt hene divê îzah bikin û fikrê we pirs bikim, feqat îzahkirin pir zor e, em dest bi bikaranînê bikin û dûre tiştên ku hûn naxwazin em dikarin biguherînîn, dibe? [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 13:11, 10 tebax 2026 (UTC)
::Dibe, piştî çêbû, em di praktîkê de bibînin ku çawa ye. -- [[Bikarhêner:Bikarhêner|Bikarhêner]] ([[Gotûbêja bikarhêner:Bikarhêner|gotûbêj]]) 18:05, 10 tebax 2026 (UTC)
= Javascript =
== [[Mediawiki:Gadget-citoid-helper.js]] ==
Ji bo bi citoidê kopîkirina malûmatên çavkaniyan amûreke wisa lazim e. Xisûsen ji ber ku bi çend amûrên din dikare were bikaranîn.
Feqat çend problem hene, şablonên me de kêmasiya parametreyan gelek in û xerîteyên citoidê hîn nehatine çêkirin. Wana sererast bikin dûre vê amûrê çêkin, piştre [[MediaWiki:Gadget-start.js|start.js]] û [[MediaWiki:Gadget-wikt.add-examples.js|add examples.js]] were rojanekirin.
- --[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 00:04, 19 tîrmeh 2026 (UTC)
:Merheba @[[Bikarhêner:Bikarhêner|Bikarhêner]], ez dibêjim karê Modul:quote zêde wext bistîne, bila em dest bi bikaranîna van amûran bikin dûre kêmasiyan em ê temam bikin înşela. Dikarî vana li cihên xwe yên rast kopî paste bikî?
# [[Special:PermanentLink/6291574|Bikarhêner:Wikihez/skrîpt/js/Gadget-citoid-helper.js]] --> [[Mediawiki:Gadget-citoid-helper.js]]
# Ya li jêr kopî bike qismê herî dawî ya AmûrênVeşartî li [[MediaWiki:Gadgets-definition]]:
## <code><nowiki>* citoid-helper[ResourceLoader|hidden|default|dependencies=mediawiki.util]|citoid-helper.js</nowiki></code>
--[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:58, 26 tîrmeh 2026 (UTC)
== [[MediaWiki:Gadget-start.js]] ==
Rojanekirin hewce ye. Min gelek tişt lê zêde kir lê ez niha test dikime. Piştre em bar bikin:
* [[Bikarhêner:Wikihez/Gadget-start.js]] --> [[MediaWiki:Gadget-start.js]]
* [[Bikarhêner:Wikihez/Gadget-start.css]] --> [[MediaWiki:Gadget-start.css]]
--[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 22:08, 17 tîrmeh 2026 (UTC)
:Min [[MediaWiki:Gadget-start/data.json|data.json]] çêkir ji bo ku bi hêsanî malûmatên heyî werin guhartin bêyî guhartina Javascriptê. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 19:49, 18 tîrmeh 2026 (UTC)
:Xeletiyên ku ji bîr nekim rast bikim:
:* Wextê min çavkanî "kitêb" hilbijart û bi destî tije kir xeletiyeke [https://ku.wiktionary.org/w/index.php?title=xezete&diff=prev&oldid=6265392 wisa] derket her kelîme hate lînkkirin.
:* <code>html("⠿")</code> ev ne lazim e.
:* textarea ji bo çavkaniyên jêgirtinan xaseten yên sernav hîn jî ne draggable e.
:* pêşdîtina zindî checkbox wextê tê rakirin, pêşdîtin winda nabe.
:* Butona mobîlê ya vekirina formê di moda tarî de belî nabe, tenê wekî qutiyeke tarî xuya dibe.
:* Metna hişyarkirinê di guhartina rûpelên heyî de lazim e baştir bikim.
:[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 23:51, 18 tîrmeh 2026 (UTC)
::Ev problem çêbûn, ez ê binêrim ka çi problemên din hene. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 14:15, 19 tîrmeh 2026 (UTC)
:::Çêke: Ji bo qismê çavkaniyê yek dikare API call û Kategorî:Çavkanî bi kar bîne ji bo ku şablon zêde bikî ji yên heyî. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 21:21, 19 tîrmeh 2026 (UTC)
::::Ev jî çêbû, min beşa çavkanî jî çêkir. Eger xeletî dernekeve û problema valahiya piştî etîketê ji bîr nekim, piştî rojanekirina amûrên linkify, û citoid em dikarin bar bikin. Ez ê ti tiştê nû îlawe nekim, zêde dirêj bû. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:14, 21 tîrmeh 2026 (UTC)
:::::Merheba @[[Bikarhêner:Bikarhêner|Bikarhêner]]. Dikarî wana bar bikî?
:::::* [[Bikarhêner:Wikihez/Gadget-start.js]] --> [[MediaWiki:Gadget-start.js]]
:::::* [[Bikarhêner:Wikihez/Gadget-start.css]] --> [[MediaWiki:Gadget-start.css]]
:::::* [[MediaWiki:Gadgets-definition]] wisa rojane bike:
:::::* start[ResourceLoader|default|package|dependencies=mediawiki.util,ext.gadget.StorageUtils,ext.gadget.citoid-helper]|start.js|start.css|start.js/data.json
:::::[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 09:39, 5 tebax 2026 (UTC)
{{şirove}} Dewama ''[[Special:PermanentLink/6333688|Gotûbêja bikarhêner:Rewiye tine#WF:Nû]]'' bila gotûbêja wî em spam nekin. :D
{{r|Ghybu}} dikarî [[Special:PermanentLink/6333689|vê htmlê]] binêrî claude rast fêm kiriye yan na? Daxîne û wek html qeyd bike. --[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 18:43, 14 tebax 2026 (UTC)
:Min seh wîkîyên din jî kir, li wîkiya fransî tiştekî wekî daxwaza min çêkirine (tiştên ku ne hewce ne wekî "tab" çêkirine an jî hatine vêşartin): [//fr.wiktionary.org/w/index.php?title=fdsdfdsf&action=edit&redlink=1]. Formata me yê berî jî bi vê lojîkê hatibû çêkirin, wekî de.wiktionary ([//de.wiktionary.org/w/index.php?title=sdfdsfsdfs&action=edit&preload=Vorlage:Formatvorlage_(Substantiv_vereinfacht)]) [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 19:01, 14 tebax 2026 (UTC)
::PS: Dîsa jî Claude min rind fêm kiriye :)) Feqet min got ku beşên Mane", "Bilêvkirin" û "Beşên din" cem hev (wekî "tab") ". Û dema ku tu terê di nav "Besên din" Hevmane, Jê, ... li wira werin dayîn. Wêne/Resim û Nimûne jî di nav beşa ("tab") "Mane" [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 19:17, 14 tebax 2026 (UTC)
== [[Mediawiki:Gadget-QQ.js]] ==
Ev amûr di şikle Minerva de. Her daîm vê xeletiyê dide:
<syntaxhighlight lang="js">
TypeError: Cannot read properties of null (reading 'addEventListener') at css () at runScript () at Array.<anonymous> () at flushCssBuffer ()
</syntaxhighlight> [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 19:29, 18 tîrmeh 2026 (UTC)
:* [[Bikarhêner:Wikihez/skrîpt/js/Gadget-QQ.js]] --> [[Mediawiki:Gadget-QQ.js]]
:* [[Bikarhêner:Wikihez/Gadget-QQ.css]] --> [[Mediawiki:Gadget-QQ.css]]
:Ez dibêjim çêbû lê ka çend roj biceribînim. Tiştên ku hatin sererastkirin:
:# Google Books API Key dikarî zêde bikî, dixe cookies û di gerokê de dimîne. Berê bê API Key dixebitiya lê êdî mecbûr e ku API Key-a te hebe, bidestxistina wê ne zêde zor e lê dîsa jî tevlihev e.
:# Êdî di mobîlê de dixebite, heta di mobîlê de xweştir xuya dike.
:# Moda tarî
:# OOUI dewsa jquery.ui
:# Li qutiyê çi dixwazî zêde bikî, dikare li gorî îsm, sifet, fiîl bitewîne. Lê ji bo fiîl tenê dikare çend heb inflection bîne.
:# Butona paqij bike lê zêde kir.
:# Çend paqijiyên jêgirtinên Google Kitêbê niha hene.
:[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 23:38, 18 tîrmeh 2026 (UTC)
::Tewandina fiîlan û xeletiya modulê lazim e were rastkirin. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 14:40, 21 tîrmeh 2026 (UTC)
== [[MediaWiki:Gadget-wikt.add-examples.js]] ==
Min ev amûr hinek rojane kir feqat çend problem hene berî ku bar bikin.
Tiştên ku min guhart:
# Êdî li sayfeyên bi {{ş|maneid}} jî dixebite,
# Cihê di wîkîtekstê de yê ku jêgirtin were îlawekirin baştir bû,
# [[Mediawiki:Gadget-citoid-helper.js|citoid helper]] zêde kir ji bo ku bi hêsanî çavkanî bi riya doi, isbn an urlyê werin tijîkirin.
* [[Bikarhêner:Wikihez/Gadget-wikt.add-examples.css]] --> [[MediaWiki:Gadget-wikt.add-examples.css]]
* [[Bikarhêner:Wikihez/Gadget-wikt.add-examples.js]] --> [[MediaWiki:Gadget-wikt.add-examples.js]]
- --[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 00:50, 19 tîrmeh 2026 (UTC)
:Min "wikt." qismên cache kirinê ya wîkiya fransî bi [[MediaWiki:Gadget-StorageUtils.js]] guhartiye. loma ji bîr nekin wê amûrê li [[MediaWiki:Gadgets-definition]] zêde bikin. û navê amûrê jî biguhêrînin. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 09:15, 23 tîrmeh 2026 (UTC)
::Berê li ser WF:ceribandin dixebitî. niha naxebite. Divê were rastkirin. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 22:10, 7 tebax 2026 (UTC)
== Gadget-translation editor ==
* [[MediaWiki:Gadget-translation editor.js]]: divê formata en.wîktê were bikaranîn ji ber ku me gelek tercime ji en.wîktê kopî kir û ev js hîn nikare formata wekî li jêr bi kar bîne.
<syntaxhighlight lang="wikitext">
* {{Z|sh}}:
*: Kirîlî:
*: Latînî
</syntaxhighlight>
—[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:17, 16 tîrmeh 2026 (UTC)
== [[Mediawiki:Gadget-linkify.js]] ==
* ''rûpeleke'' wekî<syntaxhighlight lang="wikitext">[[rûpeleke]]</syntaxhighlight> lînk dike, bi regexê belkî dikare wisa bike <syntaxhighlight lang="wikitext">[[rûpel]]eke</syntaxhighlight>
—[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:17, 16 tîrmeh 2026 (UTC)
* Amûreke din wekî [[User:Wikihez/Gadget-linkify.js|linkify]] lazim e ku herfên mezin biçûk bike ji bo kurmancî.—[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:17, 16 tîrmeh 2026 (UTC)
:{{r|Bikarhêner}} Merheba bira, dikarî viya jî bar bikî?:
* [[Special:PermanentLink/6291974|linkify]] --> [[Mediawiki:Gadget-linkify.js]]
Spas--[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 11:42, 29 tîrmeh 2026 (UTC)
:Dûre [https://ku.wiktionary.org/wiki/MediaWiki:Gadget-start.js#L-283 li vir] wiktviLinkify bike kuLinkify xêra xwe [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 11:51, 29 tîrmeh 2026 (UTC)
::Min ji bîr kir lê zêde bikim niha nikare "Dİ" bike "di", xeletiyeke berbelav a di nivîsên kurdî de, herfên din ên wekî ll yan rr jî hewce ne werin zêdekirin. Dûre em zêde bikin. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 21:42, 29 tîrmeh 2026 (UTC)
:::Min nû ferq kir, sayfeyên ku hîn nehatine çêkirin wîkîlînk nake. Problemeke mezin e divê were rastkirin. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 18:15, 30 tîrmeh 2026 (UTC)
::::Na, lînk dike, tiştekî din heye... [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 10:49, 31 tîrmeh 2026 (UTC)
== Amûra manayê ==
Amûreke din ji bo nivîsina maneyê wekî Nimûne zêde bike lazim e [https://ku.wiktionary.org/w/index.php?title=Bikarh%C3%AAner:Wikihez/test.js&oldid=6276876 js] [https://ku.wiktionary.org/w/index.php?title=%C5%9Eablon:ceribandin2&oldid=6265629 şablon] [https://ku.wiktionary.org/w/index.php?title=Bikarh%C3%AAner:Wikihez/common.css&oldid=6265642 css] --[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 09:12, 23 tîrmeh 2026 (UTC)
== [[MediaWiki:Gadget-jeder.js]] ==
@[[Bikarhêner:Ghybu|Ghybu]] Çavkaniyên jêderê di moda pêşdîtinê de jêderê vedişêre, ew jî min gelek eciz dike wextê çavkanî zêde dikim. Min ji Claude pirsî û kodan nîşanî wê da, wisa cewab da:
Yes — and this file actually explains the whole thing precisely, better than my earlier guess about extract-stripping.
What's happening: the CSS rule
<syntaxhighlight lang="css">
.jeder{
display:none;
}
</syntaxhighlight>
hides every citation by default, *unconditionally*. The only thing that ever makes it visible again is the gadget's JS: it finds each `.jeder`, builds the short "`— (year, author, +)`" summary from the `.j-pewist` fields, and either reveals the short version or — for citations with no `.j-pewist` fields — explicitly sets `display:inline` on the original.
So visibility of citations depends entirely on this JS running. In the normal article view (Image 1) it runs, so you see the collapsed "`(1918, E. Rehmî Ji Mala Hekariyan, Amadekar: M. E. Bozarslan, +)`" form. In whatever generated Image 2 — a hover-preview/extract/API render — gadget JS doesn't execute, so nothing ever removes the `display:none`, and the citation vanishes completely rather than degrading to "still visible, just not collapsed."
<b>The fix:</b> flip the default so the *un-collapsed* state is the safe fallback, and let JS do the hiding only after it successfully builds the short version. That way, any context without JS shows the full citation instead of nothing.
CSS — remove the blanket hide:
<syntaxhighlight lang="css">
.jeder {
/* intentionally no display:none here — see Gadget-... .js */
}
</syntaxhighlight>
JS — do the hiding from script, after the short form exists:
{{veşêre-ser}}
<syntaxhighlight lang="js">
// Ji bo şablonên [[Şablon:jêder]] hatiye nivîsandin.
// Parametreyên ku di navbera "<span class="j-pewist">...</span>" an "{{j-pêwîst|...}}" de ne venaşêre.
$(function() {
function nivisaKurtTevliBike(sund, nivisKurt) {
var zede = $('<a>+</a>')
.addClass('click')
.attr('href', '#')
.attr('title', 'zêdetir')
.css('font-weight', 'bold');
var kurt = $(' <a>↩</a>')
.addClass('click-kurt')
.attr('href', '#')
.attr('title', 'veşêre')
.css('font-weight', 'bold');
$('<span>' + nivisKurt + '</span>')
.append(zede).append(')')
.addClass('jeder-kurt')
.css('font-size', '0.85em')
.insertAfter(sund);
sund.append(' ').append(kurt);
// Only hide the full citation once the short summary actually exists.
// If this script never runs (no-JS clients, hover-preview extracts,
// action=render, etc.), the full citation stays visible instead of
// silently disappearing.
sund.css('display', 'none');
}
function vesere() {
$('.jeder').each(function() {
var elmTab = $(this).find('.j-pewist').clone();
if (elmTab.length) {
var elm = '';
for (var i = elmTab.length - 1; i >= 0; i--) {
elm = elmTab.eq(i).html() + ', ' + elm;
}
var nivisKurt = ' — (' + elm;
nivisaKurtTevliBike($(this), nivisKurt);
}
// else: no j-pewist fields to shorten — leave the full citation
// as it already renders (visible), nothing to do.
});
}
vesere();
$(".click").click(function(e) {
e.preventDefault();
$(this).parent('.jeder-kurt').css('display', 'none');
$(this).parent('.jeder-kurt').prev().css('display', 'inline');
});
$(".click-kurt").click(function(e) {
e.preventDefault();
$(this).parent('.jeder').css('display', 'none');
$(this).parent('.jeder').next().css('display', 'inline');
});
});
</syntaxhighlight>
Net effect:
- JS-enabled readers (normal article view): identical experience to today — collapsed short form with `+`/`↩` toggle.
- No-JS contexts (previews, extracts, screen readers before JS loads, print, etc.): full citation is shown instead of nothing — a real regression fix rather than a cosmetic one.
One caveat worth being upfront about: this fixes it *if* the preview context renders the gadget's HTML/CSS but doesn't execute gadget JS (which is the far more common case, and what this code strongly suggests is happening). If Image 2 instead comes from a pipeline that strips the `.jeder`/`.jegirtin-text` elements out of the HTML entirely before this CSS/JS even gets a chance to apply, no on-wiki CSS/JS change can help — that'd need the extract-generation config changed instead. Given what this gadget file shows, though, I'd bet on the CSS-hide explanation.
{{veşêre-bin}}
Em dûre biceribînin eger xeletî tinebe, vî tiştî jî rast bikin. --[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 20:00, 23 tîrmeh 2026 (UTC)
:Ez APIya MediaWiki rind nizanim belkî Claude dizane:) Em nikarin bibêjin dema ku moda "''action=edit''" e fonksiyona <code>function vesere()</code> bi kar meyîne. [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 15:57, 24 tîrmeh 2026 (UTC)
::Na, di moda "edît"-ê de <code>var elmTab = null</code>... [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 16:13, 24 tîrmeh 2026 (UTC)
?:
<syntaxhighlight lang="js">
if (
mw.config.get('wgAction') === 'edit' ||
mw.config.get('wgAction') === 'submit'
){
var elmTab = [];
} else {
var elmTab = $(this).find('.j-pewist').clone();
}
</syntaxhighlight>
--[[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 16:31, 24 tîrmeh 2026 (UTC)
:Ez jî nizanim Claude çiqas ji mediawiki fêm dike lê heta niha ti tişt nîne ku min jê pirs kir û nikaribû çêke, bila wekî reklam nebe feqat Claude mikemmel e, dibêjim "li vir çima xeletiyeke wisa derdikeve" di dosyeya 2000 rêzî de diçe tiştê xelet tenê rast dike tiştekî din naguherîne. Chatgpt û aistudio qet wisa nakin, eynî dosyeyê deh cara dinivîsin, deh netîceyên cuda derdikevin :D
:Em dikarin vê amûrê wextê edit û submitê neaktîv bikin wekî <syntaxhighlight lang="js">if (!(action === "edit" || action === "submit")) {
:return;</syntaxhighlight> lê wê demê display:none wê çibe nizanim. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 18:23, 24 tîrmeh 2026 (UTC)
::display:none ne hewce ye ma jixwe di nav kodê [https://ku.wiktionary.org/w/index.php?title=MediaWiki:Gadget-jeder.js&oldid=6069025#L-49 L-49] de inline/none heye? [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 18:53, 24 tîrmeh 2026 (UTC)
:Min bi vî şiklî [https://ku.wiktionary.org/w/index.php?title=Bikarh%C3%AAner:Wikihez/vector-2022.js&diff=prev&oldid=6290816#L-28] ceriband feqat nexebitî. "display:none" di pêşdîtinê de dixebite feqat js naşixule. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 14:43, 25 tîrmeh 2026 (UTC)
::Kodên JSê pir hez nakim (pêşta hukurina APIya MWyê hewce bû) dîsa jî ez ê seh bikim :) [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 16:49, 27 tîrmeh 2026 (UTC)
:::Ez niha bi vî şiklî [https://ku.wiktionary.org/w/index.php?title=Bikarh%C3%AAner:Wikihez/test.js&oldid=6290820] [https://ku.wiktionary.org/w/index.php?title=Bikarh%C3%AAner:Wikihez/common.css&oldid=6290821#L-8] bi kar tînim ti problem nîne. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 17:09, 27 tîrmeh 2026 (UTC)
== [[MediaWiki:Gadget-PagePreviews.js]] ==
Ez dibêjim em vê amûrê jî çêkin [[:en:MediaWiki:Gadget-PagePreviews.js]] --[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 10:56, 3 tebax 2026 (UTC)
= Moda tarî =
== [[Şablon:wîkîpediya]] ==
Rengê tarî de xirab e.--[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 19:36, 4 tebax 2026 (UTC)
= Bot =
Karên ku bi botê werin çêkirin ji kerema xwe li vir binivîsin.
== Kategorî:Biwêj ==
[[:Kategorî:Biwêj]] divê were paqijkirin, lîsteya madeyên {{ş|biwêj}} çêke, yên ku tê de bûn, kirin, man hene filtre bike yên din bi destî tê çêkirin.—[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:17, 16 tîrmeh 2026 (UTC)
== Jêgirtin ==
Xistina jêgirtinên beşa [https://ku.wiktionary.org/w/index.php?search=insource%3A%2F%3D+*Ji+%5BWw%5D%C3%AAjey%C3%AA+*%3D%2F&title=Taybet%3AL%C3%AAger%C3%AEn&profile=advanced&fulltext=1&ns0=1&searchToken=8rh0bmw8dccsi7aynl6zli8uf ji wêjeyê] li beşa maneyê. —[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:17, 16 tîrmeh 2026 (UTC)
== Bota Toolforgeê ==
Botekî Toolforgeê lazim e ji bo ku xeletiyên biçûk wekî şablonên bi navên îngilîzî werin kurdîkirin yan jî valahiya beşan rast bike û hwd.—[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:17, 16 tîrmeh 2026 (UTC)
:Min [[Bikarhêner:Wikihez/skrîpt/py/kuwiktkozmetik.py|paqijiyen kozmetîk]] hazir kir feqat hîn navên şablonan naguhêre. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 20:05, 4 tebax 2026 (UTC)
== Updatew ==
Bota [[Bikarhêner:Wikihez/skrîpt/py/updateW.py|updateW]] divê were rojanekirin. Yan jî yekî nû were çêkirin. Şablonên {{ş|W}} di beşa tercimeyan de sererast dike û zimanan rêz dike. Ya niha xeletiya navê zimanî dide.—[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:17, 16 tîrmeh 2026 (UTC)
== sihir --> sêhr ==
Tercimeyên ''[[sêhr]]'' hemû dibêje ''sihir'' loma bi botê lazim e kirin ''sêhr''. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 17:43, 18 tîrmeh 2026 (UTC)
:Sihirbaz --> sêhrbaz [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 18:07, 18 tîrmeh 2026 (UTC)
== Tercimeyên dîroknas ==
Li tercimeyên [[dîroknas]], hevmaneyên wê hewce ye were îlawekirin. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 18:44, 18 tîrmeh 2026 (UTC)
== Mewlûd ==
Sererastkirina jêgirtinên mewlûdê [https://ku.wiktionary.org/w/index.php?search=insource%3A%2Fw%5C%3AMela+His%C3%AAn%C3%AA+Batey%C3%AE%2F&title=Taybet%3AL%C3%AAger%C3%AEn&ns0=1&searchToken=8m0tguy3sqt7edr4sg0u8hedo] wekî [https://ku.wiktionary.org/w/index.php?title=dax%C3%AEdar&curid=284303&diff=6265851&oldid=6142285] [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 09:43, 20 tîrmeh 2026 (UTC)
3drpe7oku20v3d5axgt8pdp9zr0g1bn
6333705
6333704
2026-08-14T19:26:34Z
Wikihez
7344
/* MediaWiki:Gadget-start.js */ Bersiv
6333705
wikitext
text/x-wiki
{{/ser}}
= Karên ferhengî =
== Mane ==
* [[:Kategorî:Madeyên bê beşa mane]]
** [[:Kategorî:Madeyên bê beşa mane bi kurmancî]]
Li ser van rûpelan ev made hene ku maneyan wan nehatine nivîsin û divê werin nivîsin. —[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:17, 16 tîrmeh 2026 (UTC)
== Etîmolojî ==
*[[:Kategorî:Daxwazên etîmolojiyê]]
**[[:Kategorî:Daxwazên etîmolojiyê bi kurmancî]]
Li ser van rûpelan ev made hene ku etîmolojiya wan hîn nehatine nivîsin. Ji bo alîkariyê binêre [[WF:Etîmolojî]] —[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:17, 16 tîrmeh 2026 (UTC)
== Cureyê rêzimanî ==
* [[:Kategorî:Gotarên bê kategoriya rêzimanî]]
* [[:Kategorî:Gotarên bê kategoriya rêzimanî bi kurmancî]]
Li ser van rûpelan ev made hene ku cureyên wan yên rêzimanî hîn nehatine nivîsin. Ji bo alîkariyê binêre [[Alîkarî:Cureyên peyvan]] —[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:17, 16 tîrmeh 2026 (UTC)
== Kontrol ==
* [[:Kategorî:Kontrol]]
** [[:Kategorî:Kontrola maneyê]]
Ev madde bi botê hatine çêkirin, yek bi yek divê werin kontrolkirin. —[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:17, 16 tîrmeh 2026 (UTC)
= Şablon =
== IPA ==
* {{ş|IPA}} divê [[Modul:IPA]] bi kar bîne. —[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:17, 16 tîrmeh 2026 (UTC)
== Deng ==
Kurdîkirina belgekirina {{ş|deng}} lazim e.--[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 00:06, 19 tîrmeh 2026 (UTC)
= Modul =
== Modul:form of/templates ==
* [[Modul:form of/templates]]: Divê ev modul were rojanekirin û xeletiyên berê wekî ([[hevalê]]) werin rastkirin. —[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:17, 16 tîrmeh 2026 (UTC)
*:Merheba @[[Bikarhêner:Ghybu|Ghybu]] Te gotibû di vê modulê de xeletî hene, jkx tu dikarî li vir binivîsî çi kêmasî hene, daku wextê rojane dikim ez ji bîr nekim? [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:16, 21 tîrmeh 2026 (UTC)
*::Silav. Nizanim ji bîra min çûye... Herwiha ji bo çêkirina formên navdêran zanînên cîns û tîpa dawî bes e:
*::* (-ê, mê) => çemandî, bangkirin
*::* (-ê, nêr) => îzafe
*::* (-ê, mê û nêr) => îzafe (nêr), bangkirin (mê), çemandî (mê)
*::* (-a) => îzafe (mê)
*::* (-ekî) => îzafe û çemandî (nêr, nebinavkirî)
*::* (-eke) = > îzafe (mê, nebinavkirî)
*::* ...
*:: <code>if find(mw.title.getCurrentTitle().subpageText, 'ekî$') then ... end</code>
*::<code><nowiki>{{ku-tewîn-navForm|<navdêr>|<zayend>}</nowiki></code>
*::Tablo û nivîs di yekcarî de tên çêkirin...
*::Feqet problem lêzêdekirina mînakan e. [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 17:34, 21 tîrmeh 2026 (UTC)
*:::Lêzêdekirina kîjan nimûneyan? Ev koda js ji bo çi ye? Qisûrê nenêre min fêm nekir :/ [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 18:13, 21 tîrmeh 2026 (UTC)
*::::Li vira ([[hevalê#Formeke navdêrê]]) di bin maneyên 1. û 2. mînak nayên tevlî kirin :) [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 18:18, 21 tîrmeh 2026 (UTC)
*:::::Ev tercîh e, ne mecbûrî ye, em dikarin [https://ku.wiktionary.org/w/index.php?title=heval%C3%AA&diff=prev&oldid=6276350 wisa] bikin. Wekî din? [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 18:29, 21 tîrmeh 2026 (UTC)
*::::::Min li jor tênê got ku tenê parametreyên "navdêr" û "zayend" hewce nee. Bi '''[//ku.wiktionary.org/w/index.php?title=heval%C3%AA&curid=969734&diff=6276353&oldid=6276350 vî]''' awayî jî tê çêkirin. Parametreyên din ne hewce ne. [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 18:38, 21 tîrmeh 2026 (UTC)
*:::::::Ji bo wê şabloneke din lazim e, bila ev şablon wekî îngilîzî bimîne em ji bo kurmancî yekî din çêkin. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 18:42, 21 tîrmeh 2026 (UTC)
*::::::::[https://ku.wiktionary.org/w/index.php?title=heval%C3%AA&oldid=6276885 wisa] çawa ye? Bi min nivîsîna nimûneyan zêde ne lazim e ji ber ku ti kes serê xwe pê naêşîne. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 09:46, 23 tîrmeh 2026 (UTC)
*:::::::::@[[Bikarhêner:Ghybu|Ghybu]] Vê şablonê bi kar bînin an na? Navê şablonê kê çi be? [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 19:07, 24 tîrmeh 2026 (UTC)
== Modul:columns ==
* [[Modul:columns]] were rojanekirin û {{ş|kol3}} bila lînka ''nîşan bide'' deyne beriya sernavê, kolê di qutiya rengî de bila nebe. —[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:17, 16 tîrmeh 2026 (UTC)
== Modul:etymon ==
* [[Modul:etymon kevn]]: Rojanekirin hewce ye. —[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:17, 16 tîrmeh 2026 (UTC)
== [[Modul:ziman/code to canonical name]] ==
Belgekirina skrîptê û js divê were rastkirin. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 09:31, 22 tîrmeh 2026 (UTC)
:* [[MediaWiki:UpdateLanguageNameAndCode.js]]
:[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 09:50, 22 tîrmeh 2026 (UTC)
::* [[Modul:ziman/print]]
::[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 09:52, 22 tîrmeh 2026 (UTC)
:::*[[Modul:ziman/şablon]]
:::[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 09:56, 22 tîrmeh 2026 (UTC)
::::* [[MediaWiki:Gadget-translation editor.js/ziman.json]]
::::[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 11:06, 22 tîrmeh 2026 (UTC)
== [[Modul:quote]] ==
Piştî ev modul hate hazirkirin, lazim e navên jegirtinan werin rastkirin û li hemûyan {{param|jêgirtin}} were zêdekirin. Bnr. [[Gotûbêja şablonê:Jêgirtin/Ehmedê Xanî/Mem û Zîn]] [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 22:27, 5 tebax 2026 (UTC)
::Ev modul hema bêje hazir e. Hûn li ser van madeyan çi difikirin:
# {{para|tarîx}} lazim e full date be eger na, lazim e {{para|sal}} were bikaranîn. Feqat "'''2021''' kanûna pêşîn 23" bi vî şiklî bi min ne problem e çnkî derdê en.wikt "attestation" e delîla herî pêşî jî sal e.
#: {{demo|sep=wisa xuya dibe<br>|<nowiki>{{jêder-kitêb/ceribandin|en
|tarîx=23 December 2021|nivîskar=Harry Hobbs; George Williams|sernav=Micronations and the Search for Sovereignty|url=https://www.cambridge.org/core/books/micronations-and-the-search-for-sovereignty/B0414A3A322695D9EE71E4CDDFDA06DE|weşanxane=Cambridge University Press|rûpel=155|isbn=978-1-009-15012-5|jêgirtin=jêgirtin.|t=-}}</nowiki>}}
#{{para|amadekar}}/{{para|edîtor}}/{{para|terciman}} bi şiklê edîtoriya, amadekariya, tercimekirina
#: {{demo|sep=dide<br>|<nowiki>{{jêder-kitêb/ceribandin|en
|sernav=Medical Surgical Nursing|serî=Juta's Manual of Nursing|cildê-seriyê=volume 4|edîtor=Sophie Mataniele Mogotlane; Joyce Mokoena; Motshedisi Eunice Chauke; Anne Young|sal=2005|weşanxane=Juta Academic|isbn=978-0702171840|rûpel=!12-29|jêgirtin=jêgirtin|t=-}}</nowiki>}}
--[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 13:09, 10 tebax 2026 (UTC)
:@[[Bikarhêner:Bikarhêner|Bikarhêner]] û @[[Bikarhêner:Ghybu|Ghybu]] Hîn gelek tişt hene divê îzah bikin û fikrê we pirs bikim, feqat îzahkirin pir zor e, em dest bi bikaranînê bikin û dûre tiştên ku hûn naxwazin em dikarin biguherînîn, dibe? [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 13:11, 10 tebax 2026 (UTC)
::Dibe, piştî çêbû, em di praktîkê de bibînin ku çawa ye. -- [[Bikarhêner:Bikarhêner|Bikarhêner]] ([[Gotûbêja bikarhêner:Bikarhêner|gotûbêj]]) 18:05, 10 tebax 2026 (UTC)
= Javascript =
== [[Mediawiki:Gadget-citoid-helper.js]] ==
Ji bo bi citoidê kopîkirina malûmatên çavkaniyan amûreke wisa lazim e. Xisûsen ji ber ku bi çend amûrên din dikare were bikaranîn.
Feqat çend problem hene, şablonên me de kêmasiya parametreyan gelek in û xerîteyên citoidê hîn nehatine çêkirin. Wana sererast bikin dûre vê amûrê çêkin, piştre [[MediaWiki:Gadget-start.js|start.js]] û [[MediaWiki:Gadget-wikt.add-examples.js|add examples.js]] were rojanekirin.
- --[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 00:04, 19 tîrmeh 2026 (UTC)
:Merheba @[[Bikarhêner:Bikarhêner|Bikarhêner]], ez dibêjim karê Modul:quote zêde wext bistîne, bila em dest bi bikaranîna van amûran bikin dûre kêmasiyan em ê temam bikin înşela. Dikarî vana li cihên xwe yên rast kopî paste bikî?
# [[Special:PermanentLink/6291574|Bikarhêner:Wikihez/skrîpt/js/Gadget-citoid-helper.js]] --> [[Mediawiki:Gadget-citoid-helper.js]]
# Ya li jêr kopî bike qismê herî dawî ya AmûrênVeşartî li [[MediaWiki:Gadgets-definition]]:
## <code><nowiki>* citoid-helper[ResourceLoader|hidden|default|dependencies=mediawiki.util]|citoid-helper.js</nowiki></code>
--[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:58, 26 tîrmeh 2026 (UTC)
== [[MediaWiki:Gadget-start.js]] ==
Rojanekirin hewce ye. Min gelek tişt lê zêde kir lê ez niha test dikime. Piştre em bar bikin:
* [[Bikarhêner:Wikihez/Gadget-start.js]] --> [[MediaWiki:Gadget-start.js]]
* [[Bikarhêner:Wikihez/Gadget-start.css]] --> [[MediaWiki:Gadget-start.css]]
--[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 22:08, 17 tîrmeh 2026 (UTC)
:Min [[MediaWiki:Gadget-start/data.json|data.json]] çêkir ji bo ku bi hêsanî malûmatên heyî werin guhartin bêyî guhartina Javascriptê. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 19:49, 18 tîrmeh 2026 (UTC)
:Xeletiyên ku ji bîr nekim rast bikim:
:* Wextê min çavkanî "kitêb" hilbijart û bi destî tije kir xeletiyeke [https://ku.wiktionary.org/w/index.php?title=xezete&diff=prev&oldid=6265392 wisa] derket her kelîme hate lînkkirin.
:* <code>html("⠿")</code> ev ne lazim e.
:* textarea ji bo çavkaniyên jêgirtinan xaseten yên sernav hîn jî ne draggable e.
:* pêşdîtina zindî checkbox wextê tê rakirin, pêşdîtin winda nabe.
:* Butona mobîlê ya vekirina formê di moda tarî de belî nabe, tenê wekî qutiyeke tarî xuya dibe.
:* Metna hişyarkirinê di guhartina rûpelên heyî de lazim e baştir bikim.
:[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 23:51, 18 tîrmeh 2026 (UTC)
::Ev problem çêbûn, ez ê binêrim ka çi problemên din hene. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 14:15, 19 tîrmeh 2026 (UTC)
:::Çêke: Ji bo qismê çavkaniyê yek dikare API call û Kategorî:Çavkanî bi kar bîne ji bo ku şablon zêde bikî ji yên heyî. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 21:21, 19 tîrmeh 2026 (UTC)
::::Ev jî çêbû, min beşa çavkanî jî çêkir. Eger xeletî dernekeve û problema valahiya piştî etîketê ji bîr nekim, piştî rojanekirina amûrên linkify, û citoid em dikarin bar bikin. Ez ê ti tiştê nû îlawe nekim, zêde dirêj bû. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:14, 21 tîrmeh 2026 (UTC)
:::::Merheba @[[Bikarhêner:Bikarhêner|Bikarhêner]]. Dikarî wana bar bikî?
:::::* [[Bikarhêner:Wikihez/Gadget-start.js]] --> [[MediaWiki:Gadget-start.js]]
:::::* [[Bikarhêner:Wikihez/Gadget-start.css]] --> [[MediaWiki:Gadget-start.css]]
:::::* [[MediaWiki:Gadgets-definition]] wisa rojane bike:
:::::* start[ResourceLoader|default|package|dependencies=mediawiki.util,ext.gadget.StorageUtils,ext.gadget.citoid-helper]|start.js|start.css|start.js/data.json
:::::[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 09:39, 5 tebax 2026 (UTC)
{{şirove}} Dewama ''[[Special:PermanentLink/6333688|Gotûbêja bikarhêner:Rewiye tine#WF:Nû]]'' bila gotûbêja wî em spam nekin. :D
{{r|Ghybu}} dikarî [[Special:PermanentLink/6333689|vê htmlê]] binêrî claude rast fêm kiriye yan na? Daxîne û wek html qeyd bike. --[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 18:43, 14 tebax 2026 (UTC)
:Min seh wîkîyên din jî kir, li wîkiya fransî tiştekî wekî daxwaza min çêkirine (tiştên ku ne hewce ne wekî "tab" çêkirine an jî hatine vêşartin): [//fr.wiktionary.org/w/index.php?title=fdsdfdsf&action=edit&redlink=1]. Formata me yê berî jî bi vê lojîkê hatibû çêkirin, wekî de.wiktionary ([//de.wiktionary.org/w/index.php?title=sdfdsfsdfs&action=edit&preload=Vorlage:Formatvorlage_(Substantiv_vereinfacht)]) [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 19:01, 14 tebax 2026 (UTC)
::PS: Dîsa jî Claude min rind fêm kiriye :)) Feqet min got ku beşên Mane", "Bilêvkirin" û "Beşên din" cem hev (wekî "tab") ". Û dema ku tu terê di nav "Besên din" Hevmane, Jê, ... li wira werin dayîn. Wêne/Resim û Nimûne jî di nav beşa ("tab") "Mane" [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 19:17, 14 tebax 2026 (UTC)
::Erê ya fr.wikt min jî dîtibû jixwe fikrê tab min ji wan girtibû :D (feqat min li cem wan tenê tab-a maneyê dît yên din nedît çawa tê vekirin nizanim) Berê hemû beş piştî maneyê bibûn, dûre min sê Tab çêkir, Bingehîn+Lînkkirin+Bikaranîn. Niha lazim e Tabeke din çêkim. Ya ku claude çêkiriye bnr. [[Special:PermanentLink/6333698#L-7]] ne baş e bnr. [[Special:PermanentLink/6333703|qiyaskirinê li ser vê htmlê]] Êdî ez Claude abuse dikime ji ber ku Pro ye :D [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 19:26, 14 tebax 2026 (UTC)
== [[Mediawiki:Gadget-QQ.js]] ==
Ev amûr di şikle Minerva de. Her daîm vê xeletiyê dide:
<syntaxhighlight lang="js">
TypeError: Cannot read properties of null (reading 'addEventListener') at css () at runScript () at Array.<anonymous> () at flushCssBuffer ()
</syntaxhighlight> [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 19:29, 18 tîrmeh 2026 (UTC)
:* [[Bikarhêner:Wikihez/skrîpt/js/Gadget-QQ.js]] --> [[Mediawiki:Gadget-QQ.js]]
:* [[Bikarhêner:Wikihez/Gadget-QQ.css]] --> [[Mediawiki:Gadget-QQ.css]]
:Ez dibêjim çêbû lê ka çend roj biceribînim. Tiştên ku hatin sererastkirin:
:# Google Books API Key dikarî zêde bikî, dixe cookies û di gerokê de dimîne. Berê bê API Key dixebitiya lê êdî mecbûr e ku API Key-a te hebe, bidestxistina wê ne zêde zor e lê dîsa jî tevlihev e.
:# Êdî di mobîlê de dixebite, heta di mobîlê de xweştir xuya dike.
:# Moda tarî
:# OOUI dewsa jquery.ui
:# Li qutiyê çi dixwazî zêde bikî, dikare li gorî îsm, sifet, fiîl bitewîne. Lê ji bo fiîl tenê dikare çend heb inflection bîne.
:# Butona paqij bike lê zêde kir.
:# Çend paqijiyên jêgirtinên Google Kitêbê niha hene.
:[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 23:38, 18 tîrmeh 2026 (UTC)
::Tewandina fiîlan û xeletiya modulê lazim e were rastkirin. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 14:40, 21 tîrmeh 2026 (UTC)
== [[MediaWiki:Gadget-wikt.add-examples.js]] ==
Min ev amûr hinek rojane kir feqat çend problem hene berî ku bar bikin.
Tiştên ku min guhart:
# Êdî li sayfeyên bi {{ş|maneid}} jî dixebite,
# Cihê di wîkîtekstê de yê ku jêgirtin were îlawekirin baştir bû,
# [[Mediawiki:Gadget-citoid-helper.js|citoid helper]] zêde kir ji bo ku bi hêsanî çavkanî bi riya doi, isbn an urlyê werin tijîkirin.
* [[Bikarhêner:Wikihez/Gadget-wikt.add-examples.css]] --> [[MediaWiki:Gadget-wikt.add-examples.css]]
* [[Bikarhêner:Wikihez/Gadget-wikt.add-examples.js]] --> [[MediaWiki:Gadget-wikt.add-examples.js]]
- --[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 00:50, 19 tîrmeh 2026 (UTC)
:Min "wikt." qismên cache kirinê ya wîkiya fransî bi [[MediaWiki:Gadget-StorageUtils.js]] guhartiye. loma ji bîr nekin wê amûrê li [[MediaWiki:Gadgets-definition]] zêde bikin. û navê amûrê jî biguhêrînin. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 09:15, 23 tîrmeh 2026 (UTC)
::Berê li ser WF:ceribandin dixebitî. niha naxebite. Divê were rastkirin. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 22:10, 7 tebax 2026 (UTC)
== Gadget-translation editor ==
* [[MediaWiki:Gadget-translation editor.js]]: divê formata en.wîktê were bikaranîn ji ber ku me gelek tercime ji en.wîktê kopî kir û ev js hîn nikare formata wekî li jêr bi kar bîne.
<syntaxhighlight lang="wikitext">
* {{Z|sh}}:
*: Kirîlî:
*: Latînî
</syntaxhighlight>
—[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:17, 16 tîrmeh 2026 (UTC)
== [[Mediawiki:Gadget-linkify.js]] ==
* ''rûpeleke'' wekî<syntaxhighlight lang="wikitext">[[rûpeleke]]</syntaxhighlight> lînk dike, bi regexê belkî dikare wisa bike <syntaxhighlight lang="wikitext">[[rûpel]]eke</syntaxhighlight>
—[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:17, 16 tîrmeh 2026 (UTC)
* Amûreke din wekî [[User:Wikihez/Gadget-linkify.js|linkify]] lazim e ku herfên mezin biçûk bike ji bo kurmancî.—[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:17, 16 tîrmeh 2026 (UTC)
:{{r|Bikarhêner}} Merheba bira, dikarî viya jî bar bikî?:
* [[Special:PermanentLink/6291974|linkify]] --> [[Mediawiki:Gadget-linkify.js]]
Spas--[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 11:42, 29 tîrmeh 2026 (UTC)
:Dûre [https://ku.wiktionary.org/wiki/MediaWiki:Gadget-start.js#L-283 li vir] wiktviLinkify bike kuLinkify xêra xwe [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 11:51, 29 tîrmeh 2026 (UTC)
::Min ji bîr kir lê zêde bikim niha nikare "Dİ" bike "di", xeletiyeke berbelav a di nivîsên kurdî de, herfên din ên wekî ll yan rr jî hewce ne werin zêdekirin. Dûre em zêde bikin. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 21:42, 29 tîrmeh 2026 (UTC)
:::Min nû ferq kir, sayfeyên ku hîn nehatine çêkirin wîkîlînk nake. Problemeke mezin e divê were rastkirin. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 18:15, 30 tîrmeh 2026 (UTC)
::::Na, lînk dike, tiştekî din heye... [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 10:49, 31 tîrmeh 2026 (UTC)
== Amûra manayê ==
Amûreke din ji bo nivîsina maneyê wekî Nimûne zêde bike lazim e [https://ku.wiktionary.org/w/index.php?title=Bikarh%C3%AAner:Wikihez/test.js&oldid=6276876 js] [https://ku.wiktionary.org/w/index.php?title=%C5%9Eablon:ceribandin2&oldid=6265629 şablon] [https://ku.wiktionary.org/w/index.php?title=Bikarh%C3%AAner:Wikihez/common.css&oldid=6265642 css] --[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 09:12, 23 tîrmeh 2026 (UTC)
== [[MediaWiki:Gadget-jeder.js]] ==
@[[Bikarhêner:Ghybu|Ghybu]] Çavkaniyên jêderê di moda pêşdîtinê de jêderê vedişêre, ew jî min gelek eciz dike wextê çavkanî zêde dikim. Min ji Claude pirsî û kodan nîşanî wê da, wisa cewab da:
Yes — and this file actually explains the whole thing precisely, better than my earlier guess about extract-stripping.
What's happening: the CSS rule
<syntaxhighlight lang="css">
.jeder{
display:none;
}
</syntaxhighlight>
hides every citation by default, *unconditionally*. The only thing that ever makes it visible again is the gadget's JS: it finds each `.jeder`, builds the short "`— (year, author, +)`" summary from the `.j-pewist` fields, and either reveals the short version or — for citations with no `.j-pewist` fields — explicitly sets `display:inline` on the original.
So visibility of citations depends entirely on this JS running. In the normal article view (Image 1) it runs, so you see the collapsed "`(1918, E. Rehmî Ji Mala Hekariyan, Amadekar: M. E. Bozarslan, +)`" form. In whatever generated Image 2 — a hover-preview/extract/API render — gadget JS doesn't execute, so nothing ever removes the `display:none`, and the citation vanishes completely rather than degrading to "still visible, just not collapsed."
<b>The fix:</b> flip the default so the *un-collapsed* state is the safe fallback, and let JS do the hiding only after it successfully builds the short version. That way, any context without JS shows the full citation instead of nothing.
CSS — remove the blanket hide:
<syntaxhighlight lang="css">
.jeder {
/* intentionally no display:none here — see Gadget-... .js */
}
</syntaxhighlight>
JS — do the hiding from script, after the short form exists:
{{veşêre-ser}}
<syntaxhighlight lang="js">
// Ji bo şablonên [[Şablon:jêder]] hatiye nivîsandin.
// Parametreyên ku di navbera "<span class="j-pewist">...</span>" an "{{j-pêwîst|...}}" de ne venaşêre.
$(function() {
function nivisaKurtTevliBike(sund, nivisKurt) {
var zede = $('<a>+</a>')
.addClass('click')
.attr('href', '#')
.attr('title', 'zêdetir')
.css('font-weight', 'bold');
var kurt = $(' <a>↩</a>')
.addClass('click-kurt')
.attr('href', '#')
.attr('title', 'veşêre')
.css('font-weight', 'bold');
$('<span>' + nivisKurt + '</span>')
.append(zede).append(')')
.addClass('jeder-kurt')
.css('font-size', '0.85em')
.insertAfter(sund);
sund.append(' ').append(kurt);
// Only hide the full citation once the short summary actually exists.
// If this script never runs (no-JS clients, hover-preview extracts,
// action=render, etc.), the full citation stays visible instead of
// silently disappearing.
sund.css('display', 'none');
}
function vesere() {
$('.jeder').each(function() {
var elmTab = $(this).find('.j-pewist').clone();
if (elmTab.length) {
var elm = '';
for (var i = elmTab.length - 1; i >= 0; i--) {
elm = elmTab.eq(i).html() + ', ' + elm;
}
var nivisKurt = ' — (' + elm;
nivisaKurtTevliBike($(this), nivisKurt);
}
// else: no j-pewist fields to shorten — leave the full citation
// as it already renders (visible), nothing to do.
});
}
vesere();
$(".click").click(function(e) {
e.preventDefault();
$(this).parent('.jeder-kurt').css('display', 'none');
$(this).parent('.jeder-kurt').prev().css('display', 'inline');
});
$(".click-kurt").click(function(e) {
e.preventDefault();
$(this).parent('.jeder').css('display', 'none');
$(this).parent('.jeder').next().css('display', 'inline');
});
});
</syntaxhighlight>
Net effect:
- JS-enabled readers (normal article view): identical experience to today — collapsed short form with `+`/`↩` toggle.
- No-JS contexts (previews, extracts, screen readers before JS loads, print, etc.): full citation is shown instead of nothing — a real regression fix rather than a cosmetic one.
One caveat worth being upfront about: this fixes it *if* the preview context renders the gadget's HTML/CSS but doesn't execute gadget JS (which is the far more common case, and what this code strongly suggests is happening). If Image 2 instead comes from a pipeline that strips the `.jeder`/`.jegirtin-text` elements out of the HTML entirely before this CSS/JS even gets a chance to apply, no on-wiki CSS/JS change can help — that'd need the extract-generation config changed instead. Given what this gadget file shows, though, I'd bet on the CSS-hide explanation.
{{veşêre-bin}}
Em dûre biceribînin eger xeletî tinebe, vî tiştî jî rast bikin. --[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 20:00, 23 tîrmeh 2026 (UTC)
:Ez APIya MediaWiki rind nizanim belkî Claude dizane:) Em nikarin bibêjin dema ku moda "''action=edit''" e fonksiyona <code>function vesere()</code> bi kar meyîne. [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 15:57, 24 tîrmeh 2026 (UTC)
::Na, di moda "edît"-ê de <code>var elmTab = null</code>... [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 16:13, 24 tîrmeh 2026 (UTC)
?:
<syntaxhighlight lang="js">
if (
mw.config.get('wgAction') === 'edit' ||
mw.config.get('wgAction') === 'submit'
){
var elmTab = [];
} else {
var elmTab = $(this).find('.j-pewist').clone();
}
</syntaxhighlight>
--[[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 16:31, 24 tîrmeh 2026 (UTC)
:Ez jî nizanim Claude çiqas ji mediawiki fêm dike lê heta niha ti tişt nîne ku min jê pirs kir û nikaribû çêke, bila wekî reklam nebe feqat Claude mikemmel e, dibêjim "li vir çima xeletiyeke wisa derdikeve" di dosyeya 2000 rêzî de diçe tiştê xelet tenê rast dike tiştekî din naguherîne. Chatgpt û aistudio qet wisa nakin, eynî dosyeyê deh cara dinivîsin, deh netîceyên cuda derdikevin :D
:Em dikarin vê amûrê wextê edit û submitê neaktîv bikin wekî <syntaxhighlight lang="js">if (!(action === "edit" || action === "submit")) {
:return;</syntaxhighlight> lê wê demê display:none wê çibe nizanim. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 18:23, 24 tîrmeh 2026 (UTC)
::display:none ne hewce ye ma jixwe di nav kodê [https://ku.wiktionary.org/w/index.php?title=MediaWiki:Gadget-jeder.js&oldid=6069025#L-49 L-49] de inline/none heye? [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 18:53, 24 tîrmeh 2026 (UTC)
:Min bi vî şiklî [https://ku.wiktionary.org/w/index.php?title=Bikarh%C3%AAner:Wikihez/vector-2022.js&diff=prev&oldid=6290816#L-28] ceriband feqat nexebitî. "display:none" di pêşdîtinê de dixebite feqat js naşixule. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 14:43, 25 tîrmeh 2026 (UTC)
::Kodên JSê pir hez nakim (pêşta hukurina APIya MWyê hewce bû) dîsa jî ez ê seh bikim :) [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 16:49, 27 tîrmeh 2026 (UTC)
:::Ez niha bi vî şiklî [https://ku.wiktionary.org/w/index.php?title=Bikarh%C3%AAner:Wikihez/test.js&oldid=6290820] [https://ku.wiktionary.org/w/index.php?title=Bikarh%C3%AAner:Wikihez/common.css&oldid=6290821#L-8] bi kar tînim ti problem nîne. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 17:09, 27 tîrmeh 2026 (UTC)
== [[MediaWiki:Gadget-PagePreviews.js]] ==
Ez dibêjim em vê amûrê jî çêkin [[:en:MediaWiki:Gadget-PagePreviews.js]] --[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 10:56, 3 tebax 2026 (UTC)
= Moda tarî =
== [[Şablon:wîkîpediya]] ==
Rengê tarî de xirab e.--[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 19:36, 4 tebax 2026 (UTC)
= Bot =
Karên ku bi botê werin çêkirin ji kerema xwe li vir binivîsin.
== Kategorî:Biwêj ==
[[:Kategorî:Biwêj]] divê were paqijkirin, lîsteya madeyên {{ş|biwêj}} çêke, yên ku tê de bûn, kirin, man hene filtre bike yên din bi destî tê çêkirin.—[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:17, 16 tîrmeh 2026 (UTC)
== Jêgirtin ==
Xistina jêgirtinên beşa [https://ku.wiktionary.org/w/index.php?search=insource%3A%2F%3D+*Ji+%5BWw%5D%C3%AAjey%C3%AA+*%3D%2F&title=Taybet%3AL%C3%AAger%C3%AEn&profile=advanced&fulltext=1&ns0=1&searchToken=8rh0bmw8dccsi7aynl6zli8uf ji wêjeyê] li beşa maneyê. —[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:17, 16 tîrmeh 2026 (UTC)
== Bota Toolforgeê ==
Botekî Toolforgeê lazim e ji bo ku xeletiyên biçûk wekî şablonên bi navên îngilîzî werin kurdîkirin yan jî valahiya beşan rast bike û hwd.—[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:17, 16 tîrmeh 2026 (UTC)
:Min [[Bikarhêner:Wikihez/skrîpt/py/kuwiktkozmetik.py|paqijiyen kozmetîk]] hazir kir feqat hîn navên şablonan naguhêre. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 20:05, 4 tebax 2026 (UTC)
== Updatew ==
Bota [[Bikarhêner:Wikihez/skrîpt/py/updateW.py|updateW]] divê were rojanekirin. Yan jî yekî nû were çêkirin. Şablonên {{ş|W}} di beşa tercimeyan de sererast dike û zimanan rêz dike. Ya niha xeletiya navê zimanî dide.—[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:17, 16 tîrmeh 2026 (UTC)
== sihir --> sêhr ==
Tercimeyên ''[[sêhr]]'' hemû dibêje ''sihir'' loma bi botê lazim e kirin ''sêhr''. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 17:43, 18 tîrmeh 2026 (UTC)
:Sihirbaz --> sêhrbaz [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 18:07, 18 tîrmeh 2026 (UTC)
== Tercimeyên dîroknas ==
Li tercimeyên [[dîroknas]], hevmaneyên wê hewce ye were îlawekirin. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 18:44, 18 tîrmeh 2026 (UTC)
== Mewlûd ==
Sererastkirina jêgirtinên mewlûdê [https://ku.wiktionary.org/w/index.php?search=insource%3A%2Fw%5C%3AMela+His%C3%AAn%C3%AA+Batey%C3%AE%2F&title=Taybet%3AL%C3%AAger%C3%AEn&ns0=1&searchToken=8m0tguy3sqt7edr4sg0u8hedo] wekî [https://ku.wiktionary.org/w/index.php?title=dax%C3%AEdar&curid=284303&diff=6265851&oldid=6142285] [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 09:43, 20 tîrmeh 2026 (UTC)
09eel8xq2dpvmf90m8scxet7qqwkwq3
6333707
6333705
2026-08-14T19:34:17Z
Wikihez
7344
/* MediaWiki:Gadget-start.js */ Bersiv
6333707
wikitext
text/x-wiki
{{/ser}}
= Karên ferhengî =
== Mane ==
* [[:Kategorî:Madeyên bê beşa mane]]
** [[:Kategorî:Madeyên bê beşa mane bi kurmancî]]
Li ser van rûpelan ev made hene ku maneyan wan nehatine nivîsin û divê werin nivîsin. —[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:17, 16 tîrmeh 2026 (UTC)
== Etîmolojî ==
*[[:Kategorî:Daxwazên etîmolojiyê]]
**[[:Kategorî:Daxwazên etîmolojiyê bi kurmancî]]
Li ser van rûpelan ev made hene ku etîmolojiya wan hîn nehatine nivîsin. Ji bo alîkariyê binêre [[WF:Etîmolojî]] —[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:17, 16 tîrmeh 2026 (UTC)
== Cureyê rêzimanî ==
* [[:Kategorî:Gotarên bê kategoriya rêzimanî]]
* [[:Kategorî:Gotarên bê kategoriya rêzimanî bi kurmancî]]
Li ser van rûpelan ev made hene ku cureyên wan yên rêzimanî hîn nehatine nivîsin. Ji bo alîkariyê binêre [[Alîkarî:Cureyên peyvan]] —[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:17, 16 tîrmeh 2026 (UTC)
== Kontrol ==
* [[:Kategorî:Kontrol]]
** [[:Kategorî:Kontrola maneyê]]
Ev madde bi botê hatine çêkirin, yek bi yek divê werin kontrolkirin. —[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:17, 16 tîrmeh 2026 (UTC)
= Şablon =
== IPA ==
* {{ş|IPA}} divê [[Modul:IPA]] bi kar bîne. —[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:17, 16 tîrmeh 2026 (UTC)
== Deng ==
Kurdîkirina belgekirina {{ş|deng}} lazim e.--[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 00:06, 19 tîrmeh 2026 (UTC)
= Modul =
== Modul:form of/templates ==
* [[Modul:form of/templates]]: Divê ev modul were rojanekirin û xeletiyên berê wekî ([[hevalê]]) werin rastkirin. —[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:17, 16 tîrmeh 2026 (UTC)
*:Merheba @[[Bikarhêner:Ghybu|Ghybu]] Te gotibû di vê modulê de xeletî hene, jkx tu dikarî li vir binivîsî çi kêmasî hene, daku wextê rojane dikim ez ji bîr nekim? [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:16, 21 tîrmeh 2026 (UTC)
*::Silav. Nizanim ji bîra min çûye... Herwiha ji bo çêkirina formên navdêran zanînên cîns û tîpa dawî bes e:
*::* (-ê, mê) => çemandî, bangkirin
*::* (-ê, nêr) => îzafe
*::* (-ê, mê û nêr) => îzafe (nêr), bangkirin (mê), çemandî (mê)
*::* (-a) => îzafe (mê)
*::* (-ekî) => îzafe û çemandî (nêr, nebinavkirî)
*::* (-eke) = > îzafe (mê, nebinavkirî)
*::* ...
*:: <code>if find(mw.title.getCurrentTitle().subpageText, 'ekî$') then ... end</code>
*::<code><nowiki>{{ku-tewîn-navForm|<navdêr>|<zayend>}</nowiki></code>
*::Tablo û nivîs di yekcarî de tên çêkirin...
*::Feqet problem lêzêdekirina mînakan e. [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 17:34, 21 tîrmeh 2026 (UTC)
*:::Lêzêdekirina kîjan nimûneyan? Ev koda js ji bo çi ye? Qisûrê nenêre min fêm nekir :/ [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 18:13, 21 tîrmeh 2026 (UTC)
*::::Li vira ([[hevalê#Formeke navdêrê]]) di bin maneyên 1. û 2. mînak nayên tevlî kirin :) [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 18:18, 21 tîrmeh 2026 (UTC)
*:::::Ev tercîh e, ne mecbûrî ye, em dikarin [https://ku.wiktionary.org/w/index.php?title=heval%C3%AA&diff=prev&oldid=6276350 wisa] bikin. Wekî din? [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 18:29, 21 tîrmeh 2026 (UTC)
*::::::Min li jor tênê got ku tenê parametreyên "navdêr" û "zayend" hewce nee. Bi '''[//ku.wiktionary.org/w/index.php?title=heval%C3%AA&curid=969734&diff=6276353&oldid=6276350 vî]''' awayî jî tê çêkirin. Parametreyên din ne hewce ne. [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 18:38, 21 tîrmeh 2026 (UTC)
*:::::::Ji bo wê şabloneke din lazim e, bila ev şablon wekî îngilîzî bimîne em ji bo kurmancî yekî din çêkin. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 18:42, 21 tîrmeh 2026 (UTC)
*::::::::[https://ku.wiktionary.org/w/index.php?title=heval%C3%AA&oldid=6276885 wisa] çawa ye? Bi min nivîsîna nimûneyan zêde ne lazim e ji ber ku ti kes serê xwe pê naêşîne. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 09:46, 23 tîrmeh 2026 (UTC)
*:::::::::@[[Bikarhêner:Ghybu|Ghybu]] Vê şablonê bi kar bînin an na? Navê şablonê kê çi be? [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 19:07, 24 tîrmeh 2026 (UTC)
== Modul:columns ==
* [[Modul:columns]] were rojanekirin û {{ş|kol3}} bila lînka ''nîşan bide'' deyne beriya sernavê, kolê di qutiya rengî de bila nebe. —[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:17, 16 tîrmeh 2026 (UTC)
== Modul:etymon ==
* [[Modul:etymon kevn]]: Rojanekirin hewce ye. —[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:17, 16 tîrmeh 2026 (UTC)
== [[Modul:ziman/code to canonical name]] ==
Belgekirina skrîptê û js divê were rastkirin. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 09:31, 22 tîrmeh 2026 (UTC)
:* [[MediaWiki:UpdateLanguageNameAndCode.js]]
:[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 09:50, 22 tîrmeh 2026 (UTC)
::* [[Modul:ziman/print]]
::[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 09:52, 22 tîrmeh 2026 (UTC)
:::*[[Modul:ziman/şablon]]
:::[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 09:56, 22 tîrmeh 2026 (UTC)
::::* [[MediaWiki:Gadget-translation editor.js/ziman.json]]
::::[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 11:06, 22 tîrmeh 2026 (UTC)
== [[Modul:quote]] ==
Piştî ev modul hate hazirkirin, lazim e navên jegirtinan werin rastkirin û li hemûyan {{param|jêgirtin}} were zêdekirin. Bnr. [[Gotûbêja şablonê:Jêgirtin/Ehmedê Xanî/Mem û Zîn]] [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 22:27, 5 tebax 2026 (UTC)
::Ev modul hema bêje hazir e. Hûn li ser van madeyan çi difikirin:
# {{para|tarîx}} lazim e full date be eger na, lazim e {{para|sal}} were bikaranîn. Feqat "'''2021''' kanûna pêşîn 23" bi vî şiklî bi min ne problem e çnkî derdê en.wikt "attestation" e delîla herî pêşî jî sal e.
#: {{demo|sep=wisa xuya dibe<br>|<nowiki>{{jêder-kitêb/ceribandin|en
|tarîx=23 December 2021|nivîskar=Harry Hobbs; George Williams|sernav=Micronations and the Search for Sovereignty|url=https://www.cambridge.org/core/books/micronations-and-the-search-for-sovereignty/B0414A3A322695D9EE71E4CDDFDA06DE|weşanxane=Cambridge University Press|rûpel=155|isbn=978-1-009-15012-5|jêgirtin=jêgirtin.|t=-}}</nowiki>}}
#{{para|amadekar}}/{{para|edîtor}}/{{para|terciman}} bi şiklê edîtoriya, amadekariya, tercimekirina
#: {{demo|sep=dide<br>|<nowiki>{{jêder-kitêb/ceribandin|en
|sernav=Medical Surgical Nursing|serî=Juta's Manual of Nursing|cildê-seriyê=volume 4|edîtor=Sophie Mataniele Mogotlane; Joyce Mokoena; Motshedisi Eunice Chauke; Anne Young|sal=2005|weşanxane=Juta Academic|isbn=978-0702171840|rûpel=!12-29|jêgirtin=jêgirtin|t=-}}</nowiki>}}
--[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 13:09, 10 tebax 2026 (UTC)
:@[[Bikarhêner:Bikarhêner|Bikarhêner]] û @[[Bikarhêner:Ghybu|Ghybu]] Hîn gelek tişt hene divê îzah bikin û fikrê we pirs bikim, feqat îzahkirin pir zor e, em dest bi bikaranînê bikin û dûre tiştên ku hûn naxwazin em dikarin biguherînîn, dibe? [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 13:11, 10 tebax 2026 (UTC)
::Dibe, piştî çêbû, em di praktîkê de bibînin ku çawa ye. -- [[Bikarhêner:Bikarhêner|Bikarhêner]] ([[Gotûbêja bikarhêner:Bikarhêner|gotûbêj]]) 18:05, 10 tebax 2026 (UTC)
= Javascript =
== [[Mediawiki:Gadget-citoid-helper.js]] ==
Ji bo bi citoidê kopîkirina malûmatên çavkaniyan amûreke wisa lazim e. Xisûsen ji ber ku bi çend amûrên din dikare were bikaranîn.
Feqat çend problem hene, şablonên me de kêmasiya parametreyan gelek in û xerîteyên citoidê hîn nehatine çêkirin. Wana sererast bikin dûre vê amûrê çêkin, piştre [[MediaWiki:Gadget-start.js|start.js]] û [[MediaWiki:Gadget-wikt.add-examples.js|add examples.js]] were rojanekirin.
- --[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 00:04, 19 tîrmeh 2026 (UTC)
:Merheba @[[Bikarhêner:Bikarhêner|Bikarhêner]], ez dibêjim karê Modul:quote zêde wext bistîne, bila em dest bi bikaranîna van amûran bikin dûre kêmasiyan em ê temam bikin înşela. Dikarî vana li cihên xwe yên rast kopî paste bikî?
# [[Special:PermanentLink/6291574|Bikarhêner:Wikihez/skrîpt/js/Gadget-citoid-helper.js]] --> [[Mediawiki:Gadget-citoid-helper.js]]
# Ya li jêr kopî bike qismê herî dawî ya AmûrênVeşartî li [[MediaWiki:Gadgets-definition]]:
## <code><nowiki>* citoid-helper[ResourceLoader|hidden|default|dependencies=mediawiki.util]|citoid-helper.js</nowiki></code>
--[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:58, 26 tîrmeh 2026 (UTC)
== [[MediaWiki:Gadget-start.js]] ==
Rojanekirin hewce ye. Min gelek tişt lê zêde kir lê ez niha test dikime. Piştre em bar bikin:
* [[Bikarhêner:Wikihez/Gadget-start.js]] --> [[MediaWiki:Gadget-start.js]]
* [[Bikarhêner:Wikihez/Gadget-start.css]] --> [[MediaWiki:Gadget-start.css]]
--[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 22:08, 17 tîrmeh 2026 (UTC)
:Min [[MediaWiki:Gadget-start/data.json|data.json]] çêkir ji bo ku bi hêsanî malûmatên heyî werin guhartin bêyî guhartina Javascriptê. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 19:49, 18 tîrmeh 2026 (UTC)
:Xeletiyên ku ji bîr nekim rast bikim:
:* Wextê min çavkanî "kitêb" hilbijart û bi destî tije kir xeletiyeke [https://ku.wiktionary.org/w/index.php?title=xezete&diff=prev&oldid=6265392 wisa] derket her kelîme hate lînkkirin.
:* <code>html("⠿")</code> ev ne lazim e.
:* textarea ji bo çavkaniyên jêgirtinan xaseten yên sernav hîn jî ne draggable e.
:* pêşdîtina zindî checkbox wextê tê rakirin, pêşdîtin winda nabe.
:* Butona mobîlê ya vekirina formê di moda tarî de belî nabe, tenê wekî qutiyeke tarî xuya dibe.
:* Metna hişyarkirinê di guhartina rûpelên heyî de lazim e baştir bikim.
:[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 23:51, 18 tîrmeh 2026 (UTC)
::Ev problem çêbûn, ez ê binêrim ka çi problemên din hene. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 14:15, 19 tîrmeh 2026 (UTC)
:::Çêke: Ji bo qismê çavkaniyê yek dikare API call û Kategorî:Çavkanî bi kar bîne ji bo ku şablon zêde bikî ji yên heyî. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 21:21, 19 tîrmeh 2026 (UTC)
::::Ev jî çêbû, min beşa çavkanî jî çêkir. Eger xeletî dernekeve û problema valahiya piştî etîketê ji bîr nekim, piştî rojanekirina amûrên linkify, û citoid em dikarin bar bikin. Ez ê ti tiştê nû îlawe nekim, zêde dirêj bû. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:14, 21 tîrmeh 2026 (UTC)
:::::Merheba @[[Bikarhêner:Bikarhêner|Bikarhêner]]. Dikarî wana bar bikî?
:::::* [[Bikarhêner:Wikihez/Gadget-start.js]] --> [[MediaWiki:Gadget-start.js]]
:::::* [[Bikarhêner:Wikihez/Gadget-start.css]] --> [[MediaWiki:Gadget-start.css]]
:::::* [[MediaWiki:Gadgets-definition]] wisa rojane bike:
:::::* start[ResourceLoader|default|package|dependencies=mediawiki.util,ext.gadget.StorageUtils,ext.gadget.citoid-helper]|start.js|start.css|start.js/data.json
:::::[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 09:39, 5 tebax 2026 (UTC)
{{şirove}} Dewama ''[[Special:PermanentLink/6333688|Gotûbêja bikarhêner:Rewiye tine#WF:Nû]]'' bila gotûbêja wî em spam nekin. :D
{{r|Ghybu}} dikarî [[Special:PermanentLink/6333689|vê htmlê]] binêrî claude rast fêm kiriye yan na? Daxîne û wek html qeyd bike. --[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 18:43, 14 tebax 2026 (UTC)
:Min seh wîkîyên din jî kir, li wîkiya fransî tiştekî wekî daxwaza min çêkirine (tiştên ku ne hewce ne wekî "tab" çêkirine an jî hatine vêşartin): [//fr.wiktionary.org/w/index.php?title=fdsdfdsf&action=edit&redlink=1]. Formata me yê berî jî bi vê lojîkê hatibû çêkirin, wekî de.wiktionary ([//de.wiktionary.org/w/index.php?title=sdfdsfsdfs&action=edit&preload=Vorlage:Formatvorlage_(Substantiv_vereinfacht)]) [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 19:01, 14 tebax 2026 (UTC)
::PS: Dîsa jî Claude min rind fêm kiriye :)) Feqet min got ku beşên Mane", "Bilêvkirin" û "Beşên din" cem hev (wekî "tab") ". Û dema ku tu terê di nav "Besên din" Hevmane, Jê, ... li wira werin dayîn. Wêne/Resim û Nimûne jî di nav beşa ("tab") "Mane" [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 19:17, 14 tebax 2026 (UTC)
::Erê ya fr.wikt min jî dîtibû jixwe fikrê tab min ji wan girtibû :D (feqat min li cem wan tenê tab-a maneyê dît yên din nedît çawa tê vekirin nizanim) Berê hemû beş piştî maneyê bibûn, dûre min sê Tab çêkir, Bingehîn+Lînkkirin+Bikaranîn. Niha lazim e Tabeke din çêkim. Ya ku claude çêkiriye bnr. [[Special:PermanentLink/6333698#L-7]] ne baş e bnr. [[Special:PermanentLink/6333703|qiyaskirinê li ser vê htmlê]] Êdî ez Claude abuse dikime ji ber ku Pro ye :D [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 19:26, 14 tebax 2026 (UTC)
:::Claude dibêje:
:::Good clarification — that's a real simplification, not just a relabel. Updated STEP_GROUPS from 5 tabs down to 3:
:::Mane — the definitions themselves, plus Wêne (image), now grouped in with it instead of sitting in a separate misc tab. Nimûne needed no change since it was already rendering inside each Mane sense block, not as its own step.
:::Bilêvkirin — unchanged, still just pronunciation.
:::Beşên din — everything else in one flat bucket: hevmane, jê, têkildar, herwiha binêre, formên alternatîv, dijmane, jornav, jêrnav, notên bikaranînê, bi alfabeyên din, dûnde, çavkanî, bêhtir bixwîne, tewandin, etîmolojî, zaravayên din, werger, and bnr-h — instead of being split across the old Bingehîn/Lînkkirin/Bikaranîn/Din tabs.
:::No DOM-order changes were needed this time — the fix from the blank-tab bug looks up the tab bar's position dynamically now, so it didn't matter that I regrouped which steps go where. Same two files, saved to your Wiki folder — worth another pass through all three tabs once you've pasted this in, same as last time. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 19:34, 14 tebax 2026 (UTC)
== [[Mediawiki:Gadget-QQ.js]] ==
Ev amûr di şikle Minerva de. Her daîm vê xeletiyê dide:
<syntaxhighlight lang="js">
TypeError: Cannot read properties of null (reading 'addEventListener') at css () at runScript () at Array.<anonymous> () at flushCssBuffer ()
</syntaxhighlight> [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 19:29, 18 tîrmeh 2026 (UTC)
:* [[Bikarhêner:Wikihez/skrîpt/js/Gadget-QQ.js]] --> [[Mediawiki:Gadget-QQ.js]]
:* [[Bikarhêner:Wikihez/Gadget-QQ.css]] --> [[Mediawiki:Gadget-QQ.css]]
:Ez dibêjim çêbû lê ka çend roj biceribînim. Tiştên ku hatin sererastkirin:
:# Google Books API Key dikarî zêde bikî, dixe cookies û di gerokê de dimîne. Berê bê API Key dixebitiya lê êdî mecbûr e ku API Key-a te hebe, bidestxistina wê ne zêde zor e lê dîsa jî tevlihev e.
:# Êdî di mobîlê de dixebite, heta di mobîlê de xweştir xuya dike.
:# Moda tarî
:# OOUI dewsa jquery.ui
:# Li qutiyê çi dixwazî zêde bikî, dikare li gorî îsm, sifet, fiîl bitewîne. Lê ji bo fiîl tenê dikare çend heb inflection bîne.
:# Butona paqij bike lê zêde kir.
:# Çend paqijiyên jêgirtinên Google Kitêbê niha hene.
:[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 23:38, 18 tîrmeh 2026 (UTC)
::Tewandina fiîlan û xeletiya modulê lazim e were rastkirin. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 14:40, 21 tîrmeh 2026 (UTC)
== [[MediaWiki:Gadget-wikt.add-examples.js]] ==
Min ev amûr hinek rojane kir feqat çend problem hene berî ku bar bikin.
Tiştên ku min guhart:
# Êdî li sayfeyên bi {{ş|maneid}} jî dixebite,
# Cihê di wîkîtekstê de yê ku jêgirtin were îlawekirin baştir bû,
# [[Mediawiki:Gadget-citoid-helper.js|citoid helper]] zêde kir ji bo ku bi hêsanî çavkanî bi riya doi, isbn an urlyê werin tijîkirin.
* [[Bikarhêner:Wikihez/Gadget-wikt.add-examples.css]] --> [[MediaWiki:Gadget-wikt.add-examples.css]]
* [[Bikarhêner:Wikihez/Gadget-wikt.add-examples.js]] --> [[MediaWiki:Gadget-wikt.add-examples.js]]
- --[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 00:50, 19 tîrmeh 2026 (UTC)
:Min "wikt." qismên cache kirinê ya wîkiya fransî bi [[MediaWiki:Gadget-StorageUtils.js]] guhartiye. loma ji bîr nekin wê amûrê li [[MediaWiki:Gadgets-definition]] zêde bikin. û navê amûrê jî biguhêrînin. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 09:15, 23 tîrmeh 2026 (UTC)
::Berê li ser WF:ceribandin dixebitî. niha naxebite. Divê were rastkirin. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 22:10, 7 tebax 2026 (UTC)
== Gadget-translation editor ==
* [[MediaWiki:Gadget-translation editor.js]]: divê formata en.wîktê were bikaranîn ji ber ku me gelek tercime ji en.wîktê kopî kir û ev js hîn nikare formata wekî li jêr bi kar bîne.
<syntaxhighlight lang="wikitext">
* {{Z|sh}}:
*: Kirîlî:
*: Latînî
</syntaxhighlight>
—[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:17, 16 tîrmeh 2026 (UTC)
== [[Mediawiki:Gadget-linkify.js]] ==
* ''rûpeleke'' wekî<syntaxhighlight lang="wikitext">[[rûpeleke]]</syntaxhighlight> lînk dike, bi regexê belkî dikare wisa bike <syntaxhighlight lang="wikitext">[[rûpel]]eke</syntaxhighlight>
—[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:17, 16 tîrmeh 2026 (UTC)
* Amûreke din wekî [[User:Wikihez/Gadget-linkify.js|linkify]] lazim e ku herfên mezin biçûk bike ji bo kurmancî.—[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:17, 16 tîrmeh 2026 (UTC)
:{{r|Bikarhêner}} Merheba bira, dikarî viya jî bar bikî?:
* [[Special:PermanentLink/6291974|linkify]] --> [[Mediawiki:Gadget-linkify.js]]
Spas--[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 11:42, 29 tîrmeh 2026 (UTC)
:Dûre [https://ku.wiktionary.org/wiki/MediaWiki:Gadget-start.js#L-283 li vir] wiktviLinkify bike kuLinkify xêra xwe [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 11:51, 29 tîrmeh 2026 (UTC)
::Min ji bîr kir lê zêde bikim niha nikare "Dİ" bike "di", xeletiyeke berbelav a di nivîsên kurdî de, herfên din ên wekî ll yan rr jî hewce ne werin zêdekirin. Dûre em zêde bikin. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 21:42, 29 tîrmeh 2026 (UTC)
:::Min nû ferq kir, sayfeyên ku hîn nehatine çêkirin wîkîlînk nake. Problemeke mezin e divê were rastkirin. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 18:15, 30 tîrmeh 2026 (UTC)
::::Na, lînk dike, tiştekî din heye... [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 10:49, 31 tîrmeh 2026 (UTC)
== Amûra manayê ==
Amûreke din ji bo nivîsina maneyê wekî Nimûne zêde bike lazim e [https://ku.wiktionary.org/w/index.php?title=Bikarh%C3%AAner:Wikihez/test.js&oldid=6276876 js] [https://ku.wiktionary.org/w/index.php?title=%C5%9Eablon:ceribandin2&oldid=6265629 şablon] [https://ku.wiktionary.org/w/index.php?title=Bikarh%C3%AAner:Wikihez/common.css&oldid=6265642 css] --[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 09:12, 23 tîrmeh 2026 (UTC)
== [[MediaWiki:Gadget-jeder.js]] ==
@[[Bikarhêner:Ghybu|Ghybu]] Çavkaniyên jêderê di moda pêşdîtinê de jêderê vedişêre, ew jî min gelek eciz dike wextê çavkanî zêde dikim. Min ji Claude pirsî û kodan nîşanî wê da, wisa cewab da:
Yes — and this file actually explains the whole thing precisely, better than my earlier guess about extract-stripping.
What's happening: the CSS rule
<syntaxhighlight lang="css">
.jeder{
display:none;
}
</syntaxhighlight>
hides every citation by default, *unconditionally*. The only thing that ever makes it visible again is the gadget's JS: it finds each `.jeder`, builds the short "`— (year, author, +)`" summary from the `.j-pewist` fields, and either reveals the short version or — for citations with no `.j-pewist` fields — explicitly sets `display:inline` on the original.
So visibility of citations depends entirely on this JS running. In the normal article view (Image 1) it runs, so you see the collapsed "`(1918, E. Rehmî Ji Mala Hekariyan, Amadekar: M. E. Bozarslan, +)`" form. In whatever generated Image 2 — a hover-preview/extract/API render — gadget JS doesn't execute, so nothing ever removes the `display:none`, and the citation vanishes completely rather than degrading to "still visible, just not collapsed."
<b>The fix:</b> flip the default so the *un-collapsed* state is the safe fallback, and let JS do the hiding only after it successfully builds the short version. That way, any context without JS shows the full citation instead of nothing.
CSS — remove the blanket hide:
<syntaxhighlight lang="css">
.jeder {
/* intentionally no display:none here — see Gadget-... .js */
}
</syntaxhighlight>
JS — do the hiding from script, after the short form exists:
{{veşêre-ser}}
<syntaxhighlight lang="js">
// Ji bo şablonên [[Şablon:jêder]] hatiye nivîsandin.
// Parametreyên ku di navbera "<span class="j-pewist">...</span>" an "{{j-pêwîst|...}}" de ne venaşêre.
$(function() {
function nivisaKurtTevliBike(sund, nivisKurt) {
var zede = $('<a>+</a>')
.addClass('click')
.attr('href', '#')
.attr('title', 'zêdetir')
.css('font-weight', 'bold');
var kurt = $(' <a>↩</a>')
.addClass('click-kurt')
.attr('href', '#')
.attr('title', 'veşêre')
.css('font-weight', 'bold');
$('<span>' + nivisKurt + '</span>')
.append(zede).append(')')
.addClass('jeder-kurt')
.css('font-size', '0.85em')
.insertAfter(sund);
sund.append(' ').append(kurt);
// Only hide the full citation once the short summary actually exists.
// If this script never runs (no-JS clients, hover-preview extracts,
// action=render, etc.), the full citation stays visible instead of
// silently disappearing.
sund.css('display', 'none');
}
function vesere() {
$('.jeder').each(function() {
var elmTab = $(this).find('.j-pewist').clone();
if (elmTab.length) {
var elm = '';
for (var i = elmTab.length - 1; i >= 0; i--) {
elm = elmTab.eq(i).html() + ', ' + elm;
}
var nivisKurt = ' — (' + elm;
nivisaKurtTevliBike($(this), nivisKurt);
}
// else: no j-pewist fields to shorten — leave the full citation
// as it already renders (visible), nothing to do.
});
}
vesere();
$(".click").click(function(e) {
e.preventDefault();
$(this).parent('.jeder-kurt').css('display', 'none');
$(this).parent('.jeder-kurt').prev().css('display', 'inline');
});
$(".click-kurt").click(function(e) {
e.preventDefault();
$(this).parent('.jeder').css('display', 'none');
$(this).parent('.jeder').next().css('display', 'inline');
});
});
</syntaxhighlight>
Net effect:
- JS-enabled readers (normal article view): identical experience to today — collapsed short form with `+`/`↩` toggle.
- No-JS contexts (previews, extracts, screen readers before JS loads, print, etc.): full citation is shown instead of nothing — a real regression fix rather than a cosmetic one.
One caveat worth being upfront about: this fixes it *if* the preview context renders the gadget's HTML/CSS but doesn't execute gadget JS (which is the far more common case, and what this code strongly suggests is happening). If Image 2 instead comes from a pipeline that strips the `.jeder`/`.jegirtin-text` elements out of the HTML entirely before this CSS/JS even gets a chance to apply, no on-wiki CSS/JS change can help — that'd need the extract-generation config changed instead. Given what this gadget file shows, though, I'd bet on the CSS-hide explanation.
{{veşêre-bin}}
Em dûre biceribînin eger xeletî tinebe, vî tiştî jî rast bikin. --[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 20:00, 23 tîrmeh 2026 (UTC)
:Ez APIya MediaWiki rind nizanim belkî Claude dizane:) Em nikarin bibêjin dema ku moda "''action=edit''" e fonksiyona <code>function vesere()</code> bi kar meyîne. [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 15:57, 24 tîrmeh 2026 (UTC)
::Na, di moda "edît"-ê de <code>var elmTab = null</code>... [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 16:13, 24 tîrmeh 2026 (UTC)
?:
<syntaxhighlight lang="js">
if (
mw.config.get('wgAction') === 'edit' ||
mw.config.get('wgAction') === 'submit'
){
var elmTab = [];
} else {
var elmTab = $(this).find('.j-pewist').clone();
}
</syntaxhighlight>
--[[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 16:31, 24 tîrmeh 2026 (UTC)
:Ez jî nizanim Claude çiqas ji mediawiki fêm dike lê heta niha ti tişt nîne ku min jê pirs kir û nikaribû çêke, bila wekî reklam nebe feqat Claude mikemmel e, dibêjim "li vir çima xeletiyeke wisa derdikeve" di dosyeya 2000 rêzî de diçe tiştê xelet tenê rast dike tiştekî din naguherîne. Chatgpt û aistudio qet wisa nakin, eynî dosyeyê deh cara dinivîsin, deh netîceyên cuda derdikevin :D
:Em dikarin vê amûrê wextê edit û submitê neaktîv bikin wekî <syntaxhighlight lang="js">if (!(action === "edit" || action === "submit")) {
:return;</syntaxhighlight> lê wê demê display:none wê çibe nizanim. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 18:23, 24 tîrmeh 2026 (UTC)
::display:none ne hewce ye ma jixwe di nav kodê [https://ku.wiktionary.org/w/index.php?title=MediaWiki:Gadget-jeder.js&oldid=6069025#L-49 L-49] de inline/none heye? [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 18:53, 24 tîrmeh 2026 (UTC)
:Min bi vî şiklî [https://ku.wiktionary.org/w/index.php?title=Bikarh%C3%AAner:Wikihez/vector-2022.js&diff=prev&oldid=6290816#L-28] ceriband feqat nexebitî. "display:none" di pêşdîtinê de dixebite feqat js naşixule. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 14:43, 25 tîrmeh 2026 (UTC)
::Kodên JSê pir hez nakim (pêşta hukurina APIya MWyê hewce bû) dîsa jî ez ê seh bikim :) [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 16:49, 27 tîrmeh 2026 (UTC)
:::Ez niha bi vî şiklî [https://ku.wiktionary.org/w/index.php?title=Bikarh%C3%AAner:Wikihez/test.js&oldid=6290820] [https://ku.wiktionary.org/w/index.php?title=Bikarh%C3%AAner:Wikihez/common.css&oldid=6290821#L-8] bi kar tînim ti problem nîne. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 17:09, 27 tîrmeh 2026 (UTC)
== [[MediaWiki:Gadget-PagePreviews.js]] ==
Ez dibêjim em vê amûrê jî çêkin [[:en:MediaWiki:Gadget-PagePreviews.js]] --[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 10:56, 3 tebax 2026 (UTC)
= Moda tarî =
== [[Şablon:wîkîpediya]] ==
Rengê tarî de xirab e.--[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 19:36, 4 tebax 2026 (UTC)
= Bot =
Karên ku bi botê werin çêkirin ji kerema xwe li vir binivîsin.
== Kategorî:Biwêj ==
[[:Kategorî:Biwêj]] divê were paqijkirin, lîsteya madeyên {{ş|biwêj}} çêke, yên ku tê de bûn, kirin, man hene filtre bike yên din bi destî tê çêkirin.—[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:17, 16 tîrmeh 2026 (UTC)
== Jêgirtin ==
Xistina jêgirtinên beşa [https://ku.wiktionary.org/w/index.php?search=insource%3A%2F%3D+*Ji+%5BWw%5D%C3%AAjey%C3%AA+*%3D%2F&title=Taybet%3AL%C3%AAger%C3%AEn&profile=advanced&fulltext=1&ns0=1&searchToken=8rh0bmw8dccsi7aynl6zli8uf ji wêjeyê] li beşa maneyê. —[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:17, 16 tîrmeh 2026 (UTC)
== Bota Toolforgeê ==
Botekî Toolforgeê lazim e ji bo ku xeletiyên biçûk wekî şablonên bi navên îngilîzî werin kurdîkirin yan jî valahiya beşan rast bike û hwd.—[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:17, 16 tîrmeh 2026 (UTC)
:Min [[Bikarhêner:Wikihez/skrîpt/py/kuwiktkozmetik.py|paqijiyen kozmetîk]] hazir kir feqat hîn navên şablonan naguhêre. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 20:05, 4 tebax 2026 (UTC)
== Updatew ==
Bota [[Bikarhêner:Wikihez/skrîpt/py/updateW.py|updateW]] divê were rojanekirin. Yan jî yekî nû were çêkirin. Şablonên {{ş|W}} di beşa tercimeyan de sererast dike û zimanan rêz dike. Ya niha xeletiya navê zimanî dide.—[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:17, 16 tîrmeh 2026 (UTC)
== sihir --> sêhr ==
Tercimeyên ''[[sêhr]]'' hemû dibêje ''sihir'' loma bi botê lazim e kirin ''sêhr''. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 17:43, 18 tîrmeh 2026 (UTC)
:Sihirbaz --> sêhrbaz [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 18:07, 18 tîrmeh 2026 (UTC)
== Tercimeyên dîroknas ==
Li tercimeyên [[dîroknas]], hevmaneyên wê hewce ye were îlawekirin. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 18:44, 18 tîrmeh 2026 (UTC)
== Mewlûd ==
Sererastkirina jêgirtinên mewlûdê [https://ku.wiktionary.org/w/index.php?search=insource%3A%2Fw%5C%3AMela+His%C3%AAn%C3%AA+Batey%C3%AE%2F&title=Taybet%3AL%C3%AAger%C3%AEn&ns0=1&searchToken=8m0tguy3sqt7edr4sg0u8hedo] wekî [https://ku.wiktionary.org/w/index.php?title=dax%C3%AEdar&curid=284303&diff=6265851&oldid=6142285] [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 09:43, 20 tîrmeh 2026 (UTC)
03duf2njdltdvwdvrlanf00vuru9b3r
6333711
6333707
2026-08-14T19:45:28Z
Ghybu
1393
/* MediaWiki:Gadget-start.js */ Bersiv
6333711
wikitext
text/x-wiki
{{/ser}}
= Karên ferhengî =
== Mane ==
* [[:Kategorî:Madeyên bê beşa mane]]
** [[:Kategorî:Madeyên bê beşa mane bi kurmancî]]
Li ser van rûpelan ev made hene ku maneyan wan nehatine nivîsin û divê werin nivîsin. —[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:17, 16 tîrmeh 2026 (UTC)
== Etîmolojî ==
*[[:Kategorî:Daxwazên etîmolojiyê]]
**[[:Kategorî:Daxwazên etîmolojiyê bi kurmancî]]
Li ser van rûpelan ev made hene ku etîmolojiya wan hîn nehatine nivîsin. Ji bo alîkariyê binêre [[WF:Etîmolojî]] —[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:17, 16 tîrmeh 2026 (UTC)
== Cureyê rêzimanî ==
* [[:Kategorî:Gotarên bê kategoriya rêzimanî]]
* [[:Kategorî:Gotarên bê kategoriya rêzimanî bi kurmancî]]
Li ser van rûpelan ev made hene ku cureyên wan yên rêzimanî hîn nehatine nivîsin. Ji bo alîkariyê binêre [[Alîkarî:Cureyên peyvan]] —[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:17, 16 tîrmeh 2026 (UTC)
== Kontrol ==
* [[:Kategorî:Kontrol]]
** [[:Kategorî:Kontrola maneyê]]
Ev madde bi botê hatine çêkirin, yek bi yek divê werin kontrolkirin. —[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:17, 16 tîrmeh 2026 (UTC)
= Şablon =
== IPA ==
* {{ş|IPA}} divê [[Modul:IPA]] bi kar bîne. —[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:17, 16 tîrmeh 2026 (UTC)
== Deng ==
Kurdîkirina belgekirina {{ş|deng}} lazim e.--[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 00:06, 19 tîrmeh 2026 (UTC)
= Modul =
== Modul:form of/templates ==
* [[Modul:form of/templates]]: Divê ev modul were rojanekirin û xeletiyên berê wekî ([[hevalê]]) werin rastkirin. —[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:17, 16 tîrmeh 2026 (UTC)
*:Merheba @[[Bikarhêner:Ghybu|Ghybu]] Te gotibû di vê modulê de xeletî hene, jkx tu dikarî li vir binivîsî çi kêmasî hene, daku wextê rojane dikim ez ji bîr nekim? [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:16, 21 tîrmeh 2026 (UTC)
*::Silav. Nizanim ji bîra min çûye... Herwiha ji bo çêkirina formên navdêran zanînên cîns û tîpa dawî bes e:
*::* (-ê, mê) => çemandî, bangkirin
*::* (-ê, nêr) => îzafe
*::* (-ê, mê û nêr) => îzafe (nêr), bangkirin (mê), çemandî (mê)
*::* (-a) => îzafe (mê)
*::* (-ekî) => îzafe û çemandî (nêr, nebinavkirî)
*::* (-eke) = > îzafe (mê, nebinavkirî)
*::* ...
*:: <code>if find(mw.title.getCurrentTitle().subpageText, 'ekî$') then ... end</code>
*::<code><nowiki>{{ku-tewîn-navForm|<navdêr>|<zayend>}</nowiki></code>
*::Tablo û nivîs di yekcarî de tên çêkirin...
*::Feqet problem lêzêdekirina mînakan e. [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 17:34, 21 tîrmeh 2026 (UTC)
*:::Lêzêdekirina kîjan nimûneyan? Ev koda js ji bo çi ye? Qisûrê nenêre min fêm nekir :/ [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 18:13, 21 tîrmeh 2026 (UTC)
*::::Li vira ([[hevalê#Formeke navdêrê]]) di bin maneyên 1. û 2. mînak nayên tevlî kirin :) [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 18:18, 21 tîrmeh 2026 (UTC)
*:::::Ev tercîh e, ne mecbûrî ye, em dikarin [https://ku.wiktionary.org/w/index.php?title=heval%C3%AA&diff=prev&oldid=6276350 wisa] bikin. Wekî din? [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 18:29, 21 tîrmeh 2026 (UTC)
*::::::Min li jor tênê got ku tenê parametreyên "navdêr" û "zayend" hewce nee. Bi '''[//ku.wiktionary.org/w/index.php?title=heval%C3%AA&curid=969734&diff=6276353&oldid=6276350 vî]''' awayî jî tê çêkirin. Parametreyên din ne hewce ne. [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 18:38, 21 tîrmeh 2026 (UTC)
*:::::::Ji bo wê şabloneke din lazim e, bila ev şablon wekî îngilîzî bimîne em ji bo kurmancî yekî din çêkin. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 18:42, 21 tîrmeh 2026 (UTC)
*::::::::[https://ku.wiktionary.org/w/index.php?title=heval%C3%AA&oldid=6276885 wisa] çawa ye? Bi min nivîsîna nimûneyan zêde ne lazim e ji ber ku ti kes serê xwe pê naêşîne. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 09:46, 23 tîrmeh 2026 (UTC)
*:::::::::@[[Bikarhêner:Ghybu|Ghybu]] Vê şablonê bi kar bînin an na? Navê şablonê kê çi be? [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 19:07, 24 tîrmeh 2026 (UTC)
== Modul:columns ==
* [[Modul:columns]] were rojanekirin û {{ş|kol3}} bila lînka ''nîşan bide'' deyne beriya sernavê, kolê di qutiya rengî de bila nebe. —[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:17, 16 tîrmeh 2026 (UTC)
== Modul:etymon ==
* [[Modul:etymon kevn]]: Rojanekirin hewce ye. —[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:17, 16 tîrmeh 2026 (UTC)
== [[Modul:ziman/code to canonical name]] ==
Belgekirina skrîptê û js divê were rastkirin. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 09:31, 22 tîrmeh 2026 (UTC)
:* [[MediaWiki:UpdateLanguageNameAndCode.js]]
:[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 09:50, 22 tîrmeh 2026 (UTC)
::* [[Modul:ziman/print]]
::[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 09:52, 22 tîrmeh 2026 (UTC)
:::*[[Modul:ziman/şablon]]
:::[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 09:56, 22 tîrmeh 2026 (UTC)
::::* [[MediaWiki:Gadget-translation editor.js/ziman.json]]
::::[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 11:06, 22 tîrmeh 2026 (UTC)
== [[Modul:quote]] ==
Piştî ev modul hate hazirkirin, lazim e navên jegirtinan werin rastkirin û li hemûyan {{param|jêgirtin}} were zêdekirin. Bnr. [[Gotûbêja şablonê:Jêgirtin/Ehmedê Xanî/Mem û Zîn]] [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 22:27, 5 tebax 2026 (UTC)
::Ev modul hema bêje hazir e. Hûn li ser van madeyan çi difikirin:
# {{para|tarîx}} lazim e full date be eger na, lazim e {{para|sal}} were bikaranîn. Feqat "'''2021''' kanûna pêşîn 23" bi vî şiklî bi min ne problem e çnkî derdê en.wikt "attestation" e delîla herî pêşî jî sal e.
#: {{demo|sep=wisa xuya dibe<br>|<nowiki>{{jêder-kitêb/ceribandin|en
|tarîx=23 December 2021|nivîskar=Harry Hobbs; George Williams|sernav=Micronations and the Search for Sovereignty|url=https://www.cambridge.org/core/books/micronations-and-the-search-for-sovereignty/B0414A3A322695D9EE71E4CDDFDA06DE|weşanxane=Cambridge University Press|rûpel=155|isbn=978-1-009-15012-5|jêgirtin=jêgirtin.|t=-}}</nowiki>}}
#{{para|amadekar}}/{{para|edîtor}}/{{para|terciman}} bi şiklê edîtoriya, amadekariya, tercimekirina
#: {{demo|sep=dide<br>|<nowiki>{{jêder-kitêb/ceribandin|en
|sernav=Medical Surgical Nursing|serî=Juta's Manual of Nursing|cildê-seriyê=volume 4|edîtor=Sophie Mataniele Mogotlane; Joyce Mokoena; Motshedisi Eunice Chauke; Anne Young|sal=2005|weşanxane=Juta Academic|isbn=978-0702171840|rûpel=!12-29|jêgirtin=jêgirtin|t=-}}</nowiki>}}
--[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 13:09, 10 tebax 2026 (UTC)
:@[[Bikarhêner:Bikarhêner|Bikarhêner]] û @[[Bikarhêner:Ghybu|Ghybu]] Hîn gelek tişt hene divê îzah bikin û fikrê we pirs bikim, feqat îzahkirin pir zor e, em dest bi bikaranînê bikin û dûre tiştên ku hûn naxwazin em dikarin biguherînîn, dibe? [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 13:11, 10 tebax 2026 (UTC)
::Dibe, piştî çêbû, em di praktîkê de bibînin ku çawa ye. -- [[Bikarhêner:Bikarhêner|Bikarhêner]] ([[Gotûbêja bikarhêner:Bikarhêner|gotûbêj]]) 18:05, 10 tebax 2026 (UTC)
= Javascript =
== [[Mediawiki:Gadget-citoid-helper.js]] ==
Ji bo bi citoidê kopîkirina malûmatên çavkaniyan amûreke wisa lazim e. Xisûsen ji ber ku bi çend amûrên din dikare were bikaranîn.
Feqat çend problem hene, şablonên me de kêmasiya parametreyan gelek in û xerîteyên citoidê hîn nehatine çêkirin. Wana sererast bikin dûre vê amûrê çêkin, piştre [[MediaWiki:Gadget-start.js|start.js]] û [[MediaWiki:Gadget-wikt.add-examples.js|add examples.js]] were rojanekirin.
- --[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 00:04, 19 tîrmeh 2026 (UTC)
:Merheba @[[Bikarhêner:Bikarhêner|Bikarhêner]], ez dibêjim karê Modul:quote zêde wext bistîne, bila em dest bi bikaranîna van amûran bikin dûre kêmasiyan em ê temam bikin înşela. Dikarî vana li cihên xwe yên rast kopî paste bikî?
# [[Special:PermanentLink/6291574|Bikarhêner:Wikihez/skrîpt/js/Gadget-citoid-helper.js]] --> [[Mediawiki:Gadget-citoid-helper.js]]
# Ya li jêr kopî bike qismê herî dawî ya AmûrênVeşartî li [[MediaWiki:Gadgets-definition]]:
## <code><nowiki>* citoid-helper[ResourceLoader|hidden|default|dependencies=mediawiki.util]|citoid-helper.js</nowiki></code>
--[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:58, 26 tîrmeh 2026 (UTC)
== [[MediaWiki:Gadget-start.js]] ==
Rojanekirin hewce ye. Min gelek tişt lê zêde kir lê ez niha test dikime. Piştre em bar bikin:
* [[Bikarhêner:Wikihez/Gadget-start.js]] --> [[MediaWiki:Gadget-start.js]]
* [[Bikarhêner:Wikihez/Gadget-start.css]] --> [[MediaWiki:Gadget-start.css]]
--[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 22:08, 17 tîrmeh 2026 (UTC)
:Min [[MediaWiki:Gadget-start/data.json|data.json]] çêkir ji bo ku bi hêsanî malûmatên heyî werin guhartin bêyî guhartina Javascriptê. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 19:49, 18 tîrmeh 2026 (UTC)
:Xeletiyên ku ji bîr nekim rast bikim:
:* Wextê min çavkanî "kitêb" hilbijart û bi destî tije kir xeletiyeke [https://ku.wiktionary.org/w/index.php?title=xezete&diff=prev&oldid=6265392 wisa] derket her kelîme hate lînkkirin.
:* <code>html("⠿")</code> ev ne lazim e.
:* textarea ji bo çavkaniyên jêgirtinan xaseten yên sernav hîn jî ne draggable e.
:* pêşdîtina zindî checkbox wextê tê rakirin, pêşdîtin winda nabe.
:* Butona mobîlê ya vekirina formê di moda tarî de belî nabe, tenê wekî qutiyeke tarî xuya dibe.
:* Metna hişyarkirinê di guhartina rûpelên heyî de lazim e baştir bikim.
:[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 23:51, 18 tîrmeh 2026 (UTC)
::Ev problem çêbûn, ez ê binêrim ka çi problemên din hene. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 14:15, 19 tîrmeh 2026 (UTC)
:::Çêke: Ji bo qismê çavkaniyê yek dikare API call û Kategorî:Çavkanî bi kar bîne ji bo ku şablon zêde bikî ji yên heyî. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 21:21, 19 tîrmeh 2026 (UTC)
::::Ev jî çêbû, min beşa çavkanî jî çêkir. Eger xeletî dernekeve û problema valahiya piştî etîketê ji bîr nekim, piştî rojanekirina amûrên linkify, û citoid em dikarin bar bikin. Ez ê ti tiştê nû îlawe nekim, zêde dirêj bû. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:14, 21 tîrmeh 2026 (UTC)
:::::Merheba @[[Bikarhêner:Bikarhêner|Bikarhêner]]. Dikarî wana bar bikî?
:::::* [[Bikarhêner:Wikihez/Gadget-start.js]] --> [[MediaWiki:Gadget-start.js]]
:::::* [[Bikarhêner:Wikihez/Gadget-start.css]] --> [[MediaWiki:Gadget-start.css]]
:::::* [[MediaWiki:Gadgets-definition]] wisa rojane bike:
:::::* start[ResourceLoader|default|package|dependencies=mediawiki.util,ext.gadget.StorageUtils,ext.gadget.citoid-helper]|start.js|start.css|start.js/data.json
:::::[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 09:39, 5 tebax 2026 (UTC)
{{şirove}} Dewama ''[[Special:PermanentLink/6333688|Gotûbêja bikarhêner:Rewiye tine#WF:Nû]]'' bila gotûbêja wî em spam nekin. :D
{{r|Ghybu}} dikarî [[Special:PermanentLink/6333689|vê htmlê]] binêrî claude rast fêm kiriye yan na? Daxîne û wek html qeyd bike. --[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 18:43, 14 tebax 2026 (UTC)
:Min seh wîkîyên din jî kir, li wîkiya fransî tiştekî wekî daxwaza min çêkirine (tiştên ku ne hewce ne wekî "tab" çêkirine an jî hatine vêşartin): [//fr.wiktionary.org/w/index.php?title=fdsdfdsf&action=edit&redlink=1]. Formata me yê berî jî bi vê lojîkê hatibû çêkirin, wekî de.wiktionary ([//de.wiktionary.org/w/index.php?title=sdfdsfsdfs&action=edit&preload=Vorlage:Formatvorlage_(Substantiv_vereinfacht)]) [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 19:01, 14 tebax 2026 (UTC)
::PS: Dîsa jî Claude min rind fêm kiriye :)) Feqet min got ku beşên Mane", "Bilêvkirin" û "Beşên din" cem hev (wekî "tab") ". Û dema ku tu terê di nav "Besên din" Hevmane, Jê, ... li wira werin dayîn. Wêne/Resim û Nimûne jî di nav beşa ("tab") "Mane" [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 19:17, 14 tebax 2026 (UTC)
::Erê ya fr.wikt min jî dîtibû jixwe fikrê tab min ji wan girtibû :D (feqat min li cem wan tenê tab-a maneyê dît yên din nedît çawa tê vekirin nizanim) Berê hemû beş piştî maneyê bibûn, dûre min sê Tab çêkir, Bingehîn+Lînkkirin+Bikaranîn. Niha lazim e Tabeke din çêkim. Ya ku claude çêkiriye bnr. [[Special:PermanentLink/6333698#L-7]] ne baş e bnr. [[Special:PermanentLink/6333703|qiyaskirinê li ser vê htmlê]] Êdî ez Claude abuse dikime ji ber ku Pro ye :D [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 19:26, 14 tebax 2026 (UTC)
:::Claude dibêje:
:::Good clarification — that's a real simplification, not just a relabel. Updated STEP_GROUPS from 5 tabs down to 3:
:::Mane — the definitions themselves, plus Wêne (image), now grouped in with it instead of sitting in a separate misc tab. Nimûne needed no change since it was already rendering inside each Mane sense block, not as its own step.
:::Bilêvkirin — unchanged, still just pronunciation.
:::Beşên din — everything else in one flat bucket: hevmane, jê, têkildar, herwiha binêre, formên alternatîv, dijmane, jornav, jêrnav, notên bikaranînê, bi alfabeyên din, dûnde, çavkanî, bêhtir bixwîne, tewandin, etîmolojî, zaravayên din, werger, and bnr-h — instead of being split across the old Bingehîn/Lînkkirin/Bikaranîn/Din tabs.
:::No DOM-order changes were needed this time — the fix from the blank-tab bug looks up the tab bar's position dynamically now, so it didn't matter that I regrouped which steps go where. Same two files, saved to your Wiki folder — worth another pass through all three tabs once you've pasted this in, same as last time. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 19:34, 14 tebax 2026 (UTC)
::::Mînak:
::::<pre>
:::: Ziman
:::: Cureyê rêzimanî
:::: Navdêr (hilbijêre) | Cîns (hilbijêre) | Jimar (hilbijêre)
:::: - lêker -mê -yekjimar
:::: - rengdêr -nêr -pirjimar
:::: - ... -... -...
:::: ---------------------------------------------
:::: Mane | Bilêvkirin | Beşên din
:::: hilbijêre:
:::: - mane - IPA - Hevmane
:::: - nimûne - kîte - Dijmane
:::: - wêne
::::</pre> [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 19:45, 14 tebax 2026 (UTC)
== [[Mediawiki:Gadget-QQ.js]] ==
Ev amûr di şikle Minerva de. Her daîm vê xeletiyê dide:
<syntaxhighlight lang="js">
TypeError: Cannot read properties of null (reading 'addEventListener') at css () at runScript () at Array.<anonymous> () at flushCssBuffer ()
</syntaxhighlight> [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 19:29, 18 tîrmeh 2026 (UTC)
:* [[Bikarhêner:Wikihez/skrîpt/js/Gadget-QQ.js]] --> [[Mediawiki:Gadget-QQ.js]]
:* [[Bikarhêner:Wikihez/Gadget-QQ.css]] --> [[Mediawiki:Gadget-QQ.css]]
:Ez dibêjim çêbû lê ka çend roj biceribînim. Tiştên ku hatin sererastkirin:
:# Google Books API Key dikarî zêde bikî, dixe cookies û di gerokê de dimîne. Berê bê API Key dixebitiya lê êdî mecbûr e ku API Key-a te hebe, bidestxistina wê ne zêde zor e lê dîsa jî tevlihev e.
:# Êdî di mobîlê de dixebite, heta di mobîlê de xweştir xuya dike.
:# Moda tarî
:# OOUI dewsa jquery.ui
:# Li qutiyê çi dixwazî zêde bikî, dikare li gorî îsm, sifet, fiîl bitewîne. Lê ji bo fiîl tenê dikare çend heb inflection bîne.
:# Butona paqij bike lê zêde kir.
:# Çend paqijiyên jêgirtinên Google Kitêbê niha hene.
:[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 23:38, 18 tîrmeh 2026 (UTC)
::Tewandina fiîlan û xeletiya modulê lazim e were rastkirin. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 14:40, 21 tîrmeh 2026 (UTC)
== [[MediaWiki:Gadget-wikt.add-examples.js]] ==
Min ev amûr hinek rojane kir feqat çend problem hene berî ku bar bikin.
Tiştên ku min guhart:
# Êdî li sayfeyên bi {{ş|maneid}} jî dixebite,
# Cihê di wîkîtekstê de yê ku jêgirtin were îlawekirin baştir bû,
# [[Mediawiki:Gadget-citoid-helper.js|citoid helper]] zêde kir ji bo ku bi hêsanî çavkanî bi riya doi, isbn an urlyê werin tijîkirin.
* [[Bikarhêner:Wikihez/Gadget-wikt.add-examples.css]] --> [[MediaWiki:Gadget-wikt.add-examples.css]]
* [[Bikarhêner:Wikihez/Gadget-wikt.add-examples.js]] --> [[MediaWiki:Gadget-wikt.add-examples.js]]
- --[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 00:50, 19 tîrmeh 2026 (UTC)
:Min "wikt." qismên cache kirinê ya wîkiya fransî bi [[MediaWiki:Gadget-StorageUtils.js]] guhartiye. loma ji bîr nekin wê amûrê li [[MediaWiki:Gadgets-definition]] zêde bikin. û navê amûrê jî biguhêrînin. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 09:15, 23 tîrmeh 2026 (UTC)
::Berê li ser WF:ceribandin dixebitî. niha naxebite. Divê were rastkirin. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 22:10, 7 tebax 2026 (UTC)
== Gadget-translation editor ==
* [[MediaWiki:Gadget-translation editor.js]]: divê formata en.wîktê were bikaranîn ji ber ku me gelek tercime ji en.wîktê kopî kir û ev js hîn nikare formata wekî li jêr bi kar bîne.
<syntaxhighlight lang="wikitext">
* {{Z|sh}}:
*: Kirîlî:
*: Latînî
</syntaxhighlight>
—[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:17, 16 tîrmeh 2026 (UTC)
== [[Mediawiki:Gadget-linkify.js]] ==
* ''rûpeleke'' wekî<syntaxhighlight lang="wikitext">[[rûpeleke]]</syntaxhighlight> lînk dike, bi regexê belkî dikare wisa bike <syntaxhighlight lang="wikitext">[[rûpel]]eke</syntaxhighlight>
—[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:17, 16 tîrmeh 2026 (UTC)
* Amûreke din wekî [[User:Wikihez/Gadget-linkify.js|linkify]] lazim e ku herfên mezin biçûk bike ji bo kurmancî.—[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:17, 16 tîrmeh 2026 (UTC)
:{{r|Bikarhêner}} Merheba bira, dikarî viya jî bar bikî?:
* [[Special:PermanentLink/6291974|linkify]] --> [[Mediawiki:Gadget-linkify.js]]
Spas--[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 11:42, 29 tîrmeh 2026 (UTC)
:Dûre [https://ku.wiktionary.org/wiki/MediaWiki:Gadget-start.js#L-283 li vir] wiktviLinkify bike kuLinkify xêra xwe [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 11:51, 29 tîrmeh 2026 (UTC)
::Min ji bîr kir lê zêde bikim niha nikare "Dİ" bike "di", xeletiyeke berbelav a di nivîsên kurdî de, herfên din ên wekî ll yan rr jî hewce ne werin zêdekirin. Dûre em zêde bikin. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 21:42, 29 tîrmeh 2026 (UTC)
:::Min nû ferq kir, sayfeyên ku hîn nehatine çêkirin wîkîlînk nake. Problemeke mezin e divê were rastkirin. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 18:15, 30 tîrmeh 2026 (UTC)
::::Na, lînk dike, tiştekî din heye... [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 10:49, 31 tîrmeh 2026 (UTC)
== Amûra manayê ==
Amûreke din ji bo nivîsina maneyê wekî Nimûne zêde bike lazim e [https://ku.wiktionary.org/w/index.php?title=Bikarh%C3%AAner:Wikihez/test.js&oldid=6276876 js] [https://ku.wiktionary.org/w/index.php?title=%C5%9Eablon:ceribandin2&oldid=6265629 şablon] [https://ku.wiktionary.org/w/index.php?title=Bikarh%C3%AAner:Wikihez/common.css&oldid=6265642 css] --[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 09:12, 23 tîrmeh 2026 (UTC)
== [[MediaWiki:Gadget-jeder.js]] ==
@[[Bikarhêner:Ghybu|Ghybu]] Çavkaniyên jêderê di moda pêşdîtinê de jêderê vedişêre, ew jî min gelek eciz dike wextê çavkanî zêde dikim. Min ji Claude pirsî û kodan nîşanî wê da, wisa cewab da:
Yes — and this file actually explains the whole thing precisely, better than my earlier guess about extract-stripping.
What's happening: the CSS rule
<syntaxhighlight lang="css">
.jeder{
display:none;
}
</syntaxhighlight>
hides every citation by default, *unconditionally*. The only thing that ever makes it visible again is the gadget's JS: it finds each `.jeder`, builds the short "`— (year, author, +)`" summary from the `.j-pewist` fields, and either reveals the short version or — for citations with no `.j-pewist` fields — explicitly sets `display:inline` on the original.
So visibility of citations depends entirely on this JS running. In the normal article view (Image 1) it runs, so you see the collapsed "`(1918, E. Rehmî Ji Mala Hekariyan, Amadekar: M. E. Bozarslan, +)`" form. In whatever generated Image 2 — a hover-preview/extract/API render — gadget JS doesn't execute, so nothing ever removes the `display:none`, and the citation vanishes completely rather than degrading to "still visible, just not collapsed."
<b>The fix:</b> flip the default so the *un-collapsed* state is the safe fallback, and let JS do the hiding only after it successfully builds the short version. That way, any context without JS shows the full citation instead of nothing.
CSS — remove the blanket hide:
<syntaxhighlight lang="css">
.jeder {
/* intentionally no display:none here — see Gadget-... .js */
}
</syntaxhighlight>
JS — do the hiding from script, after the short form exists:
{{veşêre-ser}}
<syntaxhighlight lang="js">
// Ji bo şablonên [[Şablon:jêder]] hatiye nivîsandin.
// Parametreyên ku di navbera "<span class="j-pewist">...</span>" an "{{j-pêwîst|...}}" de ne venaşêre.
$(function() {
function nivisaKurtTevliBike(sund, nivisKurt) {
var zede = $('<a>+</a>')
.addClass('click')
.attr('href', '#')
.attr('title', 'zêdetir')
.css('font-weight', 'bold');
var kurt = $(' <a>↩</a>')
.addClass('click-kurt')
.attr('href', '#')
.attr('title', 'veşêre')
.css('font-weight', 'bold');
$('<span>' + nivisKurt + '</span>')
.append(zede).append(')')
.addClass('jeder-kurt')
.css('font-size', '0.85em')
.insertAfter(sund);
sund.append(' ').append(kurt);
// Only hide the full citation once the short summary actually exists.
// If this script never runs (no-JS clients, hover-preview extracts,
// action=render, etc.), the full citation stays visible instead of
// silently disappearing.
sund.css('display', 'none');
}
function vesere() {
$('.jeder').each(function() {
var elmTab = $(this).find('.j-pewist').clone();
if (elmTab.length) {
var elm = '';
for (var i = elmTab.length - 1; i >= 0; i--) {
elm = elmTab.eq(i).html() + ', ' + elm;
}
var nivisKurt = ' — (' + elm;
nivisaKurtTevliBike($(this), nivisKurt);
}
// else: no j-pewist fields to shorten — leave the full citation
// as it already renders (visible), nothing to do.
});
}
vesere();
$(".click").click(function(e) {
e.preventDefault();
$(this).parent('.jeder-kurt').css('display', 'none');
$(this).parent('.jeder-kurt').prev().css('display', 'inline');
});
$(".click-kurt").click(function(e) {
e.preventDefault();
$(this).parent('.jeder').css('display', 'none');
$(this).parent('.jeder').next().css('display', 'inline');
});
});
</syntaxhighlight>
Net effect:
- JS-enabled readers (normal article view): identical experience to today — collapsed short form with `+`/`↩` toggle.
- No-JS contexts (previews, extracts, screen readers before JS loads, print, etc.): full citation is shown instead of nothing — a real regression fix rather than a cosmetic one.
One caveat worth being upfront about: this fixes it *if* the preview context renders the gadget's HTML/CSS but doesn't execute gadget JS (which is the far more common case, and what this code strongly suggests is happening). If Image 2 instead comes from a pipeline that strips the `.jeder`/`.jegirtin-text` elements out of the HTML entirely before this CSS/JS even gets a chance to apply, no on-wiki CSS/JS change can help — that'd need the extract-generation config changed instead. Given what this gadget file shows, though, I'd bet on the CSS-hide explanation.
{{veşêre-bin}}
Em dûre biceribînin eger xeletî tinebe, vî tiştî jî rast bikin. --[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 20:00, 23 tîrmeh 2026 (UTC)
:Ez APIya MediaWiki rind nizanim belkî Claude dizane:) Em nikarin bibêjin dema ku moda "''action=edit''" e fonksiyona <code>function vesere()</code> bi kar meyîne. [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 15:57, 24 tîrmeh 2026 (UTC)
::Na, di moda "edît"-ê de <code>var elmTab = null</code>... [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 16:13, 24 tîrmeh 2026 (UTC)
?:
<syntaxhighlight lang="js">
if (
mw.config.get('wgAction') === 'edit' ||
mw.config.get('wgAction') === 'submit'
){
var elmTab = [];
} else {
var elmTab = $(this).find('.j-pewist').clone();
}
</syntaxhighlight>
--[[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 16:31, 24 tîrmeh 2026 (UTC)
:Ez jî nizanim Claude çiqas ji mediawiki fêm dike lê heta niha ti tişt nîne ku min jê pirs kir û nikaribû çêke, bila wekî reklam nebe feqat Claude mikemmel e, dibêjim "li vir çima xeletiyeke wisa derdikeve" di dosyeya 2000 rêzî de diçe tiştê xelet tenê rast dike tiştekî din naguherîne. Chatgpt û aistudio qet wisa nakin, eynî dosyeyê deh cara dinivîsin, deh netîceyên cuda derdikevin :D
:Em dikarin vê amûrê wextê edit û submitê neaktîv bikin wekî <syntaxhighlight lang="js">if (!(action === "edit" || action === "submit")) {
:return;</syntaxhighlight> lê wê demê display:none wê çibe nizanim. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 18:23, 24 tîrmeh 2026 (UTC)
::display:none ne hewce ye ma jixwe di nav kodê [https://ku.wiktionary.org/w/index.php?title=MediaWiki:Gadget-jeder.js&oldid=6069025#L-49 L-49] de inline/none heye? [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 18:53, 24 tîrmeh 2026 (UTC)
:Min bi vî şiklî [https://ku.wiktionary.org/w/index.php?title=Bikarh%C3%AAner:Wikihez/vector-2022.js&diff=prev&oldid=6290816#L-28] ceriband feqat nexebitî. "display:none" di pêşdîtinê de dixebite feqat js naşixule. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 14:43, 25 tîrmeh 2026 (UTC)
::Kodên JSê pir hez nakim (pêşta hukurina APIya MWyê hewce bû) dîsa jî ez ê seh bikim :) [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 16:49, 27 tîrmeh 2026 (UTC)
:::Ez niha bi vî şiklî [https://ku.wiktionary.org/w/index.php?title=Bikarh%C3%AAner:Wikihez/test.js&oldid=6290820] [https://ku.wiktionary.org/w/index.php?title=Bikarh%C3%AAner:Wikihez/common.css&oldid=6290821#L-8] bi kar tînim ti problem nîne. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 17:09, 27 tîrmeh 2026 (UTC)
== [[MediaWiki:Gadget-PagePreviews.js]] ==
Ez dibêjim em vê amûrê jî çêkin [[:en:MediaWiki:Gadget-PagePreviews.js]] --[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 10:56, 3 tebax 2026 (UTC)
= Moda tarî =
== [[Şablon:wîkîpediya]] ==
Rengê tarî de xirab e.--[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 19:36, 4 tebax 2026 (UTC)
= Bot =
Karên ku bi botê werin çêkirin ji kerema xwe li vir binivîsin.
== Kategorî:Biwêj ==
[[:Kategorî:Biwêj]] divê were paqijkirin, lîsteya madeyên {{ş|biwêj}} çêke, yên ku tê de bûn, kirin, man hene filtre bike yên din bi destî tê çêkirin.—[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:17, 16 tîrmeh 2026 (UTC)
== Jêgirtin ==
Xistina jêgirtinên beşa [https://ku.wiktionary.org/w/index.php?search=insource%3A%2F%3D+*Ji+%5BWw%5D%C3%AAjey%C3%AA+*%3D%2F&title=Taybet%3AL%C3%AAger%C3%AEn&profile=advanced&fulltext=1&ns0=1&searchToken=8rh0bmw8dccsi7aynl6zli8uf ji wêjeyê] li beşa maneyê. —[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:17, 16 tîrmeh 2026 (UTC)
== Bota Toolforgeê ==
Botekî Toolforgeê lazim e ji bo ku xeletiyên biçûk wekî şablonên bi navên îngilîzî werin kurdîkirin yan jî valahiya beşan rast bike û hwd.—[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:17, 16 tîrmeh 2026 (UTC)
:Min [[Bikarhêner:Wikihez/skrîpt/py/kuwiktkozmetik.py|paqijiyen kozmetîk]] hazir kir feqat hîn navên şablonan naguhêre. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 20:05, 4 tebax 2026 (UTC)
== Updatew ==
Bota [[Bikarhêner:Wikihez/skrîpt/py/updateW.py|updateW]] divê were rojanekirin. Yan jî yekî nû were çêkirin. Şablonên {{ş|W}} di beşa tercimeyan de sererast dike û zimanan rêz dike. Ya niha xeletiya navê zimanî dide.—[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:17, 16 tîrmeh 2026 (UTC)
== sihir --> sêhr ==
Tercimeyên ''[[sêhr]]'' hemû dibêje ''sihir'' loma bi botê lazim e kirin ''sêhr''. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 17:43, 18 tîrmeh 2026 (UTC)
:Sihirbaz --> sêhrbaz [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 18:07, 18 tîrmeh 2026 (UTC)
== Tercimeyên dîroknas ==
Li tercimeyên [[dîroknas]], hevmaneyên wê hewce ye were îlawekirin. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 18:44, 18 tîrmeh 2026 (UTC)
== Mewlûd ==
Sererastkirina jêgirtinên mewlûdê [https://ku.wiktionary.org/w/index.php?search=insource%3A%2Fw%5C%3AMela+His%C3%AAn%C3%AA+Batey%C3%AE%2F&title=Taybet%3AL%C3%AAger%C3%AEn&ns0=1&searchToken=8m0tguy3sqt7edr4sg0u8hedo] wekî [https://ku.wiktionary.org/w/index.php?title=dax%C3%AEdar&curid=284303&diff=6265851&oldid=6142285] [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 09:43, 20 tîrmeh 2026 (UTC)
0fy8y098bwu21gifb1x1bn99d49uvit
6333713
6333711
2026-08-14T19:46:54Z
Ghybu
1393
/* MediaWiki:Gadget-start.js */
6333713
wikitext
text/x-wiki
{{/ser}}
= Karên ferhengî =
== Mane ==
* [[:Kategorî:Madeyên bê beşa mane]]
** [[:Kategorî:Madeyên bê beşa mane bi kurmancî]]
Li ser van rûpelan ev made hene ku maneyan wan nehatine nivîsin û divê werin nivîsin. —[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:17, 16 tîrmeh 2026 (UTC)
== Etîmolojî ==
*[[:Kategorî:Daxwazên etîmolojiyê]]
**[[:Kategorî:Daxwazên etîmolojiyê bi kurmancî]]
Li ser van rûpelan ev made hene ku etîmolojiya wan hîn nehatine nivîsin. Ji bo alîkariyê binêre [[WF:Etîmolojî]] —[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:17, 16 tîrmeh 2026 (UTC)
== Cureyê rêzimanî ==
* [[:Kategorî:Gotarên bê kategoriya rêzimanî]]
* [[:Kategorî:Gotarên bê kategoriya rêzimanî bi kurmancî]]
Li ser van rûpelan ev made hene ku cureyên wan yên rêzimanî hîn nehatine nivîsin. Ji bo alîkariyê binêre [[Alîkarî:Cureyên peyvan]] —[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:17, 16 tîrmeh 2026 (UTC)
== Kontrol ==
* [[:Kategorî:Kontrol]]
** [[:Kategorî:Kontrola maneyê]]
Ev madde bi botê hatine çêkirin, yek bi yek divê werin kontrolkirin. —[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:17, 16 tîrmeh 2026 (UTC)
= Şablon =
== IPA ==
* {{ş|IPA}} divê [[Modul:IPA]] bi kar bîne. —[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:17, 16 tîrmeh 2026 (UTC)
== Deng ==
Kurdîkirina belgekirina {{ş|deng}} lazim e.--[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 00:06, 19 tîrmeh 2026 (UTC)
= Modul =
== Modul:form of/templates ==
* [[Modul:form of/templates]]: Divê ev modul were rojanekirin û xeletiyên berê wekî ([[hevalê]]) werin rastkirin. —[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:17, 16 tîrmeh 2026 (UTC)
*:Merheba @[[Bikarhêner:Ghybu|Ghybu]] Te gotibû di vê modulê de xeletî hene, jkx tu dikarî li vir binivîsî çi kêmasî hene, daku wextê rojane dikim ez ji bîr nekim? [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:16, 21 tîrmeh 2026 (UTC)
*::Silav. Nizanim ji bîra min çûye... Herwiha ji bo çêkirina formên navdêran zanînên cîns û tîpa dawî bes e:
*::* (-ê, mê) => çemandî, bangkirin
*::* (-ê, nêr) => îzafe
*::* (-ê, mê û nêr) => îzafe (nêr), bangkirin (mê), çemandî (mê)
*::* (-a) => îzafe (mê)
*::* (-ekî) => îzafe û çemandî (nêr, nebinavkirî)
*::* (-eke) = > îzafe (mê, nebinavkirî)
*::* ...
*:: <code>if find(mw.title.getCurrentTitle().subpageText, 'ekî$') then ... end</code>
*::<code><nowiki>{{ku-tewîn-navForm|<navdêr>|<zayend>}</nowiki></code>
*::Tablo û nivîs di yekcarî de tên çêkirin...
*::Feqet problem lêzêdekirina mînakan e. [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 17:34, 21 tîrmeh 2026 (UTC)
*:::Lêzêdekirina kîjan nimûneyan? Ev koda js ji bo çi ye? Qisûrê nenêre min fêm nekir :/ [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 18:13, 21 tîrmeh 2026 (UTC)
*::::Li vira ([[hevalê#Formeke navdêrê]]) di bin maneyên 1. û 2. mînak nayên tevlî kirin :) [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 18:18, 21 tîrmeh 2026 (UTC)
*:::::Ev tercîh e, ne mecbûrî ye, em dikarin [https://ku.wiktionary.org/w/index.php?title=heval%C3%AA&diff=prev&oldid=6276350 wisa] bikin. Wekî din? [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 18:29, 21 tîrmeh 2026 (UTC)
*::::::Min li jor tênê got ku tenê parametreyên "navdêr" û "zayend" hewce nee. Bi '''[//ku.wiktionary.org/w/index.php?title=heval%C3%AA&curid=969734&diff=6276353&oldid=6276350 vî]''' awayî jî tê çêkirin. Parametreyên din ne hewce ne. [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 18:38, 21 tîrmeh 2026 (UTC)
*:::::::Ji bo wê şabloneke din lazim e, bila ev şablon wekî îngilîzî bimîne em ji bo kurmancî yekî din çêkin. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 18:42, 21 tîrmeh 2026 (UTC)
*::::::::[https://ku.wiktionary.org/w/index.php?title=heval%C3%AA&oldid=6276885 wisa] çawa ye? Bi min nivîsîna nimûneyan zêde ne lazim e ji ber ku ti kes serê xwe pê naêşîne. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 09:46, 23 tîrmeh 2026 (UTC)
*:::::::::@[[Bikarhêner:Ghybu|Ghybu]] Vê şablonê bi kar bînin an na? Navê şablonê kê çi be? [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 19:07, 24 tîrmeh 2026 (UTC)
== Modul:columns ==
* [[Modul:columns]] were rojanekirin û {{ş|kol3}} bila lînka ''nîşan bide'' deyne beriya sernavê, kolê di qutiya rengî de bila nebe. —[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:17, 16 tîrmeh 2026 (UTC)
== Modul:etymon ==
* [[Modul:etymon kevn]]: Rojanekirin hewce ye. —[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:17, 16 tîrmeh 2026 (UTC)
== [[Modul:ziman/code to canonical name]] ==
Belgekirina skrîptê û js divê were rastkirin. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 09:31, 22 tîrmeh 2026 (UTC)
:* [[MediaWiki:UpdateLanguageNameAndCode.js]]
:[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 09:50, 22 tîrmeh 2026 (UTC)
::* [[Modul:ziman/print]]
::[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 09:52, 22 tîrmeh 2026 (UTC)
:::*[[Modul:ziman/şablon]]
:::[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 09:56, 22 tîrmeh 2026 (UTC)
::::* [[MediaWiki:Gadget-translation editor.js/ziman.json]]
::::[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 11:06, 22 tîrmeh 2026 (UTC)
== [[Modul:quote]] ==
Piştî ev modul hate hazirkirin, lazim e navên jegirtinan werin rastkirin û li hemûyan {{param|jêgirtin}} were zêdekirin. Bnr. [[Gotûbêja şablonê:Jêgirtin/Ehmedê Xanî/Mem û Zîn]] [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 22:27, 5 tebax 2026 (UTC)
::Ev modul hema bêje hazir e. Hûn li ser van madeyan çi difikirin:
# {{para|tarîx}} lazim e full date be eger na, lazim e {{para|sal}} were bikaranîn. Feqat "'''2021''' kanûna pêşîn 23" bi vî şiklî bi min ne problem e çnkî derdê en.wikt "attestation" e delîla herî pêşî jî sal e.
#: {{demo|sep=wisa xuya dibe<br>|<nowiki>{{jêder-kitêb/ceribandin|en
|tarîx=23 December 2021|nivîskar=Harry Hobbs; George Williams|sernav=Micronations and the Search for Sovereignty|url=https://www.cambridge.org/core/books/micronations-and-the-search-for-sovereignty/B0414A3A322695D9EE71E4CDDFDA06DE|weşanxane=Cambridge University Press|rûpel=155|isbn=978-1-009-15012-5|jêgirtin=jêgirtin.|t=-}}</nowiki>}}
#{{para|amadekar}}/{{para|edîtor}}/{{para|terciman}} bi şiklê edîtoriya, amadekariya, tercimekirina
#: {{demo|sep=dide<br>|<nowiki>{{jêder-kitêb/ceribandin|en
|sernav=Medical Surgical Nursing|serî=Juta's Manual of Nursing|cildê-seriyê=volume 4|edîtor=Sophie Mataniele Mogotlane; Joyce Mokoena; Motshedisi Eunice Chauke; Anne Young|sal=2005|weşanxane=Juta Academic|isbn=978-0702171840|rûpel=!12-29|jêgirtin=jêgirtin|t=-}}</nowiki>}}
--[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 13:09, 10 tebax 2026 (UTC)
:@[[Bikarhêner:Bikarhêner|Bikarhêner]] û @[[Bikarhêner:Ghybu|Ghybu]] Hîn gelek tişt hene divê îzah bikin û fikrê we pirs bikim, feqat îzahkirin pir zor e, em dest bi bikaranînê bikin û dûre tiştên ku hûn naxwazin em dikarin biguherînîn, dibe? [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 13:11, 10 tebax 2026 (UTC)
::Dibe, piştî çêbû, em di praktîkê de bibînin ku çawa ye. -- [[Bikarhêner:Bikarhêner|Bikarhêner]] ([[Gotûbêja bikarhêner:Bikarhêner|gotûbêj]]) 18:05, 10 tebax 2026 (UTC)
= Javascript =
== [[Mediawiki:Gadget-citoid-helper.js]] ==
Ji bo bi citoidê kopîkirina malûmatên çavkaniyan amûreke wisa lazim e. Xisûsen ji ber ku bi çend amûrên din dikare were bikaranîn.
Feqat çend problem hene, şablonên me de kêmasiya parametreyan gelek in û xerîteyên citoidê hîn nehatine çêkirin. Wana sererast bikin dûre vê amûrê çêkin, piştre [[MediaWiki:Gadget-start.js|start.js]] û [[MediaWiki:Gadget-wikt.add-examples.js|add examples.js]] were rojanekirin.
- --[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 00:04, 19 tîrmeh 2026 (UTC)
:Merheba @[[Bikarhêner:Bikarhêner|Bikarhêner]], ez dibêjim karê Modul:quote zêde wext bistîne, bila em dest bi bikaranîna van amûran bikin dûre kêmasiyan em ê temam bikin înşela. Dikarî vana li cihên xwe yên rast kopî paste bikî?
# [[Special:PermanentLink/6291574|Bikarhêner:Wikihez/skrîpt/js/Gadget-citoid-helper.js]] --> [[Mediawiki:Gadget-citoid-helper.js]]
# Ya li jêr kopî bike qismê herî dawî ya AmûrênVeşartî li [[MediaWiki:Gadgets-definition]]:
## <code><nowiki>* citoid-helper[ResourceLoader|hidden|default|dependencies=mediawiki.util]|citoid-helper.js</nowiki></code>
--[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:58, 26 tîrmeh 2026 (UTC)
== [[MediaWiki:Gadget-start.js]] ==
Rojanekirin hewce ye. Min gelek tişt lê zêde kir lê ez niha test dikime. Piştre em bar bikin:
* [[Bikarhêner:Wikihez/Gadget-start.js]] --> [[MediaWiki:Gadget-start.js]]
* [[Bikarhêner:Wikihez/Gadget-start.css]] --> [[MediaWiki:Gadget-start.css]]
--[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 22:08, 17 tîrmeh 2026 (UTC)
:Min [[MediaWiki:Gadget-start/data.json|data.json]] çêkir ji bo ku bi hêsanî malûmatên heyî werin guhartin bêyî guhartina Javascriptê. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 19:49, 18 tîrmeh 2026 (UTC)
:Xeletiyên ku ji bîr nekim rast bikim:
:* Wextê min çavkanî "kitêb" hilbijart û bi destî tije kir xeletiyeke [https://ku.wiktionary.org/w/index.php?title=xezete&diff=prev&oldid=6265392 wisa] derket her kelîme hate lînkkirin.
:* <code>html("⠿")</code> ev ne lazim e.
:* textarea ji bo çavkaniyên jêgirtinan xaseten yên sernav hîn jî ne draggable e.
:* pêşdîtina zindî checkbox wextê tê rakirin, pêşdîtin winda nabe.
:* Butona mobîlê ya vekirina formê di moda tarî de belî nabe, tenê wekî qutiyeke tarî xuya dibe.
:* Metna hişyarkirinê di guhartina rûpelên heyî de lazim e baştir bikim.
:[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 23:51, 18 tîrmeh 2026 (UTC)
::Ev problem çêbûn, ez ê binêrim ka çi problemên din hene. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 14:15, 19 tîrmeh 2026 (UTC)
:::Çêke: Ji bo qismê çavkaniyê yek dikare API call û Kategorî:Çavkanî bi kar bîne ji bo ku şablon zêde bikî ji yên heyî. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 21:21, 19 tîrmeh 2026 (UTC)
::::Ev jî çêbû, min beşa çavkanî jî çêkir. Eger xeletî dernekeve û problema valahiya piştî etîketê ji bîr nekim, piştî rojanekirina amûrên linkify, û citoid em dikarin bar bikin. Ez ê ti tiştê nû îlawe nekim, zêde dirêj bû. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:14, 21 tîrmeh 2026 (UTC)
:::::Merheba @[[Bikarhêner:Bikarhêner|Bikarhêner]]. Dikarî wana bar bikî?
:::::* [[Bikarhêner:Wikihez/Gadget-start.js]] --> [[MediaWiki:Gadget-start.js]]
:::::* [[Bikarhêner:Wikihez/Gadget-start.css]] --> [[MediaWiki:Gadget-start.css]]
:::::* [[MediaWiki:Gadgets-definition]] wisa rojane bike:
:::::* start[ResourceLoader|default|package|dependencies=mediawiki.util,ext.gadget.StorageUtils,ext.gadget.citoid-helper]|start.js|start.css|start.js/data.json
:::::[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 09:39, 5 tebax 2026 (UTC)
{{şirove}} Dewama ''[[Special:PermanentLink/6333688|Gotûbêja bikarhêner:Rewiye tine#WF:Nû]]'' bila gotûbêja wî em spam nekin. :D
{{r|Ghybu}} dikarî [[Special:PermanentLink/6333689|vê htmlê]] binêrî claude rast fêm kiriye yan na? Daxîne û wek html qeyd bike. --[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 18:43, 14 tebax 2026 (UTC)
:Min seh wîkîyên din jî kir, li wîkiya fransî tiştekî wekî daxwaza min çêkirine (tiştên ku ne hewce ne wekî "tab" çêkirine an jî hatine vêşartin): [//fr.wiktionary.org/w/index.php?title=fdsdfdsf&action=edit&redlink=1]. Formata me yê berî jî bi vê lojîkê hatibû çêkirin, wekî de.wiktionary ([//de.wiktionary.org/w/index.php?title=sdfdsfsdfs&action=edit&preload=Vorlage:Formatvorlage_(Substantiv_vereinfacht)]) [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 19:01, 14 tebax 2026 (UTC)
::PS: Dîsa jî Claude min rind fêm kiriye :)) Feqet min got ku beşên Mane", "Bilêvkirin" û "Beşên din" cem hev (wekî "tab") ". Û dema ku tu terê di nav "Besên din" Hevmane, Jê, ... li wira werin dayîn. Wêne/Resim û Nimûne jî di nav beşa ("tab") "Mane" [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 19:17, 14 tebax 2026 (UTC)
::Erê ya fr.wikt min jî dîtibû jixwe fikrê tab min ji wan girtibû :D (feqat min li cem wan tenê tab-a maneyê dît yên din nedît çawa tê vekirin nizanim) Berê hemû beş piştî maneyê bibûn, dûre min sê Tab çêkir, Bingehîn+Lînkkirin+Bikaranîn. Niha lazim e Tabeke din çêkim. Ya ku claude çêkiriye bnr. [[Special:PermanentLink/6333698#L-7]] ne baş e bnr. [[Special:PermanentLink/6333703|qiyaskirinê li ser vê htmlê]] Êdî ez Claude abuse dikime ji ber ku Pro ye :D [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 19:26, 14 tebax 2026 (UTC)
:::Claude dibêje:
:::Good clarification — that's a real simplification, not just a relabel. Updated STEP_GROUPS from 5 tabs down to 3:
:::Mane — the definitions themselves, plus Wêne (image), now grouped in with it instead of sitting in a separate misc tab. Nimûne needed no change since it was already rendering inside each Mane sense block, not as its own step.
:::Bilêvkirin — unchanged, still just pronunciation.
:::Beşên din — everything else in one flat bucket: hevmane, jê, têkildar, herwiha binêre, formên alternatîv, dijmane, jornav, jêrnav, notên bikaranînê, bi alfabeyên din, dûnde, çavkanî, bêhtir bixwîne, tewandin, etîmolojî, zaravayên din, werger, and bnr-h — instead of being split across the old Bingehîn/Lînkkirin/Bikaranîn/Din tabs.
:::No DOM-order changes were needed this time — the fix from the blank-tab bug looks up the tab bar's position dynamically now, so it didn't matter that I regrouped which steps go where. Same two files, saved to your Wiki folder — worth another pass through all three tabs once you've pasted this in, same as last time. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 19:34, 14 tebax 2026 (UTC)
::::Mînak:
Ziman
---------------------------------------------
Cureyê rêzimanî
Navdêr (hilbijêre) | Cîns (hilbijêre) | Jimar (hilbijêre)
- lêker -mê -yekjimar
- rengdêr -nêr -pirjimar
- ... -... -...
---------------------------------------------
Mane | Bilêvkirin | Beşên din
hilbijêre:
- mane - IPA - Hevmane
- nimûne - kîte - Dijmane
- wêne [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 19:45, 14 tebax 2026 (UTC)
== [[Mediawiki:Gadget-QQ.js]] ==
Ev amûr di şikle Minerva de. Her daîm vê xeletiyê dide:
<syntaxhighlight lang="js">
TypeError: Cannot read properties of null (reading 'addEventListener') at css () at runScript () at Array.<anonymous> () at flushCssBuffer ()
</syntaxhighlight> [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 19:29, 18 tîrmeh 2026 (UTC)
:* [[Bikarhêner:Wikihez/skrîpt/js/Gadget-QQ.js]] --> [[Mediawiki:Gadget-QQ.js]]
:* [[Bikarhêner:Wikihez/Gadget-QQ.css]] --> [[Mediawiki:Gadget-QQ.css]]
:Ez dibêjim çêbû lê ka çend roj biceribînim. Tiştên ku hatin sererastkirin:
:# Google Books API Key dikarî zêde bikî, dixe cookies û di gerokê de dimîne. Berê bê API Key dixebitiya lê êdî mecbûr e ku API Key-a te hebe, bidestxistina wê ne zêde zor e lê dîsa jî tevlihev e.
:# Êdî di mobîlê de dixebite, heta di mobîlê de xweştir xuya dike.
:# Moda tarî
:# OOUI dewsa jquery.ui
:# Li qutiyê çi dixwazî zêde bikî, dikare li gorî îsm, sifet, fiîl bitewîne. Lê ji bo fiîl tenê dikare çend heb inflection bîne.
:# Butona paqij bike lê zêde kir.
:# Çend paqijiyên jêgirtinên Google Kitêbê niha hene.
:[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 23:38, 18 tîrmeh 2026 (UTC)
::Tewandina fiîlan û xeletiya modulê lazim e were rastkirin. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 14:40, 21 tîrmeh 2026 (UTC)
== [[MediaWiki:Gadget-wikt.add-examples.js]] ==
Min ev amûr hinek rojane kir feqat çend problem hene berî ku bar bikin.
Tiştên ku min guhart:
# Êdî li sayfeyên bi {{ş|maneid}} jî dixebite,
# Cihê di wîkîtekstê de yê ku jêgirtin were îlawekirin baştir bû,
# [[Mediawiki:Gadget-citoid-helper.js|citoid helper]] zêde kir ji bo ku bi hêsanî çavkanî bi riya doi, isbn an urlyê werin tijîkirin.
* [[Bikarhêner:Wikihez/Gadget-wikt.add-examples.css]] --> [[MediaWiki:Gadget-wikt.add-examples.css]]
* [[Bikarhêner:Wikihez/Gadget-wikt.add-examples.js]] --> [[MediaWiki:Gadget-wikt.add-examples.js]]
- --[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 00:50, 19 tîrmeh 2026 (UTC)
:Min "wikt." qismên cache kirinê ya wîkiya fransî bi [[MediaWiki:Gadget-StorageUtils.js]] guhartiye. loma ji bîr nekin wê amûrê li [[MediaWiki:Gadgets-definition]] zêde bikin. û navê amûrê jî biguhêrînin. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 09:15, 23 tîrmeh 2026 (UTC)
::Berê li ser WF:ceribandin dixebitî. niha naxebite. Divê were rastkirin. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 22:10, 7 tebax 2026 (UTC)
== Gadget-translation editor ==
* [[MediaWiki:Gadget-translation editor.js]]: divê formata en.wîktê were bikaranîn ji ber ku me gelek tercime ji en.wîktê kopî kir û ev js hîn nikare formata wekî li jêr bi kar bîne.
<syntaxhighlight lang="wikitext">
* {{Z|sh}}:
*: Kirîlî:
*: Latînî
</syntaxhighlight>
—[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:17, 16 tîrmeh 2026 (UTC)
== [[Mediawiki:Gadget-linkify.js]] ==
* ''rûpeleke'' wekî<syntaxhighlight lang="wikitext">[[rûpeleke]]</syntaxhighlight> lînk dike, bi regexê belkî dikare wisa bike <syntaxhighlight lang="wikitext">[[rûpel]]eke</syntaxhighlight>
—[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:17, 16 tîrmeh 2026 (UTC)
* Amûreke din wekî [[User:Wikihez/Gadget-linkify.js|linkify]] lazim e ku herfên mezin biçûk bike ji bo kurmancî.—[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:17, 16 tîrmeh 2026 (UTC)
:{{r|Bikarhêner}} Merheba bira, dikarî viya jî bar bikî?:
* [[Special:PermanentLink/6291974|linkify]] --> [[Mediawiki:Gadget-linkify.js]]
Spas--[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 11:42, 29 tîrmeh 2026 (UTC)
:Dûre [https://ku.wiktionary.org/wiki/MediaWiki:Gadget-start.js#L-283 li vir] wiktviLinkify bike kuLinkify xêra xwe [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 11:51, 29 tîrmeh 2026 (UTC)
::Min ji bîr kir lê zêde bikim niha nikare "Dİ" bike "di", xeletiyeke berbelav a di nivîsên kurdî de, herfên din ên wekî ll yan rr jî hewce ne werin zêdekirin. Dûre em zêde bikin. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 21:42, 29 tîrmeh 2026 (UTC)
:::Min nû ferq kir, sayfeyên ku hîn nehatine çêkirin wîkîlînk nake. Problemeke mezin e divê were rastkirin. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 18:15, 30 tîrmeh 2026 (UTC)
::::Na, lînk dike, tiştekî din heye... [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 10:49, 31 tîrmeh 2026 (UTC)
== Amûra manayê ==
Amûreke din ji bo nivîsina maneyê wekî Nimûne zêde bike lazim e [https://ku.wiktionary.org/w/index.php?title=Bikarh%C3%AAner:Wikihez/test.js&oldid=6276876 js] [https://ku.wiktionary.org/w/index.php?title=%C5%9Eablon:ceribandin2&oldid=6265629 şablon] [https://ku.wiktionary.org/w/index.php?title=Bikarh%C3%AAner:Wikihez/common.css&oldid=6265642 css] --[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 09:12, 23 tîrmeh 2026 (UTC)
== [[MediaWiki:Gadget-jeder.js]] ==
@[[Bikarhêner:Ghybu|Ghybu]] Çavkaniyên jêderê di moda pêşdîtinê de jêderê vedişêre, ew jî min gelek eciz dike wextê çavkanî zêde dikim. Min ji Claude pirsî û kodan nîşanî wê da, wisa cewab da:
Yes — and this file actually explains the whole thing precisely, better than my earlier guess about extract-stripping.
What's happening: the CSS rule
<syntaxhighlight lang="css">
.jeder{
display:none;
}
</syntaxhighlight>
hides every citation by default, *unconditionally*. The only thing that ever makes it visible again is the gadget's JS: it finds each `.jeder`, builds the short "`— (year, author, +)`" summary from the `.j-pewist` fields, and either reveals the short version or — for citations with no `.j-pewist` fields — explicitly sets `display:inline` on the original.
So visibility of citations depends entirely on this JS running. In the normal article view (Image 1) it runs, so you see the collapsed "`(1918, E. Rehmî Ji Mala Hekariyan, Amadekar: M. E. Bozarslan, +)`" form. In whatever generated Image 2 — a hover-preview/extract/API render — gadget JS doesn't execute, so nothing ever removes the `display:none`, and the citation vanishes completely rather than degrading to "still visible, just not collapsed."
<b>The fix:</b> flip the default so the *un-collapsed* state is the safe fallback, and let JS do the hiding only after it successfully builds the short version. That way, any context without JS shows the full citation instead of nothing.
CSS — remove the blanket hide:
<syntaxhighlight lang="css">
.jeder {
/* intentionally no display:none here — see Gadget-... .js */
}
</syntaxhighlight>
JS — do the hiding from script, after the short form exists:
{{veşêre-ser}}
<syntaxhighlight lang="js">
// Ji bo şablonên [[Şablon:jêder]] hatiye nivîsandin.
// Parametreyên ku di navbera "<span class="j-pewist">...</span>" an "{{j-pêwîst|...}}" de ne venaşêre.
$(function() {
function nivisaKurtTevliBike(sund, nivisKurt) {
var zede = $('<a>+</a>')
.addClass('click')
.attr('href', '#')
.attr('title', 'zêdetir')
.css('font-weight', 'bold');
var kurt = $(' <a>↩</a>')
.addClass('click-kurt')
.attr('href', '#')
.attr('title', 'veşêre')
.css('font-weight', 'bold');
$('<span>' + nivisKurt + '</span>')
.append(zede).append(')')
.addClass('jeder-kurt')
.css('font-size', '0.85em')
.insertAfter(sund);
sund.append(' ').append(kurt);
// Only hide the full citation once the short summary actually exists.
// If this script never runs (no-JS clients, hover-preview extracts,
// action=render, etc.), the full citation stays visible instead of
// silently disappearing.
sund.css('display', 'none');
}
function vesere() {
$('.jeder').each(function() {
var elmTab = $(this).find('.j-pewist').clone();
if (elmTab.length) {
var elm = '';
for (var i = elmTab.length - 1; i >= 0; i--) {
elm = elmTab.eq(i).html() + ', ' + elm;
}
var nivisKurt = ' — (' + elm;
nivisaKurtTevliBike($(this), nivisKurt);
}
// else: no j-pewist fields to shorten — leave the full citation
// as it already renders (visible), nothing to do.
});
}
vesere();
$(".click").click(function(e) {
e.preventDefault();
$(this).parent('.jeder-kurt').css('display', 'none');
$(this).parent('.jeder-kurt').prev().css('display', 'inline');
});
$(".click-kurt").click(function(e) {
e.preventDefault();
$(this).parent('.jeder').css('display', 'none');
$(this).parent('.jeder').next().css('display', 'inline');
});
});
</syntaxhighlight>
Net effect:
- JS-enabled readers (normal article view): identical experience to today — collapsed short form with `+`/`↩` toggle.
- No-JS contexts (previews, extracts, screen readers before JS loads, print, etc.): full citation is shown instead of nothing — a real regression fix rather than a cosmetic one.
One caveat worth being upfront about: this fixes it *if* the preview context renders the gadget's HTML/CSS but doesn't execute gadget JS (which is the far more common case, and what this code strongly suggests is happening). If Image 2 instead comes from a pipeline that strips the `.jeder`/`.jegirtin-text` elements out of the HTML entirely before this CSS/JS even gets a chance to apply, no on-wiki CSS/JS change can help — that'd need the extract-generation config changed instead. Given what this gadget file shows, though, I'd bet on the CSS-hide explanation.
{{veşêre-bin}}
Em dûre biceribînin eger xeletî tinebe, vî tiştî jî rast bikin. --[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 20:00, 23 tîrmeh 2026 (UTC)
:Ez APIya MediaWiki rind nizanim belkî Claude dizane:) Em nikarin bibêjin dema ku moda "''action=edit''" e fonksiyona <code>function vesere()</code> bi kar meyîne. [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 15:57, 24 tîrmeh 2026 (UTC)
::Na, di moda "edît"-ê de <code>var elmTab = null</code>... [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 16:13, 24 tîrmeh 2026 (UTC)
?:
<syntaxhighlight lang="js">
if (
mw.config.get('wgAction') === 'edit' ||
mw.config.get('wgAction') === 'submit'
){
var elmTab = [];
} else {
var elmTab = $(this).find('.j-pewist').clone();
}
</syntaxhighlight>
--[[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 16:31, 24 tîrmeh 2026 (UTC)
:Ez jî nizanim Claude çiqas ji mediawiki fêm dike lê heta niha ti tişt nîne ku min jê pirs kir û nikaribû çêke, bila wekî reklam nebe feqat Claude mikemmel e, dibêjim "li vir çima xeletiyeke wisa derdikeve" di dosyeya 2000 rêzî de diçe tiştê xelet tenê rast dike tiştekî din naguherîne. Chatgpt û aistudio qet wisa nakin, eynî dosyeyê deh cara dinivîsin, deh netîceyên cuda derdikevin :D
:Em dikarin vê amûrê wextê edit û submitê neaktîv bikin wekî <syntaxhighlight lang="js">if (!(action === "edit" || action === "submit")) {
:return;</syntaxhighlight> lê wê demê display:none wê çibe nizanim. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 18:23, 24 tîrmeh 2026 (UTC)
::display:none ne hewce ye ma jixwe di nav kodê [https://ku.wiktionary.org/w/index.php?title=MediaWiki:Gadget-jeder.js&oldid=6069025#L-49 L-49] de inline/none heye? [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 18:53, 24 tîrmeh 2026 (UTC)
:Min bi vî şiklî [https://ku.wiktionary.org/w/index.php?title=Bikarh%C3%AAner:Wikihez/vector-2022.js&diff=prev&oldid=6290816#L-28] ceriband feqat nexebitî. "display:none" di pêşdîtinê de dixebite feqat js naşixule. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 14:43, 25 tîrmeh 2026 (UTC)
::Kodên JSê pir hez nakim (pêşta hukurina APIya MWyê hewce bû) dîsa jî ez ê seh bikim :) [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 16:49, 27 tîrmeh 2026 (UTC)
:::Ez niha bi vî şiklî [https://ku.wiktionary.org/w/index.php?title=Bikarh%C3%AAner:Wikihez/test.js&oldid=6290820] [https://ku.wiktionary.org/w/index.php?title=Bikarh%C3%AAner:Wikihez/common.css&oldid=6290821#L-8] bi kar tînim ti problem nîne. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 17:09, 27 tîrmeh 2026 (UTC)
== [[MediaWiki:Gadget-PagePreviews.js]] ==
Ez dibêjim em vê amûrê jî çêkin [[:en:MediaWiki:Gadget-PagePreviews.js]] --[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 10:56, 3 tebax 2026 (UTC)
= Moda tarî =
== [[Şablon:wîkîpediya]] ==
Rengê tarî de xirab e.--[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 19:36, 4 tebax 2026 (UTC)
= Bot =
Karên ku bi botê werin çêkirin ji kerema xwe li vir binivîsin.
== Kategorî:Biwêj ==
[[:Kategorî:Biwêj]] divê were paqijkirin, lîsteya madeyên {{ş|biwêj}} çêke, yên ku tê de bûn, kirin, man hene filtre bike yên din bi destî tê çêkirin.—[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:17, 16 tîrmeh 2026 (UTC)
== Jêgirtin ==
Xistina jêgirtinên beşa [https://ku.wiktionary.org/w/index.php?search=insource%3A%2F%3D+*Ji+%5BWw%5D%C3%AAjey%C3%AA+*%3D%2F&title=Taybet%3AL%C3%AAger%C3%AEn&profile=advanced&fulltext=1&ns0=1&searchToken=8rh0bmw8dccsi7aynl6zli8uf ji wêjeyê] li beşa maneyê. —[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:17, 16 tîrmeh 2026 (UTC)
== Bota Toolforgeê ==
Botekî Toolforgeê lazim e ji bo ku xeletiyên biçûk wekî şablonên bi navên îngilîzî werin kurdîkirin yan jî valahiya beşan rast bike û hwd.—[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:17, 16 tîrmeh 2026 (UTC)
:Min [[Bikarhêner:Wikihez/skrîpt/py/kuwiktkozmetik.py|paqijiyen kozmetîk]] hazir kir feqat hîn navên şablonan naguhêre. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 20:05, 4 tebax 2026 (UTC)
== Updatew ==
Bota [[Bikarhêner:Wikihez/skrîpt/py/updateW.py|updateW]] divê were rojanekirin. Yan jî yekî nû were çêkirin. Şablonên {{ş|W}} di beşa tercimeyan de sererast dike û zimanan rêz dike. Ya niha xeletiya navê zimanî dide.—[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:17, 16 tîrmeh 2026 (UTC)
== sihir --> sêhr ==
Tercimeyên ''[[sêhr]]'' hemû dibêje ''sihir'' loma bi botê lazim e kirin ''sêhr''. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 17:43, 18 tîrmeh 2026 (UTC)
:Sihirbaz --> sêhrbaz [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 18:07, 18 tîrmeh 2026 (UTC)
== Tercimeyên dîroknas ==
Li tercimeyên [[dîroknas]], hevmaneyên wê hewce ye were îlawekirin. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 18:44, 18 tîrmeh 2026 (UTC)
== Mewlûd ==
Sererastkirina jêgirtinên mewlûdê [https://ku.wiktionary.org/w/index.php?search=insource%3A%2Fw%5C%3AMela+His%C3%AAn%C3%AA+Batey%C3%AE%2F&title=Taybet%3AL%C3%AAger%C3%AEn&ns0=1&searchToken=8m0tguy3sqt7edr4sg0u8hedo] wekî [https://ku.wiktionary.org/w/index.php?title=dax%C3%AEdar&curid=284303&diff=6265851&oldid=6142285] [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 09:43, 20 tîrmeh 2026 (UTC)
p8nwwv0jsgo4qaga5m757evmah7ek67
6333717
6333713
2026-08-14T19:50:44Z
Ghybu
1393
/* MediaWiki:Gadget-start.js */
6333717
wikitext
text/x-wiki
{{/ser}}
= Karên ferhengî =
== Mane ==
* [[:Kategorî:Madeyên bê beşa mane]]
** [[:Kategorî:Madeyên bê beşa mane bi kurmancî]]
Li ser van rûpelan ev made hene ku maneyan wan nehatine nivîsin û divê werin nivîsin. —[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:17, 16 tîrmeh 2026 (UTC)
== Etîmolojî ==
*[[:Kategorî:Daxwazên etîmolojiyê]]
**[[:Kategorî:Daxwazên etîmolojiyê bi kurmancî]]
Li ser van rûpelan ev made hene ku etîmolojiya wan hîn nehatine nivîsin. Ji bo alîkariyê binêre [[WF:Etîmolojî]] —[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:17, 16 tîrmeh 2026 (UTC)
== Cureyê rêzimanî ==
* [[:Kategorî:Gotarên bê kategoriya rêzimanî]]
* [[:Kategorî:Gotarên bê kategoriya rêzimanî bi kurmancî]]
Li ser van rûpelan ev made hene ku cureyên wan yên rêzimanî hîn nehatine nivîsin. Ji bo alîkariyê binêre [[Alîkarî:Cureyên peyvan]] —[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:17, 16 tîrmeh 2026 (UTC)
== Kontrol ==
* [[:Kategorî:Kontrol]]
** [[:Kategorî:Kontrola maneyê]]
Ev madde bi botê hatine çêkirin, yek bi yek divê werin kontrolkirin. —[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:17, 16 tîrmeh 2026 (UTC)
= Şablon =
== IPA ==
* {{ş|IPA}} divê [[Modul:IPA]] bi kar bîne. —[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:17, 16 tîrmeh 2026 (UTC)
== Deng ==
Kurdîkirina belgekirina {{ş|deng}} lazim e.--[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 00:06, 19 tîrmeh 2026 (UTC)
= Modul =
== Modul:form of/templates ==
* [[Modul:form of/templates]]: Divê ev modul were rojanekirin û xeletiyên berê wekî ([[hevalê]]) werin rastkirin. —[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:17, 16 tîrmeh 2026 (UTC)
*:Merheba @[[Bikarhêner:Ghybu|Ghybu]] Te gotibû di vê modulê de xeletî hene, jkx tu dikarî li vir binivîsî çi kêmasî hene, daku wextê rojane dikim ez ji bîr nekim? [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:16, 21 tîrmeh 2026 (UTC)
*::Silav. Nizanim ji bîra min çûye... Herwiha ji bo çêkirina formên navdêran zanînên cîns û tîpa dawî bes e:
*::* (-ê, mê) => çemandî, bangkirin
*::* (-ê, nêr) => îzafe
*::* (-ê, mê û nêr) => îzafe (nêr), bangkirin (mê), çemandî (mê)
*::* (-a) => îzafe (mê)
*::* (-ekî) => îzafe û çemandî (nêr, nebinavkirî)
*::* (-eke) = > îzafe (mê, nebinavkirî)
*::* ...
*:: <code>if find(mw.title.getCurrentTitle().subpageText, 'ekî$') then ... end</code>
*::<code><nowiki>{{ku-tewîn-navForm|<navdêr>|<zayend>}</nowiki></code>
*::Tablo û nivîs di yekcarî de tên çêkirin...
*::Feqet problem lêzêdekirina mînakan e. [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 17:34, 21 tîrmeh 2026 (UTC)
*:::Lêzêdekirina kîjan nimûneyan? Ev koda js ji bo çi ye? Qisûrê nenêre min fêm nekir :/ [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 18:13, 21 tîrmeh 2026 (UTC)
*::::Li vira ([[hevalê#Formeke navdêrê]]) di bin maneyên 1. û 2. mînak nayên tevlî kirin :) [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 18:18, 21 tîrmeh 2026 (UTC)
*:::::Ev tercîh e, ne mecbûrî ye, em dikarin [https://ku.wiktionary.org/w/index.php?title=heval%C3%AA&diff=prev&oldid=6276350 wisa] bikin. Wekî din? [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 18:29, 21 tîrmeh 2026 (UTC)
*::::::Min li jor tênê got ku tenê parametreyên "navdêr" û "zayend" hewce nee. Bi '''[//ku.wiktionary.org/w/index.php?title=heval%C3%AA&curid=969734&diff=6276353&oldid=6276350 vî]''' awayî jî tê çêkirin. Parametreyên din ne hewce ne. [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 18:38, 21 tîrmeh 2026 (UTC)
*:::::::Ji bo wê şabloneke din lazim e, bila ev şablon wekî îngilîzî bimîne em ji bo kurmancî yekî din çêkin. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 18:42, 21 tîrmeh 2026 (UTC)
*::::::::[https://ku.wiktionary.org/w/index.php?title=heval%C3%AA&oldid=6276885 wisa] çawa ye? Bi min nivîsîna nimûneyan zêde ne lazim e ji ber ku ti kes serê xwe pê naêşîne. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 09:46, 23 tîrmeh 2026 (UTC)
*:::::::::@[[Bikarhêner:Ghybu|Ghybu]] Vê şablonê bi kar bînin an na? Navê şablonê kê çi be? [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 19:07, 24 tîrmeh 2026 (UTC)
== Modul:columns ==
* [[Modul:columns]] were rojanekirin û {{ş|kol3}} bila lînka ''nîşan bide'' deyne beriya sernavê, kolê di qutiya rengî de bila nebe. —[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:17, 16 tîrmeh 2026 (UTC)
== Modul:etymon ==
* [[Modul:etymon kevn]]: Rojanekirin hewce ye. —[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:17, 16 tîrmeh 2026 (UTC)
== [[Modul:ziman/code to canonical name]] ==
Belgekirina skrîptê û js divê were rastkirin. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 09:31, 22 tîrmeh 2026 (UTC)
:* [[MediaWiki:UpdateLanguageNameAndCode.js]]
:[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 09:50, 22 tîrmeh 2026 (UTC)
::* [[Modul:ziman/print]]
::[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 09:52, 22 tîrmeh 2026 (UTC)
:::*[[Modul:ziman/şablon]]
:::[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 09:56, 22 tîrmeh 2026 (UTC)
::::* [[MediaWiki:Gadget-translation editor.js/ziman.json]]
::::[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 11:06, 22 tîrmeh 2026 (UTC)
== [[Modul:quote]] ==
Piştî ev modul hate hazirkirin, lazim e navên jegirtinan werin rastkirin û li hemûyan {{param|jêgirtin}} were zêdekirin. Bnr. [[Gotûbêja şablonê:Jêgirtin/Ehmedê Xanî/Mem û Zîn]] [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 22:27, 5 tebax 2026 (UTC)
::Ev modul hema bêje hazir e. Hûn li ser van madeyan çi difikirin:
# {{para|tarîx}} lazim e full date be eger na, lazim e {{para|sal}} were bikaranîn. Feqat "'''2021''' kanûna pêşîn 23" bi vî şiklî bi min ne problem e çnkî derdê en.wikt "attestation" e delîla herî pêşî jî sal e.
#: {{demo|sep=wisa xuya dibe<br>|<nowiki>{{jêder-kitêb/ceribandin|en
|tarîx=23 December 2021|nivîskar=Harry Hobbs; George Williams|sernav=Micronations and the Search for Sovereignty|url=https://www.cambridge.org/core/books/micronations-and-the-search-for-sovereignty/B0414A3A322695D9EE71E4CDDFDA06DE|weşanxane=Cambridge University Press|rûpel=155|isbn=978-1-009-15012-5|jêgirtin=jêgirtin.|t=-}}</nowiki>}}
#{{para|amadekar}}/{{para|edîtor}}/{{para|terciman}} bi şiklê edîtoriya, amadekariya, tercimekirina
#: {{demo|sep=dide<br>|<nowiki>{{jêder-kitêb/ceribandin|en
|sernav=Medical Surgical Nursing|serî=Juta's Manual of Nursing|cildê-seriyê=volume 4|edîtor=Sophie Mataniele Mogotlane; Joyce Mokoena; Motshedisi Eunice Chauke; Anne Young|sal=2005|weşanxane=Juta Academic|isbn=978-0702171840|rûpel=!12-29|jêgirtin=jêgirtin|t=-}}</nowiki>}}
--[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 13:09, 10 tebax 2026 (UTC)
:@[[Bikarhêner:Bikarhêner|Bikarhêner]] û @[[Bikarhêner:Ghybu|Ghybu]] Hîn gelek tişt hene divê îzah bikin û fikrê we pirs bikim, feqat îzahkirin pir zor e, em dest bi bikaranînê bikin û dûre tiştên ku hûn naxwazin em dikarin biguherînîn, dibe? [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 13:11, 10 tebax 2026 (UTC)
::Dibe, piştî çêbû, em di praktîkê de bibînin ku çawa ye. -- [[Bikarhêner:Bikarhêner|Bikarhêner]] ([[Gotûbêja bikarhêner:Bikarhêner|gotûbêj]]) 18:05, 10 tebax 2026 (UTC)
= Javascript =
== [[Mediawiki:Gadget-citoid-helper.js]] ==
Ji bo bi citoidê kopîkirina malûmatên çavkaniyan amûreke wisa lazim e. Xisûsen ji ber ku bi çend amûrên din dikare were bikaranîn.
Feqat çend problem hene, şablonên me de kêmasiya parametreyan gelek in û xerîteyên citoidê hîn nehatine çêkirin. Wana sererast bikin dûre vê amûrê çêkin, piştre [[MediaWiki:Gadget-start.js|start.js]] û [[MediaWiki:Gadget-wikt.add-examples.js|add examples.js]] were rojanekirin.
- --[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 00:04, 19 tîrmeh 2026 (UTC)
:Merheba @[[Bikarhêner:Bikarhêner|Bikarhêner]], ez dibêjim karê Modul:quote zêde wext bistîne, bila em dest bi bikaranîna van amûran bikin dûre kêmasiyan em ê temam bikin înşela. Dikarî vana li cihên xwe yên rast kopî paste bikî?
# [[Special:PermanentLink/6291574|Bikarhêner:Wikihez/skrîpt/js/Gadget-citoid-helper.js]] --> [[Mediawiki:Gadget-citoid-helper.js]]
# Ya li jêr kopî bike qismê herî dawî ya AmûrênVeşartî li [[MediaWiki:Gadgets-definition]]:
## <code><nowiki>* citoid-helper[ResourceLoader|hidden|default|dependencies=mediawiki.util]|citoid-helper.js</nowiki></code>
--[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:58, 26 tîrmeh 2026 (UTC)
== [[MediaWiki:Gadget-start.js]] ==
Rojanekirin hewce ye. Min gelek tişt lê zêde kir lê ez niha test dikime. Piştre em bar bikin:
* [[Bikarhêner:Wikihez/Gadget-start.js]] --> [[MediaWiki:Gadget-start.js]]
* [[Bikarhêner:Wikihez/Gadget-start.css]] --> [[MediaWiki:Gadget-start.css]]
--[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 22:08, 17 tîrmeh 2026 (UTC)
:Min [[MediaWiki:Gadget-start/data.json|data.json]] çêkir ji bo ku bi hêsanî malûmatên heyî werin guhartin bêyî guhartina Javascriptê. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 19:49, 18 tîrmeh 2026 (UTC)
:Xeletiyên ku ji bîr nekim rast bikim:
:* Wextê min çavkanî "kitêb" hilbijart û bi destî tije kir xeletiyeke [https://ku.wiktionary.org/w/index.php?title=xezete&diff=prev&oldid=6265392 wisa] derket her kelîme hate lînkkirin.
:* <code>html("⠿")</code> ev ne lazim e.
:* textarea ji bo çavkaniyên jêgirtinan xaseten yên sernav hîn jî ne draggable e.
:* pêşdîtina zindî checkbox wextê tê rakirin, pêşdîtin winda nabe.
:* Butona mobîlê ya vekirina formê di moda tarî de belî nabe, tenê wekî qutiyeke tarî xuya dibe.
:* Metna hişyarkirinê di guhartina rûpelên heyî de lazim e baştir bikim.
:[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 23:51, 18 tîrmeh 2026 (UTC)
::Ev problem çêbûn, ez ê binêrim ka çi problemên din hene. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 14:15, 19 tîrmeh 2026 (UTC)
:::Çêke: Ji bo qismê çavkaniyê yek dikare API call û Kategorî:Çavkanî bi kar bîne ji bo ku şablon zêde bikî ji yên heyî. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 21:21, 19 tîrmeh 2026 (UTC)
::::Ev jî çêbû, min beşa çavkanî jî çêkir. Eger xeletî dernekeve û problema valahiya piştî etîketê ji bîr nekim, piştî rojanekirina amûrên linkify, û citoid em dikarin bar bikin. Ez ê ti tiştê nû îlawe nekim, zêde dirêj bû. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:14, 21 tîrmeh 2026 (UTC)
:::::Merheba @[[Bikarhêner:Bikarhêner|Bikarhêner]]. Dikarî wana bar bikî?
:::::* [[Bikarhêner:Wikihez/Gadget-start.js]] --> [[MediaWiki:Gadget-start.js]]
:::::* [[Bikarhêner:Wikihez/Gadget-start.css]] --> [[MediaWiki:Gadget-start.css]]
:::::* [[MediaWiki:Gadgets-definition]] wisa rojane bike:
:::::* start[ResourceLoader|default|package|dependencies=mediawiki.util,ext.gadget.StorageUtils,ext.gadget.citoid-helper]|start.js|start.css|start.js/data.json
:::::[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 09:39, 5 tebax 2026 (UTC)
{{şirove}} Dewama ''[[Special:PermanentLink/6333688|Gotûbêja bikarhêner:Rewiye tine#WF:Nû]]'' bila gotûbêja wî em spam nekin. :D
{{r|Ghybu}} dikarî [[Special:PermanentLink/6333689|vê htmlê]] binêrî claude rast fêm kiriye yan na? Daxîne û wek html qeyd bike. --[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 18:43, 14 tebax 2026 (UTC)
:Min seh wîkîyên din jî kir, li wîkiya fransî tiştekî wekî daxwaza min çêkirine (tiştên ku ne hewce ne wekî "tab" çêkirine an jî hatine vêşartin): [//fr.wiktionary.org/w/index.php?title=fdsdfdsf&action=edit&redlink=1]. Formata me yê berî jî bi vê lojîkê hatibû çêkirin, wekî de.wiktionary ([//de.wiktionary.org/w/index.php?title=sdfdsfsdfs&action=edit&preload=Vorlage:Formatvorlage_(Substantiv_vereinfacht)]) [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 19:01, 14 tebax 2026 (UTC)
::PS: Dîsa jî Claude min rind fêm kiriye :)) Feqet min got ku beşên Mane", "Bilêvkirin" û "Beşên din" cem hev (wekî "tab") ". Û dema ku tu terê di nav "Besên din" Hevmane, Jê, ... li wira werin dayîn. Wêne/Resim û Nimûne jî di nav beşa ("tab") "Mane" [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 19:17, 14 tebax 2026 (UTC)
::Erê ya fr.wikt min jî dîtibû jixwe fikrê tab min ji wan girtibû :D (feqat min li cem wan tenê tab-a maneyê dît yên din nedît çawa tê vekirin nizanim) Berê hemû beş piştî maneyê bibûn, dûre min sê Tab çêkir, Bingehîn+Lînkkirin+Bikaranîn. Niha lazim e Tabeke din çêkim. Ya ku claude çêkiriye bnr. [[Special:PermanentLink/6333698#L-7]] ne baş e bnr. [[Special:PermanentLink/6333703|qiyaskirinê li ser vê htmlê]] Êdî ez Claude abuse dikime ji ber ku Pro ye :D [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 19:26, 14 tebax 2026 (UTC)
:::Claude dibêje:
:::Good clarification — that's a real simplification, not just a relabel. Updated STEP_GROUPS from 5 tabs down to 3:
:::Mane — the definitions themselves, plus Wêne (image), now grouped in with it instead of sitting in a separate misc tab. Nimûne needed no change since it was already rendering inside each Mane sense block, not as its own step.
:::Bilêvkirin — unchanged, still just pronunciation.
:::Beşên din — everything else in one flat bucket: hevmane, jê, têkildar, herwiha binêre, formên alternatîv, dijmane, jornav, jêrnav, notên bikaranînê, bi alfabeyên din, dûnde, çavkanî, bêhtir bixwîne, tewandin, etîmolojî, zaravayên din, werger, and bnr-h — instead of being split across the old Bingehîn/Lînkkirin/Bikaranîn/Din tabs.
:::No DOM-order changes were needed this time — the fix from the blank-tab bug looks up the tab bar's position dynamically now, so it didn't matter that I regrouped which steps go where. Same two files, saved to your Wiki folder — worth another pass through all three tabs once you've pasted this in, same as last time. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 19:34, 14 tebax 2026 (UTC)
::::Mînak:
Ziman
---------------------------------------------
Cureyê rêzimanî (Navdêr)
Navdêr (hilbijêre) | Cîns (hilbijêre) | Jimar (hilbijêre)
- lêker -mê -yekjimar
- rengdêr -nêr -pirjimar
- ... -... -...
---------------------------------------------
Mane | Bilêvkirin | Beşên din
hilbijêre:
- mane - IPA - Hevmane
- nimûne - kîte - Dijmane
- wêne
-- [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 19:45, 14 tebax 2026 (UTC)
== [[Mediawiki:Gadget-QQ.js]] ==
Ev amûr di şikle Minerva de. Her daîm vê xeletiyê dide:
<syntaxhighlight lang="js">
TypeError: Cannot read properties of null (reading 'addEventListener') at css () at runScript () at Array.<anonymous> () at flushCssBuffer ()
</syntaxhighlight> [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 19:29, 18 tîrmeh 2026 (UTC)
:* [[Bikarhêner:Wikihez/skrîpt/js/Gadget-QQ.js]] --> [[Mediawiki:Gadget-QQ.js]]
:* [[Bikarhêner:Wikihez/Gadget-QQ.css]] --> [[Mediawiki:Gadget-QQ.css]]
:Ez dibêjim çêbû lê ka çend roj biceribînim. Tiştên ku hatin sererastkirin:
:# Google Books API Key dikarî zêde bikî, dixe cookies û di gerokê de dimîne. Berê bê API Key dixebitiya lê êdî mecbûr e ku API Key-a te hebe, bidestxistina wê ne zêde zor e lê dîsa jî tevlihev e.
:# Êdî di mobîlê de dixebite, heta di mobîlê de xweştir xuya dike.
:# Moda tarî
:# OOUI dewsa jquery.ui
:# Li qutiyê çi dixwazî zêde bikî, dikare li gorî îsm, sifet, fiîl bitewîne. Lê ji bo fiîl tenê dikare çend heb inflection bîne.
:# Butona paqij bike lê zêde kir.
:# Çend paqijiyên jêgirtinên Google Kitêbê niha hene.
:[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 23:38, 18 tîrmeh 2026 (UTC)
::Tewandina fiîlan û xeletiya modulê lazim e were rastkirin. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 14:40, 21 tîrmeh 2026 (UTC)
== [[MediaWiki:Gadget-wikt.add-examples.js]] ==
Min ev amûr hinek rojane kir feqat çend problem hene berî ku bar bikin.
Tiştên ku min guhart:
# Êdî li sayfeyên bi {{ş|maneid}} jî dixebite,
# Cihê di wîkîtekstê de yê ku jêgirtin were îlawekirin baştir bû,
# [[Mediawiki:Gadget-citoid-helper.js|citoid helper]] zêde kir ji bo ku bi hêsanî çavkanî bi riya doi, isbn an urlyê werin tijîkirin.
* [[Bikarhêner:Wikihez/Gadget-wikt.add-examples.css]] --> [[MediaWiki:Gadget-wikt.add-examples.css]]
* [[Bikarhêner:Wikihez/Gadget-wikt.add-examples.js]] --> [[MediaWiki:Gadget-wikt.add-examples.js]]
- --[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 00:50, 19 tîrmeh 2026 (UTC)
:Min "wikt." qismên cache kirinê ya wîkiya fransî bi [[MediaWiki:Gadget-StorageUtils.js]] guhartiye. loma ji bîr nekin wê amûrê li [[MediaWiki:Gadgets-definition]] zêde bikin. û navê amûrê jî biguhêrînin. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 09:15, 23 tîrmeh 2026 (UTC)
::Berê li ser WF:ceribandin dixebitî. niha naxebite. Divê were rastkirin. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 22:10, 7 tebax 2026 (UTC)
== Gadget-translation editor ==
* [[MediaWiki:Gadget-translation editor.js]]: divê formata en.wîktê were bikaranîn ji ber ku me gelek tercime ji en.wîktê kopî kir û ev js hîn nikare formata wekî li jêr bi kar bîne.
<syntaxhighlight lang="wikitext">
* {{Z|sh}}:
*: Kirîlî:
*: Latînî
</syntaxhighlight>
—[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:17, 16 tîrmeh 2026 (UTC)
== [[Mediawiki:Gadget-linkify.js]] ==
* ''rûpeleke'' wekî<syntaxhighlight lang="wikitext">[[rûpeleke]]</syntaxhighlight> lînk dike, bi regexê belkî dikare wisa bike <syntaxhighlight lang="wikitext">[[rûpel]]eke</syntaxhighlight>
—[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:17, 16 tîrmeh 2026 (UTC)
* Amûreke din wekî [[User:Wikihez/Gadget-linkify.js|linkify]] lazim e ku herfên mezin biçûk bike ji bo kurmancî.—[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:17, 16 tîrmeh 2026 (UTC)
:{{r|Bikarhêner}} Merheba bira, dikarî viya jî bar bikî?:
* [[Special:PermanentLink/6291974|linkify]] --> [[Mediawiki:Gadget-linkify.js]]
Spas--[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 11:42, 29 tîrmeh 2026 (UTC)
:Dûre [https://ku.wiktionary.org/wiki/MediaWiki:Gadget-start.js#L-283 li vir] wiktviLinkify bike kuLinkify xêra xwe [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 11:51, 29 tîrmeh 2026 (UTC)
::Min ji bîr kir lê zêde bikim niha nikare "Dİ" bike "di", xeletiyeke berbelav a di nivîsên kurdî de, herfên din ên wekî ll yan rr jî hewce ne werin zêdekirin. Dûre em zêde bikin. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 21:42, 29 tîrmeh 2026 (UTC)
:::Min nû ferq kir, sayfeyên ku hîn nehatine çêkirin wîkîlînk nake. Problemeke mezin e divê were rastkirin. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 18:15, 30 tîrmeh 2026 (UTC)
::::Na, lînk dike, tiştekî din heye... [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 10:49, 31 tîrmeh 2026 (UTC)
== Amûra manayê ==
Amûreke din ji bo nivîsina maneyê wekî Nimûne zêde bike lazim e [https://ku.wiktionary.org/w/index.php?title=Bikarh%C3%AAner:Wikihez/test.js&oldid=6276876 js] [https://ku.wiktionary.org/w/index.php?title=%C5%9Eablon:ceribandin2&oldid=6265629 şablon] [https://ku.wiktionary.org/w/index.php?title=Bikarh%C3%AAner:Wikihez/common.css&oldid=6265642 css] --[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 09:12, 23 tîrmeh 2026 (UTC)
== [[MediaWiki:Gadget-jeder.js]] ==
@[[Bikarhêner:Ghybu|Ghybu]] Çavkaniyên jêderê di moda pêşdîtinê de jêderê vedişêre, ew jî min gelek eciz dike wextê çavkanî zêde dikim. Min ji Claude pirsî û kodan nîşanî wê da, wisa cewab da:
Yes — and this file actually explains the whole thing precisely, better than my earlier guess about extract-stripping.
What's happening: the CSS rule
<syntaxhighlight lang="css">
.jeder{
display:none;
}
</syntaxhighlight>
hides every citation by default, *unconditionally*. The only thing that ever makes it visible again is the gadget's JS: it finds each `.jeder`, builds the short "`— (year, author, +)`" summary from the `.j-pewist` fields, and either reveals the short version or — for citations with no `.j-pewist` fields — explicitly sets `display:inline` on the original.
So visibility of citations depends entirely on this JS running. In the normal article view (Image 1) it runs, so you see the collapsed "`(1918, E. Rehmî Ji Mala Hekariyan, Amadekar: M. E. Bozarslan, +)`" form. In whatever generated Image 2 — a hover-preview/extract/API render — gadget JS doesn't execute, so nothing ever removes the `display:none`, and the citation vanishes completely rather than degrading to "still visible, just not collapsed."
<b>The fix:</b> flip the default so the *un-collapsed* state is the safe fallback, and let JS do the hiding only after it successfully builds the short version. That way, any context without JS shows the full citation instead of nothing.
CSS — remove the blanket hide:
<syntaxhighlight lang="css">
.jeder {
/* intentionally no display:none here — see Gadget-... .js */
}
</syntaxhighlight>
JS — do the hiding from script, after the short form exists:
{{veşêre-ser}}
<syntaxhighlight lang="js">
// Ji bo şablonên [[Şablon:jêder]] hatiye nivîsandin.
// Parametreyên ku di navbera "<span class="j-pewist">...</span>" an "{{j-pêwîst|...}}" de ne venaşêre.
$(function() {
function nivisaKurtTevliBike(sund, nivisKurt) {
var zede = $('<a>+</a>')
.addClass('click')
.attr('href', '#')
.attr('title', 'zêdetir')
.css('font-weight', 'bold');
var kurt = $(' <a>↩</a>')
.addClass('click-kurt')
.attr('href', '#')
.attr('title', 'veşêre')
.css('font-weight', 'bold');
$('<span>' + nivisKurt + '</span>')
.append(zede).append(')')
.addClass('jeder-kurt')
.css('font-size', '0.85em')
.insertAfter(sund);
sund.append(' ').append(kurt);
// Only hide the full citation once the short summary actually exists.
// If this script never runs (no-JS clients, hover-preview extracts,
// action=render, etc.), the full citation stays visible instead of
// silently disappearing.
sund.css('display', 'none');
}
function vesere() {
$('.jeder').each(function() {
var elmTab = $(this).find('.j-pewist').clone();
if (elmTab.length) {
var elm = '';
for (var i = elmTab.length - 1; i >= 0; i--) {
elm = elmTab.eq(i).html() + ', ' + elm;
}
var nivisKurt = ' — (' + elm;
nivisaKurtTevliBike($(this), nivisKurt);
}
// else: no j-pewist fields to shorten — leave the full citation
// as it already renders (visible), nothing to do.
});
}
vesere();
$(".click").click(function(e) {
e.preventDefault();
$(this).parent('.jeder-kurt').css('display', 'none');
$(this).parent('.jeder-kurt').prev().css('display', 'inline');
});
$(".click-kurt").click(function(e) {
e.preventDefault();
$(this).parent('.jeder').css('display', 'none');
$(this).parent('.jeder').next().css('display', 'inline');
});
});
</syntaxhighlight>
Net effect:
- JS-enabled readers (normal article view): identical experience to today — collapsed short form with `+`/`↩` toggle.
- No-JS contexts (previews, extracts, screen readers before JS loads, print, etc.): full citation is shown instead of nothing — a real regression fix rather than a cosmetic one.
One caveat worth being upfront about: this fixes it *if* the preview context renders the gadget's HTML/CSS but doesn't execute gadget JS (which is the far more common case, and what this code strongly suggests is happening). If Image 2 instead comes from a pipeline that strips the `.jeder`/`.jegirtin-text` elements out of the HTML entirely before this CSS/JS even gets a chance to apply, no on-wiki CSS/JS change can help — that'd need the extract-generation config changed instead. Given what this gadget file shows, though, I'd bet on the CSS-hide explanation.
{{veşêre-bin}}
Em dûre biceribînin eger xeletî tinebe, vî tiştî jî rast bikin. --[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 20:00, 23 tîrmeh 2026 (UTC)
:Ez APIya MediaWiki rind nizanim belkî Claude dizane:) Em nikarin bibêjin dema ku moda "''action=edit''" e fonksiyona <code>function vesere()</code> bi kar meyîne. [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 15:57, 24 tîrmeh 2026 (UTC)
::Na, di moda "edît"-ê de <code>var elmTab = null</code>... [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 16:13, 24 tîrmeh 2026 (UTC)
?:
<syntaxhighlight lang="js">
if (
mw.config.get('wgAction') === 'edit' ||
mw.config.get('wgAction') === 'submit'
){
var elmTab = [];
} else {
var elmTab = $(this).find('.j-pewist').clone();
}
</syntaxhighlight>
--[[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 16:31, 24 tîrmeh 2026 (UTC)
:Ez jî nizanim Claude çiqas ji mediawiki fêm dike lê heta niha ti tişt nîne ku min jê pirs kir û nikaribû çêke, bila wekî reklam nebe feqat Claude mikemmel e, dibêjim "li vir çima xeletiyeke wisa derdikeve" di dosyeya 2000 rêzî de diçe tiştê xelet tenê rast dike tiştekî din naguherîne. Chatgpt û aistudio qet wisa nakin, eynî dosyeyê deh cara dinivîsin, deh netîceyên cuda derdikevin :D
:Em dikarin vê amûrê wextê edit û submitê neaktîv bikin wekî <syntaxhighlight lang="js">if (!(action === "edit" || action === "submit")) {
:return;</syntaxhighlight> lê wê demê display:none wê çibe nizanim. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 18:23, 24 tîrmeh 2026 (UTC)
::display:none ne hewce ye ma jixwe di nav kodê [https://ku.wiktionary.org/w/index.php?title=MediaWiki:Gadget-jeder.js&oldid=6069025#L-49 L-49] de inline/none heye? [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 18:53, 24 tîrmeh 2026 (UTC)
:Min bi vî şiklî [https://ku.wiktionary.org/w/index.php?title=Bikarh%C3%AAner:Wikihez/vector-2022.js&diff=prev&oldid=6290816#L-28] ceriband feqat nexebitî. "display:none" di pêşdîtinê de dixebite feqat js naşixule. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 14:43, 25 tîrmeh 2026 (UTC)
::Kodên JSê pir hez nakim (pêşta hukurina APIya MWyê hewce bû) dîsa jî ez ê seh bikim :) [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 16:49, 27 tîrmeh 2026 (UTC)
:::Ez niha bi vî şiklî [https://ku.wiktionary.org/w/index.php?title=Bikarh%C3%AAner:Wikihez/test.js&oldid=6290820] [https://ku.wiktionary.org/w/index.php?title=Bikarh%C3%AAner:Wikihez/common.css&oldid=6290821#L-8] bi kar tînim ti problem nîne. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 17:09, 27 tîrmeh 2026 (UTC)
== [[MediaWiki:Gadget-PagePreviews.js]] ==
Ez dibêjim em vê amûrê jî çêkin [[:en:MediaWiki:Gadget-PagePreviews.js]] --[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 10:56, 3 tebax 2026 (UTC)
= Moda tarî =
== [[Şablon:wîkîpediya]] ==
Rengê tarî de xirab e.--[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 19:36, 4 tebax 2026 (UTC)
= Bot =
Karên ku bi botê werin çêkirin ji kerema xwe li vir binivîsin.
== Kategorî:Biwêj ==
[[:Kategorî:Biwêj]] divê were paqijkirin, lîsteya madeyên {{ş|biwêj}} çêke, yên ku tê de bûn, kirin, man hene filtre bike yên din bi destî tê çêkirin.—[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:17, 16 tîrmeh 2026 (UTC)
== Jêgirtin ==
Xistina jêgirtinên beşa [https://ku.wiktionary.org/w/index.php?search=insource%3A%2F%3D+*Ji+%5BWw%5D%C3%AAjey%C3%AA+*%3D%2F&title=Taybet%3AL%C3%AAger%C3%AEn&profile=advanced&fulltext=1&ns0=1&searchToken=8rh0bmw8dccsi7aynl6zli8uf ji wêjeyê] li beşa maneyê. —[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:17, 16 tîrmeh 2026 (UTC)
== Bota Toolforgeê ==
Botekî Toolforgeê lazim e ji bo ku xeletiyên biçûk wekî şablonên bi navên îngilîzî werin kurdîkirin yan jî valahiya beşan rast bike û hwd.—[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:17, 16 tîrmeh 2026 (UTC)
:Min [[Bikarhêner:Wikihez/skrîpt/py/kuwiktkozmetik.py|paqijiyen kozmetîk]] hazir kir feqat hîn navên şablonan naguhêre. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 20:05, 4 tebax 2026 (UTC)
== Updatew ==
Bota [[Bikarhêner:Wikihez/skrîpt/py/updateW.py|updateW]] divê were rojanekirin. Yan jî yekî nû were çêkirin. Şablonên {{ş|W}} di beşa tercimeyan de sererast dike û zimanan rêz dike. Ya niha xeletiya navê zimanî dide.—[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:17, 16 tîrmeh 2026 (UTC)
== sihir --> sêhr ==
Tercimeyên ''[[sêhr]]'' hemû dibêje ''sihir'' loma bi botê lazim e kirin ''sêhr''. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 17:43, 18 tîrmeh 2026 (UTC)
:Sihirbaz --> sêhrbaz [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 18:07, 18 tîrmeh 2026 (UTC)
== Tercimeyên dîroknas ==
Li tercimeyên [[dîroknas]], hevmaneyên wê hewce ye were îlawekirin. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 18:44, 18 tîrmeh 2026 (UTC)
== Mewlûd ==
Sererastkirina jêgirtinên mewlûdê [https://ku.wiktionary.org/w/index.php?search=insource%3A%2Fw%5C%3AMela+His%C3%AAn%C3%AA+Batey%C3%AE%2F&title=Taybet%3AL%C3%AAger%C3%AEn&ns0=1&searchToken=8m0tguy3sqt7edr4sg0u8hedo] wekî [https://ku.wiktionary.org/w/index.php?title=dax%C3%AEdar&curid=284303&diff=6265851&oldid=6142285] [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 09:43, 20 tîrmeh 2026 (UTC)
cl3kdmcruc9lil883b5pqvnn9o4zogz
6333721
6333717
2026-08-14T19:56:20Z
Ghybu
1393
/* MediaWiki:Gadget-start.js */
6333721
wikitext
text/x-wiki
{{/ser}}
= Karên ferhengî =
== Mane ==
* [[:Kategorî:Madeyên bê beşa mane]]
** [[:Kategorî:Madeyên bê beşa mane bi kurmancî]]
Li ser van rûpelan ev made hene ku maneyan wan nehatine nivîsin û divê werin nivîsin. —[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:17, 16 tîrmeh 2026 (UTC)
== Etîmolojî ==
*[[:Kategorî:Daxwazên etîmolojiyê]]
**[[:Kategorî:Daxwazên etîmolojiyê bi kurmancî]]
Li ser van rûpelan ev made hene ku etîmolojiya wan hîn nehatine nivîsin. Ji bo alîkariyê binêre [[WF:Etîmolojî]] —[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:17, 16 tîrmeh 2026 (UTC)
== Cureyê rêzimanî ==
* [[:Kategorî:Gotarên bê kategoriya rêzimanî]]
* [[:Kategorî:Gotarên bê kategoriya rêzimanî bi kurmancî]]
Li ser van rûpelan ev made hene ku cureyên wan yên rêzimanî hîn nehatine nivîsin. Ji bo alîkariyê binêre [[Alîkarî:Cureyên peyvan]] —[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:17, 16 tîrmeh 2026 (UTC)
== Kontrol ==
* [[:Kategorî:Kontrol]]
** [[:Kategorî:Kontrola maneyê]]
Ev madde bi botê hatine çêkirin, yek bi yek divê werin kontrolkirin. —[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:17, 16 tîrmeh 2026 (UTC)
= Şablon =
== IPA ==
* {{ş|IPA}} divê [[Modul:IPA]] bi kar bîne. —[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:17, 16 tîrmeh 2026 (UTC)
== Deng ==
Kurdîkirina belgekirina {{ş|deng}} lazim e.--[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 00:06, 19 tîrmeh 2026 (UTC)
= Modul =
== Modul:form of/templates ==
* [[Modul:form of/templates]]: Divê ev modul were rojanekirin û xeletiyên berê wekî ([[hevalê]]) werin rastkirin. —[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:17, 16 tîrmeh 2026 (UTC)
*:Merheba @[[Bikarhêner:Ghybu|Ghybu]] Te gotibû di vê modulê de xeletî hene, jkx tu dikarî li vir binivîsî çi kêmasî hene, daku wextê rojane dikim ez ji bîr nekim? [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:16, 21 tîrmeh 2026 (UTC)
*::Silav. Nizanim ji bîra min çûye... Herwiha ji bo çêkirina formên navdêran zanînên cîns û tîpa dawî bes e:
*::* (-ê, mê) => çemandî, bangkirin
*::* (-ê, nêr) => îzafe
*::* (-ê, mê û nêr) => îzafe (nêr), bangkirin (mê), çemandî (mê)
*::* (-a) => îzafe (mê)
*::* (-ekî) => îzafe û çemandî (nêr, nebinavkirî)
*::* (-eke) = > îzafe (mê, nebinavkirî)
*::* ...
*:: <code>if find(mw.title.getCurrentTitle().subpageText, 'ekî$') then ... end</code>
*::<code><nowiki>{{ku-tewîn-navForm|<navdêr>|<zayend>}</nowiki></code>
*::Tablo û nivîs di yekcarî de tên çêkirin...
*::Feqet problem lêzêdekirina mînakan e. [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 17:34, 21 tîrmeh 2026 (UTC)
*:::Lêzêdekirina kîjan nimûneyan? Ev koda js ji bo çi ye? Qisûrê nenêre min fêm nekir :/ [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 18:13, 21 tîrmeh 2026 (UTC)
*::::Li vira ([[hevalê#Formeke navdêrê]]) di bin maneyên 1. û 2. mînak nayên tevlî kirin :) [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 18:18, 21 tîrmeh 2026 (UTC)
*:::::Ev tercîh e, ne mecbûrî ye, em dikarin [https://ku.wiktionary.org/w/index.php?title=heval%C3%AA&diff=prev&oldid=6276350 wisa] bikin. Wekî din? [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 18:29, 21 tîrmeh 2026 (UTC)
*::::::Min li jor tênê got ku tenê parametreyên "navdêr" û "zayend" hewce nee. Bi '''[//ku.wiktionary.org/w/index.php?title=heval%C3%AA&curid=969734&diff=6276353&oldid=6276350 vî]''' awayî jî tê çêkirin. Parametreyên din ne hewce ne. [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 18:38, 21 tîrmeh 2026 (UTC)
*:::::::Ji bo wê şabloneke din lazim e, bila ev şablon wekî îngilîzî bimîne em ji bo kurmancî yekî din çêkin. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 18:42, 21 tîrmeh 2026 (UTC)
*::::::::[https://ku.wiktionary.org/w/index.php?title=heval%C3%AA&oldid=6276885 wisa] çawa ye? Bi min nivîsîna nimûneyan zêde ne lazim e ji ber ku ti kes serê xwe pê naêşîne. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 09:46, 23 tîrmeh 2026 (UTC)
*:::::::::@[[Bikarhêner:Ghybu|Ghybu]] Vê şablonê bi kar bînin an na? Navê şablonê kê çi be? [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 19:07, 24 tîrmeh 2026 (UTC)
== Modul:columns ==
* [[Modul:columns]] were rojanekirin û {{ş|kol3}} bila lînka ''nîşan bide'' deyne beriya sernavê, kolê di qutiya rengî de bila nebe. —[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:17, 16 tîrmeh 2026 (UTC)
== Modul:etymon ==
* [[Modul:etymon kevn]]: Rojanekirin hewce ye. —[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:17, 16 tîrmeh 2026 (UTC)
== [[Modul:ziman/code to canonical name]] ==
Belgekirina skrîptê û js divê were rastkirin. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 09:31, 22 tîrmeh 2026 (UTC)
:* [[MediaWiki:UpdateLanguageNameAndCode.js]]
:[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 09:50, 22 tîrmeh 2026 (UTC)
::* [[Modul:ziman/print]]
::[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 09:52, 22 tîrmeh 2026 (UTC)
:::*[[Modul:ziman/şablon]]
:::[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 09:56, 22 tîrmeh 2026 (UTC)
::::* [[MediaWiki:Gadget-translation editor.js/ziman.json]]
::::[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 11:06, 22 tîrmeh 2026 (UTC)
== [[Modul:quote]] ==
Piştî ev modul hate hazirkirin, lazim e navên jegirtinan werin rastkirin û li hemûyan {{param|jêgirtin}} were zêdekirin. Bnr. [[Gotûbêja şablonê:Jêgirtin/Ehmedê Xanî/Mem û Zîn]] [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 22:27, 5 tebax 2026 (UTC)
::Ev modul hema bêje hazir e. Hûn li ser van madeyan çi difikirin:
# {{para|tarîx}} lazim e full date be eger na, lazim e {{para|sal}} were bikaranîn. Feqat "'''2021''' kanûna pêşîn 23" bi vî şiklî bi min ne problem e çnkî derdê en.wikt "attestation" e delîla herî pêşî jî sal e.
#: {{demo|sep=wisa xuya dibe<br>|<nowiki>{{jêder-kitêb/ceribandin|en
|tarîx=23 December 2021|nivîskar=Harry Hobbs; George Williams|sernav=Micronations and the Search for Sovereignty|url=https://www.cambridge.org/core/books/micronations-and-the-search-for-sovereignty/B0414A3A322695D9EE71E4CDDFDA06DE|weşanxane=Cambridge University Press|rûpel=155|isbn=978-1-009-15012-5|jêgirtin=jêgirtin.|t=-}}</nowiki>}}
#{{para|amadekar}}/{{para|edîtor}}/{{para|terciman}} bi şiklê edîtoriya, amadekariya, tercimekirina
#: {{demo|sep=dide<br>|<nowiki>{{jêder-kitêb/ceribandin|en
|sernav=Medical Surgical Nursing|serî=Juta's Manual of Nursing|cildê-seriyê=volume 4|edîtor=Sophie Mataniele Mogotlane; Joyce Mokoena; Motshedisi Eunice Chauke; Anne Young|sal=2005|weşanxane=Juta Academic|isbn=978-0702171840|rûpel=!12-29|jêgirtin=jêgirtin|t=-}}</nowiki>}}
--[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 13:09, 10 tebax 2026 (UTC)
:@[[Bikarhêner:Bikarhêner|Bikarhêner]] û @[[Bikarhêner:Ghybu|Ghybu]] Hîn gelek tişt hene divê îzah bikin û fikrê we pirs bikim, feqat îzahkirin pir zor e, em dest bi bikaranînê bikin û dûre tiştên ku hûn naxwazin em dikarin biguherînîn, dibe? [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 13:11, 10 tebax 2026 (UTC)
::Dibe, piştî çêbû, em di praktîkê de bibînin ku çawa ye. -- [[Bikarhêner:Bikarhêner|Bikarhêner]] ([[Gotûbêja bikarhêner:Bikarhêner|gotûbêj]]) 18:05, 10 tebax 2026 (UTC)
= Javascript =
== [[Mediawiki:Gadget-citoid-helper.js]] ==
Ji bo bi citoidê kopîkirina malûmatên çavkaniyan amûreke wisa lazim e. Xisûsen ji ber ku bi çend amûrên din dikare were bikaranîn.
Feqat çend problem hene, şablonên me de kêmasiya parametreyan gelek in û xerîteyên citoidê hîn nehatine çêkirin. Wana sererast bikin dûre vê amûrê çêkin, piştre [[MediaWiki:Gadget-start.js|start.js]] û [[MediaWiki:Gadget-wikt.add-examples.js|add examples.js]] were rojanekirin.
- --[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 00:04, 19 tîrmeh 2026 (UTC)
:Merheba @[[Bikarhêner:Bikarhêner|Bikarhêner]], ez dibêjim karê Modul:quote zêde wext bistîne, bila em dest bi bikaranîna van amûran bikin dûre kêmasiyan em ê temam bikin înşela. Dikarî vana li cihên xwe yên rast kopî paste bikî?
# [[Special:PermanentLink/6291574|Bikarhêner:Wikihez/skrîpt/js/Gadget-citoid-helper.js]] --> [[Mediawiki:Gadget-citoid-helper.js]]
# Ya li jêr kopî bike qismê herî dawî ya AmûrênVeşartî li [[MediaWiki:Gadgets-definition]]:
## <code><nowiki>* citoid-helper[ResourceLoader|hidden|default|dependencies=mediawiki.util]|citoid-helper.js</nowiki></code>
--[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:58, 26 tîrmeh 2026 (UTC)
== [[MediaWiki:Gadget-start.js]] ==
Rojanekirin hewce ye. Min gelek tişt lê zêde kir lê ez niha test dikime. Piştre em bar bikin:
* [[Bikarhêner:Wikihez/Gadget-start.js]] --> [[MediaWiki:Gadget-start.js]]
* [[Bikarhêner:Wikihez/Gadget-start.css]] --> [[MediaWiki:Gadget-start.css]]
--[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 22:08, 17 tîrmeh 2026 (UTC)
:Min [[MediaWiki:Gadget-start/data.json|data.json]] çêkir ji bo ku bi hêsanî malûmatên heyî werin guhartin bêyî guhartina Javascriptê. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 19:49, 18 tîrmeh 2026 (UTC)
:Xeletiyên ku ji bîr nekim rast bikim:
:* Wextê min çavkanî "kitêb" hilbijart û bi destî tije kir xeletiyeke [https://ku.wiktionary.org/w/index.php?title=xezete&diff=prev&oldid=6265392 wisa] derket her kelîme hate lînkkirin.
:* <code>html("⠿")</code> ev ne lazim e.
:* textarea ji bo çavkaniyên jêgirtinan xaseten yên sernav hîn jî ne draggable e.
:* pêşdîtina zindî checkbox wextê tê rakirin, pêşdîtin winda nabe.
:* Butona mobîlê ya vekirina formê di moda tarî de belî nabe, tenê wekî qutiyeke tarî xuya dibe.
:* Metna hişyarkirinê di guhartina rûpelên heyî de lazim e baştir bikim.
:[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 23:51, 18 tîrmeh 2026 (UTC)
::Ev problem çêbûn, ez ê binêrim ka çi problemên din hene. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 14:15, 19 tîrmeh 2026 (UTC)
:::Çêke: Ji bo qismê çavkaniyê yek dikare API call û Kategorî:Çavkanî bi kar bîne ji bo ku şablon zêde bikî ji yên heyî. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 21:21, 19 tîrmeh 2026 (UTC)
::::Ev jî çêbû, min beşa çavkanî jî çêkir. Eger xeletî dernekeve û problema valahiya piştî etîketê ji bîr nekim, piştî rojanekirina amûrên linkify, û citoid em dikarin bar bikin. Ez ê ti tiştê nû îlawe nekim, zêde dirêj bû. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:14, 21 tîrmeh 2026 (UTC)
:::::Merheba @[[Bikarhêner:Bikarhêner|Bikarhêner]]. Dikarî wana bar bikî?
:::::* [[Bikarhêner:Wikihez/Gadget-start.js]] --> [[MediaWiki:Gadget-start.js]]
:::::* [[Bikarhêner:Wikihez/Gadget-start.css]] --> [[MediaWiki:Gadget-start.css]]
:::::* [[MediaWiki:Gadgets-definition]] wisa rojane bike:
:::::* start[ResourceLoader|default|package|dependencies=mediawiki.util,ext.gadget.StorageUtils,ext.gadget.citoid-helper]|start.js|start.css|start.js/data.json
:::::[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 09:39, 5 tebax 2026 (UTC)
{{şirove}} Dewama ''[[Special:PermanentLink/6333688|Gotûbêja bikarhêner:Rewiye tine#WF:Nû]]'' bila gotûbêja wî em spam nekin. :D
{{r|Ghybu}} dikarî [[Special:PermanentLink/6333689|vê htmlê]] binêrî claude rast fêm kiriye yan na? Daxîne û wek html qeyd bike. --[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 18:43, 14 tebax 2026 (UTC)
:Min seh wîkîyên din jî kir, li wîkiya fransî tiştekî wekî daxwaza min çêkirine (tiştên ku ne hewce ne wekî "tab" çêkirine an jî hatine vêşartin): [//fr.wiktionary.org/w/index.php?title=fdsdfdsf&action=edit&redlink=1]. Formata me yê berî jî bi vê lojîkê hatibû çêkirin, wekî de.wiktionary ([//de.wiktionary.org/w/index.php?title=sdfdsfsdfs&action=edit&preload=Vorlage:Formatvorlage_(Substantiv_vereinfacht)]) [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 19:01, 14 tebax 2026 (UTC)
::PS: Dîsa jî Claude min rind fêm kiriye :)) Feqet min got ku beşên Mane", "Bilêvkirin" û "Beşên din" cem hev (wekî "tab") ". Û dema ku tu terê di nav "Besên din" Hevmane, Jê, ... li wira werin dayîn. Wêne/Resim û Nimûne jî di nav beşa ("tab") "Mane" [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 19:17, 14 tebax 2026 (UTC)
::Erê ya fr.wikt min jî dîtibû jixwe fikrê tab min ji wan girtibû :D (feqat min li cem wan tenê tab-a maneyê dît yên din nedît çawa tê vekirin nizanim) Berê hemû beş piştî maneyê bibûn, dûre min sê Tab çêkir, Bingehîn+Lînkkirin+Bikaranîn. Niha lazim e Tabeke din çêkim. Ya ku claude çêkiriye bnr. [[Special:PermanentLink/6333698#L-7]] ne baş e bnr. [[Special:PermanentLink/6333703|qiyaskirinê li ser vê htmlê]] Êdî ez Claude abuse dikime ji ber ku Pro ye :D [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 19:26, 14 tebax 2026 (UTC)
:::Claude dibêje:
:::Good clarification — that's a real simplification, not just a relabel. Updated STEP_GROUPS from 5 tabs down to 3:
:::Mane — the definitions themselves, plus Wêne (image), now grouped in with it instead of sitting in a separate misc tab. Nimûne needed no change since it was already rendering inside each Mane sense block, not as its own step.
:::Bilêvkirin — unchanged, still just pronunciation.
:::Beşên din — everything else in one flat bucket: hevmane, jê, têkildar, herwiha binêre, formên alternatîv, dijmane, jornav, jêrnav, notên bikaranînê, bi alfabeyên din, dûnde, çavkanî, bêhtir bixwîne, tewandin, etîmolojî, zaravayên din, werger, and bnr-h — instead of being split across the old Bingehîn/Lînkkirin/Bikaranîn/Din tabs.
:::No DOM-order changes were needed this time — the fix from the blank-tab bug looks up the tab bar's position dynamically now, so it didn't matter that I regrouped which steps go where. Same two files, saved to your Wiki folder — worth another pass through all three tabs once you've pasted this in, same as last time. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 19:34, 14 tebax 2026 (UTC)
::::Mînak:
Ziman
---------------------------------------------
Cureyê rêzimanî (Navdêr)
Navdêr (hilbijêre) | Cîns (hilbijêre) | Jimar (hilbijêre)
- lêker -mê -yekjimar
- rengdêr -nêr -pirjimar
- ... -... -...
---------------------------------------------
Mane | Bilêvkirin | Beşên din
hilbijêre:
- mane - IPA - Hevmane
- nimûne - kîte - Dijmane
- wêne
Dema ku tu "Cureyê rêzimanî dikî "Lêker" :
Cureyê rêzimanî (Lêker)
Lêker (hilbijêre) | Cure (hilbijêre)
- navdêr -rehê niha
- rengdêr -rehê borî
- ... -...
---------------------------------------------
-- [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 19:45, 14 tebax 2026 (UTC)
== [[Mediawiki:Gadget-QQ.js]] ==
Ev amûr di şikle Minerva de. Her daîm vê xeletiyê dide:
<syntaxhighlight lang="js">
TypeError: Cannot read properties of null (reading 'addEventListener') at css () at runScript () at Array.<anonymous> () at flushCssBuffer ()
</syntaxhighlight> [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 19:29, 18 tîrmeh 2026 (UTC)
:* [[Bikarhêner:Wikihez/skrîpt/js/Gadget-QQ.js]] --> [[Mediawiki:Gadget-QQ.js]]
:* [[Bikarhêner:Wikihez/Gadget-QQ.css]] --> [[Mediawiki:Gadget-QQ.css]]
:Ez dibêjim çêbû lê ka çend roj biceribînim. Tiştên ku hatin sererastkirin:
:# Google Books API Key dikarî zêde bikî, dixe cookies û di gerokê de dimîne. Berê bê API Key dixebitiya lê êdî mecbûr e ku API Key-a te hebe, bidestxistina wê ne zêde zor e lê dîsa jî tevlihev e.
:# Êdî di mobîlê de dixebite, heta di mobîlê de xweştir xuya dike.
:# Moda tarî
:# OOUI dewsa jquery.ui
:# Li qutiyê çi dixwazî zêde bikî, dikare li gorî îsm, sifet, fiîl bitewîne. Lê ji bo fiîl tenê dikare çend heb inflection bîne.
:# Butona paqij bike lê zêde kir.
:# Çend paqijiyên jêgirtinên Google Kitêbê niha hene.
:[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 23:38, 18 tîrmeh 2026 (UTC)
::Tewandina fiîlan û xeletiya modulê lazim e were rastkirin. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 14:40, 21 tîrmeh 2026 (UTC)
== [[MediaWiki:Gadget-wikt.add-examples.js]] ==
Min ev amûr hinek rojane kir feqat çend problem hene berî ku bar bikin.
Tiştên ku min guhart:
# Êdî li sayfeyên bi {{ş|maneid}} jî dixebite,
# Cihê di wîkîtekstê de yê ku jêgirtin were îlawekirin baştir bû,
# [[Mediawiki:Gadget-citoid-helper.js|citoid helper]] zêde kir ji bo ku bi hêsanî çavkanî bi riya doi, isbn an urlyê werin tijîkirin.
* [[Bikarhêner:Wikihez/Gadget-wikt.add-examples.css]] --> [[MediaWiki:Gadget-wikt.add-examples.css]]
* [[Bikarhêner:Wikihez/Gadget-wikt.add-examples.js]] --> [[MediaWiki:Gadget-wikt.add-examples.js]]
- --[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 00:50, 19 tîrmeh 2026 (UTC)
:Min "wikt." qismên cache kirinê ya wîkiya fransî bi [[MediaWiki:Gadget-StorageUtils.js]] guhartiye. loma ji bîr nekin wê amûrê li [[MediaWiki:Gadgets-definition]] zêde bikin. û navê amûrê jî biguhêrînin. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 09:15, 23 tîrmeh 2026 (UTC)
::Berê li ser WF:ceribandin dixebitî. niha naxebite. Divê were rastkirin. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 22:10, 7 tebax 2026 (UTC)
== Gadget-translation editor ==
* [[MediaWiki:Gadget-translation editor.js]]: divê formata en.wîktê were bikaranîn ji ber ku me gelek tercime ji en.wîktê kopî kir û ev js hîn nikare formata wekî li jêr bi kar bîne.
<syntaxhighlight lang="wikitext">
* {{Z|sh}}:
*: Kirîlî:
*: Latînî
</syntaxhighlight>
—[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:17, 16 tîrmeh 2026 (UTC)
== [[Mediawiki:Gadget-linkify.js]] ==
* ''rûpeleke'' wekî<syntaxhighlight lang="wikitext">[[rûpeleke]]</syntaxhighlight> lînk dike, bi regexê belkî dikare wisa bike <syntaxhighlight lang="wikitext">[[rûpel]]eke</syntaxhighlight>
—[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:17, 16 tîrmeh 2026 (UTC)
* Amûreke din wekî [[User:Wikihez/Gadget-linkify.js|linkify]] lazim e ku herfên mezin biçûk bike ji bo kurmancî.—[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:17, 16 tîrmeh 2026 (UTC)
:{{r|Bikarhêner}} Merheba bira, dikarî viya jî bar bikî?:
* [[Special:PermanentLink/6291974|linkify]] --> [[Mediawiki:Gadget-linkify.js]]
Spas--[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 11:42, 29 tîrmeh 2026 (UTC)
:Dûre [https://ku.wiktionary.org/wiki/MediaWiki:Gadget-start.js#L-283 li vir] wiktviLinkify bike kuLinkify xêra xwe [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 11:51, 29 tîrmeh 2026 (UTC)
::Min ji bîr kir lê zêde bikim niha nikare "Dİ" bike "di", xeletiyeke berbelav a di nivîsên kurdî de, herfên din ên wekî ll yan rr jî hewce ne werin zêdekirin. Dûre em zêde bikin. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 21:42, 29 tîrmeh 2026 (UTC)
:::Min nû ferq kir, sayfeyên ku hîn nehatine çêkirin wîkîlînk nake. Problemeke mezin e divê were rastkirin. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 18:15, 30 tîrmeh 2026 (UTC)
::::Na, lînk dike, tiştekî din heye... [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 10:49, 31 tîrmeh 2026 (UTC)
== Amûra manayê ==
Amûreke din ji bo nivîsina maneyê wekî Nimûne zêde bike lazim e [https://ku.wiktionary.org/w/index.php?title=Bikarh%C3%AAner:Wikihez/test.js&oldid=6276876 js] [https://ku.wiktionary.org/w/index.php?title=%C5%9Eablon:ceribandin2&oldid=6265629 şablon] [https://ku.wiktionary.org/w/index.php?title=Bikarh%C3%AAner:Wikihez/common.css&oldid=6265642 css] --[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 09:12, 23 tîrmeh 2026 (UTC)
== [[MediaWiki:Gadget-jeder.js]] ==
@[[Bikarhêner:Ghybu|Ghybu]] Çavkaniyên jêderê di moda pêşdîtinê de jêderê vedişêre, ew jî min gelek eciz dike wextê çavkanî zêde dikim. Min ji Claude pirsî û kodan nîşanî wê da, wisa cewab da:
Yes — and this file actually explains the whole thing precisely, better than my earlier guess about extract-stripping.
What's happening: the CSS rule
<syntaxhighlight lang="css">
.jeder{
display:none;
}
</syntaxhighlight>
hides every citation by default, *unconditionally*. The only thing that ever makes it visible again is the gadget's JS: it finds each `.jeder`, builds the short "`— (year, author, +)`" summary from the `.j-pewist` fields, and either reveals the short version or — for citations with no `.j-pewist` fields — explicitly sets `display:inline` on the original.
So visibility of citations depends entirely on this JS running. In the normal article view (Image 1) it runs, so you see the collapsed "`(1918, E. Rehmî Ji Mala Hekariyan, Amadekar: M. E. Bozarslan, +)`" form. In whatever generated Image 2 — a hover-preview/extract/API render — gadget JS doesn't execute, so nothing ever removes the `display:none`, and the citation vanishes completely rather than degrading to "still visible, just not collapsed."
<b>The fix:</b> flip the default so the *un-collapsed* state is the safe fallback, and let JS do the hiding only after it successfully builds the short version. That way, any context without JS shows the full citation instead of nothing.
CSS — remove the blanket hide:
<syntaxhighlight lang="css">
.jeder {
/* intentionally no display:none here — see Gadget-... .js */
}
</syntaxhighlight>
JS — do the hiding from script, after the short form exists:
{{veşêre-ser}}
<syntaxhighlight lang="js">
// Ji bo şablonên [[Şablon:jêder]] hatiye nivîsandin.
// Parametreyên ku di navbera "<span class="j-pewist">...</span>" an "{{j-pêwîst|...}}" de ne venaşêre.
$(function() {
function nivisaKurtTevliBike(sund, nivisKurt) {
var zede = $('<a>+</a>')
.addClass('click')
.attr('href', '#')
.attr('title', 'zêdetir')
.css('font-weight', 'bold');
var kurt = $(' <a>↩</a>')
.addClass('click-kurt')
.attr('href', '#')
.attr('title', 'veşêre')
.css('font-weight', 'bold');
$('<span>' + nivisKurt + '</span>')
.append(zede).append(')')
.addClass('jeder-kurt')
.css('font-size', '0.85em')
.insertAfter(sund);
sund.append(' ').append(kurt);
// Only hide the full citation once the short summary actually exists.
// If this script never runs (no-JS clients, hover-preview extracts,
// action=render, etc.), the full citation stays visible instead of
// silently disappearing.
sund.css('display', 'none');
}
function vesere() {
$('.jeder').each(function() {
var elmTab = $(this).find('.j-pewist').clone();
if (elmTab.length) {
var elm = '';
for (var i = elmTab.length - 1; i >= 0; i--) {
elm = elmTab.eq(i).html() + ', ' + elm;
}
var nivisKurt = ' — (' + elm;
nivisaKurtTevliBike($(this), nivisKurt);
}
// else: no j-pewist fields to shorten — leave the full citation
// as it already renders (visible), nothing to do.
});
}
vesere();
$(".click").click(function(e) {
e.preventDefault();
$(this).parent('.jeder-kurt').css('display', 'none');
$(this).parent('.jeder-kurt').prev().css('display', 'inline');
});
$(".click-kurt").click(function(e) {
e.preventDefault();
$(this).parent('.jeder').css('display', 'none');
$(this).parent('.jeder').next().css('display', 'inline');
});
});
</syntaxhighlight>
Net effect:
- JS-enabled readers (normal article view): identical experience to today — collapsed short form with `+`/`↩` toggle.
- No-JS contexts (previews, extracts, screen readers before JS loads, print, etc.): full citation is shown instead of nothing — a real regression fix rather than a cosmetic one.
One caveat worth being upfront about: this fixes it *if* the preview context renders the gadget's HTML/CSS but doesn't execute gadget JS (which is the far more common case, and what this code strongly suggests is happening). If Image 2 instead comes from a pipeline that strips the `.jeder`/`.jegirtin-text` elements out of the HTML entirely before this CSS/JS even gets a chance to apply, no on-wiki CSS/JS change can help — that'd need the extract-generation config changed instead. Given what this gadget file shows, though, I'd bet on the CSS-hide explanation.
{{veşêre-bin}}
Em dûre biceribînin eger xeletî tinebe, vî tiştî jî rast bikin. --[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 20:00, 23 tîrmeh 2026 (UTC)
:Ez APIya MediaWiki rind nizanim belkî Claude dizane:) Em nikarin bibêjin dema ku moda "''action=edit''" e fonksiyona <code>function vesere()</code> bi kar meyîne. [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 15:57, 24 tîrmeh 2026 (UTC)
::Na, di moda "edît"-ê de <code>var elmTab = null</code>... [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 16:13, 24 tîrmeh 2026 (UTC)
?:
<syntaxhighlight lang="js">
if (
mw.config.get('wgAction') === 'edit' ||
mw.config.get('wgAction') === 'submit'
){
var elmTab = [];
} else {
var elmTab = $(this).find('.j-pewist').clone();
}
</syntaxhighlight>
--[[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 16:31, 24 tîrmeh 2026 (UTC)
:Ez jî nizanim Claude çiqas ji mediawiki fêm dike lê heta niha ti tişt nîne ku min jê pirs kir û nikaribû çêke, bila wekî reklam nebe feqat Claude mikemmel e, dibêjim "li vir çima xeletiyeke wisa derdikeve" di dosyeya 2000 rêzî de diçe tiştê xelet tenê rast dike tiştekî din naguherîne. Chatgpt û aistudio qet wisa nakin, eynî dosyeyê deh cara dinivîsin, deh netîceyên cuda derdikevin :D
:Em dikarin vê amûrê wextê edit û submitê neaktîv bikin wekî <syntaxhighlight lang="js">if (!(action === "edit" || action === "submit")) {
:return;</syntaxhighlight> lê wê demê display:none wê çibe nizanim. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 18:23, 24 tîrmeh 2026 (UTC)
::display:none ne hewce ye ma jixwe di nav kodê [https://ku.wiktionary.org/w/index.php?title=MediaWiki:Gadget-jeder.js&oldid=6069025#L-49 L-49] de inline/none heye? [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 18:53, 24 tîrmeh 2026 (UTC)
:Min bi vî şiklî [https://ku.wiktionary.org/w/index.php?title=Bikarh%C3%AAner:Wikihez/vector-2022.js&diff=prev&oldid=6290816#L-28] ceriband feqat nexebitî. "display:none" di pêşdîtinê de dixebite feqat js naşixule. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 14:43, 25 tîrmeh 2026 (UTC)
::Kodên JSê pir hez nakim (pêşta hukurina APIya MWyê hewce bû) dîsa jî ez ê seh bikim :) [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 16:49, 27 tîrmeh 2026 (UTC)
:::Ez niha bi vî şiklî [https://ku.wiktionary.org/w/index.php?title=Bikarh%C3%AAner:Wikihez/test.js&oldid=6290820] [https://ku.wiktionary.org/w/index.php?title=Bikarh%C3%AAner:Wikihez/common.css&oldid=6290821#L-8] bi kar tînim ti problem nîne. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 17:09, 27 tîrmeh 2026 (UTC)
== [[MediaWiki:Gadget-PagePreviews.js]] ==
Ez dibêjim em vê amûrê jî çêkin [[:en:MediaWiki:Gadget-PagePreviews.js]] --[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 10:56, 3 tebax 2026 (UTC)
= Moda tarî =
== [[Şablon:wîkîpediya]] ==
Rengê tarî de xirab e.--[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 19:36, 4 tebax 2026 (UTC)
= Bot =
Karên ku bi botê werin çêkirin ji kerema xwe li vir binivîsin.
== Kategorî:Biwêj ==
[[:Kategorî:Biwêj]] divê were paqijkirin, lîsteya madeyên {{ş|biwêj}} çêke, yên ku tê de bûn, kirin, man hene filtre bike yên din bi destî tê çêkirin.—[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:17, 16 tîrmeh 2026 (UTC)
== Jêgirtin ==
Xistina jêgirtinên beşa [https://ku.wiktionary.org/w/index.php?search=insource%3A%2F%3D+*Ji+%5BWw%5D%C3%AAjey%C3%AA+*%3D%2F&title=Taybet%3AL%C3%AAger%C3%AEn&profile=advanced&fulltext=1&ns0=1&searchToken=8rh0bmw8dccsi7aynl6zli8uf ji wêjeyê] li beşa maneyê. —[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:17, 16 tîrmeh 2026 (UTC)
== Bota Toolforgeê ==
Botekî Toolforgeê lazim e ji bo ku xeletiyên biçûk wekî şablonên bi navên îngilîzî werin kurdîkirin yan jî valahiya beşan rast bike û hwd.—[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:17, 16 tîrmeh 2026 (UTC)
:Min [[Bikarhêner:Wikihez/skrîpt/py/kuwiktkozmetik.py|paqijiyen kozmetîk]] hazir kir feqat hîn navên şablonan naguhêre. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 20:05, 4 tebax 2026 (UTC)
== Updatew ==
Bota [[Bikarhêner:Wikihez/skrîpt/py/updateW.py|updateW]] divê were rojanekirin. Yan jî yekî nû were çêkirin. Şablonên {{ş|W}} di beşa tercimeyan de sererast dike û zimanan rêz dike. Ya niha xeletiya navê zimanî dide.—[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:17, 16 tîrmeh 2026 (UTC)
== sihir --> sêhr ==
Tercimeyên ''[[sêhr]]'' hemû dibêje ''sihir'' loma bi botê lazim e kirin ''sêhr''. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 17:43, 18 tîrmeh 2026 (UTC)
:Sihirbaz --> sêhrbaz [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 18:07, 18 tîrmeh 2026 (UTC)
== Tercimeyên dîroknas ==
Li tercimeyên [[dîroknas]], hevmaneyên wê hewce ye were îlawekirin. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 18:44, 18 tîrmeh 2026 (UTC)
== Mewlûd ==
Sererastkirina jêgirtinên mewlûdê [https://ku.wiktionary.org/w/index.php?search=insource%3A%2Fw%5C%3AMela+His%C3%AAn%C3%AA+Batey%C3%AE%2F&title=Taybet%3AL%C3%AAger%C3%AEn&ns0=1&searchToken=8m0tguy3sqt7edr4sg0u8hedo] wekî [https://ku.wiktionary.org/w/index.php?title=dax%C3%AEdar&curid=284303&diff=6265851&oldid=6142285] [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 09:43, 20 tîrmeh 2026 (UTC)
t86jgmy5pxr2o6yztm4ypuuyqu5sksw
6333722
6333721
2026-08-14T20:04:10Z
Ghybu
1393
/* MediaWiki:Gadget-start.js */
6333722
wikitext
text/x-wiki
{{/ser}}
= Karên ferhengî =
== Mane ==
* [[:Kategorî:Madeyên bê beşa mane]]
** [[:Kategorî:Madeyên bê beşa mane bi kurmancî]]
Li ser van rûpelan ev made hene ku maneyan wan nehatine nivîsin û divê werin nivîsin. —[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:17, 16 tîrmeh 2026 (UTC)
== Etîmolojî ==
*[[:Kategorî:Daxwazên etîmolojiyê]]
**[[:Kategorî:Daxwazên etîmolojiyê bi kurmancî]]
Li ser van rûpelan ev made hene ku etîmolojiya wan hîn nehatine nivîsin. Ji bo alîkariyê binêre [[WF:Etîmolojî]] —[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:17, 16 tîrmeh 2026 (UTC)
== Cureyê rêzimanî ==
* [[:Kategorî:Gotarên bê kategoriya rêzimanî]]
* [[:Kategorî:Gotarên bê kategoriya rêzimanî bi kurmancî]]
Li ser van rûpelan ev made hene ku cureyên wan yên rêzimanî hîn nehatine nivîsin. Ji bo alîkariyê binêre [[Alîkarî:Cureyên peyvan]] —[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:17, 16 tîrmeh 2026 (UTC)
== Kontrol ==
* [[:Kategorî:Kontrol]]
** [[:Kategorî:Kontrola maneyê]]
Ev madde bi botê hatine çêkirin, yek bi yek divê werin kontrolkirin. —[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:17, 16 tîrmeh 2026 (UTC)
= Şablon =
== IPA ==
* {{ş|IPA}} divê [[Modul:IPA]] bi kar bîne. —[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:17, 16 tîrmeh 2026 (UTC)
== Deng ==
Kurdîkirina belgekirina {{ş|deng}} lazim e.--[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 00:06, 19 tîrmeh 2026 (UTC)
= Modul =
== Modul:form of/templates ==
* [[Modul:form of/templates]]: Divê ev modul were rojanekirin û xeletiyên berê wekî ([[hevalê]]) werin rastkirin. —[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:17, 16 tîrmeh 2026 (UTC)
*:Merheba @[[Bikarhêner:Ghybu|Ghybu]] Te gotibû di vê modulê de xeletî hene, jkx tu dikarî li vir binivîsî çi kêmasî hene, daku wextê rojane dikim ez ji bîr nekim? [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:16, 21 tîrmeh 2026 (UTC)
*::Silav. Nizanim ji bîra min çûye... Herwiha ji bo çêkirina formên navdêran zanînên cîns û tîpa dawî bes e:
*::* (-ê, mê) => çemandî, bangkirin
*::* (-ê, nêr) => îzafe
*::* (-ê, mê û nêr) => îzafe (nêr), bangkirin (mê), çemandî (mê)
*::* (-a) => îzafe (mê)
*::* (-ekî) => îzafe û çemandî (nêr, nebinavkirî)
*::* (-eke) = > îzafe (mê, nebinavkirî)
*::* ...
*:: <code>if find(mw.title.getCurrentTitle().subpageText, 'ekî$') then ... end</code>
*::<code><nowiki>{{ku-tewîn-navForm|<navdêr>|<zayend>}</nowiki></code>
*::Tablo û nivîs di yekcarî de tên çêkirin...
*::Feqet problem lêzêdekirina mînakan e. [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 17:34, 21 tîrmeh 2026 (UTC)
*:::Lêzêdekirina kîjan nimûneyan? Ev koda js ji bo çi ye? Qisûrê nenêre min fêm nekir :/ [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 18:13, 21 tîrmeh 2026 (UTC)
*::::Li vira ([[hevalê#Formeke navdêrê]]) di bin maneyên 1. û 2. mînak nayên tevlî kirin :) [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 18:18, 21 tîrmeh 2026 (UTC)
*:::::Ev tercîh e, ne mecbûrî ye, em dikarin [https://ku.wiktionary.org/w/index.php?title=heval%C3%AA&diff=prev&oldid=6276350 wisa] bikin. Wekî din? [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 18:29, 21 tîrmeh 2026 (UTC)
*::::::Min li jor tênê got ku tenê parametreyên "navdêr" û "zayend" hewce nee. Bi '''[//ku.wiktionary.org/w/index.php?title=heval%C3%AA&curid=969734&diff=6276353&oldid=6276350 vî]''' awayî jî tê çêkirin. Parametreyên din ne hewce ne. [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 18:38, 21 tîrmeh 2026 (UTC)
*:::::::Ji bo wê şabloneke din lazim e, bila ev şablon wekî îngilîzî bimîne em ji bo kurmancî yekî din çêkin. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 18:42, 21 tîrmeh 2026 (UTC)
*::::::::[https://ku.wiktionary.org/w/index.php?title=heval%C3%AA&oldid=6276885 wisa] çawa ye? Bi min nivîsîna nimûneyan zêde ne lazim e ji ber ku ti kes serê xwe pê naêşîne. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 09:46, 23 tîrmeh 2026 (UTC)
*:::::::::@[[Bikarhêner:Ghybu|Ghybu]] Vê şablonê bi kar bînin an na? Navê şablonê kê çi be? [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 19:07, 24 tîrmeh 2026 (UTC)
== Modul:columns ==
* [[Modul:columns]] were rojanekirin û {{ş|kol3}} bila lînka ''nîşan bide'' deyne beriya sernavê, kolê di qutiya rengî de bila nebe. —[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:17, 16 tîrmeh 2026 (UTC)
== Modul:etymon ==
* [[Modul:etymon kevn]]: Rojanekirin hewce ye. —[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:17, 16 tîrmeh 2026 (UTC)
== [[Modul:ziman/code to canonical name]] ==
Belgekirina skrîptê û js divê were rastkirin. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 09:31, 22 tîrmeh 2026 (UTC)
:* [[MediaWiki:UpdateLanguageNameAndCode.js]]
:[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 09:50, 22 tîrmeh 2026 (UTC)
::* [[Modul:ziman/print]]
::[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 09:52, 22 tîrmeh 2026 (UTC)
:::*[[Modul:ziman/şablon]]
:::[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 09:56, 22 tîrmeh 2026 (UTC)
::::* [[MediaWiki:Gadget-translation editor.js/ziman.json]]
::::[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 11:06, 22 tîrmeh 2026 (UTC)
== [[Modul:quote]] ==
Piştî ev modul hate hazirkirin, lazim e navên jegirtinan werin rastkirin û li hemûyan {{param|jêgirtin}} were zêdekirin. Bnr. [[Gotûbêja şablonê:Jêgirtin/Ehmedê Xanî/Mem û Zîn]] [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 22:27, 5 tebax 2026 (UTC)
::Ev modul hema bêje hazir e. Hûn li ser van madeyan çi difikirin:
# {{para|tarîx}} lazim e full date be eger na, lazim e {{para|sal}} were bikaranîn. Feqat "'''2021''' kanûna pêşîn 23" bi vî şiklî bi min ne problem e çnkî derdê en.wikt "attestation" e delîla herî pêşî jî sal e.
#: {{demo|sep=wisa xuya dibe<br>|<nowiki>{{jêder-kitêb/ceribandin|en
|tarîx=23 December 2021|nivîskar=Harry Hobbs; George Williams|sernav=Micronations and the Search for Sovereignty|url=https://www.cambridge.org/core/books/micronations-and-the-search-for-sovereignty/B0414A3A322695D9EE71E4CDDFDA06DE|weşanxane=Cambridge University Press|rûpel=155|isbn=978-1-009-15012-5|jêgirtin=jêgirtin.|t=-}}</nowiki>}}
#{{para|amadekar}}/{{para|edîtor}}/{{para|terciman}} bi şiklê edîtoriya, amadekariya, tercimekirina
#: {{demo|sep=dide<br>|<nowiki>{{jêder-kitêb/ceribandin|en
|sernav=Medical Surgical Nursing|serî=Juta's Manual of Nursing|cildê-seriyê=volume 4|edîtor=Sophie Mataniele Mogotlane; Joyce Mokoena; Motshedisi Eunice Chauke; Anne Young|sal=2005|weşanxane=Juta Academic|isbn=978-0702171840|rûpel=!12-29|jêgirtin=jêgirtin|t=-}}</nowiki>}}
--[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 13:09, 10 tebax 2026 (UTC)
:@[[Bikarhêner:Bikarhêner|Bikarhêner]] û @[[Bikarhêner:Ghybu|Ghybu]] Hîn gelek tişt hene divê îzah bikin û fikrê we pirs bikim, feqat îzahkirin pir zor e, em dest bi bikaranînê bikin û dûre tiştên ku hûn naxwazin em dikarin biguherînîn, dibe? [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 13:11, 10 tebax 2026 (UTC)
::Dibe, piştî çêbû, em di praktîkê de bibînin ku çawa ye. -- [[Bikarhêner:Bikarhêner|Bikarhêner]] ([[Gotûbêja bikarhêner:Bikarhêner|gotûbêj]]) 18:05, 10 tebax 2026 (UTC)
= Javascript =
== [[Mediawiki:Gadget-citoid-helper.js]] ==
Ji bo bi citoidê kopîkirina malûmatên çavkaniyan amûreke wisa lazim e. Xisûsen ji ber ku bi çend amûrên din dikare were bikaranîn.
Feqat çend problem hene, şablonên me de kêmasiya parametreyan gelek in û xerîteyên citoidê hîn nehatine çêkirin. Wana sererast bikin dûre vê amûrê çêkin, piştre [[MediaWiki:Gadget-start.js|start.js]] û [[MediaWiki:Gadget-wikt.add-examples.js|add examples.js]] were rojanekirin.
- --[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 00:04, 19 tîrmeh 2026 (UTC)
:Merheba @[[Bikarhêner:Bikarhêner|Bikarhêner]], ez dibêjim karê Modul:quote zêde wext bistîne, bila em dest bi bikaranîna van amûran bikin dûre kêmasiyan em ê temam bikin înşela. Dikarî vana li cihên xwe yên rast kopî paste bikî?
# [[Special:PermanentLink/6291574|Bikarhêner:Wikihez/skrîpt/js/Gadget-citoid-helper.js]] --> [[Mediawiki:Gadget-citoid-helper.js]]
# Ya li jêr kopî bike qismê herî dawî ya AmûrênVeşartî li [[MediaWiki:Gadgets-definition]]:
## <code><nowiki>* citoid-helper[ResourceLoader|hidden|default|dependencies=mediawiki.util]|citoid-helper.js</nowiki></code>
--[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:58, 26 tîrmeh 2026 (UTC)
== [[MediaWiki:Gadget-start.js]] ==
Rojanekirin hewce ye. Min gelek tişt lê zêde kir lê ez niha test dikime. Piştre em bar bikin:
* [[Bikarhêner:Wikihez/Gadget-start.js]] --> [[MediaWiki:Gadget-start.js]]
* [[Bikarhêner:Wikihez/Gadget-start.css]] --> [[MediaWiki:Gadget-start.css]]
--[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 22:08, 17 tîrmeh 2026 (UTC)
:Min [[MediaWiki:Gadget-start/data.json|data.json]] çêkir ji bo ku bi hêsanî malûmatên heyî werin guhartin bêyî guhartina Javascriptê. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 19:49, 18 tîrmeh 2026 (UTC)
:Xeletiyên ku ji bîr nekim rast bikim:
:* Wextê min çavkanî "kitêb" hilbijart û bi destî tije kir xeletiyeke [https://ku.wiktionary.org/w/index.php?title=xezete&diff=prev&oldid=6265392 wisa] derket her kelîme hate lînkkirin.
:* <code>html("⠿")</code> ev ne lazim e.
:* textarea ji bo çavkaniyên jêgirtinan xaseten yên sernav hîn jî ne draggable e.
:* pêşdîtina zindî checkbox wextê tê rakirin, pêşdîtin winda nabe.
:* Butona mobîlê ya vekirina formê di moda tarî de belî nabe, tenê wekî qutiyeke tarî xuya dibe.
:* Metna hişyarkirinê di guhartina rûpelên heyî de lazim e baştir bikim.
:[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 23:51, 18 tîrmeh 2026 (UTC)
::Ev problem çêbûn, ez ê binêrim ka çi problemên din hene. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 14:15, 19 tîrmeh 2026 (UTC)
:::Çêke: Ji bo qismê çavkaniyê yek dikare API call û Kategorî:Çavkanî bi kar bîne ji bo ku şablon zêde bikî ji yên heyî. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 21:21, 19 tîrmeh 2026 (UTC)
::::Ev jî çêbû, min beşa çavkanî jî çêkir. Eger xeletî dernekeve û problema valahiya piştî etîketê ji bîr nekim, piştî rojanekirina amûrên linkify, û citoid em dikarin bar bikin. Ez ê ti tiştê nû îlawe nekim, zêde dirêj bû. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:14, 21 tîrmeh 2026 (UTC)
:::::Merheba @[[Bikarhêner:Bikarhêner|Bikarhêner]]. Dikarî wana bar bikî?
:::::* [[Bikarhêner:Wikihez/Gadget-start.js]] --> [[MediaWiki:Gadget-start.js]]
:::::* [[Bikarhêner:Wikihez/Gadget-start.css]] --> [[MediaWiki:Gadget-start.css]]
:::::* [[MediaWiki:Gadgets-definition]] wisa rojane bike:
:::::* start[ResourceLoader|default|package|dependencies=mediawiki.util,ext.gadget.StorageUtils,ext.gadget.citoid-helper]|start.js|start.css|start.js/data.json
:::::[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 09:39, 5 tebax 2026 (UTC)
{{şirove}} Dewama ''[[Special:PermanentLink/6333688|Gotûbêja bikarhêner:Rewiye tine#WF:Nû]]'' bila gotûbêja wî em spam nekin. :D
{{r|Ghybu}} dikarî [[Special:PermanentLink/6333689|vê htmlê]] binêrî claude rast fêm kiriye yan na? Daxîne û wek html qeyd bike. --[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 18:43, 14 tebax 2026 (UTC)
:Min seh wîkîyên din jî kir, li wîkiya fransî tiştekî wekî daxwaza min çêkirine (tiştên ku ne hewce ne wekî "tab" çêkirine an jî hatine vêşartin): [//fr.wiktionary.org/w/index.php?title=fdsdfdsf&action=edit&redlink=1]. Formata me yê berî jî bi vê lojîkê hatibû çêkirin, wekî de.wiktionary ([//de.wiktionary.org/w/index.php?title=sdfdsfsdfs&action=edit&preload=Vorlage:Formatvorlage_(Substantiv_vereinfacht)]) [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 19:01, 14 tebax 2026 (UTC)
::PS: Dîsa jî Claude min rind fêm kiriye :)) Feqet min got ku beşên Mane", "Bilêvkirin" û "Beşên din" cem hev (wekî "tab") ". Û dema ku tu terê di nav "Besên din" Hevmane, Jê, ... li wira werin dayîn. Wêne/Resim û Nimûne jî di nav beşa ("tab") "Mane" [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 19:17, 14 tebax 2026 (UTC)
::Erê ya fr.wikt min jî dîtibû jixwe fikrê tab min ji wan girtibû :D (feqat min li cem wan tenê tab-a maneyê dît yên din nedît çawa tê vekirin nizanim) Berê hemû beş piştî maneyê bibûn, dûre min sê Tab çêkir, Bingehîn+Lînkkirin+Bikaranîn. Niha lazim e Tabeke din çêkim. Ya ku claude çêkiriye bnr. [[Special:PermanentLink/6333698#L-7]] ne baş e bnr. [[Special:PermanentLink/6333703|qiyaskirinê li ser vê htmlê]] Êdî ez Claude abuse dikime ji ber ku Pro ye :D [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 19:26, 14 tebax 2026 (UTC)
:::Claude dibêje:
:::Good clarification — that's a real simplification, not just a relabel. Updated STEP_GROUPS from 5 tabs down to 3:
:::Mane — the definitions themselves, plus Wêne (image), now grouped in with it instead of sitting in a separate misc tab. Nimûne needed no change since it was already rendering inside each Mane sense block, not as its own step.
:::Bilêvkirin — unchanged, still just pronunciation.
:::Beşên din — everything else in one flat bucket: hevmane, jê, têkildar, herwiha binêre, formên alternatîv, dijmane, jornav, jêrnav, notên bikaranînê, bi alfabeyên din, dûnde, çavkanî, bêhtir bixwîne, tewandin, etîmolojî, zaravayên din, werger, and bnr-h — instead of being split across the old Bingehîn/Lînkkirin/Bikaranîn/Din tabs.
:::No DOM-order changes were needed this time — the fix from the blank-tab bug looks up the tab bar's position dynamically now, so it didn't matter that I regrouped which steps go where. Same two files, saved to your Wiki folder — worth another pass through all three tabs once you've pasted this in, same as last time. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 19:34, 14 tebax 2026 (UTC)
::::Mînak:
Ziman
---------------------------------------------
Cureyê rêzimanî (Navdêr)
Navdêr (hilbijêre) ┆ Cîns (hilbijêre) ┆ Jimar (hilbijêre)
- lêker -mê -yekjimar
- rengdêr -nêr -pirjimar
- ... -... -...
---------------------------------------------
Mane || Bilêvkirin || Beşên din
hilbijêre:
- mane - IPA - Hevmane
- nimûne - kîte - Dijmane
- wêne
Dema ku tu "Cureyê rêzimanî dikî "Lêker" :
Cureyê rêzimanî (Lêker)
Lêker (hilbijêre) ┆ Cure (hilbijêre)
- navdêr -rehê niha
- rengdêr -rehê borî
- ... -...
---------------------------------------------
┆ : "tab" nîne<br>
|| : "tab"
-- [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 19:45, 14 tebax 2026 (UTC)
== [[Mediawiki:Gadget-QQ.js]] ==
Ev amûr di şikle Minerva de. Her daîm vê xeletiyê dide:
<syntaxhighlight lang="js">
TypeError: Cannot read properties of null (reading 'addEventListener') at css () at runScript () at Array.<anonymous> () at flushCssBuffer ()
</syntaxhighlight> [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 19:29, 18 tîrmeh 2026 (UTC)
:* [[Bikarhêner:Wikihez/skrîpt/js/Gadget-QQ.js]] --> [[Mediawiki:Gadget-QQ.js]]
:* [[Bikarhêner:Wikihez/Gadget-QQ.css]] --> [[Mediawiki:Gadget-QQ.css]]
:Ez dibêjim çêbû lê ka çend roj biceribînim. Tiştên ku hatin sererastkirin:
:# Google Books API Key dikarî zêde bikî, dixe cookies û di gerokê de dimîne. Berê bê API Key dixebitiya lê êdî mecbûr e ku API Key-a te hebe, bidestxistina wê ne zêde zor e lê dîsa jî tevlihev e.
:# Êdî di mobîlê de dixebite, heta di mobîlê de xweştir xuya dike.
:# Moda tarî
:# OOUI dewsa jquery.ui
:# Li qutiyê çi dixwazî zêde bikî, dikare li gorî îsm, sifet, fiîl bitewîne. Lê ji bo fiîl tenê dikare çend heb inflection bîne.
:# Butona paqij bike lê zêde kir.
:# Çend paqijiyên jêgirtinên Google Kitêbê niha hene.
:[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 23:38, 18 tîrmeh 2026 (UTC)
::Tewandina fiîlan û xeletiya modulê lazim e were rastkirin. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 14:40, 21 tîrmeh 2026 (UTC)
== [[MediaWiki:Gadget-wikt.add-examples.js]] ==
Min ev amûr hinek rojane kir feqat çend problem hene berî ku bar bikin.
Tiştên ku min guhart:
# Êdî li sayfeyên bi {{ş|maneid}} jî dixebite,
# Cihê di wîkîtekstê de yê ku jêgirtin were îlawekirin baştir bû,
# [[Mediawiki:Gadget-citoid-helper.js|citoid helper]] zêde kir ji bo ku bi hêsanî çavkanî bi riya doi, isbn an urlyê werin tijîkirin.
* [[Bikarhêner:Wikihez/Gadget-wikt.add-examples.css]] --> [[MediaWiki:Gadget-wikt.add-examples.css]]
* [[Bikarhêner:Wikihez/Gadget-wikt.add-examples.js]] --> [[MediaWiki:Gadget-wikt.add-examples.js]]
- --[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 00:50, 19 tîrmeh 2026 (UTC)
:Min "wikt." qismên cache kirinê ya wîkiya fransî bi [[MediaWiki:Gadget-StorageUtils.js]] guhartiye. loma ji bîr nekin wê amûrê li [[MediaWiki:Gadgets-definition]] zêde bikin. û navê amûrê jî biguhêrînin. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 09:15, 23 tîrmeh 2026 (UTC)
::Berê li ser WF:ceribandin dixebitî. niha naxebite. Divê were rastkirin. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 22:10, 7 tebax 2026 (UTC)
== Gadget-translation editor ==
* [[MediaWiki:Gadget-translation editor.js]]: divê formata en.wîktê were bikaranîn ji ber ku me gelek tercime ji en.wîktê kopî kir û ev js hîn nikare formata wekî li jêr bi kar bîne.
<syntaxhighlight lang="wikitext">
* {{Z|sh}}:
*: Kirîlî:
*: Latînî
</syntaxhighlight>
—[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:17, 16 tîrmeh 2026 (UTC)
== [[Mediawiki:Gadget-linkify.js]] ==
* ''rûpeleke'' wekî<syntaxhighlight lang="wikitext">[[rûpeleke]]</syntaxhighlight> lînk dike, bi regexê belkî dikare wisa bike <syntaxhighlight lang="wikitext">[[rûpel]]eke</syntaxhighlight>
—[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:17, 16 tîrmeh 2026 (UTC)
* Amûreke din wekî [[User:Wikihez/Gadget-linkify.js|linkify]] lazim e ku herfên mezin biçûk bike ji bo kurmancî.—[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:17, 16 tîrmeh 2026 (UTC)
:{{r|Bikarhêner}} Merheba bira, dikarî viya jî bar bikî?:
* [[Special:PermanentLink/6291974|linkify]] --> [[Mediawiki:Gadget-linkify.js]]
Spas--[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 11:42, 29 tîrmeh 2026 (UTC)
:Dûre [https://ku.wiktionary.org/wiki/MediaWiki:Gadget-start.js#L-283 li vir] wiktviLinkify bike kuLinkify xêra xwe [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 11:51, 29 tîrmeh 2026 (UTC)
::Min ji bîr kir lê zêde bikim niha nikare "Dİ" bike "di", xeletiyeke berbelav a di nivîsên kurdî de, herfên din ên wekî ll yan rr jî hewce ne werin zêdekirin. Dûre em zêde bikin. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 21:42, 29 tîrmeh 2026 (UTC)
:::Min nû ferq kir, sayfeyên ku hîn nehatine çêkirin wîkîlînk nake. Problemeke mezin e divê were rastkirin. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 18:15, 30 tîrmeh 2026 (UTC)
::::Na, lînk dike, tiştekî din heye... [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 10:49, 31 tîrmeh 2026 (UTC)
== Amûra manayê ==
Amûreke din ji bo nivîsina maneyê wekî Nimûne zêde bike lazim e [https://ku.wiktionary.org/w/index.php?title=Bikarh%C3%AAner:Wikihez/test.js&oldid=6276876 js] [https://ku.wiktionary.org/w/index.php?title=%C5%9Eablon:ceribandin2&oldid=6265629 şablon] [https://ku.wiktionary.org/w/index.php?title=Bikarh%C3%AAner:Wikihez/common.css&oldid=6265642 css] --[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 09:12, 23 tîrmeh 2026 (UTC)
== [[MediaWiki:Gadget-jeder.js]] ==
@[[Bikarhêner:Ghybu|Ghybu]] Çavkaniyên jêderê di moda pêşdîtinê de jêderê vedişêre, ew jî min gelek eciz dike wextê çavkanî zêde dikim. Min ji Claude pirsî û kodan nîşanî wê da, wisa cewab da:
Yes — and this file actually explains the whole thing precisely, better than my earlier guess about extract-stripping.
What's happening: the CSS rule
<syntaxhighlight lang="css">
.jeder{
display:none;
}
</syntaxhighlight>
hides every citation by default, *unconditionally*. The only thing that ever makes it visible again is the gadget's JS: it finds each `.jeder`, builds the short "`— (year, author, +)`" summary from the `.j-pewist` fields, and either reveals the short version or — for citations with no `.j-pewist` fields — explicitly sets `display:inline` on the original.
So visibility of citations depends entirely on this JS running. In the normal article view (Image 1) it runs, so you see the collapsed "`(1918, E. Rehmî Ji Mala Hekariyan, Amadekar: M. E. Bozarslan, +)`" form. In whatever generated Image 2 — a hover-preview/extract/API render — gadget JS doesn't execute, so nothing ever removes the `display:none`, and the citation vanishes completely rather than degrading to "still visible, just not collapsed."
<b>The fix:</b> flip the default so the *un-collapsed* state is the safe fallback, and let JS do the hiding only after it successfully builds the short version. That way, any context without JS shows the full citation instead of nothing.
CSS — remove the blanket hide:
<syntaxhighlight lang="css">
.jeder {
/* intentionally no display:none here — see Gadget-... .js */
}
</syntaxhighlight>
JS — do the hiding from script, after the short form exists:
{{veşêre-ser}}
<syntaxhighlight lang="js">
// Ji bo şablonên [[Şablon:jêder]] hatiye nivîsandin.
// Parametreyên ku di navbera "<span class="j-pewist">...</span>" an "{{j-pêwîst|...}}" de ne venaşêre.
$(function() {
function nivisaKurtTevliBike(sund, nivisKurt) {
var zede = $('<a>+</a>')
.addClass('click')
.attr('href', '#')
.attr('title', 'zêdetir')
.css('font-weight', 'bold');
var kurt = $(' <a>↩</a>')
.addClass('click-kurt')
.attr('href', '#')
.attr('title', 'veşêre')
.css('font-weight', 'bold');
$('<span>' + nivisKurt + '</span>')
.append(zede).append(')')
.addClass('jeder-kurt')
.css('font-size', '0.85em')
.insertAfter(sund);
sund.append(' ').append(kurt);
// Only hide the full citation once the short summary actually exists.
// If this script never runs (no-JS clients, hover-preview extracts,
// action=render, etc.), the full citation stays visible instead of
// silently disappearing.
sund.css('display', 'none');
}
function vesere() {
$('.jeder').each(function() {
var elmTab = $(this).find('.j-pewist').clone();
if (elmTab.length) {
var elm = '';
for (var i = elmTab.length - 1; i >= 0; i--) {
elm = elmTab.eq(i).html() + ', ' + elm;
}
var nivisKurt = ' — (' + elm;
nivisaKurtTevliBike($(this), nivisKurt);
}
// else: no j-pewist fields to shorten — leave the full citation
// as it already renders (visible), nothing to do.
});
}
vesere();
$(".click").click(function(e) {
e.preventDefault();
$(this).parent('.jeder-kurt').css('display', 'none');
$(this).parent('.jeder-kurt').prev().css('display', 'inline');
});
$(".click-kurt").click(function(e) {
e.preventDefault();
$(this).parent('.jeder').css('display', 'none');
$(this).parent('.jeder').next().css('display', 'inline');
});
});
</syntaxhighlight>
Net effect:
- JS-enabled readers (normal article view): identical experience to today — collapsed short form with `+`/`↩` toggle.
- No-JS contexts (previews, extracts, screen readers before JS loads, print, etc.): full citation is shown instead of nothing — a real regression fix rather than a cosmetic one.
One caveat worth being upfront about: this fixes it *if* the preview context renders the gadget's HTML/CSS but doesn't execute gadget JS (which is the far more common case, and what this code strongly suggests is happening). If Image 2 instead comes from a pipeline that strips the `.jeder`/`.jegirtin-text` elements out of the HTML entirely before this CSS/JS even gets a chance to apply, no on-wiki CSS/JS change can help — that'd need the extract-generation config changed instead. Given what this gadget file shows, though, I'd bet on the CSS-hide explanation.
{{veşêre-bin}}
Em dûre biceribînin eger xeletî tinebe, vî tiştî jî rast bikin. --[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 20:00, 23 tîrmeh 2026 (UTC)
:Ez APIya MediaWiki rind nizanim belkî Claude dizane:) Em nikarin bibêjin dema ku moda "''action=edit''" e fonksiyona <code>function vesere()</code> bi kar meyîne. [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 15:57, 24 tîrmeh 2026 (UTC)
::Na, di moda "edît"-ê de <code>var elmTab = null</code>... [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 16:13, 24 tîrmeh 2026 (UTC)
?:
<syntaxhighlight lang="js">
if (
mw.config.get('wgAction') === 'edit' ||
mw.config.get('wgAction') === 'submit'
){
var elmTab = [];
} else {
var elmTab = $(this).find('.j-pewist').clone();
}
</syntaxhighlight>
--[[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 16:31, 24 tîrmeh 2026 (UTC)
:Ez jî nizanim Claude çiqas ji mediawiki fêm dike lê heta niha ti tişt nîne ku min jê pirs kir û nikaribû çêke, bila wekî reklam nebe feqat Claude mikemmel e, dibêjim "li vir çima xeletiyeke wisa derdikeve" di dosyeya 2000 rêzî de diçe tiştê xelet tenê rast dike tiştekî din naguherîne. Chatgpt û aistudio qet wisa nakin, eynî dosyeyê deh cara dinivîsin, deh netîceyên cuda derdikevin :D
:Em dikarin vê amûrê wextê edit û submitê neaktîv bikin wekî <syntaxhighlight lang="js">if (!(action === "edit" || action === "submit")) {
:return;</syntaxhighlight> lê wê demê display:none wê çibe nizanim. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 18:23, 24 tîrmeh 2026 (UTC)
::display:none ne hewce ye ma jixwe di nav kodê [https://ku.wiktionary.org/w/index.php?title=MediaWiki:Gadget-jeder.js&oldid=6069025#L-49 L-49] de inline/none heye? [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 18:53, 24 tîrmeh 2026 (UTC)
:Min bi vî şiklî [https://ku.wiktionary.org/w/index.php?title=Bikarh%C3%AAner:Wikihez/vector-2022.js&diff=prev&oldid=6290816#L-28] ceriband feqat nexebitî. "display:none" di pêşdîtinê de dixebite feqat js naşixule. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 14:43, 25 tîrmeh 2026 (UTC)
::Kodên JSê pir hez nakim (pêşta hukurina APIya MWyê hewce bû) dîsa jî ez ê seh bikim :) [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 16:49, 27 tîrmeh 2026 (UTC)
:::Ez niha bi vî şiklî [https://ku.wiktionary.org/w/index.php?title=Bikarh%C3%AAner:Wikihez/test.js&oldid=6290820] [https://ku.wiktionary.org/w/index.php?title=Bikarh%C3%AAner:Wikihez/common.css&oldid=6290821#L-8] bi kar tînim ti problem nîne. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 17:09, 27 tîrmeh 2026 (UTC)
== [[MediaWiki:Gadget-PagePreviews.js]] ==
Ez dibêjim em vê amûrê jî çêkin [[:en:MediaWiki:Gadget-PagePreviews.js]] --[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 10:56, 3 tebax 2026 (UTC)
= Moda tarî =
== [[Şablon:wîkîpediya]] ==
Rengê tarî de xirab e.--[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 19:36, 4 tebax 2026 (UTC)
= Bot =
Karên ku bi botê werin çêkirin ji kerema xwe li vir binivîsin.
== Kategorî:Biwêj ==
[[:Kategorî:Biwêj]] divê were paqijkirin, lîsteya madeyên {{ş|biwêj}} çêke, yên ku tê de bûn, kirin, man hene filtre bike yên din bi destî tê çêkirin.—[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:17, 16 tîrmeh 2026 (UTC)
== Jêgirtin ==
Xistina jêgirtinên beşa [https://ku.wiktionary.org/w/index.php?search=insource%3A%2F%3D+*Ji+%5BWw%5D%C3%AAjey%C3%AA+*%3D%2F&title=Taybet%3AL%C3%AAger%C3%AEn&profile=advanced&fulltext=1&ns0=1&searchToken=8rh0bmw8dccsi7aynl6zli8uf ji wêjeyê] li beşa maneyê. —[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:17, 16 tîrmeh 2026 (UTC)
== Bota Toolforgeê ==
Botekî Toolforgeê lazim e ji bo ku xeletiyên biçûk wekî şablonên bi navên îngilîzî werin kurdîkirin yan jî valahiya beşan rast bike û hwd.—[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:17, 16 tîrmeh 2026 (UTC)
:Min [[Bikarhêner:Wikihez/skrîpt/py/kuwiktkozmetik.py|paqijiyen kozmetîk]] hazir kir feqat hîn navên şablonan naguhêre. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 20:05, 4 tebax 2026 (UTC)
== Updatew ==
Bota [[Bikarhêner:Wikihez/skrîpt/py/updateW.py|updateW]] divê were rojanekirin. Yan jî yekî nû were çêkirin. Şablonên {{ş|W}} di beşa tercimeyan de sererast dike û zimanan rêz dike. Ya niha xeletiya navê zimanî dide.—[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:17, 16 tîrmeh 2026 (UTC)
== sihir --> sêhr ==
Tercimeyên ''[[sêhr]]'' hemû dibêje ''sihir'' loma bi botê lazim e kirin ''sêhr''. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 17:43, 18 tîrmeh 2026 (UTC)
:Sihirbaz --> sêhrbaz [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 18:07, 18 tîrmeh 2026 (UTC)
== Tercimeyên dîroknas ==
Li tercimeyên [[dîroknas]], hevmaneyên wê hewce ye were îlawekirin. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 18:44, 18 tîrmeh 2026 (UTC)
== Mewlûd ==
Sererastkirina jêgirtinên mewlûdê [https://ku.wiktionary.org/w/index.php?search=insource%3A%2Fw%5C%3AMela+His%C3%AAn%C3%AA+Batey%C3%AE%2F&title=Taybet%3AL%C3%AAger%C3%AEn&ns0=1&searchToken=8m0tguy3sqt7edr4sg0u8hedo] wekî [https://ku.wiktionary.org/w/index.php?title=dax%C3%AEdar&curid=284303&diff=6265851&oldid=6142285] [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 09:43, 20 tîrmeh 2026 (UTC)
1qz93fj2tl88161x1hxw8n1w3obnwvb
6333724
6333722
2026-08-14T20:10:04Z
Ghybu
1393
/* MediaWiki:Gadget-start.js */
6333724
wikitext
text/x-wiki
{{/ser}}
= Karên ferhengî =
== Mane ==
* [[:Kategorî:Madeyên bê beşa mane]]
** [[:Kategorî:Madeyên bê beşa mane bi kurmancî]]
Li ser van rûpelan ev made hene ku maneyan wan nehatine nivîsin û divê werin nivîsin. —[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:17, 16 tîrmeh 2026 (UTC)
== Etîmolojî ==
*[[:Kategorî:Daxwazên etîmolojiyê]]
**[[:Kategorî:Daxwazên etîmolojiyê bi kurmancî]]
Li ser van rûpelan ev made hene ku etîmolojiya wan hîn nehatine nivîsin. Ji bo alîkariyê binêre [[WF:Etîmolojî]] —[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:17, 16 tîrmeh 2026 (UTC)
== Cureyê rêzimanî ==
* [[:Kategorî:Gotarên bê kategoriya rêzimanî]]
* [[:Kategorî:Gotarên bê kategoriya rêzimanî bi kurmancî]]
Li ser van rûpelan ev made hene ku cureyên wan yên rêzimanî hîn nehatine nivîsin. Ji bo alîkariyê binêre [[Alîkarî:Cureyên peyvan]] —[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:17, 16 tîrmeh 2026 (UTC)
== Kontrol ==
* [[:Kategorî:Kontrol]]
** [[:Kategorî:Kontrola maneyê]]
Ev madde bi botê hatine çêkirin, yek bi yek divê werin kontrolkirin. —[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:17, 16 tîrmeh 2026 (UTC)
= Şablon =
== IPA ==
* {{ş|IPA}} divê [[Modul:IPA]] bi kar bîne. —[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:17, 16 tîrmeh 2026 (UTC)
== Deng ==
Kurdîkirina belgekirina {{ş|deng}} lazim e.--[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 00:06, 19 tîrmeh 2026 (UTC)
= Modul =
== Modul:form of/templates ==
* [[Modul:form of/templates]]: Divê ev modul were rojanekirin û xeletiyên berê wekî ([[hevalê]]) werin rastkirin. —[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:17, 16 tîrmeh 2026 (UTC)
*:Merheba @[[Bikarhêner:Ghybu|Ghybu]] Te gotibû di vê modulê de xeletî hene, jkx tu dikarî li vir binivîsî çi kêmasî hene, daku wextê rojane dikim ez ji bîr nekim? [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:16, 21 tîrmeh 2026 (UTC)
*::Silav. Nizanim ji bîra min çûye... Herwiha ji bo çêkirina formên navdêran zanînên cîns û tîpa dawî bes e:
*::* (-ê, mê) => çemandî, bangkirin
*::* (-ê, nêr) => îzafe
*::* (-ê, mê û nêr) => îzafe (nêr), bangkirin (mê), çemandî (mê)
*::* (-a) => îzafe (mê)
*::* (-ekî) => îzafe û çemandî (nêr, nebinavkirî)
*::* (-eke) = > îzafe (mê, nebinavkirî)
*::* ...
*:: <code>if find(mw.title.getCurrentTitle().subpageText, 'ekî$') then ... end</code>
*::<code><nowiki>{{ku-tewîn-navForm|<navdêr>|<zayend>}</nowiki></code>
*::Tablo û nivîs di yekcarî de tên çêkirin...
*::Feqet problem lêzêdekirina mînakan e. [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 17:34, 21 tîrmeh 2026 (UTC)
*:::Lêzêdekirina kîjan nimûneyan? Ev koda js ji bo çi ye? Qisûrê nenêre min fêm nekir :/ [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 18:13, 21 tîrmeh 2026 (UTC)
*::::Li vira ([[hevalê#Formeke navdêrê]]) di bin maneyên 1. û 2. mînak nayên tevlî kirin :) [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 18:18, 21 tîrmeh 2026 (UTC)
*:::::Ev tercîh e, ne mecbûrî ye, em dikarin [https://ku.wiktionary.org/w/index.php?title=heval%C3%AA&diff=prev&oldid=6276350 wisa] bikin. Wekî din? [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 18:29, 21 tîrmeh 2026 (UTC)
*::::::Min li jor tênê got ku tenê parametreyên "navdêr" û "zayend" hewce nee. Bi '''[//ku.wiktionary.org/w/index.php?title=heval%C3%AA&curid=969734&diff=6276353&oldid=6276350 vî]''' awayî jî tê çêkirin. Parametreyên din ne hewce ne. [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 18:38, 21 tîrmeh 2026 (UTC)
*:::::::Ji bo wê şabloneke din lazim e, bila ev şablon wekî îngilîzî bimîne em ji bo kurmancî yekî din çêkin. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 18:42, 21 tîrmeh 2026 (UTC)
*::::::::[https://ku.wiktionary.org/w/index.php?title=heval%C3%AA&oldid=6276885 wisa] çawa ye? Bi min nivîsîna nimûneyan zêde ne lazim e ji ber ku ti kes serê xwe pê naêşîne. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 09:46, 23 tîrmeh 2026 (UTC)
*:::::::::@[[Bikarhêner:Ghybu|Ghybu]] Vê şablonê bi kar bînin an na? Navê şablonê kê çi be? [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 19:07, 24 tîrmeh 2026 (UTC)
== Modul:columns ==
* [[Modul:columns]] were rojanekirin û {{ş|kol3}} bila lînka ''nîşan bide'' deyne beriya sernavê, kolê di qutiya rengî de bila nebe. —[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:17, 16 tîrmeh 2026 (UTC)
== Modul:etymon ==
* [[Modul:etymon kevn]]: Rojanekirin hewce ye. —[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:17, 16 tîrmeh 2026 (UTC)
== [[Modul:ziman/code to canonical name]] ==
Belgekirina skrîptê û js divê were rastkirin. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 09:31, 22 tîrmeh 2026 (UTC)
:* [[MediaWiki:UpdateLanguageNameAndCode.js]]
:[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 09:50, 22 tîrmeh 2026 (UTC)
::* [[Modul:ziman/print]]
::[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 09:52, 22 tîrmeh 2026 (UTC)
:::*[[Modul:ziman/şablon]]
:::[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 09:56, 22 tîrmeh 2026 (UTC)
::::* [[MediaWiki:Gadget-translation editor.js/ziman.json]]
::::[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 11:06, 22 tîrmeh 2026 (UTC)
== [[Modul:quote]] ==
Piştî ev modul hate hazirkirin, lazim e navên jegirtinan werin rastkirin û li hemûyan {{param|jêgirtin}} were zêdekirin. Bnr. [[Gotûbêja şablonê:Jêgirtin/Ehmedê Xanî/Mem û Zîn]] [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 22:27, 5 tebax 2026 (UTC)
::Ev modul hema bêje hazir e. Hûn li ser van madeyan çi difikirin:
# {{para|tarîx}} lazim e full date be eger na, lazim e {{para|sal}} were bikaranîn. Feqat "'''2021''' kanûna pêşîn 23" bi vî şiklî bi min ne problem e çnkî derdê en.wikt "attestation" e delîla herî pêşî jî sal e.
#: {{demo|sep=wisa xuya dibe<br>|<nowiki>{{jêder-kitêb/ceribandin|en
|tarîx=23 December 2021|nivîskar=Harry Hobbs; George Williams|sernav=Micronations and the Search for Sovereignty|url=https://www.cambridge.org/core/books/micronations-and-the-search-for-sovereignty/B0414A3A322695D9EE71E4CDDFDA06DE|weşanxane=Cambridge University Press|rûpel=155|isbn=978-1-009-15012-5|jêgirtin=jêgirtin.|t=-}}</nowiki>}}
#{{para|amadekar}}/{{para|edîtor}}/{{para|terciman}} bi şiklê edîtoriya, amadekariya, tercimekirina
#: {{demo|sep=dide<br>|<nowiki>{{jêder-kitêb/ceribandin|en
|sernav=Medical Surgical Nursing|serî=Juta's Manual of Nursing|cildê-seriyê=volume 4|edîtor=Sophie Mataniele Mogotlane; Joyce Mokoena; Motshedisi Eunice Chauke; Anne Young|sal=2005|weşanxane=Juta Academic|isbn=978-0702171840|rûpel=!12-29|jêgirtin=jêgirtin|t=-}}</nowiki>}}
--[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 13:09, 10 tebax 2026 (UTC)
:@[[Bikarhêner:Bikarhêner|Bikarhêner]] û @[[Bikarhêner:Ghybu|Ghybu]] Hîn gelek tişt hene divê îzah bikin û fikrê we pirs bikim, feqat îzahkirin pir zor e, em dest bi bikaranînê bikin û dûre tiştên ku hûn naxwazin em dikarin biguherînîn, dibe? [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 13:11, 10 tebax 2026 (UTC)
::Dibe, piştî çêbû, em di praktîkê de bibînin ku çawa ye. -- [[Bikarhêner:Bikarhêner|Bikarhêner]] ([[Gotûbêja bikarhêner:Bikarhêner|gotûbêj]]) 18:05, 10 tebax 2026 (UTC)
= Javascript =
== [[Mediawiki:Gadget-citoid-helper.js]] ==
Ji bo bi citoidê kopîkirina malûmatên çavkaniyan amûreke wisa lazim e. Xisûsen ji ber ku bi çend amûrên din dikare were bikaranîn.
Feqat çend problem hene, şablonên me de kêmasiya parametreyan gelek in û xerîteyên citoidê hîn nehatine çêkirin. Wana sererast bikin dûre vê amûrê çêkin, piştre [[MediaWiki:Gadget-start.js|start.js]] û [[MediaWiki:Gadget-wikt.add-examples.js|add examples.js]] were rojanekirin.
- --[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 00:04, 19 tîrmeh 2026 (UTC)
:Merheba @[[Bikarhêner:Bikarhêner|Bikarhêner]], ez dibêjim karê Modul:quote zêde wext bistîne, bila em dest bi bikaranîna van amûran bikin dûre kêmasiyan em ê temam bikin înşela. Dikarî vana li cihên xwe yên rast kopî paste bikî?
# [[Special:PermanentLink/6291574|Bikarhêner:Wikihez/skrîpt/js/Gadget-citoid-helper.js]] --> [[Mediawiki:Gadget-citoid-helper.js]]
# Ya li jêr kopî bike qismê herî dawî ya AmûrênVeşartî li [[MediaWiki:Gadgets-definition]]:
## <code><nowiki>* citoid-helper[ResourceLoader|hidden|default|dependencies=mediawiki.util]|citoid-helper.js</nowiki></code>
--[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:58, 26 tîrmeh 2026 (UTC)
== [[MediaWiki:Gadget-start.js]] ==
Rojanekirin hewce ye. Min gelek tişt lê zêde kir lê ez niha test dikime. Piştre em bar bikin:
* [[Bikarhêner:Wikihez/Gadget-start.js]] --> [[MediaWiki:Gadget-start.js]]
* [[Bikarhêner:Wikihez/Gadget-start.css]] --> [[MediaWiki:Gadget-start.css]]
--[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 22:08, 17 tîrmeh 2026 (UTC)
:Min [[MediaWiki:Gadget-start/data.json|data.json]] çêkir ji bo ku bi hêsanî malûmatên heyî werin guhartin bêyî guhartina Javascriptê. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 19:49, 18 tîrmeh 2026 (UTC)
:Xeletiyên ku ji bîr nekim rast bikim:
:* Wextê min çavkanî "kitêb" hilbijart û bi destî tije kir xeletiyeke [https://ku.wiktionary.org/w/index.php?title=xezete&diff=prev&oldid=6265392 wisa] derket her kelîme hate lînkkirin.
:* <code>html("⠿")</code> ev ne lazim e.
:* textarea ji bo çavkaniyên jêgirtinan xaseten yên sernav hîn jî ne draggable e.
:* pêşdîtina zindî checkbox wextê tê rakirin, pêşdîtin winda nabe.
:* Butona mobîlê ya vekirina formê di moda tarî de belî nabe, tenê wekî qutiyeke tarî xuya dibe.
:* Metna hişyarkirinê di guhartina rûpelên heyî de lazim e baştir bikim.
:[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 23:51, 18 tîrmeh 2026 (UTC)
::Ev problem çêbûn, ez ê binêrim ka çi problemên din hene. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 14:15, 19 tîrmeh 2026 (UTC)
:::Çêke: Ji bo qismê çavkaniyê yek dikare API call û Kategorî:Çavkanî bi kar bîne ji bo ku şablon zêde bikî ji yên heyî. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 21:21, 19 tîrmeh 2026 (UTC)
::::Ev jî çêbû, min beşa çavkanî jî çêkir. Eger xeletî dernekeve û problema valahiya piştî etîketê ji bîr nekim, piştî rojanekirina amûrên linkify, û citoid em dikarin bar bikin. Ez ê ti tiştê nû îlawe nekim, zêde dirêj bû. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:14, 21 tîrmeh 2026 (UTC)
:::::Merheba @[[Bikarhêner:Bikarhêner|Bikarhêner]]. Dikarî wana bar bikî?
:::::* [[Bikarhêner:Wikihez/Gadget-start.js]] --> [[MediaWiki:Gadget-start.js]]
:::::* [[Bikarhêner:Wikihez/Gadget-start.css]] --> [[MediaWiki:Gadget-start.css]]
:::::* [[MediaWiki:Gadgets-definition]] wisa rojane bike:
:::::* start[ResourceLoader|default|package|dependencies=mediawiki.util,ext.gadget.StorageUtils,ext.gadget.citoid-helper]|start.js|start.css|start.js/data.json
:::::[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 09:39, 5 tebax 2026 (UTC)
{{şirove}} Dewama ''[[Special:PermanentLink/6333688|Gotûbêja bikarhêner:Rewiye tine#WF:Nû]]'' bila gotûbêja wî em spam nekin. :D
{{r|Ghybu}} dikarî [[Special:PermanentLink/6333689|vê htmlê]] binêrî claude rast fêm kiriye yan na? Daxîne û wek html qeyd bike. --[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 18:43, 14 tebax 2026 (UTC)
:Min seh wîkîyên din jî kir, li wîkiya fransî tiştekî wekî daxwaza min çêkirine (tiştên ku ne hewce ne wekî "tab" çêkirine an jî hatine vêşartin): [//fr.wiktionary.org/w/index.php?title=fdsdfdsf&action=edit&redlink=1]. Formata me yê berî jî bi vê lojîkê hatibû çêkirin, wekî de.wiktionary ([//de.wiktionary.org/w/index.php?title=sdfdsfsdfs&action=edit&preload=Vorlage:Formatvorlage_(Substantiv_vereinfacht)]) [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 19:01, 14 tebax 2026 (UTC)
::PS: Dîsa jî Claude min rind fêm kiriye :)) Feqet min got ku beşên Mane", "Bilêvkirin" û "Beşên din" cem hev (wekî "tab") ". Û dema ku tu terê di nav "Besên din" Hevmane, Jê, ... li wira werin dayîn. Wêne/Resim û Nimûne jî di nav beşa ("tab") "Mane" [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 19:17, 14 tebax 2026 (UTC)
::Erê ya fr.wikt min jî dîtibû jixwe fikrê tab min ji wan girtibû :D (feqat min li cem wan tenê tab-a maneyê dît yên din nedît çawa tê vekirin nizanim) Berê hemû beş piştî maneyê bibûn, dûre min sê Tab çêkir, Bingehîn+Lînkkirin+Bikaranîn. Niha lazim e Tabeke din çêkim. Ya ku claude çêkiriye bnr. [[Special:PermanentLink/6333698#L-7]] ne baş e bnr. [[Special:PermanentLink/6333703|qiyaskirinê li ser vê htmlê]] Êdî ez Claude abuse dikime ji ber ku Pro ye :D [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 19:26, 14 tebax 2026 (UTC)
:::Claude dibêje:
:::Good clarification — that's a real simplification, not just a relabel. Updated STEP_GROUPS from 5 tabs down to 3:
:::Mane — the definitions themselves, plus Wêne (image), now grouped in with it instead of sitting in a separate misc tab. Nimûne needed no change since it was already rendering inside each Mane sense block, not as its own step.
:::Bilêvkirin — unchanged, still just pronunciation.
:::Beşên din — everything else in one flat bucket: hevmane, jê, têkildar, herwiha binêre, formên alternatîv, dijmane, jornav, jêrnav, notên bikaranînê, bi alfabeyên din, dûnde, çavkanî, bêhtir bixwîne, tewandin, etîmolojî, zaravayên din, werger, and bnr-h — instead of being split across the old Bingehîn/Lînkkirin/Bikaranîn/Din tabs.
:::No DOM-order changes were needed this time — the fix from the blank-tab bug looks up the tab bar's position dynamically now, so it didn't matter that I regrouped which steps go where. Same two files, saved to your Wiki folder — worth another pass through all three tabs once you've pasted this in, same as last time. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 19:34, 14 tebax 2026 (UTC)
::::Mînak:
Ziman
---------------------------------------------
Cureyê rêzimanî (Navdêr)
Navdêr (hilbijêre) ┆ Cîns (hilbijêre) ┆ Jimar (hilbijêre)
- lêker -mê -yekjimar
- rengdêr -nêr -pirjimar
- ... -... -...
---------------------------------------------
Mane || Bilêvkirin || Beşên din
hilbijêre:
- mane - IPA - Hevmane
- nimûne - kîte - Dijmane
- wêne
Dema ku tu "Cureyê rêzimanî dikî "Lêker" :
Cureyê rêzimanî (Lêker)
Lêker (hilbijêre) ┆ Cure (hilbijêre)
- navdêr -rehê niha
- rengdêr -rehê borî
- ... -...
---------------------------------------------
┆ : select/option ("tab" nîne, tê dîtin)<br>
|| : "tab"
-- [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 19:45, 14 tebax 2026 (UTC)
== [[Mediawiki:Gadget-QQ.js]] ==
Ev amûr di şikle Minerva de. Her daîm vê xeletiyê dide:
<syntaxhighlight lang="js">
TypeError: Cannot read properties of null (reading 'addEventListener') at css () at runScript () at Array.<anonymous> () at flushCssBuffer ()
</syntaxhighlight> [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 19:29, 18 tîrmeh 2026 (UTC)
:* [[Bikarhêner:Wikihez/skrîpt/js/Gadget-QQ.js]] --> [[Mediawiki:Gadget-QQ.js]]
:* [[Bikarhêner:Wikihez/Gadget-QQ.css]] --> [[Mediawiki:Gadget-QQ.css]]
:Ez dibêjim çêbû lê ka çend roj biceribînim. Tiştên ku hatin sererastkirin:
:# Google Books API Key dikarî zêde bikî, dixe cookies û di gerokê de dimîne. Berê bê API Key dixebitiya lê êdî mecbûr e ku API Key-a te hebe, bidestxistina wê ne zêde zor e lê dîsa jî tevlihev e.
:# Êdî di mobîlê de dixebite, heta di mobîlê de xweştir xuya dike.
:# Moda tarî
:# OOUI dewsa jquery.ui
:# Li qutiyê çi dixwazî zêde bikî, dikare li gorî îsm, sifet, fiîl bitewîne. Lê ji bo fiîl tenê dikare çend heb inflection bîne.
:# Butona paqij bike lê zêde kir.
:# Çend paqijiyên jêgirtinên Google Kitêbê niha hene.
:[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 23:38, 18 tîrmeh 2026 (UTC)
::Tewandina fiîlan û xeletiya modulê lazim e were rastkirin. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 14:40, 21 tîrmeh 2026 (UTC)
== [[MediaWiki:Gadget-wikt.add-examples.js]] ==
Min ev amûr hinek rojane kir feqat çend problem hene berî ku bar bikin.
Tiştên ku min guhart:
# Êdî li sayfeyên bi {{ş|maneid}} jî dixebite,
# Cihê di wîkîtekstê de yê ku jêgirtin were îlawekirin baştir bû,
# [[Mediawiki:Gadget-citoid-helper.js|citoid helper]] zêde kir ji bo ku bi hêsanî çavkanî bi riya doi, isbn an urlyê werin tijîkirin.
* [[Bikarhêner:Wikihez/Gadget-wikt.add-examples.css]] --> [[MediaWiki:Gadget-wikt.add-examples.css]]
* [[Bikarhêner:Wikihez/Gadget-wikt.add-examples.js]] --> [[MediaWiki:Gadget-wikt.add-examples.js]]
- --[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 00:50, 19 tîrmeh 2026 (UTC)
:Min "wikt." qismên cache kirinê ya wîkiya fransî bi [[MediaWiki:Gadget-StorageUtils.js]] guhartiye. loma ji bîr nekin wê amûrê li [[MediaWiki:Gadgets-definition]] zêde bikin. û navê amûrê jî biguhêrînin. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 09:15, 23 tîrmeh 2026 (UTC)
::Berê li ser WF:ceribandin dixebitî. niha naxebite. Divê were rastkirin. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 22:10, 7 tebax 2026 (UTC)
== Gadget-translation editor ==
* [[MediaWiki:Gadget-translation editor.js]]: divê formata en.wîktê were bikaranîn ji ber ku me gelek tercime ji en.wîktê kopî kir û ev js hîn nikare formata wekî li jêr bi kar bîne.
<syntaxhighlight lang="wikitext">
* {{Z|sh}}:
*: Kirîlî:
*: Latînî
</syntaxhighlight>
—[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:17, 16 tîrmeh 2026 (UTC)
== [[Mediawiki:Gadget-linkify.js]] ==
* ''rûpeleke'' wekî<syntaxhighlight lang="wikitext">[[rûpeleke]]</syntaxhighlight> lînk dike, bi regexê belkî dikare wisa bike <syntaxhighlight lang="wikitext">[[rûpel]]eke</syntaxhighlight>
—[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:17, 16 tîrmeh 2026 (UTC)
* Amûreke din wekî [[User:Wikihez/Gadget-linkify.js|linkify]] lazim e ku herfên mezin biçûk bike ji bo kurmancî.—[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:17, 16 tîrmeh 2026 (UTC)
:{{r|Bikarhêner}} Merheba bira, dikarî viya jî bar bikî?:
* [[Special:PermanentLink/6291974|linkify]] --> [[Mediawiki:Gadget-linkify.js]]
Spas--[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 11:42, 29 tîrmeh 2026 (UTC)
:Dûre [https://ku.wiktionary.org/wiki/MediaWiki:Gadget-start.js#L-283 li vir] wiktviLinkify bike kuLinkify xêra xwe [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 11:51, 29 tîrmeh 2026 (UTC)
::Min ji bîr kir lê zêde bikim niha nikare "Dİ" bike "di", xeletiyeke berbelav a di nivîsên kurdî de, herfên din ên wekî ll yan rr jî hewce ne werin zêdekirin. Dûre em zêde bikin. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 21:42, 29 tîrmeh 2026 (UTC)
:::Min nû ferq kir, sayfeyên ku hîn nehatine çêkirin wîkîlînk nake. Problemeke mezin e divê were rastkirin. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 18:15, 30 tîrmeh 2026 (UTC)
::::Na, lînk dike, tiştekî din heye... [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 10:49, 31 tîrmeh 2026 (UTC)
== Amûra manayê ==
Amûreke din ji bo nivîsina maneyê wekî Nimûne zêde bike lazim e [https://ku.wiktionary.org/w/index.php?title=Bikarh%C3%AAner:Wikihez/test.js&oldid=6276876 js] [https://ku.wiktionary.org/w/index.php?title=%C5%9Eablon:ceribandin2&oldid=6265629 şablon] [https://ku.wiktionary.org/w/index.php?title=Bikarh%C3%AAner:Wikihez/common.css&oldid=6265642 css] --[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 09:12, 23 tîrmeh 2026 (UTC)
== [[MediaWiki:Gadget-jeder.js]] ==
@[[Bikarhêner:Ghybu|Ghybu]] Çavkaniyên jêderê di moda pêşdîtinê de jêderê vedişêre, ew jî min gelek eciz dike wextê çavkanî zêde dikim. Min ji Claude pirsî û kodan nîşanî wê da, wisa cewab da:
Yes — and this file actually explains the whole thing precisely, better than my earlier guess about extract-stripping.
What's happening: the CSS rule
<syntaxhighlight lang="css">
.jeder{
display:none;
}
</syntaxhighlight>
hides every citation by default, *unconditionally*. The only thing that ever makes it visible again is the gadget's JS: it finds each `.jeder`, builds the short "`— (year, author, +)`" summary from the `.j-pewist` fields, and either reveals the short version or — for citations with no `.j-pewist` fields — explicitly sets `display:inline` on the original.
So visibility of citations depends entirely on this JS running. In the normal article view (Image 1) it runs, so you see the collapsed "`(1918, E. Rehmî Ji Mala Hekariyan, Amadekar: M. E. Bozarslan, +)`" form. In whatever generated Image 2 — a hover-preview/extract/API render — gadget JS doesn't execute, so nothing ever removes the `display:none`, and the citation vanishes completely rather than degrading to "still visible, just not collapsed."
<b>The fix:</b> flip the default so the *un-collapsed* state is the safe fallback, and let JS do the hiding only after it successfully builds the short version. That way, any context without JS shows the full citation instead of nothing.
CSS — remove the blanket hide:
<syntaxhighlight lang="css">
.jeder {
/* intentionally no display:none here — see Gadget-... .js */
}
</syntaxhighlight>
JS — do the hiding from script, after the short form exists:
{{veşêre-ser}}
<syntaxhighlight lang="js">
// Ji bo şablonên [[Şablon:jêder]] hatiye nivîsandin.
// Parametreyên ku di navbera "<span class="j-pewist">...</span>" an "{{j-pêwîst|...}}" de ne venaşêre.
$(function() {
function nivisaKurtTevliBike(sund, nivisKurt) {
var zede = $('<a>+</a>')
.addClass('click')
.attr('href', '#')
.attr('title', 'zêdetir')
.css('font-weight', 'bold');
var kurt = $(' <a>↩</a>')
.addClass('click-kurt')
.attr('href', '#')
.attr('title', 'veşêre')
.css('font-weight', 'bold');
$('<span>' + nivisKurt + '</span>')
.append(zede).append(')')
.addClass('jeder-kurt')
.css('font-size', '0.85em')
.insertAfter(sund);
sund.append(' ').append(kurt);
// Only hide the full citation once the short summary actually exists.
// If this script never runs (no-JS clients, hover-preview extracts,
// action=render, etc.), the full citation stays visible instead of
// silently disappearing.
sund.css('display', 'none');
}
function vesere() {
$('.jeder').each(function() {
var elmTab = $(this).find('.j-pewist').clone();
if (elmTab.length) {
var elm = '';
for (var i = elmTab.length - 1; i >= 0; i--) {
elm = elmTab.eq(i).html() + ', ' + elm;
}
var nivisKurt = ' — (' + elm;
nivisaKurtTevliBike($(this), nivisKurt);
}
// else: no j-pewist fields to shorten — leave the full citation
// as it already renders (visible), nothing to do.
});
}
vesere();
$(".click").click(function(e) {
e.preventDefault();
$(this).parent('.jeder-kurt').css('display', 'none');
$(this).parent('.jeder-kurt').prev().css('display', 'inline');
});
$(".click-kurt").click(function(e) {
e.preventDefault();
$(this).parent('.jeder').css('display', 'none');
$(this).parent('.jeder').next().css('display', 'inline');
});
});
</syntaxhighlight>
Net effect:
- JS-enabled readers (normal article view): identical experience to today — collapsed short form with `+`/`↩` toggle.
- No-JS contexts (previews, extracts, screen readers before JS loads, print, etc.): full citation is shown instead of nothing — a real regression fix rather than a cosmetic one.
One caveat worth being upfront about: this fixes it *if* the preview context renders the gadget's HTML/CSS but doesn't execute gadget JS (which is the far more common case, and what this code strongly suggests is happening). If Image 2 instead comes from a pipeline that strips the `.jeder`/`.jegirtin-text` elements out of the HTML entirely before this CSS/JS even gets a chance to apply, no on-wiki CSS/JS change can help — that'd need the extract-generation config changed instead. Given what this gadget file shows, though, I'd bet on the CSS-hide explanation.
{{veşêre-bin}}
Em dûre biceribînin eger xeletî tinebe, vî tiştî jî rast bikin. --[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 20:00, 23 tîrmeh 2026 (UTC)
:Ez APIya MediaWiki rind nizanim belkî Claude dizane:) Em nikarin bibêjin dema ku moda "''action=edit''" e fonksiyona <code>function vesere()</code> bi kar meyîne. [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 15:57, 24 tîrmeh 2026 (UTC)
::Na, di moda "edît"-ê de <code>var elmTab = null</code>... [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 16:13, 24 tîrmeh 2026 (UTC)
?:
<syntaxhighlight lang="js">
if (
mw.config.get('wgAction') === 'edit' ||
mw.config.get('wgAction') === 'submit'
){
var elmTab = [];
} else {
var elmTab = $(this).find('.j-pewist').clone();
}
</syntaxhighlight>
--[[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 16:31, 24 tîrmeh 2026 (UTC)
:Ez jî nizanim Claude çiqas ji mediawiki fêm dike lê heta niha ti tişt nîne ku min jê pirs kir û nikaribû çêke, bila wekî reklam nebe feqat Claude mikemmel e, dibêjim "li vir çima xeletiyeke wisa derdikeve" di dosyeya 2000 rêzî de diçe tiştê xelet tenê rast dike tiştekî din naguherîne. Chatgpt û aistudio qet wisa nakin, eynî dosyeyê deh cara dinivîsin, deh netîceyên cuda derdikevin :D
:Em dikarin vê amûrê wextê edit û submitê neaktîv bikin wekî <syntaxhighlight lang="js">if (!(action === "edit" || action === "submit")) {
:return;</syntaxhighlight> lê wê demê display:none wê çibe nizanim. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 18:23, 24 tîrmeh 2026 (UTC)
::display:none ne hewce ye ma jixwe di nav kodê [https://ku.wiktionary.org/w/index.php?title=MediaWiki:Gadget-jeder.js&oldid=6069025#L-49 L-49] de inline/none heye? [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 18:53, 24 tîrmeh 2026 (UTC)
:Min bi vî şiklî [https://ku.wiktionary.org/w/index.php?title=Bikarh%C3%AAner:Wikihez/vector-2022.js&diff=prev&oldid=6290816#L-28] ceriband feqat nexebitî. "display:none" di pêşdîtinê de dixebite feqat js naşixule. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 14:43, 25 tîrmeh 2026 (UTC)
::Kodên JSê pir hez nakim (pêşta hukurina APIya MWyê hewce bû) dîsa jî ez ê seh bikim :) [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 16:49, 27 tîrmeh 2026 (UTC)
:::Ez niha bi vî şiklî [https://ku.wiktionary.org/w/index.php?title=Bikarh%C3%AAner:Wikihez/test.js&oldid=6290820] [https://ku.wiktionary.org/w/index.php?title=Bikarh%C3%AAner:Wikihez/common.css&oldid=6290821#L-8] bi kar tînim ti problem nîne. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 17:09, 27 tîrmeh 2026 (UTC)
== [[MediaWiki:Gadget-PagePreviews.js]] ==
Ez dibêjim em vê amûrê jî çêkin [[:en:MediaWiki:Gadget-PagePreviews.js]] --[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 10:56, 3 tebax 2026 (UTC)
= Moda tarî =
== [[Şablon:wîkîpediya]] ==
Rengê tarî de xirab e.--[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 19:36, 4 tebax 2026 (UTC)
= Bot =
Karên ku bi botê werin çêkirin ji kerema xwe li vir binivîsin.
== Kategorî:Biwêj ==
[[:Kategorî:Biwêj]] divê were paqijkirin, lîsteya madeyên {{ş|biwêj}} çêke, yên ku tê de bûn, kirin, man hene filtre bike yên din bi destî tê çêkirin.—[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:17, 16 tîrmeh 2026 (UTC)
== Jêgirtin ==
Xistina jêgirtinên beşa [https://ku.wiktionary.org/w/index.php?search=insource%3A%2F%3D+*Ji+%5BWw%5D%C3%AAjey%C3%AA+*%3D%2F&title=Taybet%3AL%C3%AAger%C3%AEn&profile=advanced&fulltext=1&ns0=1&searchToken=8rh0bmw8dccsi7aynl6zli8uf ji wêjeyê] li beşa maneyê. —[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:17, 16 tîrmeh 2026 (UTC)
== Bota Toolforgeê ==
Botekî Toolforgeê lazim e ji bo ku xeletiyên biçûk wekî şablonên bi navên îngilîzî werin kurdîkirin yan jî valahiya beşan rast bike û hwd.—[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:17, 16 tîrmeh 2026 (UTC)
:Min [[Bikarhêner:Wikihez/skrîpt/py/kuwiktkozmetik.py|paqijiyen kozmetîk]] hazir kir feqat hîn navên şablonan naguhêre. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 20:05, 4 tebax 2026 (UTC)
== Updatew ==
Bota [[Bikarhêner:Wikihez/skrîpt/py/updateW.py|updateW]] divê were rojanekirin. Yan jî yekî nû were çêkirin. Şablonên {{ş|W}} di beşa tercimeyan de sererast dike û zimanan rêz dike. Ya niha xeletiya navê zimanî dide.—[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:17, 16 tîrmeh 2026 (UTC)
== sihir --> sêhr ==
Tercimeyên ''[[sêhr]]'' hemû dibêje ''sihir'' loma bi botê lazim e kirin ''sêhr''. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 17:43, 18 tîrmeh 2026 (UTC)
:Sihirbaz --> sêhrbaz [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 18:07, 18 tîrmeh 2026 (UTC)
== Tercimeyên dîroknas ==
Li tercimeyên [[dîroknas]], hevmaneyên wê hewce ye were îlawekirin. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 18:44, 18 tîrmeh 2026 (UTC)
== Mewlûd ==
Sererastkirina jêgirtinên mewlûdê [https://ku.wiktionary.org/w/index.php?search=insource%3A%2Fw%5C%3AMela+His%C3%AAn%C3%AA+Batey%C3%AE%2F&title=Taybet%3AL%C3%AAger%C3%AEn&ns0=1&searchToken=8m0tguy3sqt7edr4sg0u8hedo] wekî [https://ku.wiktionary.org/w/index.php?title=dax%C3%AEdar&curid=284303&diff=6265851&oldid=6142285] [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 09:43, 20 tîrmeh 2026 (UTC)
5va4myjc3ckl6uwb8461x4vjdb8pn65
6333726
6333724
2026-08-14T20:14:06Z
Ghybu
1393
/* MediaWiki:Gadget-start.js */
6333726
wikitext
text/x-wiki
{{/ser}}
= Karên ferhengî =
== Mane ==
* [[:Kategorî:Madeyên bê beşa mane]]
** [[:Kategorî:Madeyên bê beşa mane bi kurmancî]]
Li ser van rûpelan ev made hene ku maneyan wan nehatine nivîsin û divê werin nivîsin. —[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:17, 16 tîrmeh 2026 (UTC)
== Etîmolojî ==
*[[:Kategorî:Daxwazên etîmolojiyê]]
**[[:Kategorî:Daxwazên etîmolojiyê bi kurmancî]]
Li ser van rûpelan ev made hene ku etîmolojiya wan hîn nehatine nivîsin. Ji bo alîkariyê binêre [[WF:Etîmolojî]] —[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:17, 16 tîrmeh 2026 (UTC)
== Cureyê rêzimanî ==
* [[:Kategorî:Gotarên bê kategoriya rêzimanî]]
* [[:Kategorî:Gotarên bê kategoriya rêzimanî bi kurmancî]]
Li ser van rûpelan ev made hene ku cureyên wan yên rêzimanî hîn nehatine nivîsin. Ji bo alîkariyê binêre [[Alîkarî:Cureyên peyvan]] —[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:17, 16 tîrmeh 2026 (UTC)
== Kontrol ==
* [[:Kategorî:Kontrol]]
** [[:Kategorî:Kontrola maneyê]]
Ev madde bi botê hatine çêkirin, yek bi yek divê werin kontrolkirin. —[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:17, 16 tîrmeh 2026 (UTC)
= Şablon =
== IPA ==
* {{ş|IPA}} divê [[Modul:IPA]] bi kar bîne. —[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:17, 16 tîrmeh 2026 (UTC)
== Deng ==
Kurdîkirina belgekirina {{ş|deng}} lazim e.--[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 00:06, 19 tîrmeh 2026 (UTC)
= Modul =
== Modul:form of/templates ==
* [[Modul:form of/templates]]: Divê ev modul were rojanekirin û xeletiyên berê wekî ([[hevalê]]) werin rastkirin. —[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:17, 16 tîrmeh 2026 (UTC)
*:Merheba @[[Bikarhêner:Ghybu|Ghybu]] Te gotibû di vê modulê de xeletî hene, jkx tu dikarî li vir binivîsî çi kêmasî hene, daku wextê rojane dikim ez ji bîr nekim? [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:16, 21 tîrmeh 2026 (UTC)
*::Silav. Nizanim ji bîra min çûye... Herwiha ji bo çêkirina formên navdêran zanînên cîns û tîpa dawî bes e:
*::* (-ê, mê) => çemandî, bangkirin
*::* (-ê, nêr) => îzafe
*::* (-ê, mê û nêr) => îzafe (nêr), bangkirin (mê), çemandî (mê)
*::* (-a) => îzafe (mê)
*::* (-ekî) => îzafe û çemandî (nêr, nebinavkirî)
*::* (-eke) = > îzafe (mê, nebinavkirî)
*::* ...
*:: <code>if find(mw.title.getCurrentTitle().subpageText, 'ekî$') then ... end</code>
*::<code><nowiki>{{ku-tewîn-navForm|<navdêr>|<zayend>}</nowiki></code>
*::Tablo û nivîs di yekcarî de tên çêkirin...
*::Feqet problem lêzêdekirina mînakan e. [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 17:34, 21 tîrmeh 2026 (UTC)
*:::Lêzêdekirina kîjan nimûneyan? Ev koda js ji bo çi ye? Qisûrê nenêre min fêm nekir :/ [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 18:13, 21 tîrmeh 2026 (UTC)
*::::Li vira ([[hevalê#Formeke navdêrê]]) di bin maneyên 1. û 2. mînak nayên tevlî kirin :) [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 18:18, 21 tîrmeh 2026 (UTC)
*:::::Ev tercîh e, ne mecbûrî ye, em dikarin [https://ku.wiktionary.org/w/index.php?title=heval%C3%AA&diff=prev&oldid=6276350 wisa] bikin. Wekî din? [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 18:29, 21 tîrmeh 2026 (UTC)
*::::::Min li jor tênê got ku tenê parametreyên "navdêr" û "zayend" hewce nee. Bi '''[//ku.wiktionary.org/w/index.php?title=heval%C3%AA&curid=969734&diff=6276353&oldid=6276350 vî]''' awayî jî tê çêkirin. Parametreyên din ne hewce ne. [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 18:38, 21 tîrmeh 2026 (UTC)
*:::::::Ji bo wê şabloneke din lazim e, bila ev şablon wekî îngilîzî bimîne em ji bo kurmancî yekî din çêkin. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 18:42, 21 tîrmeh 2026 (UTC)
*::::::::[https://ku.wiktionary.org/w/index.php?title=heval%C3%AA&oldid=6276885 wisa] çawa ye? Bi min nivîsîna nimûneyan zêde ne lazim e ji ber ku ti kes serê xwe pê naêşîne. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 09:46, 23 tîrmeh 2026 (UTC)
*:::::::::@[[Bikarhêner:Ghybu|Ghybu]] Vê şablonê bi kar bînin an na? Navê şablonê kê çi be? [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 19:07, 24 tîrmeh 2026 (UTC)
== Modul:columns ==
* [[Modul:columns]] were rojanekirin û {{ş|kol3}} bila lînka ''nîşan bide'' deyne beriya sernavê, kolê di qutiya rengî de bila nebe. —[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:17, 16 tîrmeh 2026 (UTC)
== Modul:etymon ==
* [[Modul:etymon kevn]]: Rojanekirin hewce ye. —[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:17, 16 tîrmeh 2026 (UTC)
== [[Modul:ziman/code to canonical name]] ==
Belgekirina skrîptê û js divê were rastkirin. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 09:31, 22 tîrmeh 2026 (UTC)
:* [[MediaWiki:UpdateLanguageNameAndCode.js]]
:[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 09:50, 22 tîrmeh 2026 (UTC)
::* [[Modul:ziman/print]]
::[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 09:52, 22 tîrmeh 2026 (UTC)
:::*[[Modul:ziman/şablon]]
:::[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 09:56, 22 tîrmeh 2026 (UTC)
::::* [[MediaWiki:Gadget-translation editor.js/ziman.json]]
::::[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 11:06, 22 tîrmeh 2026 (UTC)
== [[Modul:quote]] ==
Piştî ev modul hate hazirkirin, lazim e navên jegirtinan werin rastkirin û li hemûyan {{param|jêgirtin}} were zêdekirin. Bnr. [[Gotûbêja şablonê:Jêgirtin/Ehmedê Xanî/Mem û Zîn]] [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 22:27, 5 tebax 2026 (UTC)
::Ev modul hema bêje hazir e. Hûn li ser van madeyan çi difikirin:
# {{para|tarîx}} lazim e full date be eger na, lazim e {{para|sal}} were bikaranîn. Feqat "'''2021''' kanûna pêşîn 23" bi vî şiklî bi min ne problem e çnkî derdê en.wikt "attestation" e delîla herî pêşî jî sal e.
#: {{demo|sep=wisa xuya dibe<br>|<nowiki>{{jêder-kitêb/ceribandin|en
|tarîx=23 December 2021|nivîskar=Harry Hobbs; George Williams|sernav=Micronations and the Search for Sovereignty|url=https://www.cambridge.org/core/books/micronations-and-the-search-for-sovereignty/B0414A3A322695D9EE71E4CDDFDA06DE|weşanxane=Cambridge University Press|rûpel=155|isbn=978-1-009-15012-5|jêgirtin=jêgirtin.|t=-}}</nowiki>}}
#{{para|amadekar}}/{{para|edîtor}}/{{para|terciman}} bi şiklê edîtoriya, amadekariya, tercimekirina
#: {{demo|sep=dide<br>|<nowiki>{{jêder-kitêb/ceribandin|en
|sernav=Medical Surgical Nursing|serî=Juta's Manual of Nursing|cildê-seriyê=volume 4|edîtor=Sophie Mataniele Mogotlane; Joyce Mokoena; Motshedisi Eunice Chauke; Anne Young|sal=2005|weşanxane=Juta Academic|isbn=978-0702171840|rûpel=!12-29|jêgirtin=jêgirtin|t=-}}</nowiki>}}
--[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 13:09, 10 tebax 2026 (UTC)
:@[[Bikarhêner:Bikarhêner|Bikarhêner]] û @[[Bikarhêner:Ghybu|Ghybu]] Hîn gelek tişt hene divê îzah bikin û fikrê we pirs bikim, feqat îzahkirin pir zor e, em dest bi bikaranînê bikin û dûre tiştên ku hûn naxwazin em dikarin biguherînîn, dibe? [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 13:11, 10 tebax 2026 (UTC)
::Dibe, piştî çêbû, em di praktîkê de bibînin ku çawa ye. -- [[Bikarhêner:Bikarhêner|Bikarhêner]] ([[Gotûbêja bikarhêner:Bikarhêner|gotûbêj]]) 18:05, 10 tebax 2026 (UTC)
= Javascript =
== [[Mediawiki:Gadget-citoid-helper.js]] ==
Ji bo bi citoidê kopîkirina malûmatên çavkaniyan amûreke wisa lazim e. Xisûsen ji ber ku bi çend amûrên din dikare were bikaranîn.
Feqat çend problem hene, şablonên me de kêmasiya parametreyan gelek in û xerîteyên citoidê hîn nehatine çêkirin. Wana sererast bikin dûre vê amûrê çêkin, piştre [[MediaWiki:Gadget-start.js|start.js]] û [[MediaWiki:Gadget-wikt.add-examples.js|add examples.js]] were rojanekirin.
- --[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 00:04, 19 tîrmeh 2026 (UTC)
:Merheba @[[Bikarhêner:Bikarhêner|Bikarhêner]], ez dibêjim karê Modul:quote zêde wext bistîne, bila em dest bi bikaranîna van amûran bikin dûre kêmasiyan em ê temam bikin înşela. Dikarî vana li cihên xwe yên rast kopî paste bikî?
# [[Special:PermanentLink/6291574|Bikarhêner:Wikihez/skrîpt/js/Gadget-citoid-helper.js]] --> [[Mediawiki:Gadget-citoid-helper.js]]
# Ya li jêr kopî bike qismê herî dawî ya AmûrênVeşartî li [[MediaWiki:Gadgets-definition]]:
## <code><nowiki>* citoid-helper[ResourceLoader|hidden|default|dependencies=mediawiki.util]|citoid-helper.js</nowiki></code>
--[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:58, 26 tîrmeh 2026 (UTC)
== [[MediaWiki:Gadget-start.js]] ==
Rojanekirin hewce ye. Min gelek tişt lê zêde kir lê ez niha test dikime. Piştre em bar bikin:
* [[Bikarhêner:Wikihez/Gadget-start.js]] --> [[MediaWiki:Gadget-start.js]]
* [[Bikarhêner:Wikihez/Gadget-start.css]] --> [[MediaWiki:Gadget-start.css]]
--[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 22:08, 17 tîrmeh 2026 (UTC)
:Min [[MediaWiki:Gadget-start/data.json|data.json]] çêkir ji bo ku bi hêsanî malûmatên heyî werin guhartin bêyî guhartina Javascriptê. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 19:49, 18 tîrmeh 2026 (UTC)
:Xeletiyên ku ji bîr nekim rast bikim:
:* Wextê min çavkanî "kitêb" hilbijart û bi destî tije kir xeletiyeke [https://ku.wiktionary.org/w/index.php?title=xezete&diff=prev&oldid=6265392 wisa] derket her kelîme hate lînkkirin.
:* <code>html("⠿")</code> ev ne lazim e.
:* textarea ji bo çavkaniyên jêgirtinan xaseten yên sernav hîn jî ne draggable e.
:* pêşdîtina zindî checkbox wextê tê rakirin, pêşdîtin winda nabe.
:* Butona mobîlê ya vekirina formê di moda tarî de belî nabe, tenê wekî qutiyeke tarî xuya dibe.
:* Metna hişyarkirinê di guhartina rûpelên heyî de lazim e baştir bikim.
:[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 23:51, 18 tîrmeh 2026 (UTC)
::Ev problem çêbûn, ez ê binêrim ka çi problemên din hene. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 14:15, 19 tîrmeh 2026 (UTC)
:::Çêke: Ji bo qismê çavkaniyê yek dikare API call û Kategorî:Çavkanî bi kar bîne ji bo ku şablon zêde bikî ji yên heyî. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 21:21, 19 tîrmeh 2026 (UTC)
::::Ev jî çêbû, min beşa çavkanî jî çêkir. Eger xeletî dernekeve û problema valahiya piştî etîketê ji bîr nekim, piştî rojanekirina amûrên linkify, û citoid em dikarin bar bikin. Ez ê ti tiştê nû îlawe nekim, zêde dirêj bû. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:14, 21 tîrmeh 2026 (UTC)
:::::Merheba @[[Bikarhêner:Bikarhêner|Bikarhêner]]. Dikarî wana bar bikî?
:::::* [[Bikarhêner:Wikihez/Gadget-start.js]] --> [[MediaWiki:Gadget-start.js]]
:::::* [[Bikarhêner:Wikihez/Gadget-start.css]] --> [[MediaWiki:Gadget-start.css]]
:::::* [[MediaWiki:Gadgets-definition]] wisa rojane bike:
:::::* start[ResourceLoader|default|package|dependencies=mediawiki.util,ext.gadget.StorageUtils,ext.gadget.citoid-helper]|start.js|start.css|start.js/data.json
:::::[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 09:39, 5 tebax 2026 (UTC)
{{şirove}} Dewama ''[[Special:PermanentLink/6333688|Gotûbêja bikarhêner:Rewiye tine#WF:Nû]]'' bila gotûbêja wî em spam nekin. :D
{{r|Ghybu}} dikarî [[Special:PermanentLink/6333689|vê htmlê]] binêrî claude rast fêm kiriye yan na? Daxîne û wek html qeyd bike. --[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 18:43, 14 tebax 2026 (UTC)
:Min seh wîkîyên din jî kir, li wîkiya fransî tiştekî wekî daxwaza min çêkirine (tiştên ku ne hewce ne wekî "tab" çêkirine an jî hatine vêşartin): [//fr.wiktionary.org/w/index.php?title=fdsdfdsf&action=edit&redlink=1]. Formata me yê berî jî bi vê lojîkê hatibû çêkirin, wekî de.wiktionary ([//de.wiktionary.org/w/index.php?title=sdfdsfsdfs&action=edit&preload=Vorlage:Formatvorlage_(Substantiv_vereinfacht)]) [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 19:01, 14 tebax 2026 (UTC)
::PS: Dîsa jî Claude min rind fêm kiriye :)) Feqet min got ku beşên Mane", "Bilêvkirin" û "Beşên din" cem hev (wekî "tab") ". Û dema ku tu terî di nav "Besên din" Hevmane, Jê, ... li wira werin dayîn. Wêne/Resim û Nimûne jî di nav beşa ("tab") "Mane" [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 19:17, 14 tebax 2026 (UTC)
::Erê ya fr.wikt min jî dîtibû jixwe fikrê tab min ji wan girtibû :D (feqat min li cem wan tenê tab-a maneyê dît yên din nedît çawa tê vekirin nizanim) Berê hemû beş piştî maneyê bibûn, dûre min sê Tab çêkir, Bingehîn+Lînkkirin+Bikaranîn. Niha lazim e Tabeke din çêkim. Ya ku claude çêkiriye bnr. [[Special:PermanentLink/6333698#L-7]] ne baş e bnr. [[Special:PermanentLink/6333703|qiyaskirinê li ser vê htmlê]] Êdî ez Claude abuse dikime ji ber ku Pro ye :D [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 19:26, 14 tebax 2026 (UTC)
:::Claude dibêje:
:::Good clarification — that's a real simplification, not just a relabel. Updated STEP_GROUPS from 5 tabs down to 3:
:::Mane — the definitions themselves, plus Wêne (image), now grouped in with it instead of sitting in a separate misc tab. Nimûne needed no change since it was already rendering inside each Mane sense block, not as its own step.
:::Bilêvkirin — unchanged, still just pronunciation.
:::Beşên din — everything else in one flat bucket: hevmane, jê, têkildar, herwiha binêre, formên alternatîv, dijmane, jornav, jêrnav, notên bikaranînê, bi alfabeyên din, dûnde, çavkanî, bêhtir bixwîne, tewandin, etîmolojî, zaravayên din, werger, and bnr-h — instead of being split across the old Bingehîn/Lînkkirin/Bikaranîn/Din tabs.
:::No DOM-order changes were needed this time — the fix from the blank-tab bug looks up the tab bar's position dynamically now, so it didn't matter that I regrouped which steps go where. Same two files, saved to your Wiki folder — worth another pass through all three tabs once you've pasted this in, same as last time. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 19:34, 14 tebax 2026 (UTC)
::::Mînak:
Ziman
---------------------------------------------
Cureyê rêzimanî (Navdêr)
Navdêr (hilbijêre) ┆ Cîns (hilbijêre) ┆ Jimar (hilbijêre)
- lêker -mê -yekjimar
- rengdêr -nêr -pirjimar
- ... -... -...
---------------------------------------------
Mane || Bilêvkirin || Beşên din
hilbijêre:
- mane - IPA - Hevmane
- nimûne - kîte - Dijmane
- wêne
Dema ku tu "Cureyê rêzimanî" dikî "Lêker" :
Cureyê rêzimanî (Lêker)
Lêker (hilbijêre) ┆ Cure (hilbijêre)
- navdêr -rehê niha
- rengdêr -rehê borî
- ... -...
---------------------------------------------
┆ : select/option ("tab" nîne, tê dîtin)<br>
|| : "tab"
-- [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 19:45, 14 tebax 2026 (UTC)
== [[Mediawiki:Gadget-QQ.js]] ==
Ev amûr di şikle Minerva de. Her daîm vê xeletiyê dide:
<syntaxhighlight lang="js">
TypeError: Cannot read properties of null (reading 'addEventListener') at css () at runScript () at Array.<anonymous> () at flushCssBuffer ()
</syntaxhighlight> [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 19:29, 18 tîrmeh 2026 (UTC)
:* [[Bikarhêner:Wikihez/skrîpt/js/Gadget-QQ.js]] --> [[Mediawiki:Gadget-QQ.js]]
:* [[Bikarhêner:Wikihez/Gadget-QQ.css]] --> [[Mediawiki:Gadget-QQ.css]]
:Ez dibêjim çêbû lê ka çend roj biceribînim. Tiştên ku hatin sererastkirin:
:# Google Books API Key dikarî zêde bikî, dixe cookies û di gerokê de dimîne. Berê bê API Key dixebitiya lê êdî mecbûr e ku API Key-a te hebe, bidestxistina wê ne zêde zor e lê dîsa jî tevlihev e.
:# Êdî di mobîlê de dixebite, heta di mobîlê de xweştir xuya dike.
:# Moda tarî
:# OOUI dewsa jquery.ui
:# Li qutiyê çi dixwazî zêde bikî, dikare li gorî îsm, sifet, fiîl bitewîne. Lê ji bo fiîl tenê dikare çend heb inflection bîne.
:# Butona paqij bike lê zêde kir.
:# Çend paqijiyên jêgirtinên Google Kitêbê niha hene.
:[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 23:38, 18 tîrmeh 2026 (UTC)
::Tewandina fiîlan û xeletiya modulê lazim e were rastkirin. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 14:40, 21 tîrmeh 2026 (UTC)
== [[MediaWiki:Gadget-wikt.add-examples.js]] ==
Min ev amûr hinek rojane kir feqat çend problem hene berî ku bar bikin.
Tiştên ku min guhart:
# Êdî li sayfeyên bi {{ş|maneid}} jî dixebite,
# Cihê di wîkîtekstê de yê ku jêgirtin were îlawekirin baştir bû,
# [[Mediawiki:Gadget-citoid-helper.js|citoid helper]] zêde kir ji bo ku bi hêsanî çavkanî bi riya doi, isbn an urlyê werin tijîkirin.
* [[Bikarhêner:Wikihez/Gadget-wikt.add-examples.css]] --> [[MediaWiki:Gadget-wikt.add-examples.css]]
* [[Bikarhêner:Wikihez/Gadget-wikt.add-examples.js]] --> [[MediaWiki:Gadget-wikt.add-examples.js]]
- --[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 00:50, 19 tîrmeh 2026 (UTC)
:Min "wikt." qismên cache kirinê ya wîkiya fransî bi [[MediaWiki:Gadget-StorageUtils.js]] guhartiye. loma ji bîr nekin wê amûrê li [[MediaWiki:Gadgets-definition]] zêde bikin. û navê amûrê jî biguhêrînin. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 09:15, 23 tîrmeh 2026 (UTC)
::Berê li ser WF:ceribandin dixebitî. niha naxebite. Divê were rastkirin. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 22:10, 7 tebax 2026 (UTC)
== Gadget-translation editor ==
* [[MediaWiki:Gadget-translation editor.js]]: divê formata en.wîktê were bikaranîn ji ber ku me gelek tercime ji en.wîktê kopî kir û ev js hîn nikare formata wekî li jêr bi kar bîne.
<syntaxhighlight lang="wikitext">
* {{Z|sh}}:
*: Kirîlî:
*: Latînî
</syntaxhighlight>
—[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:17, 16 tîrmeh 2026 (UTC)
== [[Mediawiki:Gadget-linkify.js]] ==
* ''rûpeleke'' wekî<syntaxhighlight lang="wikitext">[[rûpeleke]]</syntaxhighlight> lînk dike, bi regexê belkî dikare wisa bike <syntaxhighlight lang="wikitext">[[rûpel]]eke</syntaxhighlight>
—[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:17, 16 tîrmeh 2026 (UTC)
* Amûreke din wekî [[User:Wikihez/Gadget-linkify.js|linkify]] lazim e ku herfên mezin biçûk bike ji bo kurmancî.—[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:17, 16 tîrmeh 2026 (UTC)
:{{r|Bikarhêner}} Merheba bira, dikarî viya jî bar bikî?:
* [[Special:PermanentLink/6291974|linkify]] --> [[Mediawiki:Gadget-linkify.js]]
Spas--[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 11:42, 29 tîrmeh 2026 (UTC)
:Dûre [https://ku.wiktionary.org/wiki/MediaWiki:Gadget-start.js#L-283 li vir] wiktviLinkify bike kuLinkify xêra xwe [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 11:51, 29 tîrmeh 2026 (UTC)
::Min ji bîr kir lê zêde bikim niha nikare "Dİ" bike "di", xeletiyeke berbelav a di nivîsên kurdî de, herfên din ên wekî ll yan rr jî hewce ne werin zêdekirin. Dûre em zêde bikin. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 21:42, 29 tîrmeh 2026 (UTC)
:::Min nû ferq kir, sayfeyên ku hîn nehatine çêkirin wîkîlînk nake. Problemeke mezin e divê were rastkirin. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 18:15, 30 tîrmeh 2026 (UTC)
::::Na, lînk dike, tiştekî din heye... [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 10:49, 31 tîrmeh 2026 (UTC)
== Amûra manayê ==
Amûreke din ji bo nivîsina maneyê wekî Nimûne zêde bike lazim e [https://ku.wiktionary.org/w/index.php?title=Bikarh%C3%AAner:Wikihez/test.js&oldid=6276876 js] [https://ku.wiktionary.org/w/index.php?title=%C5%9Eablon:ceribandin2&oldid=6265629 şablon] [https://ku.wiktionary.org/w/index.php?title=Bikarh%C3%AAner:Wikihez/common.css&oldid=6265642 css] --[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 09:12, 23 tîrmeh 2026 (UTC)
== [[MediaWiki:Gadget-jeder.js]] ==
@[[Bikarhêner:Ghybu|Ghybu]] Çavkaniyên jêderê di moda pêşdîtinê de jêderê vedişêre, ew jî min gelek eciz dike wextê çavkanî zêde dikim. Min ji Claude pirsî û kodan nîşanî wê da, wisa cewab da:
Yes — and this file actually explains the whole thing precisely, better than my earlier guess about extract-stripping.
What's happening: the CSS rule
<syntaxhighlight lang="css">
.jeder{
display:none;
}
</syntaxhighlight>
hides every citation by default, *unconditionally*. The only thing that ever makes it visible again is the gadget's JS: it finds each `.jeder`, builds the short "`— (year, author, +)`" summary from the `.j-pewist` fields, and either reveals the short version or — for citations with no `.j-pewist` fields — explicitly sets `display:inline` on the original.
So visibility of citations depends entirely on this JS running. In the normal article view (Image 1) it runs, so you see the collapsed "`(1918, E. Rehmî Ji Mala Hekariyan, Amadekar: M. E. Bozarslan, +)`" form. In whatever generated Image 2 — a hover-preview/extract/API render — gadget JS doesn't execute, so nothing ever removes the `display:none`, and the citation vanishes completely rather than degrading to "still visible, just not collapsed."
<b>The fix:</b> flip the default so the *un-collapsed* state is the safe fallback, and let JS do the hiding only after it successfully builds the short version. That way, any context without JS shows the full citation instead of nothing.
CSS — remove the blanket hide:
<syntaxhighlight lang="css">
.jeder {
/* intentionally no display:none here — see Gadget-... .js */
}
</syntaxhighlight>
JS — do the hiding from script, after the short form exists:
{{veşêre-ser}}
<syntaxhighlight lang="js">
// Ji bo şablonên [[Şablon:jêder]] hatiye nivîsandin.
// Parametreyên ku di navbera "<span class="j-pewist">...</span>" an "{{j-pêwîst|...}}" de ne venaşêre.
$(function() {
function nivisaKurtTevliBike(sund, nivisKurt) {
var zede = $('<a>+</a>')
.addClass('click')
.attr('href', '#')
.attr('title', 'zêdetir')
.css('font-weight', 'bold');
var kurt = $(' <a>↩</a>')
.addClass('click-kurt')
.attr('href', '#')
.attr('title', 'veşêre')
.css('font-weight', 'bold');
$('<span>' + nivisKurt + '</span>')
.append(zede).append(')')
.addClass('jeder-kurt')
.css('font-size', '0.85em')
.insertAfter(sund);
sund.append(' ').append(kurt);
// Only hide the full citation once the short summary actually exists.
// If this script never runs (no-JS clients, hover-preview extracts,
// action=render, etc.), the full citation stays visible instead of
// silently disappearing.
sund.css('display', 'none');
}
function vesere() {
$('.jeder').each(function() {
var elmTab = $(this).find('.j-pewist').clone();
if (elmTab.length) {
var elm = '';
for (var i = elmTab.length - 1; i >= 0; i--) {
elm = elmTab.eq(i).html() + ', ' + elm;
}
var nivisKurt = ' — (' + elm;
nivisaKurtTevliBike($(this), nivisKurt);
}
// else: no j-pewist fields to shorten — leave the full citation
// as it already renders (visible), nothing to do.
});
}
vesere();
$(".click").click(function(e) {
e.preventDefault();
$(this).parent('.jeder-kurt').css('display', 'none');
$(this).parent('.jeder-kurt').prev().css('display', 'inline');
});
$(".click-kurt").click(function(e) {
e.preventDefault();
$(this).parent('.jeder').css('display', 'none');
$(this).parent('.jeder').next().css('display', 'inline');
});
});
</syntaxhighlight>
Net effect:
- JS-enabled readers (normal article view): identical experience to today — collapsed short form with `+`/`↩` toggle.
- No-JS contexts (previews, extracts, screen readers before JS loads, print, etc.): full citation is shown instead of nothing — a real regression fix rather than a cosmetic one.
One caveat worth being upfront about: this fixes it *if* the preview context renders the gadget's HTML/CSS but doesn't execute gadget JS (which is the far more common case, and what this code strongly suggests is happening). If Image 2 instead comes from a pipeline that strips the `.jeder`/`.jegirtin-text` elements out of the HTML entirely before this CSS/JS even gets a chance to apply, no on-wiki CSS/JS change can help — that'd need the extract-generation config changed instead. Given what this gadget file shows, though, I'd bet on the CSS-hide explanation.
{{veşêre-bin}}
Em dûre biceribînin eger xeletî tinebe, vî tiştî jî rast bikin. --[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 20:00, 23 tîrmeh 2026 (UTC)
:Ez APIya MediaWiki rind nizanim belkî Claude dizane:) Em nikarin bibêjin dema ku moda "''action=edit''" e fonksiyona <code>function vesere()</code> bi kar meyîne. [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 15:57, 24 tîrmeh 2026 (UTC)
::Na, di moda "edît"-ê de <code>var elmTab = null</code>... [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 16:13, 24 tîrmeh 2026 (UTC)
?:
<syntaxhighlight lang="js">
if (
mw.config.get('wgAction') === 'edit' ||
mw.config.get('wgAction') === 'submit'
){
var elmTab = [];
} else {
var elmTab = $(this).find('.j-pewist').clone();
}
</syntaxhighlight>
--[[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 16:31, 24 tîrmeh 2026 (UTC)
:Ez jî nizanim Claude çiqas ji mediawiki fêm dike lê heta niha ti tişt nîne ku min jê pirs kir û nikaribû çêke, bila wekî reklam nebe feqat Claude mikemmel e, dibêjim "li vir çima xeletiyeke wisa derdikeve" di dosyeya 2000 rêzî de diçe tiştê xelet tenê rast dike tiştekî din naguherîne. Chatgpt û aistudio qet wisa nakin, eynî dosyeyê deh cara dinivîsin, deh netîceyên cuda derdikevin :D
:Em dikarin vê amûrê wextê edit û submitê neaktîv bikin wekî <syntaxhighlight lang="js">if (!(action === "edit" || action === "submit")) {
:return;</syntaxhighlight> lê wê demê display:none wê çibe nizanim. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 18:23, 24 tîrmeh 2026 (UTC)
::display:none ne hewce ye ma jixwe di nav kodê [https://ku.wiktionary.org/w/index.php?title=MediaWiki:Gadget-jeder.js&oldid=6069025#L-49 L-49] de inline/none heye? [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 18:53, 24 tîrmeh 2026 (UTC)
:Min bi vî şiklî [https://ku.wiktionary.org/w/index.php?title=Bikarh%C3%AAner:Wikihez/vector-2022.js&diff=prev&oldid=6290816#L-28] ceriband feqat nexebitî. "display:none" di pêşdîtinê de dixebite feqat js naşixule. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 14:43, 25 tîrmeh 2026 (UTC)
::Kodên JSê pir hez nakim (pêşta hukurina APIya MWyê hewce bû) dîsa jî ez ê seh bikim :) [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 16:49, 27 tîrmeh 2026 (UTC)
:::Ez niha bi vî şiklî [https://ku.wiktionary.org/w/index.php?title=Bikarh%C3%AAner:Wikihez/test.js&oldid=6290820] [https://ku.wiktionary.org/w/index.php?title=Bikarh%C3%AAner:Wikihez/common.css&oldid=6290821#L-8] bi kar tînim ti problem nîne. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 17:09, 27 tîrmeh 2026 (UTC)
== [[MediaWiki:Gadget-PagePreviews.js]] ==
Ez dibêjim em vê amûrê jî çêkin [[:en:MediaWiki:Gadget-PagePreviews.js]] --[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 10:56, 3 tebax 2026 (UTC)
= Moda tarî =
== [[Şablon:wîkîpediya]] ==
Rengê tarî de xirab e.--[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 19:36, 4 tebax 2026 (UTC)
= Bot =
Karên ku bi botê werin çêkirin ji kerema xwe li vir binivîsin.
== Kategorî:Biwêj ==
[[:Kategorî:Biwêj]] divê were paqijkirin, lîsteya madeyên {{ş|biwêj}} çêke, yên ku tê de bûn, kirin, man hene filtre bike yên din bi destî tê çêkirin.—[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:17, 16 tîrmeh 2026 (UTC)
== Jêgirtin ==
Xistina jêgirtinên beşa [https://ku.wiktionary.org/w/index.php?search=insource%3A%2F%3D+*Ji+%5BWw%5D%C3%AAjey%C3%AA+*%3D%2F&title=Taybet%3AL%C3%AAger%C3%AEn&profile=advanced&fulltext=1&ns0=1&searchToken=8rh0bmw8dccsi7aynl6zli8uf ji wêjeyê] li beşa maneyê. —[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:17, 16 tîrmeh 2026 (UTC)
== Bota Toolforgeê ==
Botekî Toolforgeê lazim e ji bo ku xeletiyên biçûk wekî şablonên bi navên îngilîzî werin kurdîkirin yan jî valahiya beşan rast bike û hwd.—[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:17, 16 tîrmeh 2026 (UTC)
:Min [[Bikarhêner:Wikihez/skrîpt/py/kuwiktkozmetik.py|paqijiyen kozmetîk]] hazir kir feqat hîn navên şablonan naguhêre. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 20:05, 4 tebax 2026 (UTC)
== Updatew ==
Bota [[Bikarhêner:Wikihez/skrîpt/py/updateW.py|updateW]] divê were rojanekirin. Yan jî yekî nû were çêkirin. Şablonên {{ş|W}} di beşa tercimeyan de sererast dike û zimanan rêz dike. Ya niha xeletiya navê zimanî dide.—[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:17, 16 tîrmeh 2026 (UTC)
== sihir --> sêhr ==
Tercimeyên ''[[sêhr]]'' hemû dibêje ''sihir'' loma bi botê lazim e kirin ''sêhr''. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 17:43, 18 tîrmeh 2026 (UTC)
:Sihirbaz --> sêhrbaz [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 18:07, 18 tîrmeh 2026 (UTC)
== Tercimeyên dîroknas ==
Li tercimeyên [[dîroknas]], hevmaneyên wê hewce ye were îlawekirin. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 18:44, 18 tîrmeh 2026 (UTC)
== Mewlûd ==
Sererastkirina jêgirtinên mewlûdê [https://ku.wiktionary.org/w/index.php?search=insource%3A%2Fw%5C%3AMela+His%C3%AAn%C3%AA+Batey%C3%AE%2F&title=Taybet%3AL%C3%AAger%C3%AEn&ns0=1&searchToken=8m0tguy3sqt7edr4sg0u8hedo] wekî [https://ku.wiktionary.org/w/index.php?title=dax%C3%AEdar&curid=284303&diff=6265851&oldid=6142285] [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 09:43, 20 tîrmeh 2026 (UTC)
151l4xrup6255h878n6cv5urs51kxlq
6333727
6333726
2026-08-14T20:18:16Z
Wikihez
7344
/* MediaWiki:Gadget-start.js */
6333727
wikitext
text/x-wiki
{{/ser}}
= Karên ferhengî =
== Mane ==
* [[:Kategorî:Madeyên bê beşa mane]]
** [[:Kategorî:Madeyên bê beşa mane bi kurmancî]]
Li ser van rûpelan ev made hene ku maneyan wan nehatine nivîsin û divê werin nivîsin. —[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:17, 16 tîrmeh 2026 (UTC)
== Etîmolojî ==
*[[:Kategorî:Daxwazên etîmolojiyê]]
**[[:Kategorî:Daxwazên etîmolojiyê bi kurmancî]]
Li ser van rûpelan ev made hene ku etîmolojiya wan hîn nehatine nivîsin. Ji bo alîkariyê binêre [[WF:Etîmolojî]] —[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:17, 16 tîrmeh 2026 (UTC)
== Cureyê rêzimanî ==
* [[:Kategorî:Gotarên bê kategoriya rêzimanî]]
* [[:Kategorî:Gotarên bê kategoriya rêzimanî bi kurmancî]]
Li ser van rûpelan ev made hene ku cureyên wan yên rêzimanî hîn nehatine nivîsin. Ji bo alîkariyê binêre [[Alîkarî:Cureyên peyvan]] —[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:17, 16 tîrmeh 2026 (UTC)
== Kontrol ==
* [[:Kategorî:Kontrol]]
** [[:Kategorî:Kontrola maneyê]]
Ev madde bi botê hatine çêkirin, yek bi yek divê werin kontrolkirin. —[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:17, 16 tîrmeh 2026 (UTC)
= Şablon =
== IPA ==
* {{ş|IPA}} divê [[Modul:IPA]] bi kar bîne. —[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:17, 16 tîrmeh 2026 (UTC)
== Deng ==
Kurdîkirina belgekirina {{ş|deng}} lazim e.--[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 00:06, 19 tîrmeh 2026 (UTC)
= Modul =
== Modul:form of/templates ==
* [[Modul:form of/templates]]: Divê ev modul were rojanekirin û xeletiyên berê wekî ([[hevalê]]) werin rastkirin. —[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:17, 16 tîrmeh 2026 (UTC)
*:Merheba @[[Bikarhêner:Ghybu|Ghybu]] Te gotibû di vê modulê de xeletî hene, jkx tu dikarî li vir binivîsî çi kêmasî hene, daku wextê rojane dikim ez ji bîr nekim? [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:16, 21 tîrmeh 2026 (UTC)
*::Silav. Nizanim ji bîra min çûye... Herwiha ji bo çêkirina formên navdêran zanînên cîns û tîpa dawî bes e:
*::* (-ê, mê) => çemandî, bangkirin
*::* (-ê, nêr) => îzafe
*::* (-ê, mê û nêr) => îzafe (nêr), bangkirin (mê), çemandî (mê)
*::* (-a) => îzafe (mê)
*::* (-ekî) => îzafe û çemandî (nêr, nebinavkirî)
*::* (-eke) = > îzafe (mê, nebinavkirî)
*::* ...
*:: <code>if find(mw.title.getCurrentTitle().subpageText, 'ekî$') then ... end</code>
*::<code><nowiki>{{ku-tewîn-navForm|<navdêr>|<zayend>}</nowiki></code>
*::Tablo û nivîs di yekcarî de tên çêkirin...
*::Feqet problem lêzêdekirina mînakan e. [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 17:34, 21 tîrmeh 2026 (UTC)
*:::Lêzêdekirina kîjan nimûneyan? Ev koda js ji bo çi ye? Qisûrê nenêre min fêm nekir :/ [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 18:13, 21 tîrmeh 2026 (UTC)
*::::Li vira ([[hevalê#Formeke navdêrê]]) di bin maneyên 1. û 2. mînak nayên tevlî kirin :) [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 18:18, 21 tîrmeh 2026 (UTC)
*:::::Ev tercîh e, ne mecbûrî ye, em dikarin [https://ku.wiktionary.org/w/index.php?title=heval%C3%AA&diff=prev&oldid=6276350 wisa] bikin. Wekî din? [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 18:29, 21 tîrmeh 2026 (UTC)
*::::::Min li jor tênê got ku tenê parametreyên "navdêr" û "zayend" hewce nee. Bi '''[//ku.wiktionary.org/w/index.php?title=heval%C3%AA&curid=969734&diff=6276353&oldid=6276350 vî]''' awayî jî tê çêkirin. Parametreyên din ne hewce ne. [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 18:38, 21 tîrmeh 2026 (UTC)
*:::::::Ji bo wê şabloneke din lazim e, bila ev şablon wekî îngilîzî bimîne em ji bo kurmancî yekî din çêkin. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 18:42, 21 tîrmeh 2026 (UTC)
*::::::::[https://ku.wiktionary.org/w/index.php?title=heval%C3%AA&oldid=6276885 wisa] çawa ye? Bi min nivîsîna nimûneyan zêde ne lazim e ji ber ku ti kes serê xwe pê naêşîne. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 09:46, 23 tîrmeh 2026 (UTC)
*:::::::::@[[Bikarhêner:Ghybu|Ghybu]] Vê şablonê bi kar bînin an na? Navê şablonê kê çi be? [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 19:07, 24 tîrmeh 2026 (UTC)
== Modul:columns ==
* [[Modul:columns]] were rojanekirin û {{ş|kol3}} bila lînka ''nîşan bide'' deyne beriya sernavê, kolê di qutiya rengî de bila nebe. —[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:17, 16 tîrmeh 2026 (UTC)
== Modul:etymon ==
* [[Modul:etymon kevn]]: Rojanekirin hewce ye. —[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:17, 16 tîrmeh 2026 (UTC)
== [[Modul:ziman/code to canonical name]] ==
Belgekirina skrîptê û js divê were rastkirin. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 09:31, 22 tîrmeh 2026 (UTC)
:* [[MediaWiki:UpdateLanguageNameAndCode.js]]
:[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 09:50, 22 tîrmeh 2026 (UTC)
::* [[Modul:ziman/print]]
::[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 09:52, 22 tîrmeh 2026 (UTC)
:::*[[Modul:ziman/şablon]]
:::[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 09:56, 22 tîrmeh 2026 (UTC)
::::* [[MediaWiki:Gadget-translation editor.js/ziman.json]]
::::[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 11:06, 22 tîrmeh 2026 (UTC)
== [[Modul:quote]] ==
Piştî ev modul hate hazirkirin, lazim e navên jegirtinan werin rastkirin û li hemûyan {{param|jêgirtin}} were zêdekirin. Bnr. [[Gotûbêja şablonê:Jêgirtin/Ehmedê Xanî/Mem û Zîn]] [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 22:27, 5 tebax 2026 (UTC)
::Ev modul hema bêje hazir e. Hûn li ser van madeyan çi difikirin:
# {{para|tarîx}} lazim e full date be eger na, lazim e {{para|sal}} were bikaranîn. Feqat "'''2021''' kanûna pêşîn 23" bi vî şiklî bi min ne problem e çnkî derdê en.wikt "attestation" e delîla herî pêşî jî sal e.
#: {{demo|sep=wisa xuya dibe<br>|<nowiki>{{jêder-kitêb/ceribandin|en
|tarîx=23 December 2021|nivîskar=Harry Hobbs; George Williams|sernav=Micronations and the Search for Sovereignty|url=https://www.cambridge.org/core/books/micronations-and-the-search-for-sovereignty/B0414A3A322695D9EE71E4CDDFDA06DE|weşanxane=Cambridge University Press|rûpel=155|isbn=978-1-009-15012-5|jêgirtin=jêgirtin.|t=-}}</nowiki>}}
#{{para|amadekar}}/{{para|edîtor}}/{{para|terciman}} bi şiklê edîtoriya, amadekariya, tercimekirina
#: {{demo|sep=dide<br>|<nowiki>{{jêder-kitêb/ceribandin|en
|sernav=Medical Surgical Nursing|serî=Juta's Manual of Nursing|cildê-seriyê=volume 4|edîtor=Sophie Mataniele Mogotlane; Joyce Mokoena; Motshedisi Eunice Chauke; Anne Young|sal=2005|weşanxane=Juta Academic|isbn=978-0702171840|rûpel=!12-29|jêgirtin=jêgirtin|t=-}}</nowiki>}}
--[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 13:09, 10 tebax 2026 (UTC)
:@[[Bikarhêner:Bikarhêner|Bikarhêner]] û @[[Bikarhêner:Ghybu|Ghybu]] Hîn gelek tişt hene divê îzah bikin û fikrê we pirs bikim, feqat îzahkirin pir zor e, em dest bi bikaranînê bikin û dûre tiştên ku hûn naxwazin em dikarin biguherînîn, dibe? [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 13:11, 10 tebax 2026 (UTC)
::Dibe, piştî çêbû, em di praktîkê de bibînin ku çawa ye. -- [[Bikarhêner:Bikarhêner|Bikarhêner]] ([[Gotûbêja bikarhêner:Bikarhêner|gotûbêj]]) 18:05, 10 tebax 2026 (UTC)
= Javascript =
== [[Mediawiki:Gadget-citoid-helper.js]] ==
Ji bo bi citoidê kopîkirina malûmatên çavkaniyan amûreke wisa lazim e. Xisûsen ji ber ku bi çend amûrên din dikare were bikaranîn.
Feqat çend problem hene, şablonên me de kêmasiya parametreyan gelek in û xerîteyên citoidê hîn nehatine çêkirin. Wana sererast bikin dûre vê amûrê çêkin, piştre [[MediaWiki:Gadget-start.js|start.js]] û [[MediaWiki:Gadget-wikt.add-examples.js|add examples.js]] were rojanekirin.
- --[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 00:04, 19 tîrmeh 2026 (UTC)
:Merheba @[[Bikarhêner:Bikarhêner|Bikarhêner]], ez dibêjim karê Modul:quote zêde wext bistîne, bila em dest bi bikaranîna van amûran bikin dûre kêmasiyan em ê temam bikin înşela. Dikarî vana li cihên xwe yên rast kopî paste bikî?
# [[Special:PermanentLink/6291574|Bikarhêner:Wikihez/skrîpt/js/Gadget-citoid-helper.js]] --> [[Mediawiki:Gadget-citoid-helper.js]]
# Ya li jêr kopî bike qismê herî dawî ya AmûrênVeşartî li [[MediaWiki:Gadgets-definition]]:
## <code><nowiki>* citoid-helper[ResourceLoader|hidden|default|dependencies=mediawiki.util]|citoid-helper.js</nowiki></code>
--[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:58, 26 tîrmeh 2026 (UTC)
== [[MediaWiki:Gadget-start.js]] ==
Rojanekirin hewce ye. Min gelek tişt lê zêde kir lê ez niha test dikime. Piştre em bar bikin:
* [[Bikarhêner:Wikihez/Gadget-start.js]] --> [[MediaWiki:Gadget-start.js]]
* [[Bikarhêner:Wikihez/Gadget-start.css]] --> [[MediaWiki:Gadget-start.css]]
--[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 22:08, 17 tîrmeh 2026 (UTC)
:Min [[MediaWiki:Gadget-start/data.json|data.json]] çêkir ji bo ku bi hêsanî malûmatên heyî werin guhartin bêyî guhartina Javascriptê. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 19:49, 18 tîrmeh 2026 (UTC)
:Xeletiyên ku ji bîr nekim rast bikim:
:* Wextê min çavkanî "kitêb" hilbijart û bi destî tije kir xeletiyeke [https://ku.wiktionary.org/w/index.php?title=xezete&diff=prev&oldid=6265392 wisa] derket her kelîme hate lînkkirin.
:* <code>html("⠿")</code> ev ne lazim e.
:* textarea ji bo çavkaniyên jêgirtinan xaseten yên sernav hîn jî ne draggable e.
:* pêşdîtina zindî checkbox wextê tê rakirin, pêşdîtin winda nabe.
:* Butona mobîlê ya vekirina formê di moda tarî de belî nabe, tenê wekî qutiyeke tarî xuya dibe.
:* Metna hişyarkirinê di guhartina rûpelên heyî de lazim e baştir bikim.
:[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 23:51, 18 tîrmeh 2026 (UTC)
::Ev problem çêbûn, ez ê binêrim ka çi problemên din hene. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 14:15, 19 tîrmeh 2026 (UTC)
:::Çêke: Ji bo qismê çavkaniyê yek dikare API call û Kategorî:Çavkanî bi kar bîne ji bo ku şablon zêde bikî ji yên heyî. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 21:21, 19 tîrmeh 2026 (UTC)
::::Ev jî çêbû, min beşa çavkanî jî çêkir. Eger xeletî dernekeve û problema valahiya piştî etîketê ji bîr nekim, piştî rojanekirina amûrên linkify, û citoid em dikarin bar bikin. Ez ê ti tiştê nû îlawe nekim, zêde dirêj bû. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:14, 21 tîrmeh 2026 (UTC)
:::::Merheba @[[Bikarhêner:Bikarhêner|Bikarhêner]]. Dikarî wana bar bikî?
:::::* [[Bikarhêner:Wikihez/Gadget-start.js]] --> [[MediaWiki:Gadget-start.js]]
:::::* [[Bikarhêner:Wikihez/Gadget-start.css]] --> [[MediaWiki:Gadget-start.css]]
:::::* [[MediaWiki:Gadgets-definition]] wisa rojane bike:
:::::* start[ResourceLoader|default|package|dependencies=mediawiki.util,ext.gadget.StorageUtils,ext.gadget.citoid-helper]|start.js|start.css|start.js/data.json
:::::[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 09:39, 5 tebax 2026 (UTC)
{{şirove}} Dewama ''[[Special:PermanentLink/6333688|Gotûbêja bikarhêner:Rewiye tine#WF:Nû]]'' bila gotûbêja wî em spam nekin. :D
{{r|Ghybu}} dikarî [[Special:PermanentLink/6333689|vê htmlê]] binêrî claude rast fêm kiriye yan na? Daxîne û wek html qeyd bike. --[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 18:43, 14 tebax 2026 (UTC)
:Min seh wîkîyên din jî kir, li wîkiya fransî tiştekî wekî daxwaza min çêkirine (tiştên ku ne hewce ne wekî "tab" çêkirine an jî hatine vêşartin): [//fr.wiktionary.org/w/index.php?title=fdsdfdsf&action=edit&redlink=1]. Formata me yê berî jî bi vê lojîkê hatibû çêkirin, wekî de.wiktionary ([//de.wiktionary.org/w/index.php?title=sdfdsfsdfs&action=edit&preload=Vorlage:Formatvorlage_(Substantiv_vereinfacht)]) [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 19:01, 14 tebax 2026 (UTC)
::PS: Dîsa jî Claude min rind fêm kiriye :)) Feqet min got ku beşên Mane", "Bilêvkirin" û "Beşên din" cem hev (wekî "tab") ". Û dema ku tu terî di nav "Besên din" Hevmane, Jê, ... li wira werin dayîn. Wêne/Resim û Nimûne jî di nav beşa ("tab") "Mane" [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 19:17, 14 tebax 2026 (UTC)
::Erê ya fr.wikt min jî dîtibû jixwe fikrê tab min ji wan girtibû :D (feqat min li cem wan tenê tab-a maneyê dît yên din nedît çawa tê vekirin nizanim) Berê hemû beş piştî maneyê bibûn, dûre min sê Tab çêkir, Bingehîn+Lînkkirin+Bikaranîn. Niha lazim e Tabeke din çêkim. Ya ku claude çêkiriye bnr. [[Special:PermanentLink/6333698#L-7]] ne baş e bnr. [[Special:PermanentLink/6333703|qiyaskirinê li ser vê htmlê]] Êdî ez Claude abuse dikime ji ber ku Pro ye :D [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 19:26, 14 tebax 2026 (UTC)
:::Claude dibêje:
:::Good clarification — that's a real simplification, not just a relabel. Updated STEP_GROUPS from 5 tabs down to 3:
:::Mane — the definitions themselves, plus Wêne (image), now grouped in with it instead of sitting in a separate misc tab. Nimûne needed no change since it was already rendering inside each Mane sense block, not as its own step.
:::Bilêvkirin — unchanged, still just pronunciation.
:::Beşên din — everything else in one flat bucket: hevmane, jê, têkildar, herwiha binêre, formên alternatîv, dijmane, jornav, jêrnav, notên bikaranînê, bi alfabeyên din, dûnde, çavkanî, bêhtir bixwîne, tewandin, etîmolojî, zaravayên din, werger, and bnr-h — instead of being split across the old Bingehîn/Lînkkirin/Bikaranîn/Din tabs.
:::No DOM-order changes were needed this time — the fix from the blank-tab bug looks up the tab bar's position dynamically now, so it didn't matter that I regrouped which steps go where. Same two files, saved to your Wiki folder — worth another pass through all three tabs once you've pasted this in, same as last time. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 19:34, 14 tebax 2026 (UTC)
::::Mînak:
Ziman
---------------------------------------------
Cureyê rêzimanî (Navdêr)
Navdêr (hilbijêre) ┆ Cîns (hilbijêre) ┆ Jimar (hilbijêre)
- lêker -mê -yekjimar
- rengdêr -nêr -pirjimar
- ... -... -...
---------------------------------------------
Mane || Bilêvkirin || Beşên din
hilbijêre:
- mane - IPA - Hevmane
- nimûne - kîte - Dijmane
- wêne
Dema ku tu "Cureyê rêzimanî" dikî "Lêker" :
Cureyê rêzimanî (Lêker)
Lêker (hilbijêre) ┆ Cure (hilbijêre)
- navdêr -rehê niha
- rengdêr -rehê borî
- ... -...
---------------------------------------------
┆ : select/option ("tab" nîne, tê dîtin)<br>
|| : "tab"
-- [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 19:45, 14 tebax 2026 (UTC)
'''Sê-stûnî ("┆" = ne tab), li gorî Cureyê rêzimanî:'''
{| class="wikitable"
! Cureyê rêzimanî !! Stûna 2 !! Stûna 3 !! Têbînî
|-
| Navdêr / Serenav
| Cîns (hilbijêre ▾: mê / nêr / ... — tenê heke ziman zayendê rêzimanî hebe)
| '''Jimar''' (?) — pirs li jêr
| Qadên "Forma mê/nêr/pirjimar/yekjimar" niha jî li vir hene — ma ev di "Jimar"-ê de tên tevlihev kirin, an cuda dimînin?
|-
| Rengdêr
| (heman m/n/p/y forman ku Navdêr distîne)
| Sûperlatîv (sûp) / Komparatîv (komp)
| Ne li ser her du nîgaran hatiye behs kirin — ma sê-stûnî li vir jî tê bikaranîn?
|-
| Lêker
| '''Cure''' = Cureyê lêkerê (hilbijêre ▾: gerguhêz / negerguhêz / xwerû-... / pêkhatî-... / hevedudanî-... / biwêjî-... — 10 vebijêrk)
| Di heman stûnê de: Rehê dema niha / Rehê dema borî / Rehê dema bilanî (her sê qadên nivîsandinê ne, ne hilbijêrk in)
| Ma "Cure" her sê rehan di xwe de digire wek yek stûn, an her yek stûneke cuda ye?
|-
| Tîp (herf/sembol)
| Girdêk (gir) / Hûrek (hûr)
| —
| Ne behs kiriye
|-
| Her cureyek, li gorî zimên
| Transliterasyon (tr) / Transkrîpsiyon (ts)
| —
| Bi zimên ve girêdayî ye, ne bi cureyê rêzimanî ve
|-
| Her cureyek, tenê ziman=japonî
| Hanja / Translit. hanja
| —
| Ne bi cureyê rêzimanî ve girêdayî ye
|-
| Her cureyek
| '''Tercîhên pêşketî''' (kolapsî): form, formaalt, nekatcure, nekatcins, nekatçendterm, serlînkneke, nekatpalîndrom, neformtr
| —
| Vebijarkî, ji bo hemû cureyan
|}
'''Tabên jêrîn — Mane ‖ Bilêvkirin ‖ Beşên din ("||" = tab):'''
{| class="wikitable"
! Mane !! Bilêvkirin !! Beşên din (hemû 18 hêman)
|-
| mane, nimûne, wêne
| şablonên bilêvkirinê (mînak: IPA, kîte)
| tewandin, etîmolojî, bi zaravayên din, werger, jê, têkildar, herwiha binêre, formên alternatîv, hevmane, dijmane, jornav, jêrnav, notên bikaranînê, bi alfabeyên din, dûnde, çavkanî, bêhtir bixwîne, bnr-h
|}
'''Pirsên vekirî:'''
# "Jimar" (yekjimar/pirjimar) — qadeke ku nîşan dide têketî bi xwe yekjimar e an pirjimar e. Ev cuda ye ji "Forma yekjimar (y)"/"Forma pirjimar (p)" ya heyî (ku forma DÎN a kelîmeyê tomar dike). Herdu bimînin, an werin yek kirin?
# Ma sê-stûnî tenê ji bo Navdêr/Lêker e, an ji bo Rengdêr/Tîp jî heman mantiq derbas dibe?
# Di "Beşên din" de: dixwazî pêşî navnîşek/hilbijartinek nîşan bide (17 hêmanên din jî tê de), û qad tenê piştî hilbijartinê xuya bibin?
:Tu dikarî start.js ji Tercîh/ Amûran rakî û bi test.js li Amûran herî taliyê ye biceribînî. Claude ya li jor hazir kir, Jimar ez dikarim îzah bikim. Feqat bi min di tab-a maneyê de lazim e Bi zaravayên din (heta wek werger her car bila li rûpelan were zêdekirin) û werger jî hebe.--[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 20:18, 14 tebax 2026 (UTC)
== [[Mediawiki:Gadget-QQ.js]] ==
Ev amûr di şikle Minerva de. Her daîm vê xeletiyê dide:
<syntaxhighlight lang="js">
TypeError: Cannot read properties of null (reading 'addEventListener') at css () at runScript () at Array.<anonymous> () at flushCssBuffer ()
</syntaxhighlight> [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 19:29, 18 tîrmeh 2026 (UTC)
:* [[Bikarhêner:Wikihez/skrîpt/js/Gadget-QQ.js]] --> [[Mediawiki:Gadget-QQ.js]]
:* [[Bikarhêner:Wikihez/Gadget-QQ.css]] --> [[Mediawiki:Gadget-QQ.css]]
:Ez dibêjim çêbû lê ka çend roj biceribînim. Tiştên ku hatin sererastkirin:
:# Google Books API Key dikarî zêde bikî, dixe cookies û di gerokê de dimîne. Berê bê API Key dixebitiya lê êdî mecbûr e ku API Key-a te hebe, bidestxistina wê ne zêde zor e lê dîsa jî tevlihev e.
:# Êdî di mobîlê de dixebite, heta di mobîlê de xweştir xuya dike.
:# Moda tarî
:# OOUI dewsa jquery.ui
:# Li qutiyê çi dixwazî zêde bikî, dikare li gorî îsm, sifet, fiîl bitewîne. Lê ji bo fiîl tenê dikare çend heb inflection bîne.
:# Butona paqij bike lê zêde kir.
:# Çend paqijiyên jêgirtinên Google Kitêbê niha hene.
:[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 23:38, 18 tîrmeh 2026 (UTC)
::Tewandina fiîlan û xeletiya modulê lazim e were rastkirin. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 14:40, 21 tîrmeh 2026 (UTC)
== [[MediaWiki:Gadget-wikt.add-examples.js]] ==
Min ev amûr hinek rojane kir feqat çend problem hene berî ku bar bikin.
Tiştên ku min guhart:
# Êdî li sayfeyên bi {{ş|maneid}} jî dixebite,
# Cihê di wîkîtekstê de yê ku jêgirtin were îlawekirin baştir bû,
# [[Mediawiki:Gadget-citoid-helper.js|citoid helper]] zêde kir ji bo ku bi hêsanî çavkanî bi riya doi, isbn an urlyê werin tijîkirin.
* [[Bikarhêner:Wikihez/Gadget-wikt.add-examples.css]] --> [[MediaWiki:Gadget-wikt.add-examples.css]]
* [[Bikarhêner:Wikihez/Gadget-wikt.add-examples.js]] --> [[MediaWiki:Gadget-wikt.add-examples.js]]
- --[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 00:50, 19 tîrmeh 2026 (UTC)
:Min "wikt." qismên cache kirinê ya wîkiya fransî bi [[MediaWiki:Gadget-StorageUtils.js]] guhartiye. loma ji bîr nekin wê amûrê li [[MediaWiki:Gadgets-definition]] zêde bikin. û navê amûrê jî biguhêrînin. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 09:15, 23 tîrmeh 2026 (UTC)
::Berê li ser WF:ceribandin dixebitî. niha naxebite. Divê were rastkirin. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 22:10, 7 tebax 2026 (UTC)
== Gadget-translation editor ==
* [[MediaWiki:Gadget-translation editor.js]]: divê formata en.wîktê were bikaranîn ji ber ku me gelek tercime ji en.wîktê kopî kir û ev js hîn nikare formata wekî li jêr bi kar bîne.
<syntaxhighlight lang="wikitext">
* {{Z|sh}}:
*: Kirîlî:
*: Latînî
</syntaxhighlight>
—[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:17, 16 tîrmeh 2026 (UTC)
== [[Mediawiki:Gadget-linkify.js]] ==
* ''rûpeleke'' wekî<syntaxhighlight lang="wikitext">[[rûpeleke]]</syntaxhighlight> lînk dike, bi regexê belkî dikare wisa bike <syntaxhighlight lang="wikitext">[[rûpel]]eke</syntaxhighlight>
—[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:17, 16 tîrmeh 2026 (UTC)
* Amûreke din wekî [[User:Wikihez/Gadget-linkify.js|linkify]] lazim e ku herfên mezin biçûk bike ji bo kurmancî.—[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:17, 16 tîrmeh 2026 (UTC)
:{{r|Bikarhêner}} Merheba bira, dikarî viya jî bar bikî?:
* [[Special:PermanentLink/6291974|linkify]] --> [[Mediawiki:Gadget-linkify.js]]
Spas--[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 11:42, 29 tîrmeh 2026 (UTC)
:Dûre [https://ku.wiktionary.org/wiki/MediaWiki:Gadget-start.js#L-283 li vir] wiktviLinkify bike kuLinkify xêra xwe [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 11:51, 29 tîrmeh 2026 (UTC)
::Min ji bîr kir lê zêde bikim niha nikare "Dİ" bike "di", xeletiyeke berbelav a di nivîsên kurdî de, herfên din ên wekî ll yan rr jî hewce ne werin zêdekirin. Dûre em zêde bikin. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 21:42, 29 tîrmeh 2026 (UTC)
:::Min nû ferq kir, sayfeyên ku hîn nehatine çêkirin wîkîlînk nake. Problemeke mezin e divê were rastkirin. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 18:15, 30 tîrmeh 2026 (UTC)
::::Na, lînk dike, tiştekî din heye... [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 10:49, 31 tîrmeh 2026 (UTC)
== Amûra manayê ==
Amûreke din ji bo nivîsina maneyê wekî Nimûne zêde bike lazim e [https://ku.wiktionary.org/w/index.php?title=Bikarh%C3%AAner:Wikihez/test.js&oldid=6276876 js] [https://ku.wiktionary.org/w/index.php?title=%C5%9Eablon:ceribandin2&oldid=6265629 şablon] [https://ku.wiktionary.org/w/index.php?title=Bikarh%C3%AAner:Wikihez/common.css&oldid=6265642 css] --[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 09:12, 23 tîrmeh 2026 (UTC)
== [[MediaWiki:Gadget-jeder.js]] ==
@[[Bikarhêner:Ghybu|Ghybu]] Çavkaniyên jêderê di moda pêşdîtinê de jêderê vedişêre, ew jî min gelek eciz dike wextê çavkanî zêde dikim. Min ji Claude pirsî û kodan nîşanî wê da, wisa cewab da:
Yes — and this file actually explains the whole thing precisely, better than my earlier guess about extract-stripping.
What's happening: the CSS rule
<syntaxhighlight lang="css">
.jeder{
display:none;
}
</syntaxhighlight>
hides every citation by default, *unconditionally*. The only thing that ever makes it visible again is the gadget's JS: it finds each `.jeder`, builds the short "`— (year, author, +)`" summary from the `.j-pewist` fields, and either reveals the short version or — for citations with no `.j-pewist` fields — explicitly sets `display:inline` on the original.
So visibility of citations depends entirely on this JS running. In the normal article view (Image 1) it runs, so you see the collapsed "`(1918, E. Rehmî Ji Mala Hekariyan, Amadekar: M. E. Bozarslan, +)`" form. In whatever generated Image 2 — a hover-preview/extract/API render — gadget JS doesn't execute, so nothing ever removes the `display:none`, and the citation vanishes completely rather than degrading to "still visible, just not collapsed."
<b>The fix:</b> flip the default so the *un-collapsed* state is the safe fallback, and let JS do the hiding only after it successfully builds the short version. That way, any context without JS shows the full citation instead of nothing.
CSS — remove the blanket hide:
<syntaxhighlight lang="css">
.jeder {
/* intentionally no display:none here — see Gadget-... .js */
}
</syntaxhighlight>
JS — do the hiding from script, after the short form exists:
{{veşêre-ser}}
<syntaxhighlight lang="js">
// Ji bo şablonên [[Şablon:jêder]] hatiye nivîsandin.
// Parametreyên ku di navbera "<span class="j-pewist">...</span>" an "{{j-pêwîst|...}}" de ne venaşêre.
$(function() {
function nivisaKurtTevliBike(sund, nivisKurt) {
var zede = $('<a>+</a>')
.addClass('click')
.attr('href', '#')
.attr('title', 'zêdetir')
.css('font-weight', 'bold');
var kurt = $(' <a>↩</a>')
.addClass('click-kurt')
.attr('href', '#')
.attr('title', 'veşêre')
.css('font-weight', 'bold');
$('<span>' + nivisKurt + '</span>')
.append(zede).append(')')
.addClass('jeder-kurt')
.css('font-size', '0.85em')
.insertAfter(sund);
sund.append(' ').append(kurt);
// Only hide the full citation once the short summary actually exists.
// If this script never runs (no-JS clients, hover-preview extracts,
// action=render, etc.), the full citation stays visible instead of
// silently disappearing.
sund.css('display', 'none');
}
function vesere() {
$('.jeder').each(function() {
var elmTab = $(this).find('.j-pewist').clone();
if (elmTab.length) {
var elm = '';
for (var i = elmTab.length - 1; i >= 0; i--) {
elm = elmTab.eq(i).html() + ', ' + elm;
}
var nivisKurt = ' — (' + elm;
nivisaKurtTevliBike($(this), nivisKurt);
}
// else: no j-pewist fields to shorten — leave the full citation
// as it already renders (visible), nothing to do.
});
}
vesere();
$(".click").click(function(e) {
e.preventDefault();
$(this).parent('.jeder-kurt').css('display', 'none');
$(this).parent('.jeder-kurt').prev().css('display', 'inline');
});
$(".click-kurt").click(function(e) {
e.preventDefault();
$(this).parent('.jeder').css('display', 'none');
$(this).parent('.jeder').next().css('display', 'inline');
});
});
</syntaxhighlight>
Net effect:
- JS-enabled readers (normal article view): identical experience to today — collapsed short form with `+`/`↩` toggle.
- No-JS contexts (previews, extracts, screen readers before JS loads, print, etc.): full citation is shown instead of nothing — a real regression fix rather than a cosmetic one.
One caveat worth being upfront about: this fixes it *if* the preview context renders the gadget's HTML/CSS but doesn't execute gadget JS (which is the far more common case, and what this code strongly suggests is happening). If Image 2 instead comes from a pipeline that strips the `.jeder`/`.jegirtin-text` elements out of the HTML entirely before this CSS/JS even gets a chance to apply, no on-wiki CSS/JS change can help — that'd need the extract-generation config changed instead. Given what this gadget file shows, though, I'd bet on the CSS-hide explanation.
{{veşêre-bin}}
Em dûre biceribînin eger xeletî tinebe, vî tiştî jî rast bikin. --[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 20:00, 23 tîrmeh 2026 (UTC)
:Ez APIya MediaWiki rind nizanim belkî Claude dizane:) Em nikarin bibêjin dema ku moda "''action=edit''" e fonksiyona <code>function vesere()</code> bi kar meyîne. [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 15:57, 24 tîrmeh 2026 (UTC)
::Na, di moda "edît"-ê de <code>var elmTab = null</code>... [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 16:13, 24 tîrmeh 2026 (UTC)
?:
<syntaxhighlight lang="js">
if (
mw.config.get('wgAction') === 'edit' ||
mw.config.get('wgAction') === 'submit'
){
var elmTab = [];
} else {
var elmTab = $(this).find('.j-pewist').clone();
}
</syntaxhighlight>
--[[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 16:31, 24 tîrmeh 2026 (UTC)
:Ez jî nizanim Claude çiqas ji mediawiki fêm dike lê heta niha ti tişt nîne ku min jê pirs kir û nikaribû çêke, bila wekî reklam nebe feqat Claude mikemmel e, dibêjim "li vir çima xeletiyeke wisa derdikeve" di dosyeya 2000 rêzî de diçe tiştê xelet tenê rast dike tiştekî din naguherîne. Chatgpt û aistudio qet wisa nakin, eynî dosyeyê deh cara dinivîsin, deh netîceyên cuda derdikevin :D
:Em dikarin vê amûrê wextê edit û submitê neaktîv bikin wekî <syntaxhighlight lang="js">if (!(action === "edit" || action === "submit")) {
:return;</syntaxhighlight> lê wê demê display:none wê çibe nizanim. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 18:23, 24 tîrmeh 2026 (UTC)
::display:none ne hewce ye ma jixwe di nav kodê [https://ku.wiktionary.org/w/index.php?title=MediaWiki:Gadget-jeder.js&oldid=6069025#L-49 L-49] de inline/none heye? [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 18:53, 24 tîrmeh 2026 (UTC)
:Min bi vî şiklî [https://ku.wiktionary.org/w/index.php?title=Bikarh%C3%AAner:Wikihez/vector-2022.js&diff=prev&oldid=6290816#L-28] ceriband feqat nexebitî. "display:none" di pêşdîtinê de dixebite feqat js naşixule. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 14:43, 25 tîrmeh 2026 (UTC)
::Kodên JSê pir hez nakim (pêşta hukurina APIya MWyê hewce bû) dîsa jî ez ê seh bikim :) [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 16:49, 27 tîrmeh 2026 (UTC)
:::Ez niha bi vî şiklî [https://ku.wiktionary.org/w/index.php?title=Bikarh%C3%AAner:Wikihez/test.js&oldid=6290820] [https://ku.wiktionary.org/w/index.php?title=Bikarh%C3%AAner:Wikihez/common.css&oldid=6290821#L-8] bi kar tînim ti problem nîne. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 17:09, 27 tîrmeh 2026 (UTC)
== [[MediaWiki:Gadget-PagePreviews.js]] ==
Ez dibêjim em vê amûrê jî çêkin [[:en:MediaWiki:Gadget-PagePreviews.js]] --[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 10:56, 3 tebax 2026 (UTC)
= Moda tarî =
== [[Şablon:wîkîpediya]] ==
Rengê tarî de xirab e.--[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 19:36, 4 tebax 2026 (UTC)
= Bot =
Karên ku bi botê werin çêkirin ji kerema xwe li vir binivîsin.
== Kategorî:Biwêj ==
[[:Kategorî:Biwêj]] divê were paqijkirin, lîsteya madeyên {{ş|biwêj}} çêke, yên ku tê de bûn, kirin, man hene filtre bike yên din bi destî tê çêkirin.—[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:17, 16 tîrmeh 2026 (UTC)
== Jêgirtin ==
Xistina jêgirtinên beşa [https://ku.wiktionary.org/w/index.php?search=insource%3A%2F%3D+*Ji+%5BWw%5D%C3%AAjey%C3%AA+*%3D%2F&title=Taybet%3AL%C3%AAger%C3%AEn&profile=advanced&fulltext=1&ns0=1&searchToken=8rh0bmw8dccsi7aynl6zli8uf ji wêjeyê] li beşa maneyê. —[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:17, 16 tîrmeh 2026 (UTC)
== Bota Toolforgeê ==
Botekî Toolforgeê lazim e ji bo ku xeletiyên biçûk wekî şablonên bi navên îngilîzî werin kurdîkirin yan jî valahiya beşan rast bike û hwd.—[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:17, 16 tîrmeh 2026 (UTC)
:Min [[Bikarhêner:Wikihez/skrîpt/py/kuwiktkozmetik.py|paqijiyen kozmetîk]] hazir kir feqat hîn navên şablonan naguhêre. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 20:05, 4 tebax 2026 (UTC)
== Updatew ==
Bota [[Bikarhêner:Wikihez/skrîpt/py/updateW.py|updateW]] divê were rojanekirin. Yan jî yekî nû were çêkirin. Şablonên {{ş|W}} di beşa tercimeyan de sererast dike û zimanan rêz dike. Ya niha xeletiya navê zimanî dide.—[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:17, 16 tîrmeh 2026 (UTC)
== sihir --> sêhr ==
Tercimeyên ''[[sêhr]]'' hemû dibêje ''sihir'' loma bi botê lazim e kirin ''sêhr''. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 17:43, 18 tîrmeh 2026 (UTC)
:Sihirbaz --> sêhrbaz [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 18:07, 18 tîrmeh 2026 (UTC)
== Tercimeyên dîroknas ==
Li tercimeyên [[dîroknas]], hevmaneyên wê hewce ye were îlawekirin. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 18:44, 18 tîrmeh 2026 (UTC)
== Mewlûd ==
Sererastkirina jêgirtinên mewlûdê [https://ku.wiktionary.org/w/index.php?search=insource%3A%2Fw%5C%3AMela+His%C3%AAn%C3%AA+Batey%C3%AE%2F&title=Taybet%3AL%C3%AAger%C3%AEn&ns0=1&searchToken=8m0tguy3sqt7edr4sg0u8hedo] wekî [https://ku.wiktionary.org/w/index.php?title=dax%C3%AEdar&curid=284303&diff=6265851&oldid=6142285] [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 09:43, 20 tîrmeh 2026 (UTC)
7hr04r2si7gxa82w9xuzhqvwd89na6k
6333737
6333727
2026-08-14T21:35:24Z
Ghybu
1393
/* MediaWiki:Gadget-start.js */ Bersiv
6333737
wikitext
text/x-wiki
{{/ser}}
= Karên ferhengî =
== Mane ==
* [[:Kategorî:Madeyên bê beşa mane]]
** [[:Kategorî:Madeyên bê beşa mane bi kurmancî]]
Li ser van rûpelan ev made hene ku maneyan wan nehatine nivîsin û divê werin nivîsin. —[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:17, 16 tîrmeh 2026 (UTC)
== Etîmolojî ==
*[[:Kategorî:Daxwazên etîmolojiyê]]
**[[:Kategorî:Daxwazên etîmolojiyê bi kurmancî]]
Li ser van rûpelan ev made hene ku etîmolojiya wan hîn nehatine nivîsin. Ji bo alîkariyê binêre [[WF:Etîmolojî]] —[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:17, 16 tîrmeh 2026 (UTC)
== Cureyê rêzimanî ==
* [[:Kategorî:Gotarên bê kategoriya rêzimanî]]
* [[:Kategorî:Gotarên bê kategoriya rêzimanî bi kurmancî]]
Li ser van rûpelan ev made hene ku cureyên wan yên rêzimanî hîn nehatine nivîsin. Ji bo alîkariyê binêre [[Alîkarî:Cureyên peyvan]] —[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:17, 16 tîrmeh 2026 (UTC)
== Kontrol ==
* [[:Kategorî:Kontrol]]
** [[:Kategorî:Kontrola maneyê]]
Ev madde bi botê hatine çêkirin, yek bi yek divê werin kontrolkirin. —[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:17, 16 tîrmeh 2026 (UTC)
= Şablon =
== IPA ==
* {{ş|IPA}} divê [[Modul:IPA]] bi kar bîne. —[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:17, 16 tîrmeh 2026 (UTC)
== Deng ==
Kurdîkirina belgekirina {{ş|deng}} lazim e.--[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 00:06, 19 tîrmeh 2026 (UTC)
= Modul =
== Modul:form of/templates ==
* [[Modul:form of/templates]]: Divê ev modul were rojanekirin û xeletiyên berê wekî ([[hevalê]]) werin rastkirin. —[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:17, 16 tîrmeh 2026 (UTC)
*:Merheba @[[Bikarhêner:Ghybu|Ghybu]] Te gotibû di vê modulê de xeletî hene, jkx tu dikarî li vir binivîsî çi kêmasî hene, daku wextê rojane dikim ez ji bîr nekim? [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:16, 21 tîrmeh 2026 (UTC)
*::Silav. Nizanim ji bîra min çûye... Herwiha ji bo çêkirina formên navdêran zanînên cîns û tîpa dawî bes e:
*::* (-ê, mê) => çemandî, bangkirin
*::* (-ê, nêr) => îzafe
*::* (-ê, mê û nêr) => îzafe (nêr), bangkirin (mê), çemandî (mê)
*::* (-a) => îzafe (mê)
*::* (-ekî) => îzafe û çemandî (nêr, nebinavkirî)
*::* (-eke) = > îzafe (mê, nebinavkirî)
*::* ...
*:: <code>if find(mw.title.getCurrentTitle().subpageText, 'ekî$') then ... end</code>
*::<code><nowiki>{{ku-tewîn-navForm|<navdêr>|<zayend>}</nowiki></code>
*::Tablo û nivîs di yekcarî de tên çêkirin...
*::Feqet problem lêzêdekirina mînakan e. [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 17:34, 21 tîrmeh 2026 (UTC)
*:::Lêzêdekirina kîjan nimûneyan? Ev koda js ji bo çi ye? Qisûrê nenêre min fêm nekir :/ [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 18:13, 21 tîrmeh 2026 (UTC)
*::::Li vira ([[hevalê#Formeke navdêrê]]) di bin maneyên 1. û 2. mînak nayên tevlî kirin :) [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 18:18, 21 tîrmeh 2026 (UTC)
*:::::Ev tercîh e, ne mecbûrî ye, em dikarin [https://ku.wiktionary.org/w/index.php?title=heval%C3%AA&diff=prev&oldid=6276350 wisa] bikin. Wekî din? [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 18:29, 21 tîrmeh 2026 (UTC)
*::::::Min li jor tênê got ku tenê parametreyên "navdêr" û "zayend" hewce nee. Bi '''[//ku.wiktionary.org/w/index.php?title=heval%C3%AA&curid=969734&diff=6276353&oldid=6276350 vî]''' awayî jî tê çêkirin. Parametreyên din ne hewce ne. [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 18:38, 21 tîrmeh 2026 (UTC)
*:::::::Ji bo wê şabloneke din lazim e, bila ev şablon wekî îngilîzî bimîne em ji bo kurmancî yekî din çêkin. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 18:42, 21 tîrmeh 2026 (UTC)
*::::::::[https://ku.wiktionary.org/w/index.php?title=heval%C3%AA&oldid=6276885 wisa] çawa ye? Bi min nivîsîna nimûneyan zêde ne lazim e ji ber ku ti kes serê xwe pê naêşîne. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 09:46, 23 tîrmeh 2026 (UTC)
*:::::::::@[[Bikarhêner:Ghybu|Ghybu]] Vê şablonê bi kar bînin an na? Navê şablonê kê çi be? [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 19:07, 24 tîrmeh 2026 (UTC)
== Modul:columns ==
* [[Modul:columns]] were rojanekirin û {{ş|kol3}} bila lînka ''nîşan bide'' deyne beriya sernavê, kolê di qutiya rengî de bila nebe. —[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:17, 16 tîrmeh 2026 (UTC)
== Modul:etymon ==
* [[Modul:etymon kevn]]: Rojanekirin hewce ye. —[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:17, 16 tîrmeh 2026 (UTC)
== [[Modul:ziman/code to canonical name]] ==
Belgekirina skrîptê û js divê were rastkirin. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 09:31, 22 tîrmeh 2026 (UTC)
:* [[MediaWiki:UpdateLanguageNameAndCode.js]]
:[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 09:50, 22 tîrmeh 2026 (UTC)
::* [[Modul:ziman/print]]
::[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 09:52, 22 tîrmeh 2026 (UTC)
:::*[[Modul:ziman/şablon]]
:::[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 09:56, 22 tîrmeh 2026 (UTC)
::::* [[MediaWiki:Gadget-translation editor.js/ziman.json]]
::::[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 11:06, 22 tîrmeh 2026 (UTC)
== [[Modul:quote]] ==
Piştî ev modul hate hazirkirin, lazim e navên jegirtinan werin rastkirin û li hemûyan {{param|jêgirtin}} were zêdekirin. Bnr. [[Gotûbêja şablonê:Jêgirtin/Ehmedê Xanî/Mem û Zîn]] [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 22:27, 5 tebax 2026 (UTC)
::Ev modul hema bêje hazir e. Hûn li ser van madeyan çi difikirin:
# {{para|tarîx}} lazim e full date be eger na, lazim e {{para|sal}} were bikaranîn. Feqat "'''2021''' kanûna pêşîn 23" bi vî şiklî bi min ne problem e çnkî derdê en.wikt "attestation" e delîla herî pêşî jî sal e.
#: {{demo|sep=wisa xuya dibe<br>|<nowiki>{{jêder-kitêb/ceribandin|en
|tarîx=23 December 2021|nivîskar=Harry Hobbs; George Williams|sernav=Micronations and the Search for Sovereignty|url=https://www.cambridge.org/core/books/micronations-and-the-search-for-sovereignty/B0414A3A322695D9EE71E4CDDFDA06DE|weşanxane=Cambridge University Press|rûpel=155|isbn=978-1-009-15012-5|jêgirtin=jêgirtin.|t=-}}</nowiki>}}
#{{para|amadekar}}/{{para|edîtor}}/{{para|terciman}} bi şiklê edîtoriya, amadekariya, tercimekirina
#: {{demo|sep=dide<br>|<nowiki>{{jêder-kitêb/ceribandin|en
|sernav=Medical Surgical Nursing|serî=Juta's Manual of Nursing|cildê-seriyê=volume 4|edîtor=Sophie Mataniele Mogotlane; Joyce Mokoena; Motshedisi Eunice Chauke; Anne Young|sal=2005|weşanxane=Juta Academic|isbn=978-0702171840|rûpel=!12-29|jêgirtin=jêgirtin|t=-}}</nowiki>}}
--[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 13:09, 10 tebax 2026 (UTC)
:@[[Bikarhêner:Bikarhêner|Bikarhêner]] û @[[Bikarhêner:Ghybu|Ghybu]] Hîn gelek tişt hene divê îzah bikin û fikrê we pirs bikim, feqat îzahkirin pir zor e, em dest bi bikaranînê bikin û dûre tiştên ku hûn naxwazin em dikarin biguherînîn, dibe? [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 13:11, 10 tebax 2026 (UTC)
::Dibe, piştî çêbû, em di praktîkê de bibînin ku çawa ye. -- [[Bikarhêner:Bikarhêner|Bikarhêner]] ([[Gotûbêja bikarhêner:Bikarhêner|gotûbêj]]) 18:05, 10 tebax 2026 (UTC)
= Javascript =
== [[Mediawiki:Gadget-citoid-helper.js]] ==
Ji bo bi citoidê kopîkirina malûmatên çavkaniyan amûreke wisa lazim e. Xisûsen ji ber ku bi çend amûrên din dikare were bikaranîn.
Feqat çend problem hene, şablonên me de kêmasiya parametreyan gelek in û xerîteyên citoidê hîn nehatine çêkirin. Wana sererast bikin dûre vê amûrê çêkin, piştre [[MediaWiki:Gadget-start.js|start.js]] û [[MediaWiki:Gadget-wikt.add-examples.js|add examples.js]] were rojanekirin.
- --[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 00:04, 19 tîrmeh 2026 (UTC)
:Merheba @[[Bikarhêner:Bikarhêner|Bikarhêner]], ez dibêjim karê Modul:quote zêde wext bistîne, bila em dest bi bikaranîna van amûran bikin dûre kêmasiyan em ê temam bikin înşela. Dikarî vana li cihên xwe yên rast kopî paste bikî?
# [[Special:PermanentLink/6291574|Bikarhêner:Wikihez/skrîpt/js/Gadget-citoid-helper.js]] --> [[Mediawiki:Gadget-citoid-helper.js]]
# Ya li jêr kopî bike qismê herî dawî ya AmûrênVeşartî li [[MediaWiki:Gadgets-definition]]:
## <code><nowiki>* citoid-helper[ResourceLoader|hidden|default|dependencies=mediawiki.util]|citoid-helper.js</nowiki></code>
--[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:58, 26 tîrmeh 2026 (UTC)
== [[MediaWiki:Gadget-start.js]] ==
Rojanekirin hewce ye. Min gelek tişt lê zêde kir lê ez niha test dikime. Piştre em bar bikin:
* [[Bikarhêner:Wikihez/Gadget-start.js]] --> [[MediaWiki:Gadget-start.js]]
* [[Bikarhêner:Wikihez/Gadget-start.css]] --> [[MediaWiki:Gadget-start.css]]
--[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 22:08, 17 tîrmeh 2026 (UTC)
:Min [[MediaWiki:Gadget-start/data.json|data.json]] çêkir ji bo ku bi hêsanî malûmatên heyî werin guhartin bêyî guhartina Javascriptê. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 19:49, 18 tîrmeh 2026 (UTC)
:Xeletiyên ku ji bîr nekim rast bikim:
:* Wextê min çavkanî "kitêb" hilbijart û bi destî tije kir xeletiyeke [https://ku.wiktionary.org/w/index.php?title=xezete&diff=prev&oldid=6265392 wisa] derket her kelîme hate lînkkirin.
:* <code>html("⠿")</code> ev ne lazim e.
:* textarea ji bo çavkaniyên jêgirtinan xaseten yên sernav hîn jî ne draggable e.
:* pêşdîtina zindî checkbox wextê tê rakirin, pêşdîtin winda nabe.
:* Butona mobîlê ya vekirina formê di moda tarî de belî nabe, tenê wekî qutiyeke tarî xuya dibe.
:* Metna hişyarkirinê di guhartina rûpelên heyî de lazim e baştir bikim.
:[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 23:51, 18 tîrmeh 2026 (UTC)
::Ev problem çêbûn, ez ê binêrim ka çi problemên din hene. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 14:15, 19 tîrmeh 2026 (UTC)
:::Çêke: Ji bo qismê çavkaniyê yek dikare API call û Kategorî:Çavkanî bi kar bîne ji bo ku şablon zêde bikî ji yên heyî. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 21:21, 19 tîrmeh 2026 (UTC)
::::Ev jî çêbû, min beşa çavkanî jî çêkir. Eger xeletî dernekeve û problema valahiya piştî etîketê ji bîr nekim, piştî rojanekirina amûrên linkify, û citoid em dikarin bar bikin. Ez ê ti tiştê nû îlawe nekim, zêde dirêj bû. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:14, 21 tîrmeh 2026 (UTC)
:::::Merheba @[[Bikarhêner:Bikarhêner|Bikarhêner]]. Dikarî wana bar bikî?
:::::* [[Bikarhêner:Wikihez/Gadget-start.js]] --> [[MediaWiki:Gadget-start.js]]
:::::* [[Bikarhêner:Wikihez/Gadget-start.css]] --> [[MediaWiki:Gadget-start.css]]
:::::* [[MediaWiki:Gadgets-definition]] wisa rojane bike:
:::::* start[ResourceLoader|default|package|dependencies=mediawiki.util,ext.gadget.StorageUtils,ext.gadget.citoid-helper]|start.js|start.css|start.js/data.json
:::::[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 09:39, 5 tebax 2026 (UTC)
{{şirove}} Dewama ''[[Special:PermanentLink/6333688|Gotûbêja bikarhêner:Rewiye tine#WF:Nû]]'' bila gotûbêja wî em spam nekin. :D
{{r|Ghybu}} dikarî [[Special:PermanentLink/6333689|vê htmlê]] binêrî claude rast fêm kiriye yan na? Daxîne û wek html qeyd bike. --[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 18:43, 14 tebax 2026 (UTC)
:Min seh wîkîyên din jî kir, li wîkiya fransî tiştekî wekî daxwaza min çêkirine (tiştên ku ne hewce ne wekî "tab" çêkirine an jî hatine vêşartin): [//fr.wiktionary.org/w/index.php?title=fdsdfdsf&action=edit&redlink=1]. Formata me yê berî jî bi vê lojîkê hatibû çêkirin, wekî de.wiktionary ([//de.wiktionary.org/w/index.php?title=sdfdsfsdfs&action=edit&preload=Vorlage:Formatvorlage_(Substantiv_vereinfacht)]) [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 19:01, 14 tebax 2026 (UTC)
::PS: Dîsa jî Claude min rind fêm kiriye :)) Feqet min got ku beşên Mane", "Bilêvkirin" û "Beşên din" cem hev (wekî "tab") ". Û dema ku tu terî di nav "Besên din" Hevmane, Jê, ... li wira werin dayîn. Wêne/Resim û Nimûne jî di nav beşa ("tab") "Mane" [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 19:17, 14 tebax 2026 (UTC)
::Erê ya fr.wikt min jî dîtibû jixwe fikrê tab min ji wan girtibû :D (feqat min li cem wan tenê tab-a maneyê dît yên din nedît çawa tê vekirin nizanim) Berê hemû beş piştî maneyê bibûn, dûre min sê Tab çêkir, Bingehîn+Lînkkirin+Bikaranîn. Niha lazim e Tabeke din çêkim. Ya ku claude çêkiriye bnr. [[Special:PermanentLink/6333698#L-7]] ne baş e bnr. [[Special:PermanentLink/6333703|qiyaskirinê li ser vê htmlê]] Êdî ez Claude abuse dikime ji ber ku Pro ye :D [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 19:26, 14 tebax 2026 (UTC)
:::Claude dibêje:
:::Good clarification — that's a real simplification, not just a relabel. Updated STEP_GROUPS from 5 tabs down to 3:
:::Mane — the definitions themselves, plus Wêne (image), now grouped in with it instead of sitting in a separate misc tab. Nimûne needed no change since it was already rendering inside each Mane sense block, not as its own step.
:::Bilêvkirin — unchanged, still just pronunciation.
:::Beşên din — everything else in one flat bucket: hevmane, jê, têkildar, herwiha binêre, formên alternatîv, dijmane, jornav, jêrnav, notên bikaranînê, bi alfabeyên din, dûnde, çavkanî, bêhtir bixwîne, tewandin, etîmolojî, zaravayên din, werger, and bnr-h — instead of being split across the old Bingehîn/Lînkkirin/Bikaranîn/Din tabs.
:::No DOM-order changes were needed this time — the fix from the blank-tab bug looks up the tab bar's position dynamically now, so it didn't matter that I regrouped which steps go where. Same two files, saved to your Wiki folder — worth another pass through all three tabs once you've pasted this in, same as last time. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 19:34, 14 tebax 2026 (UTC)
::::Mînak:
Ziman
---------------------------------------------
Cureyê rêzimanî (Navdêr)
Navdêr (hilbijêre) ┆ Cîns (hilbijêre) ┆ Jimar (hilbijêre)
- lêker -mê -yekjimar
- rengdêr -nêr -pirjimar
- ... -... -...
---------------------------------------------
Mane || Bilêvkirin || Beşên din
hilbijêre:
- mane - IPA - Hevmane
- nimûne - kîte - Dijmane
- wêne
Dema ku tu "Cureyê rêzimanî" dikî "Lêker" :
Cureyê rêzimanî (Lêker)
Lêker (hilbijêre) ┆ Cure (hilbijêre)
- navdêr -rehê niha
- rengdêr -rehê borî
- ... -...
---------------------------------------------
┆ : select/option ("tab" nîne, tê dîtin)<br>
|| : "tab"
-- [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 19:45, 14 tebax 2026 (UTC)
'''Sê-stûnî ("┆" = ne tab), li gorî Cureyê rêzimanî:'''
{| class="wikitable"
! Cureyê rêzimanî !! Stûna 2 !! Stûna 3 !! Têbînî
|-
| Navdêr / Serenav
| Cîns (hilbijêre ▾: mê / nêr / ... — tenê heke ziman zayendê rêzimanî hebe)
| '''Jimar''' (?) — pirs li jêr
| Qadên "Forma mê/nêr/pirjimar/yekjimar" niha jî li vir hene — ma ev di "Jimar"-ê de tên tevlihev kirin, an cuda dimînin?
|-
| Rengdêr
| (heman m/n/p/y forman ku Navdêr distîne)
| Sûperlatîv (sûp) / Komparatîv (komp)
| Ne li ser her du nîgaran hatiye behs kirin — ma sê-stûnî li vir jî tê bikaranîn?
|-
| Lêker
| '''Cure''' = Cureyê lêkerê (hilbijêre ▾: gerguhêz / negerguhêz / xwerû-... / pêkhatî-... / hevedudanî-... / biwêjî-... — 10 vebijêrk)
| Di heman stûnê de: Rehê dema niha / Rehê dema borî / Rehê dema bilanî (her sê qadên nivîsandinê ne, ne hilbijêrk in)
| Ma "Cure" her sê rehan di xwe de digire wek yek stûn, an her yek stûneke cuda ye?
|-
| Tîp (herf/sembol)
| Girdêk (gir) / Hûrek (hûr)
| —
| Ne behs kiriye
|-
| Her cureyek, li gorî zimên
| Transliterasyon (tr) / Transkrîpsiyon (ts)
| —
| Bi zimên ve girêdayî ye, ne bi cureyê rêzimanî ve
|-
| Her cureyek, tenê ziman=japonî
| Hanja / Translit. hanja
| —
| Ne bi cureyê rêzimanî ve girêdayî ye
|-
| Her cureyek
| '''Tercîhên pêşketî''' (kolapsî): form, formaalt, nekatcure, nekatcins, nekatçendterm, serlînkneke, nekatpalîndrom, neformtr
| —
| Vebijarkî, ji bo hemû cureyan
|}
'''Tabên jêrîn — Mane ‖ Bilêvkirin ‖ Beşên din ("||" = tab):'''
{| class="wikitable"
! Mane !! Bilêvkirin !! Beşên din (hemû 18 hêman)
|-
| mane, nimûne, wêne
| şablonên bilêvkirinê (mînak: IPA, kîte)
| tewandin, etîmolojî, bi zaravayên din, werger, jê, têkildar, herwiha binêre, formên alternatîv, hevmane, dijmane, jornav, jêrnav, notên bikaranînê, bi alfabeyên din, dûnde, çavkanî, bêhtir bixwîne, bnr-h
|}
'''Pirsên vekirî:'''
# "Jimar" (yekjimar/pirjimar) — qadeke ku nîşan dide têketî bi xwe yekjimar e an pirjimar e. Ev cuda ye ji "Forma yekjimar (y)"/"Forma pirjimar (p)" ya heyî (ku forma DÎN a kelîmeyê tomar dike). Herdu bimînin, an werin yek kirin?
# Ma sê-stûnî tenê ji bo Navdêr/Lêker e, an ji bo Rengdêr/Tîp jî heman mantiq derbas dibe?
# Di "Beşên din" de: dixwazî pêşî navnîşek/hilbijartinek nîşan bide (17 hêmanên din jî tê de), û qad tenê piştî hilbijartinê xuya bibin?
:Tu dikarî start.js ji Tercîh/ Amûran rakî û bi test.js li Amûran herî taliyê ye biceribînî. Claude ya li jor hazir kir, Jimar ez dikarim îzah bikim. Feqat bi min di tab-a maneyê de lazim e Bi zaravayên din (heta wek werger her car bila li rûpelan were zêdekirin) û werger jî hebe.--[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 20:18, 14 tebax 2026 (UTC)
:;Navdêr: Tenê "cîns" û "jimar" bes e. "Forma mê", "Forma nêr", ... nayê fêm kirin. Bi min wekî "Tercîhên pêşketî" bi navkî din veşartî çêke.
:;Lêker: "Cureyê lêkerê" nayê fêm kirin, bi min pêşta "geguhez/negerguhêz" were hilbijartin, paşê jî form "hevdudanî/pêkatî/..." ji ber ku her kes vana nizanî... Dîsa jî tu dizanî.
:Bi min beşên "Hevmane" û dijmane jî bike de nav beşa Mane ("tab") ji ber ku pirr tên xwestin.
:Şûnda Wêne jî Nimûne/jêgirtin...
:Herwiha hemû bi rengê şîn hatiye çêkirin, nizanim beşên din (===) bi rengê gewr an reş çito dibe? [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 21:35, 14 tebax 2026 (UTC)
== [[Mediawiki:Gadget-QQ.js]] ==
Ev amûr di şikle Minerva de. Her daîm vê xeletiyê dide:
<syntaxhighlight lang="js">
TypeError: Cannot read properties of null (reading 'addEventListener') at css () at runScript () at Array.<anonymous> () at flushCssBuffer ()
</syntaxhighlight> [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 19:29, 18 tîrmeh 2026 (UTC)
:* [[Bikarhêner:Wikihez/skrîpt/js/Gadget-QQ.js]] --> [[Mediawiki:Gadget-QQ.js]]
:* [[Bikarhêner:Wikihez/Gadget-QQ.css]] --> [[Mediawiki:Gadget-QQ.css]]
:Ez dibêjim çêbû lê ka çend roj biceribînim. Tiştên ku hatin sererastkirin:
:# Google Books API Key dikarî zêde bikî, dixe cookies û di gerokê de dimîne. Berê bê API Key dixebitiya lê êdî mecbûr e ku API Key-a te hebe, bidestxistina wê ne zêde zor e lê dîsa jî tevlihev e.
:# Êdî di mobîlê de dixebite, heta di mobîlê de xweştir xuya dike.
:# Moda tarî
:# OOUI dewsa jquery.ui
:# Li qutiyê çi dixwazî zêde bikî, dikare li gorî îsm, sifet, fiîl bitewîne. Lê ji bo fiîl tenê dikare çend heb inflection bîne.
:# Butona paqij bike lê zêde kir.
:# Çend paqijiyên jêgirtinên Google Kitêbê niha hene.
:[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 23:38, 18 tîrmeh 2026 (UTC)
::Tewandina fiîlan û xeletiya modulê lazim e were rastkirin. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 14:40, 21 tîrmeh 2026 (UTC)
== [[MediaWiki:Gadget-wikt.add-examples.js]] ==
Min ev amûr hinek rojane kir feqat çend problem hene berî ku bar bikin.
Tiştên ku min guhart:
# Êdî li sayfeyên bi {{ş|maneid}} jî dixebite,
# Cihê di wîkîtekstê de yê ku jêgirtin were îlawekirin baştir bû,
# [[Mediawiki:Gadget-citoid-helper.js|citoid helper]] zêde kir ji bo ku bi hêsanî çavkanî bi riya doi, isbn an urlyê werin tijîkirin.
* [[Bikarhêner:Wikihez/Gadget-wikt.add-examples.css]] --> [[MediaWiki:Gadget-wikt.add-examples.css]]
* [[Bikarhêner:Wikihez/Gadget-wikt.add-examples.js]] --> [[MediaWiki:Gadget-wikt.add-examples.js]]
- --[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 00:50, 19 tîrmeh 2026 (UTC)
:Min "wikt." qismên cache kirinê ya wîkiya fransî bi [[MediaWiki:Gadget-StorageUtils.js]] guhartiye. loma ji bîr nekin wê amûrê li [[MediaWiki:Gadgets-definition]] zêde bikin. û navê amûrê jî biguhêrînin. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 09:15, 23 tîrmeh 2026 (UTC)
::Berê li ser WF:ceribandin dixebitî. niha naxebite. Divê were rastkirin. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 22:10, 7 tebax 2026 (UTC)
== Gadget-translation editor ==
* [[MediaWiki:Gadget-translation editor.js]]: divê formata en.wîktê were bikaranîn ji ber ku me gelek tercime ji en.wîktê kopî kir û ev js hîn nikare formata wekî li jêr bi kar bîne.
<syntaxhighlight lang="wikitext">
* {{Z|sh}}:
*: Kirîlî:
*: Latînî
</syntaxhighlight>
—[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:17, 16 tîrmeh 2026 (UTC)
== [[Mediawiki:Gadget-linkify.js]] ==
* ''rûpeleke'' wekî<syntaxhighlight lang="wikitext">[[rûpeleke]]</syntaxhighlight> lînk dike, bi regexê belkî dikare wisa bike <syntaxhighlight lang="wikitext">[[rûpel]]eke</syntaxhighlight>
—[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:17, 16 tîrmeh 2026 (UTC)
* Amûreke din wekî [[User:Wikihez/Gadget-linkify.js|linkify]] lazim e ku herfên mezin biçûk bike ji bo kurmancî.—[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:17, 16 tîrmeh 2026 (UTC)
:{{r|Bikarhêner}} Merheba bira, dikarî viya jî bar bikî?:
* [[Special:PermanentLink/6291974|linkify]] --> [[Mediawiki:Gadget-linkify.js]]
Spas--[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 11:42, 29 tîrmeh 2026 (UTC)
:Dûre [https://ku.wiktionary.org/wiki/MediaWiki:Gadget-start.js#L-283 li vir] wiktviLinkify bike kuLinkify xêra xwe [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 11:51, 29 tîrmeh 2026 (UTC)
::Min ji bîr kir lê zêde bikim niha nikare "Dİ" bike "di", xeletiyeke berbelav a di nivîsên kurdî de, herfên din ên wekî ll yan rr jî hewce ne werin zêdekirin. Dûre em zêde bikin. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 21:42, 29 tîrmeh 2026 (UTC)
:::Min nû ferq kir, sayfeyên ku hîn nehatine çêkirin wîkîlînk nake. Problemeke mezin e divê were rastkirin. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 18:15, 30 tîrmeh 2026 (UTC)
::::Na, lînk dike, tiştekî din heye... [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 10:49, 31 tîrmeh 2026 (UTC)
== Amûra manayê ==
Amûreke din ji bo nivîsina maneyê wekî Nimûne zêde bike lazim e [https://ku.wiktionary.org/w/index.php?title=Bikarh%C3%AAner:Wikihez/test.js&oldid=6276876 js] [https://ku.wiktionary.org/w/index.php?title=%C5%9Eablon:ceribandin2&oldid=6265629 şablon] [https://ku.wiktionary.org/w/index.php?title=Bikarh%C3%AAner:Wikihez/common.css&oldid=6265642 css] --[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 09:12, 23 tîrmeh 2026 (UTC)
== [[MediaWiki:Gadget-jeder.js]] ==
@[[Bikarhêner:Ghybu|Ghybu]] Çavkaniyên jêderê di moda pêşdîtinê de jêderê vedişêre, ew jî min gelek eciz dike wextê çavkanî zêde dikim. Min ji Claude pirsî û kodan nîşanî wê da, wisa cewab da:
Yes — and this file actually explains the whole thing precisely, better than my earlier guess about extract-stripping.
What's happening: the CSS rule
<syntaxhighlight lang="css">
.jeder{
display:none;
}
</syntaxhighlight>
hides every citation by default, *unconditionally*. The only thing that ever makes it visible again is the gadget's JS: it finds each `.jeder`, builds the short "`— (year, author, +)`" summary from the `.j-pewist` fields, and either reveals the short version or — for citations with no `.j-pewist` fields — explicitly sets `display:inline` on the original.
So visibility of citations depends entirely on this JS running. In the normal article view (Image 1) it runs, so you see the collapsed "`(1918, E. Rehmî Ji Mala Hekariyan, Amadekar: M. E. Bozarslan, +)`" form. In whatever generated Image 2 — a hover-preview/extract/API render — gadget JS doesn't execute, so nothing ever removes the `display:none`, and the citation vanishes completely rather than degrading to "still visible, just not collapsed."
<b>The fix:</b> flip the default so the *un-collapsed* state is the safe fallback, and let JS do the hiding only after it successfully builds the short version. That way, any context without JS shows the full citation instead of nothing.
CSS — remove the blanket hide:
<syntaxhighlight lang="css">
.jeder {
/* intentionally no display:none here — see Gadget-... .js */
}
</syntaxhighlight>
JS — do the hiding from script, after the short form exists:
{{veşêre-ser}}
<syntaxhighlight lang="js">
// Ji bo şablonên [[Şablon:jêder]] hatiye nivîsandin.
// Parametreyên ku di navbera "<span class="j-pewist">...</span>" an "{{j-pêwîst|...}}" de ne venaşêre.
$(function() {
function nivisaKurtTevliBike(sund, nivisKurt) {
var zede = $('<a>+</a>')
.addClass('click')
.attr('href', '#')
.attr('title', 'zêdetir')
.css('font-weight', 'bold');
var kurt = $(' <a>↩</a>')
.addClass('click-kurt')
.attr('href', '#')
.attr('title', 'veşêre')
.css('font-weight', 'bold');
$('<span>' + nivisKurt + '</span>')
.append(zede).append(')')
.addClass('jeder-kurt')
.css('font-size', '0.85em')
.insertAfter(sund);
sund.append(' ').append(kurt);
// Only hide the full citation once the short summary actually exists.
// If this script never runs (no-JS clients, hover-preview extracts,
// action=render, etc.), the full citation stays visible instead of
// silently disappearing.
sund.css('display', 'none');
}
function vesere() {
$('.jeder').each(function() {
var elmTab = $(this).find('.j-pewist').clone();
if (elmTab.length) {
var elm = '';
for (var i = elmTab.length - 1; i >= 0; i--) {
elm = elmTab.eq(i).html() + ', ' + elm;
}
var nivisKurt = ' — (' + elm;
nivisaKurtTevliBike($(this), nivisKurt);
}
// else: no j-pewist fields to shorten — leave the full citation
// as it already renders (visible), nothing to do.
});
}
vesere();
$(".click").click(function(e) {
e.preventDefault();
$(this).parent('.jeder-kurt').css('display', 'none');
$(this).parent('.jeder-kurt').prev().css('display', 'inline');
});
$(".click-kurt").click(function(e) {
e.preventDefault();
$(this).parent('.jeder').css('display', 'none');
$(this).parent('.jeder').next().css('display', 'inline');
});
});
</syntaxhighlight>
Net effect:
- JS-enabled readers (normal article view): identical experience to today — collapsed short form with `+`/`↩` toggle.
- No-JS contexts (previews, extracts, screen readers before JS loads, print, etc.): full citation is shown instead of nothing — a real regression fix rather than a cosmetic one.
One caveat worth being upfront about: this fixes it *if* the preview context renders the gadget's HTML/CSS but doesn't execute gadget JS (which is the far more common case, and what this code strongly suggests is happening). If Image 2 instead comes from a pipeline that strips the `.jeder`/`.jegirtin-text` elements out of the HTML entirely before this CSS/JS even gets a chance to apply, no on-wiki CSS/JS change can help — that'd need the extract-generation config changed instead. Given what this gadget file shows, though, I'd bet on the CSS-hide explanation.
{{veşêre-bin}}
Em dûre biceribînin eger xeletî tinebe, vî tiştî jî rast bikin. --[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 20:00, 23 tîrmeh 2026 (UTC)
:Ez APIya MediaWiki rind nizanim belkî Claude dizane:) Em nikarin bibêjin dema ku moda "''action=edit''" e fonksiyona <code>function vesere()</code> bi kar meyîne. [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 15:57, 24 tîrmeh 2026 (UTC)
::Na, di moda "edît"-ê de <code>var elmTab = null</code>... [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 16:13, 24 tîrmeh 2026 (UTC)
?:
<syntaxhighlight lang="js">
if (
mw.config.get('wgAction') === 'edit' ||
mw.config.get('wgAction') === 'submit'
){
var elmTab = [];
} else {
var elmTab = $(this).find('.j-pewist').clone();
}
</syntaxhighlight>
--[[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 16:31, 24 tîrmeh 2026 (UTC)
:Ez jî nizanim Claude çiqas ji mediawiki fêm dike lê heta niha ti tişt nîne ku min jê pirs kir û nikaribû çêke, bila wekî reklam nebe feqat Claude mikemmel e, dibêjim "li vir çima xeletiyeke wisa derdikeve" di dosyeya 2000 rêzî de diçe tiştê xelet tenê rast dike tiştekî din naguherîne. Chatgpt û aistudio qet wisa nakin, eynî dosyeyê deh cara dinivîsin, deh netîceyên cuda derdikevin :D
:Em dikarin vê amûrê wextê edit û submitê neaktîv bikin wekî <syntaxhighlight lang="js">if (!(action === "edit" || action === "submit")) {
:return;</syntaxhighlight> lê wê demê display:none wê çibe nizanim. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 18:23, 24 tîrmeh 2026 (UTC)
::display:none ne hewce ye ma jixwe di nav kodê [https://ku.wiktionary.org/w/index.php?title=MediaWiki:Gadget-jeder.js&oldid=6069025#L-49 L-49] de inline/none heye? [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 18:53, 24 tîrmeh 2026 (UTC)
:Min bi vî şiklî [https://ku.wiktionary.org/w/index.php?title=Bikarh%C3%AAner:Wikihez/vector-2022.js&diff=prev&oldid=6290816#L-28] ceriband feqat nexebitî. "display:none" di pêşdîtinê de dixebite feqat js naşixule. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 14:43, 25 tîrmeh 2026 (UTC)
::Kodên JSê pir hez nakim (pêşta hukurina APIya MWyê hewce bû) dîsa jî ez ê seh bikim :) [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 16:49, 27 tîrmeh 2026 (UTC)
:::Ez niha bi vî şiklî [https://ku.wiktionary.org/w/index.php?title=Bikarh%C3%AAner:Wikihez/test.js&oldid=6290820] [https://ku.wiktionary.org/w/index.php?title=Bikarh%C3%AAner:Wikihez/common.css&oldid=6290821#L-8] bi kar tînim ti problem nîne. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 17:09, 27 tîrmeh 2026 (UTC)
== [[MediaWiki:Gadget-PagePreviews.js]] ==
Ez dibêjim em vê amûrê jî çêkin [[:en:MediaWiki:Gadget-PagePreviews.js]] --[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 10:56, 3 tebax 2026 (UTC)
= Moda tarî =
== [[Şablon:wîkîpediya]] ==
Rengê tarî de xirab e.--[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 19:36, 4 tebax 2026 (UTC)
= Bot =
Karên ku bi botê werin çêkirin ji kerema xwe li vir binivîsin.
== Kategorî:Biwêj ==
[[:Kategorî:Biwêj]] divê were paqijkirin, lîsteya madeyên {{ş|biwêj}} çêke, yên ku tê de bûn, kirin, man hene filtre bike yên din bi destî tê çêkirin.—[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:17, 16 tîrmeh 2026 (UTC)
== Jêgirtin ==
Xistina jêgirtinên beşa [https://ku.wiktionary.org/w/index.php?search=insource%3A%2F%3D+*Ji+%5BWw%5D%C3%AAjey%C3%AA+*%3D%2F&title=Taybet%3AL%C3%AAger%C3%AEn&profile=advanced&fulltext=1&ns0=1&searchToken=8rh0bmw8dccsi7aynl6zli8uf ji wêjeyê] li beşa maneyê. —[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:17, 16 tîrmeh 2026 (UTC)
== Bota Toolforgeê ==
Botekî Toolforgeê lazim e ji bo ku xeletiyên biçûk wekî şablonên bi navên îngilîzî werin kurdîkirin yan jî valahiya beşan rast bike û hwd.—[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:17, 16 tîrmeh 2026 (UTC)
:Min [[Bikarhêner:Wikihez/skrîpt/py/kuwiktkozmetik.py|paqijiyen kozmetîk]] hazir kir feqat hîn navên şablonan naguhêre. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 20:05, 4 tebax 2026 (UTC)
== Updatew ==
Bota [[Bikarhêner:Wikihez/skrîpt/py/updateW.py|updateW]] divê were rojanekirin. Yan jî yekî nû were çêkirin. Şablonên {{ş|W}} di beşa tercimeyan de sererast dike û zimanan rêz dike. Ya niha xeletiya navê zimanî dide.—[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:17, 16 tîrmeh 2026 (UTC)
== sihir --> sêhr ==
Tercimeyên ''[[sêhr]]'' hemû dibêje ''sihir'' loma bi botê lazim e kirin ''sêhr''. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 17:43, 18 tîrmeh 2026 (UTC)
:Sihirbaz --> sêhrbaz [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 18:07, 18 tîrmeh 2026 (UTC)
== Tercimeyên dîroknas ==
Li tercimeyên [[dîroknas]], hevmaneyên wê hewce ye were îlawekirin. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 18:44, 18 tîrmeh 2026 (UTC)
== Mewlûd ==
Sererastkirina jêgirtinên mewlûdê [https://ku.wiktionary.org/w/index.php?search=insource%3A%2Fw%5C%3AMela+His%C3%AAn%C3%AA+Batey%C3%AE%2F&title=Taybet%3AL%C3%AAger%C3%AEn&ns0=1&searchToken=8m0tguy3sqt7edr4sg0u8hedo] wekî [https://ku.wiktionary.org/w/index.php?title=dax%C3%AEdar&curid=284303&diff=6265851&oldid=6142285] [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 09:43, 20 tîrmeh 2026 (UTC)
0cvybxb2lo0drf2m4u22fylfu462nu1
6333738
6333737
2026-08-14T21:37:37Z
Ghybu
1393
/* MediaWiki:Gadget-start.js */
6333738
wikitext
text/x-wiki
{{/ser}}
= Karên ferhengî =
== Mane ==
* [[:Kategorî:Madeyên bê beşa mane]]
** [[:Kategorî:Madeyên bê beşa mane bi kurmancî]]
Li ser van rûpelan ev made hene ku maneyan wan nehatine nivîsin û divê werin nivîsin. —[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:17, 16 tîrmeh 2026 (UTC)
== Etîmolojî ==
*[[:Kategorî:Daxwazên etîmolojiyê]]
**[[:Kategorî:Daxwazên etîmolojiyê bi kurmancî]]
Li ser van rûpelan ev made hene ku etîmolojiya wan hîn nehatine nivîsin. Ji bo alîkariyê binêre [[WF:Etîmolojî]] —[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:17, 16 tîrmeh 2026 (UTC)
== Cureyê rêzimanî ==
* [[:Kategorî:Gotarên bê kategoriya rêzimanî]]
* [[:Kategorî:Gotarên bê kategoriya rêzimanî bi kurmancî]]
Li ser van rûpelan ev made hene ku cureyên wan yên rêzimanî hîn nehatine nivîsin. Ji bo alîkariyê binêre [[Alîkarî:Cureyên peyvan]] —[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:17, 16 tîrmeh 2026 (UTC)
== Kontrol ==
* [[:Kategorî:Kontrol]]
** [[:Kategorî:Kontrola maneyê]]
Ev madde bi botê hatine çêkirin, yek bi yek divê werin kontrolkirin. —[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:17, 16 tîrmeh 2026 (UTC)
= Şablon =
== IPA ==
* {{ş|IPA}} divê [[Modul:IPA]] bi kar bîne. —[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:17, 16 tîrmeh 2026 (UTC)
== Deng ==
Kurdîkirina belgekirina {{ş|deng}} lazim e.--[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 00:06, 19 tîrmeh 2026 (UTC)
= Modul =
== Modul:form of/templates ==
* [[Modul:form of/templates]]: Divê ev modul were rojanekirin û xeletiyên berê wekî ([[hevalê]]) werin rastkirin. —[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:17, 16 tîrmeh 2026 (UTC)
*:Merheba @[[Bikarhêner:Ghybu|Ghybu]] Te gotibû di vê modulê de xeletî hene, jkx tu dikarî li vir binivîsî çi kêmasî hene, daku wextê rojane dikim ez ji bîr nekim? [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:16, 21 tîrmeh 2026 (UTC)
*::Silav. Nizanim ji bîra min çûye... Herwiha ji bo çêkirina formên navdêran zanînên cîns û tîpa dawî bes e:
*::* (-ê, mê) => çemandî, bangkirin
*::* (-ê, nêr) => îzafe
*::* (-ê, mê û nêr) => îzafe (nêr), bangkirin (mê), çemandî (mê)
*::* (-a) => îzafe (mê)
*::* (-ekî) => îzafe û çemandî (nêr, nebinavkirî)
*::* (-eke) = > îzafe (mê, nebinavkirî)
*::* ...
*:: <code>if find(mw.title.getCurrentTitle().subpageText, 'ekî$') then ... end</code>
*::<code><nowiki>{{ku-tewîn-navForm|<navdêr>|<zayend>}</nowiki></code>
*::Tablo û nivîs di yekcarî de tên çêkirin...
*::Feqet problem lêzêdekirina mînakan e. [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 17:34, 21 tîrmeh 2026 (UTC)
*:::Lêzêdekirina kîjan nimûneyan? Ev koda js ji bo çi ye? Qisûrê nenêre min fêm nekir :/ [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 18:13, 21 tîrmeh 2026 (UTC)
*::::Li vira ([[hevalê#Formeke navdêrê]]) di bin maneyên 1. û 2. mînak nayên tevlî kirin :) [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 18:18, 21 tîrmeh 2026 (UTC)
*:::::Ev tercîh e, ne mecbûrî ye, em dikarin [https://ku.wiktionary.org/w/index.php?title=heval%C3%AA&diff=prev&oldid=6276350 wisa] bikin. Wekî din? [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 18:29, 21 tîrmeh 2026 (UTC)
*::::::Min li jor tênê got ku tenê parametreyên "navdêr" û "zayend" hewce nee. Bi '''[//ku.wiktionary.org/w/index.php?title=heval%C3%AA&curid=969734&diff=6276353&oldid=6276350 vî]''' awayî jî tê çêkirin. Parametreyên din ne hewce ne. [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 18:38, 21 tîrmeh 2026 (UTC)
*:::::::Ji bo wê şabloneke din lazim e, bila ev şablon wekî îngilîzî bimîne em ji bo kurmancî yekî din çêkin. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 18:42, 21 tîrmeh 2026 (UTC)
*::::::::[https://ku.wiktionary.org/w/index.php?title=heval%C3%AA&oldid=6276885 wisa] çawa ye? Bi min nivîsîna nimûneyan zêde ne lazim e ji ber ku ti kes serê xwe pê naêşîne. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 09:46, 23 tîrmeh 2026 (UTC)
*:::::::::@[[Bikarhêner:Ghybu|Ghybu]] Vê şablonê bi kar bînin an na? Navê şablonê kê çi be? [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 19:07, 24 tîrmeh 2026 (UTC)
== Modul:columns ==
* [[Modul:columns]] were rojanekirin û {{ş|kol3}} bila lînka ''nîşan bide'' deyne beriya sernavê, kolê di qutiya rengî de bila nebe. —[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:17, 16 tîrmeh 2026 (UTC)
== Modul:etymon ==
* [[Modul:etymon kevn]]: Rojanekirin hewce ye. —[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:17, 16 tîrmeh 2026 (UTC)
== [[Modul:ziman/code to canonical name]] ==
Belgekirina skrîptê û js divê were rastkirin. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 09:31, 22 tîrmeh 2026 (UTC)
:* [[MediaWiki:UpdateLanguageNameAndCode.js]]
:[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 09:50, 22 tîrmeh 2026 (UTC)
::* [[Modul:ziman/print]]
::[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 09:52, 22 tîrmeh 2026 (UTC)
:::*[[Modul:ziman/şablon]]
:::[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 09:56, 22 tîrmeh 2026 (UTC)
::::* [[MediaWiki:Gadget-translation editor.js/ziman.json]]
::::[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 11:06, 22 tîrmeh 2026 (UTC)
== [[Modul:quote]] ==
Piştî ev modul hate hazirkirin, lazim e navên jegirtinan werin rastkirin û li hemûyan {{param|jêgirtin}} were zêdekirin. Bnr. [[Gotûbêja şablonê:Jêgirtin/Ehmedê Xanî/Mem û Zîn]] [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 22:27, 5 tebax 2026 (UTC)
::Ev modul hema bêje hazir e. Hûn li ser van madeyan çi difikirin:
# {{para|tarîx}} lazim e full date be eger na, lazim e {{para|sal}} were bikaranîn. Feqat "'''2021''' kanûna pêşîn 23" bi vî şiklî bi min ne problem e çnkî derdê en.wikt "attestation" e delîla herî pêşî jî sal e.
#: {{demo|sep=wisa xuya dibe<br>|<nowiki>{{jêder-kitêb/ceribandin|en
|tarîx=23 December 2021|nivîskar=Harry Hobbs; George Williams|sernav=Micronations and the Search for Sovereignty|url=https://www.cambridge.org/core/books/micronations-and-the-search-for-sovereignty/B0414A3A322695D9EE71E4CDDFDA06DE|weşanxane=Cambridge University Press|rûpel=155|isbn=978-1-009-15012-5|jêgirtin=jêgirtin.|t=-}}</nowiki>}}
#{{para|amadekar}}/{{para|edîtor}}/{{para|terciman}} bi şiklê edîtoriya, amadekariya, tercimekirina
#: {{demo|sep=dide<br>|<nowiki>{{jêder-kitêb/ceribandin|en
|sernav=Medical Surgical Nursing|serî=Juta's Manual of Nursing|cildê-seriyê=volume 4|edîtor=Sophie Mataniele Mogotlane; Joyce Mokoena; Motshedisi Eunice Chauke; Anne Young|sal=2005|weşanxane=Juta Academic|isbn=978-0702171840|rûpel=!12-29|jêgirtin=jêgirtin|t=-}}</nowiki>}}
--[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 13:09, 10 tebax 2026 (UTC)
:@[[Bikarhêner:Bikarhêner|Bikarhêner]] û @[[Bikarhêner:Ghybu|Ghybu]] Hîn gelek tişt hene divê îzah bikin û fikrê we pirs bikim, feqat îzahkirin pir zor e, em dest bi bikaranînê bikin û dûre tiştên ku hûn naxwazin em dikarin biguherînîn, dibe? [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 13:11, 10 tebax 2026 (UTC)
::Dibe, piştî çêbû, em di praktîkê de bibînin ku çawa ye. -- [[Bikarhêner:Bikarhêner|Bikarhêner]] ([[Gotûbêja bikarhêner:Bikarhêner|gotûbêj]]) 18:05, 10 tebax 2026 (UTC)
= Javascript =
== [[Mediawiki:Gadget-citoid-helper.js]] ==
Ji bo bi citoidê kopîkirina malûmatên çavkaniyan amûreke wisa lazim e. Xisûsen ji ber ku bi çend amûrên din dikare were bikaranîn.
Feqat çend problem hene, şablonên me de kêmasiya parametreyan gelek in û xerîteyên citoidê hîn nehatine çêkirin. Wana sererast bikin dûre vê amûrê çêkin, piştre [[MediaWiki:Gadget-start.js|start.js]] û [[MediaWiki:Gadget-wikt.add-examples.js|add examples.js]] were rojanekirin.
- --[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 00:04, 19 tîrmeh 2026 (UTC)
:Merheba @[[Bikarhêner:Bikarhêner|Bikarhêner]], ez dibêjim karê Modul:quote zêde wext bistîne, bila em dest bi bikaranîna van amûran bikin dûre kêmasiyan em ê temam bikin înşela. Dikarî vana li cihên xwe yên rast kopî paste bikî?
# [[Special:PermanentLink/6291574|Bikarhêner:Wikihez/skrîpt/js/Gadget-citoid-helper.js]] --> [[Mediawiki:Gadget-citoid-helper.js]]
# Ya li jêr kopî bike qismê herî dawî ya AmûrênVeşartî li [[MediaWiki:Gadgets-definition]]:
## <code><nowiki>* citoid-helper[ResourceLoader|hidden|default|dependencies=mediawiki.util]|citoid-helper.js</nowiki></code>
--[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:58, 26 tîrmeh 2026 (UTC)
== [[MediaWiki:Gadget-start.js]] ==
Rojanekirin hewce ye. Min gelek tişt lê zêde kir lê ez niha test dikime. Piştre em bar bikin:
* [[Bikarhêner:Wikihez/Gadget-start.js]] --> [[MediaWiki:Gadget-start.js]]
* [[Bikarhêner:Wikihez/Gadget-start.css]] --> [[MediaWiki:Gadget-start.css]]
--[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 22:08, 17 tîrmeh 2026 (UTC)
:Min [[MediaWiki:Gadget-start/data.json|data.json]] çêkir ji bo ku bi hêsanî malûmatên heyî werin guhartin bêyî guhartina Javascriptê. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 19:49, 18 tîrmeh 2026 (UTC)
:Xeletiyên ku ji bîr nekim rast bikim:
:* Wextê min çavkanî "kitêb" hilbijart û bi destî tije kir xeletiyeke [https://ku.wiktionary.org/w/index.php?title=xezete&diff=prev&oldid=6265392 wisa] derket her kelîme hate lînkkirin.
:* <code>html("⠿")</code> ev ne lazim e.
:* textarea ji bo çavkaniyên jêgirtinan xaseten yên sernav hîn jî ne draggable e.
:* pêşdîtina zindî checkbox wextê tê rakirin, pêşdîtin winda nabe.
:* Butona mobîlê ya vekirina formê di moda tarî de belî nabe, tenê wekî qutiyeke tarî xuya dibe.
:* Metna hişyarkirinê di guhartina rûpelên heyî de lazim e baştir bikim.
:[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 23:51, 18 tîrmeh 2026 (UTC)
::Ev problem çêbûn, ez ê binêrim ka çi problemên din hene. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 14:15, 19 tîrmeh 2026 (UTC)
:::Çêke: Ji bo qismê çavkaniyê yek dikare API call û Kategorî:Çavkanî bi kar bîne ji bo ku şablon zêde bikî ji yên heyî. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 21:21, 19 tîrmeh 2026 (UTC)
::::Ev jî çêbû, min beşa çavkanî jî çêkir. Eger xeletî dernekeve û problema valahiya piştî etîketê ji bîr nekim, piştî rojanekirina amûrên linkify, û citoid em dikarin bar bikin. Ez ê ti tiştê nû îlawe nekim, zêde dirêj bû. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:14, 21 tîrmeh 2026 (UTC)
:::::Merheba @[[Bikarhêner:Bikarhêner|Bikarhêner]]. Dikarî wana bar bikî?
:::::* [[Bikarhêner:Wikihez/Gadget-start.js]] --> [[MediaWiki:Gadget-start.js]]
:::::* [[Bikarhêner:Wikihez/Gadget-start.css]] --> [[MediaWiki:Gadget-start.css]]
:::::* [[MediaWiki:Gadgets-definition]] wisa rojane bike:
:::::* start[ResourceLoader|default|package|dependencies=mediawiki.util,ext.gadget.StorageUtils,ext.gadget.citoid-helper]|start.js|start.css|start.js/data.json
:::::[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 09:39, 5 tebax 2026 (UTC)
{{şirove}} Dewama ''[[Special:PermanentLink/6333688|Gotûbêja bikarhêner:Rewiye tine#WF:Nû]]'' bila gotûbêja wî em spam nekin. :D
{{r|Ghybu}} dikarî [[Special:PermanentLink/6333689|vê htmlê]] binêrî claude rast fêm kiriye yan na? Daxîne û wek html qeyd bike. --[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 18:43, 14 tebax 2026 (UTC)
:Min seh wîkîyên din jî kir, li wîkiya fransî tiştekî wekî daxwaza min çêkirine (tiştên ku ne hewce ne wekî "tab" çêkirine an jî hatine vêşartin): [//fr.wiktionary.org/w/index.php?title=fdsdfdsf&action=edit&redlink=1]. Formata me yê berî jî bi vê lojîkê hatibû çêkirin, wekî de.wiktionary ([//de.wiktionary.org/w/index.php?title=sdfdsfsdfs&action=edit&preload=Vorlage:Formatvorlage_(Substantiv_vereinfacht)]) [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 19:01, 14 tebax 2026 (UTC)
::PS: Dîsa jî Claude min rind fêm kiriye :)) Feqet min got ku beşên Mane", "Bilêvkirin" û "Beşên din" cem hev (wekî "tab") ". Û dema ku tu terî di nav "Besên din" Hevmane, Jê, ... li wira werin dayîn. Wêne/Resim û Nimûne jî di nav beşa ("tab") "Mane" [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 19:17, 14 tebax 2026 (UTC)
::Erê ya fr.wikt min jî dîtibû jixwe fikrê tab min ji wan girtibû :D (feqat min li cem wan tenê tab-a maneyê dît yên din nedît çawa tê vekirin nizanim) Berê hemû beş piştî maneyê bibûn, dûre min sê Tab çêkir, Bingehîn+Lînkkirin+Bikaranîn. Niha lazim e Tabeke din çêkim. Ya ku claude çêkiriye bnr. [[Special:PermanentLink/6333698#L-7]] ne baş e bnr. [[Special:PermanentLink/6333703|qiyaskirinê li ser vê htmlê]] Êdî ez Claude abuse dikime ji ber ku Pro ye :D [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 19:26, 14 tebax 2026 (UTC)
:::Claude dibêje:
:::Good clarification — that's a real simplification, not just a relabel. Updated STEP_GROUPS from 5 tabs down to 3:
:::Mane — the definitions themselves, plus Wêne (image), now grouped in with it instead of sitting in a separate misc tab. Nimûne needed no change since it was already rendering inside each Mane sense block, not as its own step.
:::Bilêvkirin — unchanged, still just pronunciation.
:::Beşên din — everything else in one flat bucket: hevmane, jê, têkildar, herwiha binêre, formên alternatîv, dijmane, jornav, jêrnav, notên bikaranînê, bi alfabeyên din, dûnde, çavkanî, bêhtir bixwîne, tewandin, etîmolojî, zaravayên din, werger, and bnr-h — instead of being split across the old Bingehîn/Lînkkirin/Bikaranîn/Din tabs.
:::No DOM-order changes were needed this time — the fix from the blank-tab bug looks up the tab bar's position dynamically now, so it didn't matter that I regrouped which steps go where. Same two files, saved to your Wiki folder — worth another pass through all three tabs once you've pasted this in, same as last time. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 19:34, 14 tebax 2026 (UTC)
::::Mînak:
Ziman
---------------------------------------------
Cureyê rêzimanî (Navdêr)
Navdêr (hilbijêre) ┆ Cîns (hilbijêre) ┆ Jimar (hilbijêre)
- lêker -mê -yekjimar
- rengdêr -nêr -pirjimar
- ... -... -...
---------------------------------------------
Mane || Bilêvkirin || Beşên din
hilbijêre:
- mane - IPA - Hevmane
- nimûne - kîte - Dijmane
- wêne
Dema ku tu "Cureyê rêzimanî" dikî "Lêker" :
Cureyê rêzimanî (Lêker)
Lêker (hilbijêre) ┆ Cure (hilbijêre)
- navdêr -rehê niha
- rengdêr -rehê borî
- ... -...
---------------------------------------------
┆ : select/option ("tab" nîne, tê dîtin)<br>
|| : "tab"
-- [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 19:45, 14 tebax 2026 (UTC)
'''Sê-stûnî ("┆" = ne tab), li gorî Cureyê rêzimanî:'''
{| class="wikitable"
! Cureyê rêzimanî !! Stûna 2 !! Stûna 3 !! Têbînî
|-
| Navdêr / Serenav
| Cîns (hilbijêre ▾: mê / nêr / ... — tenê heke ziman zayendê rêzimanî hebe)
| '''Jimar''' (?) — pirs li jêr
| Qadên "Forma mê/nêr/pirjimar/yekjimar" niha jî li vir hene — ma ev di "Jimar"-ê de tên tevlihev kirin, an cuda dimînin?
|-
| Rengdêr
| (heman m/n/p/y forman ku Navdêr distîne)
| Sûperlatîv (sûp) / Komparatîv (komp)
| Ne li ser her du nîgaran hatiye behs kirin — ma sê-stûnî li vir jî tê bikaranîn?
|-
| Lêker
| '''Cure''' = Cureyê lêkerê (hilbijêre ▾: gerguhêz / negerguhêz / xwerû-... / pêkhatî-... / hevedudanî-... / biwêjî-... — 10 vebijêrk)
| Di heman stûnê de: Rehê dema niha / Rehê dema borî / Rehê dema bilanî (her sê qadên nivîsandinê ne, ne hilbijêrk in)
| Ma "Cure" her sê rehan di xwe de digire wek yek stûn, an her yek stûneke cuda ye?
|-
| Tîp (herf/sembol)
| Girdêk (gir) / Hûrek (hûr)
| —
| Ne behs kiriye
|-
| Her cureyek, li gorî zimên
| Transliterasyon (tr) / Transkrîpsiyon (ts)
| —
| Bi zimên ve girêdayî ye, ne bi cureyê rêzimanî ve
|-
| Her cureyek, tenê ziman=japonî
| Hanja / Translit. hanja
| —
| Ne bi cureyê rêzimanî ve girêdayî ye
|-
| Her cureyek
| '''Tercîhên pêşketî''' (kolapsî): form, formaalt, nekatcure, nekatcins, nekatçendterm, serlînkneke, nekatpalîndrom, neformtr
| —
| Vebijarkî, ji bo hemû cureyan
|}
'''Tabên jêrîn — Mane ‖ Bilêvkirin ‖ Beşên din ("||" = tab):'''
{| class="wikitable"
! Mane !! Bilêvkirin !! Beşên din (hemû 18 hêman)
|-
| mane, nimûne, wêne
| şablonên bilêvkirinê (mînak: IPA, kîte)
| tewandin, etîmolojî, bi zaravayên din, werger, jê, têkildar, herwiha binêre, formên alternatîv, hevmane, dijmane, jornav, jêrnav, notên bikaranînê, bi alfabeyên din, dûnde, çavkanî, bêhtir bixwîne, bnr-h
|}
'''Pirsên vekirî:'''
# "Jimar" (yekjimar/pirjimar) — qadeke ku nîşan dide têketî bi xwe yekjimar e an pirjimar e. Ev cuda ye ji "Forma yekjimar (y)"/"Forma pirjimar (p)" ya heyî (ku forma DÎN a kelîmeyê tomar dike). Herdu bimînin, an werin yek kirin?
# Ma sê-stûnî tenê ji bo Navdêr/Lêker e, an ji bo Rengdêr/Tîp jî heman mantiq derbas dibe?
# Di "Beşên din" de: dixwazî pêşî navnîşek/hilbijartinek nîşan bide (17 hêmanên din jî tê de), û qad tenê piştî hilbijartinê xuya bibin?
:Tu dikarî start.js ji Tercîh/ Amûran rakî û bi test.js li Amûran herî taliyê ye biceribînî. Claude ya li jor hazir kir, Jimar ez dikarim îzah bikim. Feqat bi min di tab-a maneyê de lazim e Bi zaravayên din (heta wek werger her car bila li rûpelan were zêdekirin) û werger jî hebe.--[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 20:18, 14 tebax 2026 (UTC)
:;Navdêr: Tenê "cîns" û "jimar" bes e. "Forma mê", "Forma nêr", ... nayê fêm kirin. Bi min wekî "Tercîhên pêşketî" bi navkî din veşartî çêke.
:;Lêker: "Cureyê lêkerê" nayê fêm kirin, bi min pêşta "geguhez/negerguhêz" were hilbijartin, paşê jî form "hevdudanî/pêkatî/..." ji ber ku her kes vana nizanî... Dîsa jî tu dizanî.
:Bi min beşên "Hevmane" û dijmane jî bike de nav beşa Mane ("tab") ji ber ku pirr tên xwestin.
:Şûnda Wêne jî Nimûne/jêgirtin...
:Herwiha hemû bi rengê şîn hatine çêkirin, nizanim beşên din (===) bi rengê gewr an reş çito dibe? [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 21:35, 14 tebax 2026 (UTC)
== [[Mediawiki:Gadget-QQ.js]] ==
Ev amûr di şikle Minerva de. Her daîm vê xeletiyê dide:
<syntaxhighlight lang="js">
TypeError: Cannot read properties of null (reading 'addEventListener') at css () at runScript () at Array.<anonymous> () at flushCssBuffer ()
</syntaxhighlight> [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 19:29, 18 tîrmeh 2026 (UTC)
:* [[Bikarhêner:Wikihez/skrîpt/js/Gadget-QQ.js]] --> [[Mediawiki:Gadget-QQ.js]]
:* [[Bikarhêner:Wikihez/Gadget-QQ.css]] --> [[Mediawiki:Gadget-QQ.css]]
:Ez dibêjim çêbû lê ka çend roj biceribînim. Tiştên ku hatin sererastkirin:
:# Google Books API Key dikarî zêde bikî, dixe cookies û di gerokê de dimîne. Berê bê API Key dixebitiya lê êdî mecbûr e ku API Key-a te hebe, bidestxistina wê ne zêde zor e lê dîsa jî tevlihev e.
:# Êdî di mobîlê de dixebite, heta di mobîlê de xweştir xuya dike.
:# Moda tarî
:# OOUI dewsa jquery.ui
:# Li qutiyê çi dixwazî zêde bikî, dikare li gorî îsm, sifet, fiîl bitewîne. Lê ji bo fiîl tenê dikare çend heb inflection bîne.
:# Butona paqij bike lê zêde kir.
:# Çend paqijiyên jêgirtinên Google Kitêbê niha hene.
:[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 23:38, 18 tîrmeh 2026 (UTC)
::Tewandina fiîlan û xeletiya modulê lazim e were rastkirin. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 14:40, 21 tîrmeh 2026 (UTC)
== [[MediaWiki:Gadget-wikt.add-examples.js]] ==
Min ev amûr hinek rojane kir feqat çend problem hene berî ku bar bikin.
Tiştên ku min guhart:
# Êdî li sayfeyên bi {{ş|maneid}} jî dixebite,
# Cihê di wîkîtekstê de yê ku jêgirtin were îlawekirin baştir bû,
# [[Mediawiki:Gadget-citoid-helper.js|citoid helper]] zêde kir ji bo ku bi hêsanî çavkanî bi riya doi, isbn an urlyê werin tijîkirin.
* [[Bikarhêner:Wikihez/Gadget-wikt.add-examples.css]] --> [[MediaWiki:Gadget-wikt.add-examples.css]]
* [[Bikarhêner:Wikihez/Gadget-wikt.add-examples.js]] --> [[MediaWiki:Gadget-wikt.add-examples.js]]
- --[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 00:50, 19 tîrmeh 2026 (UTC)
:Min "wikt." qismên cache kirinê ya wîkiya fransî bi [[MediaWiki:Gadget-StorageUtils.js]] guhartiye. loma ji bîr nekin wê amûrê li [[MediaWiki:Gadgets-definition]] zêde bikin. û navê amûrê jî biguhêrînin. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 09:15, 23 tîrmeh 2026 (UTC)
::Berê li ser WF:ceribandin dixebitî. niha naxebite. Divê were rastkirin. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 22:10, 7 tebax 2026 (UTC)
== Gadget-translation editor ==
* [[MediaWiki:Gadget-translation editor.js]]: divê formata en.wîktê were bikaranîn ji ber ku me gelek tercime ji en.wîktê kopî kir û ev js hîn nikare formata wekî li jêr bi kar bîne.
<syntaxhighlight lang="wikitext">
* {{Z|sh}}:
*: Kirîlî:
*: Latînî
</syntaxhighlight>
—[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:17, 16 tîrmeh 2026 (UTC)
== [[Mediawiki:Gadget-linkify.js]] ==
* ''rûpeleke'' wekî<syntaxhighlight lang="wikitext">[[rûpeleke]]</syntaxhighlight> lînk dike, bi regexê belkî dikare wisa bike <syntaxhighlight lang="wikitext">[[rûpel]]eke</syntaxhighlight>
—[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:17, 16 tîrmeh 2026 (UTC)
* Amûreke din wekî [[User:Wikihez/Gadget-linkify.js|linkify]] lazim e ku herfên mezin biçûk bike ji bo kurmancî.—[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:17, 16 tîrmeh 2026 (UTC)
:{{r|Bikarhêner}} Merheba bira, dikarî viya jî bar bikî?:
* [[Special:PermanentLink/6291974|linkify]] --> [[Mediawiki:Gadget-linkify.js]]
Spas--[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 11:42, 29 tîrmeh 2026 (UTC)
:Dûre [https://ku.wiktionary.org/wiki/MediaWiki:Gadget-start.js#L-283 li vir] wiktviLinkify bike kuLinkify xêra xwe [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 11:51, 29 tîrmeh 2026 (UTC)
::Min ji bîr kir lê zêde bikim niha nikare "Dİ" bike "di", xeletiyeke berbelav a di nivîsên kurdî de, herfên din ên wekî ll yan rr jî hewce ne werin zêdekirin. Dûre em zêde bikin. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 21:42, 29 tîrmeh 2026 (UTC)
:::Min nû ferq kir, sayfeyên ku hîn nehatine çêkirin wîkîlînk nake. Problemeke mezin e divê were rastkirin. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 18:15, 30 tîrmeh 2026 (UTC)
::::Na, lînk dike, tiştekî din heye... [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 10:49, 31 tîrmeh 2026 (UTC)
== Amûra manayê ==
Amûreke din ji bo nivîsina maneyê wekî Nimûne zêde bike lazim e [https://ku.wiktionary.org/w/index.php?title=Bikarh%C3%AAner:Wikihez/test.js&oldid=6276876 js] [https://ku.wiktionary.org/w/index.php?title=%C5%9Eablon:ceribandin2&oldid=6265629 şablon] [https://ku.wiktionary.org/w/index.php?title=Bikarh%C3%AAner:Wikihez/common.css&oldid=6265642 css] --[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 09:12, 23 tîrmeh 2026 (UTC)
== [[MediaWiki:Gadget-jeder.js]] ==
@[[Bikarhêner:Ghybu|Ghybu]] Çavkaniyên jêderê di moda pêşdîtinê de jêderê vedişêre, ew jî min gelek eciz dike wextê çavkanî zêde dikim. Min ji Claude pirsî û kodan nîşanî wê da, wisa cewab da:
Yes — and this file actually explains the whole thing precisely, better than my earlier guess about extract-stripping.
What's happening: the CSS rule
<syntaxhighlight lang="css">
.jeder{
display:none;
}
</syntaxhighlight>
hides every citation by default, *unconditionally*. The only thing that ever makes it visible again is the gadget's JS: it finds each `.jeder`, builds the short "`— (year, author, +)`" summary from the `.j-pewist` fields, and either reveals the short version or — for citations with no `.j-pewist` fields — explicitly sets `display:inline` on the original.
So visibility of citations depends entirely on this JS running. In the normal article view (Image 1) it runs, so you see the collapsed "`(1918, E. Rehmî Ji Mala Hekariyan, Amadekar: M. E. Bozarslan, +)`" form. In whatever generated Image 2 — a hover-preview/extract/API render — gadget JS doesn't execute, so nothing ever removes the `display:none`, and the citation vanishes completely rather than degrading to "still visible, just not collapsed."
<b>The fix:</b> flip the default so the *un-collapsed* state is the safe fallback, and let JS do the hiding only after it successfully builds the short version. That way, any context without JS shows the full citation instead of nothing.
CSS — remove the blanket hide:
<syntaxhighlight lang="css">
.jeder {
/* intentionally no display:none here — see Gadget-... .js */
}
</syntaxhighlight>
JS — do the hiding from script, after the short form exists:
{{veşêre-ser}}
<syntaxhighlight lang="js">
// Ji bo şablonên [[Şablon:jêder]] hatiye nivîsandin.
// Parametreyên ku di navbera "<span class="j-pewist">...</span>" an "{{j-pêwîst|...}}" de ne venaşêre.
$(function() {
function nivisaKurtTevliBike(sund, nivisKurt) {
var zede = $('<a>+</a>')
.addClass('click')
.attr('href', '#')
.attr('title', 'zêdetir')
.css('font-weight', 'bold');
var kurt = $(' <a>↩</a>')
.addClass('click-kurt')
.attr('href', '#')
.attr('title', 'veşêre')
.css('font-weight', 'bold');
$('<span>' + nivisKurt + '</span>')
.append(zede).append(')')
.addClass('jeder-kurt')
.css('font-size', '0.85em')
.insertAfter(sund);
sund.append(' ').append(kurt);
// Only hide the full citation once the short summary actually exists.
// If this script never runs (no-JS clients, hover-preview extracts,
// action=render, etc.), the full citation stays visible instead of
// silently disappearing.
sund.css('display', 'none');
}
function vesere() {
$('.jeder').each(function() {
var elmTab = $(this).find('.j-pewist').clone();
if (elmTab.length) {
var elm = '';
for (var i = elmTab.length - 1; i >= 0; i--) {
elm = elmTab.eq(i).html() + ', ' + elm;
}
var nivisKurt = ' — (' + elm;
nivisaKurtTevliBike($(this), nivisKurt);
}
// else: no j-pewist fields to shorten — leave the full citation
// as it already renders (visible), nothing to do.
});
}
vesere();
$(".click").click(function(e) {
e.preventDefault();
$(this).parent('.jeder-kurt').css('display', 'none');
$(this).parent('.jeder-kurt').prev().css('display', 'inline');
});
$(".click-kurt").click(function(e) {
e.preventDefault();
$(this).parent('.jeder').css('display', 'none');
$(this).parent('.jeder').next().css('display', 'inline');
});
});
</syntaxhighlight>
Net effect:
- JS-enabled readers (normal article view): identical experience to today — collapsed short form with `+`/`↩` toggle.
- No-JS contexts (previews, extracts, screen readers before JS loads, print, etc.): full citation is shown instead of nothing — a real regression fix rather than a cosmetic one.
One caveat worth being upfront about: this fixes it *if* the preview context renders the gadget's HTML/CSS but doesn't execute gadget JS (which is the far more common case, and what this code strongly suggests is happening). If Image 2 instead comes from a pipeline that strips the `.jeder`/`.jegirtin-text` elements out of the HTML entirely before this CSS/JS even gets a chance to apply, no on-wiki CSS/JS change can help — that'd need the extract-generation config changed instead. Given what this gadget file shows, though, I'd bet on the CSS-hide explanation.
{{veşêre-bin}}
Em dûre biceribînin eger xeletî tinebe, vî tiştî jî rast bikin. --[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 20:00, 23 tîrmeh 2026 (UTC)
:Ez APIya MediaWiki rind nizanim belkî Claude dizane:) Em nikarin bibêjin dema ku moda "''action=edit''" e fonksiyona <code>function vesere()</code> bi kar meyîne. [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 15:57, 24 tîrmeh 2026 (UTC)
::Na, di moda "edît"-ê de <code>var elmTab = null</code>... [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 16:13, 24 tîrmeh 2026 (UTC)
?:
<syntaxhighlight lang="js">
if (
mw.config.get('wgAction') === 'edit' ||
mw.config.get('wgAction') === 'submit'
){
var elmTab = [];
} else {
var elmTab = $(this).find('.j-pewist').clone();
}
</syntaxhighlight>
--[[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 16:31, 24 tîrmeh 2026 (UTC)
:Ez jî nizanim Claude çiqas ji mediawiki fêm dike lê heta niha ti tişt nîne ku min jê pirs kir û nikaribû çêke, bila wekî reklam nebe feqat Claude mikemmel e, dibêjim "li vir çima xeletiyeke wisa derdikeve" di dosyeya 2000 rêzî de diçe tiştê xelet tenê rast dike tiştekî din naguherîne. Chatgpt û aistudio qet wisa nakin, eynî dosyeyê deh cara dinivîsin, deh netîceyên cuda derdikevin :D
:Em dikarin vê amûrê wextê edit û submitê neaktîv bikin wekî <syntaxhighlight lang="js">if (!(action === "edit" || action === "submit")) {
:return;</syntaxhighlight> lê wê demê display:none wê çibe nizanim. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 18:23, 24 tîrmeh 2026 (UTC)
::display:none ne hewce ye ma jixwe di nav kodê [https://ku.wiktionary.org/w/index.php?title=MediaWiki:Gadget-jeder.js&oldid=6069025#L-49 L-49] de inline/none heye? [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 18:53, 24 tîrmeh 2026 (UTC)
:Min bi vî şiklî [https://ku.wiktionary.org/w/index.php?title=Bikarh%C3%AAner:Wikihez/vector-2022.js&diff=prev&oldid=6290816#L-28] ceriband feqat nexebitî. "display:none" di pêşdîtinê de dixebite feqat js naşixule. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 14:43, 25 tîrmeh 2026 (UTC)
::Kodên JSê pir hez nakim (pêşta hukurina APIya MWyê hewce bû) dîsa jî ez ê seh bikim :) [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 16:49, 27 tîrmeh 2026 (UTC)
:::Ez niha bi vî şiklî [https://ku.wiktionary.org/w/index.php?title=Bikarh%C3%AAner:Wikihez/test.js&oldid=6290820] [https://ku.wiktionary.org/w/index.php?title=Bikarh%C3%AAner:Wikihez/common.css&oldid=6290821#L-8] bi kar tînim ti problem nîne. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 17:09, 27 tîrmeh 2026 (UTC)
== [[MediaWiki:Gadget-PagePreviews.js]] ==
Ez dibêjim em vê amûrê jî çêkin [[:en:MediaWiki:Gadget-PagePreviews.js]] --[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 10:56, 3 tebax 2026 (UTC)
= Moda tarî =
== [[Şablon:wîkîpediya]] ==
Rengê tarî de xirab e.--[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 19:36, 4 tebax 2026 (UTC)
= Bot =
Karên ku bi botê werin çêkirin ji kerema xwe li vir binivîsin.
== Kategorî:Biwêj ==
[[:Kategorî:Biwêj]] divê were paqijkirin, lîsteya madeyên {{ş|biwêj}} çêke, yên ku tê de bûn, kirin, man hene filtre bike yên din bi destî tê çêkirin.—[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:17, 16 tîrmeh 2026 (UTC)
== Jêgirtin ==
Xistina jêgirtinên beşa [https://ku.wiktionary.org/w/index.php?search=insource%3A%2F%3D+*Ji+%5BWw%5D%C3%AAjey%C3%AA+*%3D%2F&title=Taybet%3AL%C3%AAger%C3%AEn&profile=advanced&fulltext=1&ns0=1&searchToken=8rh0bmw8dccsi7aynl6zli8uf ji wêjeyê] li beşa maneyê. —[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:17, 16 tîrmeh 2026 (UTC)
== Bota Toolforgeê ==
Botekî Toolforgeê lazim e ji bo ku xeletiyên biçûk wekî şablonên bi navên îngilîzî werin kurdîkirin yan jî valahiya beşan rast bike û hwd.—[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:17, 16 tîrmeh 2026 (UTC)
:Min [[Bikarhêner:Wikihez/skrîpt/py/kuwiktkozmetik.py|paqijiyen kozmetîk]] hazir kir feqat hîn navên şablonan naguhêre. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 20:05, 4 tebax 2026 (UTC)
== Updatew ==
Bota [[Bikarhêner:Wikihez/skrîpt/py/updateW.py|updateW]] divê were rojanekirin. Yan jî yekî nû were çêkirin. Şablonên {{ş|W}} di beşa tercimeyan de sererast dike û zimanan rêz dike. Ya niha xeletiya navê zimanî dide.—[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:17, 16 tîrmeh 2026 (UTC)
== sihir --> sêhr ==
Tercimeyên ''[[sêhr]]'' hemû dibêje ''sihir'' loma bi botê lazim e kirin ''sêhr''. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 17:43, 18 tîrmeh 2026 (UTC)
:Sihirbaz --> sêhrbaz [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 18:07, 18 tîrmeh 2026 (UTC)
== Tercimeyên dîroknas ==
Li tercimeyên [[dîroknas]], hevmaneyên wê hewce ye were îlawekirin. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 18:44, 18 tîrmeh 2026 (UTC)
== Mewlûd ==
Sererastkirina jêgirtinên mewlûdê [https://ku.wiktionary.org/w/index.php?search=insource%3A%2Fw%5C%3AMela+His%C3%AAn%C3%AA+Batey%C3%AE%2F&title=Taybet%3AL%C3%AAger%C3%AEn&ns0=1&searchToken=8m0tguy3sqt7edr4sg0u8hedo] wekî [https://ku.wiktionary.org/w/index.php?title=dax%C3%AEdar&curid=284303&diff=6265851&oldid=6142285] [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 09:43, 20 tîrmeh 2026 (UTC)
pfhdvitcx1cyq4iw4quz3wah1cwmgn0
6333739
6333738
2026-08-14T21:41:49Z
Ghybu
1393
/* Javascript */
6333739
wikitext
text/x-wiki
{{/ser}}
= Karên ferhengî =
== Mane ==
* [[:Kategorî:Madeyên bê beşa mane]]
** [[:Kategorî:Madeyên bê beşa mane bi kurmancî]]
Li ser van rûpelan ev made hene ku maneyan wan nehatine nivîsin û divê werin nivîsin. —[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:17, 16 tîrmeh 2026 (UTC)
== Etîmolojî ==
*[[:Kategorî:Daxwazên etîmolojiyê]]
**[[:Kategorî:Daxwazên etîmolojiyê bi kurmancî]]
Li ser van rûpelan ev made hene ku etîmolojiya wan hîn nehatine nivîsin. Ji bo alîkariyê binêre [[WF:Etîmolojî]] —[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:17, 16 tîrmeh 2026 (UTC)
== Cureyê rêzimanî ==
* [[:Kategorî:Gotarên bê kategoriya rêzimanî]]
* [[:Kategorî:Gotarên bê kategoriya rêzimanî bi kurmancî]]
Li ser van rûpelan ev made hene ku cureyên wan yên rêzimanî hîn nehatine nivîsin. Ji bo alîkariyê binêre [[Alîkarî:Cureyên peyvan]] —[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:17, 16 tîrmeh 2026 (UTC)
== Kontrol ==
* [[:Kategorî:Kontrol]]
** [[:Kategorî:Kontrola maneyê]]
Ev madde bi botê hatine çêkirin, yek bi yek divê werin kontrolkirin. —[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:17, 16 tîrmeh 2026 (UTC)
= Şablon =
== IPA ==
* {{ş|IPA}} divê [[Modul:IPA]] bi kar bîne. —[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:17, 16 tîrmeh 2026 (UTC)
== Deng ==
Kurdîkirina belgekirina {{ş|deng}} lazim e.--[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 00:06, 19 tîrmeh 2026 (UTC)
= Modul =
== Modul:form of/templates ==
* [[Modul:form of/templates]]: Divê ev modul were rojanekirin û xeletiyên berê wekî ([[hevalê]]) werin rastkirin. —[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:17, 16 tîrmeh 2026 (UTC)
*:Merheba @[[Bikarhêner:Ghybu|Ghybu]] Te gotibû di vê modulê de xeletî hene, jkx tu dikarî li vir binivîsî çi kêmasî hene, daku wextê rojane dikim ez ji bîr nekim? [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:16, 21 tîrmeh 2026 (UTC)
*::Silav. Nizanim ji bîra min çûye... Herwiha ji bo çêkirina formên navdêran zanînên cîns û tîpa dawî bes e:
*::* (-ê, mê) => çemandî, bangkirin
*::* (-ê, nêr) => îzafe
*::* (-ê, mê û nêr) => îzafe (nêr), bangkirin (mê), çemandî (mê)
*::* (-a) => îzafe (mê)
*::* (-ekî) => îzafe û çemandî (nêr, nebinavkirî)
*::* (-eke) = > îzafe (mê, nebinavkirî)
*::* ...
*:: <code>if find(mw.title.getCurrentTitle().subpageText, 'ekî$') then ... end</code>
*::<code><nowiki>{{ku-tewîn-navForm|<navdêr>|<zayend>}</nowiki></code>
*::Tablo û nivîs di yekcarî de tên çêkirin...
*::Feqet problem lêzêdekirina mînakan e. [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 17:34, 21 tîrmeh 2026 (UTC)
*:::Lêzêdekirina kîjan nimûneyan? Ev koda js ji bo çi ye? Qisûrê nenêre min fêm nekir :/ [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 18:13, 21 tîrmeh 2026 (UTC)
*::::Li vira ([[hevalê#Formeke navdêrê]]) di bin maneyên 1. û 2. mînak nayên tevlî kirin :) [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 18:18, 21 tîrmeh 2026 (UTC)
*:::::Ev tercîh e, ne mecbûrî ye, em dikarin [https://ku.wiktionary.org/w/index.php?title=heval%C3%AA&diff=prev&oldid=6276350 wisa] bikin. Wekî din? [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 18:29, 21 tîrmeh 2026 (UTC)
*::::::Min li jor tênê got ku tenê parametreyên "navdêr" û "zayend" hewce nee. Bi '''[//ku.wiktionary.org/w/index.php?title=heval%C3%AA&curid=969734&diff=6276353&oldid=6276350 vî]''' awayî jî tê çêkirin. Parametreyên din ne hewce ne. [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 18:38, 21 tîrmeh 2026 (UTC)
*:::::::Ji bo wê şabloneke din lazim e, bila ev şablon wekî îngilîzî bimîne em ji bo kurmancî yekî din çêkin. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 18:42, 21 tîrmeh 2026 (UTC)
*::::::::[https://ku.wiktionary.org/w/index.php?title=heval%C3%AA&oldid=6276885 wisa] çawa ye? Bi min nivîsîna nimûneyan zêde ne lazim e ji ber ku ti kes serê xwe pê naêşîne. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 09:46, 23 tîrmeh 2026 (UTC)
*:::::::::@[[Bikarhêner:Ghybu|Ghybu]] Vê şablonê bi kar bînin an na? Navê şablonê kê çi be? [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 19:07, 24 tîrmeh 2026 (UTC)
== Modul:columns ==
* [[Modul:columns]] were rojanekirin û {{ş|kol3}} bila lînka ''nîşan bide'' deyne beriya sernavê, kolê di qutiya rengî de bila nebe. —[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:17, 16 tîrmeh 2026 (UTC)
== Modul:etymon ==
* [[Modul:etymon kevn]]: Rojanekirin hewce ye. —[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:17, 16 tîrmeh 2026 (UTC)
== [[Modul:ziman/code to canonical name]] ==
Belgekirina skrîptê û js divê were rastkirin. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 09:31, 22 tîrmeh 2026 (UTC)
:* [[MediaWiki:UpdateLanguageNameAndCode.js]]
:[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 09:50, 22 tîrmeh 2026 (UTC)
::* [[Modul:ziman/print]]
::[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 09:52, 22 tîrmeh 2026 (UTC)
:::*[[Modul:ziman/şablon]]
:::[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 09:56, 22 tîrmeh 2026 (UTC)
::::* [[MediaWiki:Gadget-translation editor.js/ziman.json]]
::::[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 11:06, 22 tîrmeh 2026 (UTC)
== [[Modul:quote]] ==
Piştî ev modul hate hazirkirin, lazim e navên jegirtinan werin rastkirin û li hemûyan {{param|jêgirtin}} were zêdekirin. Bnr. [[Gotûbêja şablonê:Jêgirtin/Ehmedê Xanî/Mem û Zîn]] [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 22:27, 5 tebax 2026 (UTC)
::Ev modul hema bêje hazir e. Hûn li ser van madeyan çi difikirin:
# {{para|tarîx}} lazim e full date be eger na, lazim e {{para|sal}} were bikaranîn. Feqat "'''2021''' kanûna pêşîn 23" bi vî şiklî bi min ne problem e çnkî derdê en.wikt "attestation" e delîla herî pêşî jî sal e.
#: {{demo|sep=wisa xuya dibe<br>|<nowiki>{{jêder-kitêb/ceribandin|en
|tarîx=23 December 2021|nivîskar=Harry Hobbs; George Williams|sernav=Micronations and the Search for Sovereignty|url=https://www.cambridge.org/core/books/micronations-and-the-search-for-sovereignty/B0414A3A322695D9EE71E4CDDFDA06DE|weşanxane=Cambridge University Press|rûpel=155|isbn=978-1-009-15012-5|jêgirtin=jêgirtin.|t=-}}</nowiki>}}
#{{para|amadekar}}/{{para|edîtor}}/{{para|terciman}} bi şiklê edîtoriya, amadekariya, tercimekirina
#: {{demo|sep=dide<br>|<nowiki>{{jêder-kitêb/ceribandin|en
|sernav=Medical Surgical Nursing|serî=Juta's Manual of Nursing|cildê-seriyê=volume 4|edîtor=Sophie Mataniele Mogotlane; Joyce Mokoena; Motshedisi Eunice Chauke; Anne Young|sal=2005|weşanxane=Juta Academic|isbn=978-0702171840|rûpel=!12-29|jêgirtin=jêgirtin|t=-}}</nowiki>}}
--[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 13:09, 10 tebax 2026 (UTC)
:@[[Bikarhêner:Bikarhêner|Bikarhêner]] û @[[Bikarhêner:Ghybu|Ghybu]] Hîn gelek tişt hene divê îzah bikin û fikrê we pirs bikim, feqat îzahkirin pir zor e, em dest bi bikaranînê bikin û dûre tiştên ku hûn naxwazin em dikarin biguherînîn, dibe? [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 13:11, 10 tebax 2026 (UTC)
::Dibe, piştî çêbû, em di praktîkê de bibînin ku çawa ye. -- [[Bikarhêner:Bikarhêner|Bikarhêner]] ([[Gotûbêja bikarhêner:Bikarhêner|gotûbêj]]) 18:05, 10 tebax 2026 (UTC)
= Javascript =
== [[Mediawiki:Gadget-citoid-helper.js]] ==
Ji bo bi citoidê kopîkirina malûmatên çavkaniyan amûreke wisa lazim e. Xisûsen ji ber ku bi çend amûrên din dikare were bikaranîn.
Feqat çend problem hene, şablonên me de kêmasiya parametreyan gelek in û xerîteyên citoidê hîn nehatine çêkirin. Wana sererast bikin dûre vê amûrê çêkin, piştre [[MediaWiki:Gadget-start.js|start.js]] û [[MediaWiki:Gadget-wikt.add-examples.js|add examples.js]] were rojanekirin.
- --[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 00:04, 19 tîrmeh 2026 (UTC)
:Merheba @[[Bikarhêner:Bikarhêner|Bikarhêner]], ez dibêjim karê Modul:quote zêde wext bistîne, bila em dest bi bikaranîna van amûran bikin dûre kêmasiyan em ê temam bikin înşela. Dikarî vana li cihên xwe yên rast kopî paste bikî?
# [[Special:PermanentLink/6291574|Bikarhêner:Wikihez/skrîpt/js/Gadget-citoid-helper.js]] --> [[Mediawiki:Gadget-citoid-helper.js]]
# Ya li jêr kopî bike qismê herî dawî ya AmûrênVeşartî li [[MediaWiki:Gadgets-definition]]:
## <code><nowiki>* citoid-helper[ResourceLoader|hidden|default|dependencies=mediawiki.util]|citoid-helper.js</nowiki></code>
--[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:58, 26 tîrmeh 2026 (UTC)
== [[MediaWiki:Gadget-start.js]] ==
Rojanekirin hewce ye. Min gelek tişt lê zêde kir lê ez niha test dikime. Piştre em bar bikin:
* [[Bikarhêner:Wikihez/Gadget-start.js]] --> [[MediaWiki:Gadget-start.js]]
* [[Bikarhêner:Wikihez/Gadget-start.css]] --> [[MediaWiki:Gadget-start.css]]
--[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 22:08, 17 tîrmeh 2026 (UTC)
:Min [[MediaWiki:Gadget-start/data.json|data.json]] çêkir ji bo ku bi hêsanî malûmatên heyî werin guhartin bêyî guhartina Javascriptê. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 19:49, 18 tîrmeh 2026 (UTC)
:Xeletiyên ku ji bîr nekim rast bikim:
:* Wextê min çavkanî "kitêb" hilbijart û bi destî tije kir xeletiyeke [https://ku.wiktionary.org/w/index.php?title=xezete&diff=prev&oldid=6265392 wisa] derket her kelîme hate lînkkirin.
:* <code>html("⠿")</code> ev ne lazim e.
:* textarea ji bo çavkaniyên jêgirtinan xaseten yên sernav hîn jî ne draggable e.
:* pêşdîtina zindî checkbox wextê tê rakirin, pêşdîtin winda nabe.
:* Butona mobîlê ya vekirina formê di moda tarî de belî nabe, tenê wekî qutiyeke tarî xuya dibe.
:* Metna hişyarkirinê di guhartina rûpelên heyî de lazim e baştir bikim.
:[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 23:51, 18 tîrmeh 2026 (UTC)
::Ev problem çêbûn, ez ê binêrim ka çi problemên din hene. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 14:15, 19 tîrmeh 2026 (UTC)
:::Çêke: Ji bo qismê çavkaniyê yek dikare API call û Kategorî:Çavkanî bi kar bîne ji bo ku şablon zêde bikî ji yên heyî. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 21:21, 19 tîrmeh 2026 (UTC)
::::Ev jî çêbû, min beşa çavkanî jî çêkir. Eger xeletî dernekeve û problema valahiya piştî etîketê ji bîr nekim, piştî rojanekirina amûrên linkify, û citoid em dikarin bar bikin. Ez ê ti tiştê nû îlawe nekim, zêde dirêj bû. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:14, 21 tîrmeh 2026 (UTC)
:::::Merheba @[[Bikarhêner:Bikarhêner|Bikarhêner]]. Dikarî wana bar bikî?
:::::* [[Bikarhêner:Wikihez/Gadget-start.js]] --> [[MediaWiki:Gadget-start.js]]
:::::* [[Bikarhêner:Wikihez/Gadget-start.css]] --> [[MediaWiki:Gadget-start.css]]
:::::* [[MediaWiki:Gadgets-definition]] wisa rojane bike:
:::::* start[ResourceLoader|default|package|dependencies=mediawiki.util,ext.gadget.StorageUtils,ext.gadget.citoid-helper]|start.js|start.css|start.js/data.json
:::::[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 09:39, 5 tebax 2026 (UTC)
{{şirove}} Dewama ''[[Special:PermanentLink/6333688|Gotûbêja bikarhêner:Rewiye tine#WF:Nû]]'' bila gotûbêja wî em spam nekin. :D
{{r|Ghybu}} dikarî [[Special:PermanentLink/6333689|vê htmlê]] binêrî claude rast fêm kiriye yan na? Daxîne û wek html qeyd bike. --[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 18:43, 14 tebax 2026 (UTC)
:Min seh wîkîyên din jî kir, li wîkiya fransî tiştekî wekî daxwaza min çêkirine (tiştên ku ne hewce ne wekî "tab" çêkirine an jî hatine vêşartin): [//fr.wiktionary.org/w/index.php?title=fdsdfdsf&action=edit&redlink=1]. Formata me yê berî jî bi vê lojîkê hatibû çêkirin, wekî de.wiktionary ([//de.wiktionary.org/w/index.php?title=sdfdsfsdfs&action=edit&preload=Vorlage:Formatvorlage_(Substantiv_vereinfacht)]) [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 19:01, 14 tebax 2026 (UTC)
::PS: Dîsa jî Claude min rind fêm kiriye :)) Feqet min got ku beşên Mane", "Bilêvkirin" û "Beşên din" cem hev (wekî "tab") ". Û dema ku tu terî di nav "Besên din" Hevmane, Jê, ... li wira werin dayîn. Wêne/Resim û Nimûne jî di nav beşa ("tab") "Mane" [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 19:17, 14 tebax 2026 (UTC)
::Erê ya fr.wikt min jî dîtibû jixwe fikrê tab min ji wan girtibû :D (feqat min li cem wan tenê tab-a maneyê dît yên din nedît çawa tê vekirin nizanim) Berê hemû beş piştî maneyê bibûn, dûre min sê Tab çêkir, Bingehîn+Lînkkirin+Bikaranîn. Niha lazim e Tabeke din çêkim. Ya ku claude çêkiriye bnr. [[Special:PermanentLink/6333698#L-7]] ne baş e bnr. [[Special:PermanentLink/6333703|qiyaskirinê li ser vê htmlê]] Êdî ez Claude abuse dikime ji ber ku Pro ye :D [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 19:26, 14 tebax 2026 (UTC)
:::Claude dibêje:
:::Good clarification — that's a real simplification, not just a relabel. Updated STEP_GROUPS from 5 tabs down to 3:
:::Mane — the definitions themselves, plus Wêne (image), now grouped in with it instead of sitting in a separate misc tab. Nimûne needed no change since it was already rendering inside each Mane sense block, not as its own step.
:::Bilêvkirin — unchanged, still just pronunciation.
:::Beşên din — everything else in one flat bucket: hevmane, jê, têkildar, herwiha binêre, formên alternatîv, dijmane, jornav, jêrnav, notên bikaranînê, bi alfabeyên din, dûnde, çavkanî, bêhtir bixwîne, tewandin, etîmolojî, zaravayên din, werger, and bnr-h — instead of being split across the old Bingehîn/Lînkkirin/Bikaranîn/Din tabs.
:::No DOM-order changes were needed this time — the fix from the blank-tab bug looks up the tab bar's position dynamically now, so it didn't matter that I regrouped which steps go where. Same two files, saved to your Wiki folder — worth another pass through all three tabs once you've pasted this in, same as last time. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 19:34, 14 tebax 2026 (UTC)
::::Mînak:
Ziman
---------------------------------------------
Cureyê rêzimanî (Navdêr)
Navdêr (hilbijêre) ┆ Cîns (hilbijêre) ┆ Jimar (hilbijêre)
- lêker -mê -yekjimar
- rengdêr -nêr -pirjimar
- ... -... -...
---------------------------------------------
Mane || Bilêvkirin || Beşên din
hilbijêre:
- mane - IPA - Hevmane
- nimûne - kîte - Dijmane
- wêne
Dema ku tu "Cureyê rêzimanî" dikî "Lêker" :
Cureyê rêzimanî (Lêker)
Lêker (hilbijêre) ┆ Cure (hilbijêre)
- navdêr -rehê niha
- rengdêr -rehê borî
- ... -...
---------------------------------------------
┆ : select/option ("tab" nîne, tê dîtin)<br>
|| : "tab"
-- [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 19:45, 14 tebax 2026 (UTC)
'''Sê-stûnî ("┆" = ne tab), li gorî Cureyê rêzimanî:'''
{| class="wikitable"
! Cureyê rêzimanî !! Stûna 2 !! Stûna 3 !! Têbînî
|-
| Navdêr / Serenav
| Cîns (hilbijêre ▾: mê / nêr / ... — tenê heke ziman zayendê rêzimanî hebe)
| '''Jimar''' (?) — pirs li jêr
| Qadên "Forma mê/nêr/pirjimar/yekjimar" niha jî li vir hene — ma ev di "Jimar"-ê de tên tevlihev kirin, an cuda dimînin?
|-
| Rengdêr
| (heman m/n/p/y forman ku Navdêr distîne)
| Sûperlatîv (sûp) / Komparatîv (komp)
| Ne li ser her du nîgaran hatiye behs kirin — ma sê-stûnî li vir jî tê bikaranîn?
|-
| Lêker
| '''Cure''' = Cureyê lêkerê (hilbijêre ▾: gerguhêz / negerguhêz / xwerû-... / pêkhatî-... / hevedudanî-... / biwêjî-... — 10 vebijêrk)
| Di heman stûnê de: Rehê dema niha / Rehê dema borî / Rehê dema bilanî (her sê qadên nivîsandinê ne, ne hilbijêrk in)
| Ma "Cure" her sê rehan di xwe de digire wek yek stûn, an her yek stûneke cuda ye?
|-
| Tîp (herf/sembol)
| Girdêk (gir) / Hûrek (hûr)
| —
| Ne behs kiriye
|-
| Her cureyek, li gorî zimên
| Transliterasyon (tr) / Transkrîpsiyon (ts)
| —
| Bi zimên ve girêdayî ye, ne bi cureyê rêzimanî ve
|-
| Her cureyek, tenê ziman=japonî
| Hanja / Translit. hanja
| —
| Ne bi cureyê rêzimanî ve girêdayî ye
|-
| Her cureyek
| '''Tercîhên pêşketî''' (kolapsî): form, formaalt, nekatcure, nekatcins, nekatçendterm, serlînkneke, nekatpalîndrom, neformtr
| —
| Vebijarkî, ji bo hemû cureyan
|}
'''Tabên jêrîn — Mane ‖ Bilêvkirin ‖ Beşên din ("||" = tab):'''
{| class="wikitable"
! Mane !! Bilêvkirin !! Beşên din (hemû 18 hêman)
|-
| mane, nimûne, wêne
| şablonên bilêvkirinê (mînak: IPA, kîte)
| tewandin, etîmolojî, bi zaravayên din, werger, jê, têkildar, herwiha binêre, formên alternatîv, hevmane, dijmane, jornav, jêrnav, notên bikaranînê, bi alfabeyên din, dûnde, çavkanî, bêhtir bixwîne, bnr-h
|}
'''Pirsên vekirî:'''
# "Jimar" (yekjimar/pirjimar) — qadeke ku nîşan dide têketî bi xwe yekjimar e an pirjimar e. Ev cuda ye ji "Forma yekjimar (y)"/"Forma pirjimar (p)" ya heyî (ku forma DÎN a kelîmeyê tomar dike). Herdu bimînin, an werin yek kirin?
# Ma sê-stûnî tenê ji bo Navdêr/Lêker e, an ji bo Rengdêr/Tîp jî heman mantiq derbas dibe?
# Di "Beşên din" de: dixwazî pêşî navnîşek/hilbijartinek nîşan bide (17 hêmanên din jî tê de), û qad tenê piştî hilbijartinê xuya bibin?
:Tu dikarî start.js ji Tercîh/ Amûran rakî û bi test.js li Amûran herî taliyê ye biceribînî. Claude ya li jor hazir kir, Jimar ez dikarim îzah bikim. Feqat bi min di tab-a maneyê de lazim e Bi zaravayên din (heta wek werger her car bila li rûpelan were zêdekirin) û werger jî hebe.--[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 20:18, 14 tebax 2026 (UTC)
:;Navdêr: Tenê "cîns" û "jimar" bes e. "Forma mê", "Forma nêr", ... nayê fêm kirin. Bi min wekî "Tercîhên pêşketî" bi navkî din veşartî çêke.
:;Lêker: "Cureyê lêkerê" nayê fêm kirin, bi min pêşta "geguhez/negerguhêz" were hilbijartin, paşê jî form "hevdudanî/pêkatî/..." ji ber ku her kes vana nizanî... Dîsa jî tu dizanî.
:Bi min beşên "Hevmane" û dijmane jî bike de nav beşa Mane ("tab") ji ber ku pirr tên xwestin.
:Şûnda Wêne jî Nimûne/jêgirtin...
:Herwiha hemû bi rengî şîn hatine çêkirin, nizanim beşên din (===) bi rengê gewr an reş çito dibe? [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 21:35, 14 tebax 2026 (UTC)
== [[Mediawiki:Gadget-QQ.js]] ==
Ev amûr di şikle Minerva de. Her daîm vê xeletiyê dide:
<syntaxhighlight lang="js">
TypeError: Cannot read properties of null (reading 'addEventListener') at css () at runScript () at Array.<anonymous> () at flushCssBuffer ()
</syntaxhighlight> [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 19:29, 18 tîrmeh 2026 (UTC)
:* [[Bikarhêner:Wikihez/skrîpt/js/Gadget-QQ.js]] --> [[Mediawiki:Gadget-QQ.js]]
:* [[Bikarhêner:Wikihez/Gadget-QQ.css]] --> [[Mediawiki:Gadget-QQ.css]]
:Ez dibêjim çêbû lê ka çend roj biceribînim. Tiştên ku hatin sererastkirin:
:# Google Books API Key dikarî zêde bikî, dixe cookies û di gerokê de dimîne. Berê bê API Key dixebitiya lê êdî mecbûr e ku API Key-a te hebe, bidestxistina wê ne zêde zor e lê dîsa jî tevlihev e.
:# Êdî di mobîlê de dixebite, heta di mobîlê de xweştir xuya dike.
:# Moda tarî
:# OOUI dewsa jquery.ui
:# Li qutiyê çi dixwazî zêde bikî, dikare li gorî îsm, sifet, fiîl bitewîne. Lê ji bo fiîl tenê dikare çend heb inflection bîne.
:# Butona paqij bike lê zêde kir.
:# Çend paqijiyên jêgirtinên Google Kitêbê niha hene.
:[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 23:38, 18 tîrmeh 2026 (UTC)
::Tewandina fiîlan û xeletiya modulê lazim e were rastkirin. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 14:40, 21 tîrmeh 2026 (UTC)
== [[MediaWiki:Gadget-wikt.add-examples.js]] ==
Min ev amûr hinek rojane kir feqat çend problem hene berî ku bar bikin.
Tiştên ku min guhart:
# Êdî li sayfeyên bi {{ş|maneid}} jî dixebite,
# Cihê di wîkîtekstê de yê ku jêgirtin were îlawekirin baştir bû,
# [[Mediawiki:Gadget-citoid-helper.js|citoid helper]] zêde kir ji bo ku bi hêsanî çavkanî bi riya doi, isbn an urlyê werin tijîkirin.
* [[Bikarhêner:Wikihez/Gadget-wikt.add-examples.css]] --> [[MediaWiki:Gadget-wikt.add-examples.css]]
* [[Bikarhêner:Wikihez/Gadget-wikt.add-examples.js]] --> [[MediaWiki:Gadget-wikt.add-examples.js]]
- --[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 00:50, 19 tîrmeh 2026 (UTC)
:Min "wikt." qismên cache kirinê ya wîkiya fransî bi [[MediaWiki:Gadget-StorageUtils.js]] guhartiye. loma ji bîr nekin wê amûrê li [[MediaWiki:Gadgets-definition]] zêde bikin. û navê amûrê jî biguhêrînin. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 09:15, 23 tîrmeh 2026 (UTC)
::Berê li ser WF:ceribandin dixebitî. niha naxebite. Divê were rastkirin. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 22:10, 7 tebax 2026 (UTC)
== Gadget-translation editor ==
* [[MediaWiki:Gadget-translation editor.js]]: divê formata en.wîktê were bikaranîn ji ber ku me gelek tercime ji en.wîktê kopî kir û ev js hîn nikare formata wekî li jêr bi kar bîne.
<syntaxhighlight lang="wikitext">
* {{Z|sh}}:
*: Kirîlî:
*: Latînî
</syntaxhighlight>
—[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:17, 16 tîrmeh 2026 (UTC)
== [[Mediawiki:Gadget-linkify.js]] ==
* ''rûpeleke'' wekî<syntaxhighlight lang="wikitext">[[rûpeleke]]</syntaxhighlight> lînk dike, bi regexê belkî dikare wisa bike <syntaxhighlight lang="wikitext">[[rûpel]]eke</syntaxhighlight>
—[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:17, 16 tîrmeh 2026 (UTC)
* Amûreke din wekî [[User:Wikihez/Gadget-linkify.js|linkify]] lazim e ku herfên mezin biçûk bike ji bo kurmancî.—[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:17, 16 tîrmeh 2026 (UTC)
:{{r|Bikarhêner}} Merheba bira, dikarî viya jî bar bikî?:
* [[Special:PermanentLink/6291974|linkify]] --> [[Mediawiki:Gadget-linkify.js]]
Spas--[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 11:42, 29 tîrmeh 2026 (UTC)
:Dûre [https://ku.wiktionary.org/wiki/MediaWiki:Gadget-start.js#L-283 li vir] wiktviLinkify bike kuLinkify xêra xwe [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 11:51, 29 tîrmeh 2026 (UTC)
::Min ji bîr kir lê zêde bikim niha nikare "Dİ" bike "di", xeletiyeke berbelav a di nivîsên kurdî de, herfên din ên wekî ll yan rr jî hewce ne werin zêdekirin. Dûre em zêde bikin. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 21:42, 29 tîrmeh 2026 (UTC)
:::Min nû ferq kir, sayfeyên ku hîn nehatine çêkirin wîkîlînk nake. Problemeke mezin e divê were rastkirin. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 18:15, 30 tîrmeh 2026 (UTC)
::::Na, lînk dike, tiştekî din heye... [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 10:49, 31 tîrmeh 2026 (UTC)
== Amûra manayê ==
Amûreke din ji bo nivîsina maneyê wekî Nimûne zêde bike lazim e [https://ku.wiktionary.org/w/index.php?title=Bikarh%C3%AAner:Wikihez/test.js&oldid=6276876 js] [https://ku.wiktionary.org/w/index.php?title=%C5%9Eablon:ceribandin2&oldid=6265629 şablon] [https://ku.wiktionary.org/w/index.php?title=Bikarh%C3%AAner:Wikihez/common.css&oldid=6265642 css] --[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 09:12, 23 tîrmeh 2026 (UTC)
== [[MediaWiki:Gadget-jeder.js]] ==
@[[Bikarhêner:Ghybu|Ghybu]] Çavkaniyên jêderê di moda pêşdîtinê de jêderê vedişêre, ew jî min gelek eciz dike wextê çavkanî zêde dikim. Min ji Claude pirsî û kodan nîşanî wê da, wisa cewab da:
Yes — and this file actually explains the whole thing precisely, better than my earlier guess about extract-stripping.
What's happening: the CSS rule
<syntaxhighlight lang="css">
.jeder{
display:none;
}
</syntaxhighlight>
hides every citation by default, *unconditionally*. The only thing that ever makes it visible again is the gadget's JS: it finds each `.jeder`, builds the short "`— (year, author, +)`" summary from the `.j-pewist` fields, and either reveals the short version or — for citations with no `.j-pewist` fields — explicitly sets `display:inline` on the original.
So visibility of citations depends entirely on this JS running. In the normal article view (Image 1) it runs, so you see the collapsed "`(1918, E. Rehmî Ji Mala Hekariyan, Amadekar: M. E. Bozarslan, +)`" form. In whatever generated Image 2 — a hover-preview/extract/API render — gadget JS doesn't execute, so nothing ever removes the `display:none`, and the citation vanishes completely rather than degrading to "still visible, just not collapsed."
<b>The fix:</b> flip the default so the *un-collapsed* state is the safe fallback, and let JS do the hiding only after it successfully builds the short version. That way, any context without JS shows the full citation instead of nothing.
CSS — remove the blanket hide:
<syntaxhighlight lang="css">
.jeder {
/* intentionally no display:none here — see Gadget-... .js */
}
</syntaxhighlight>
JS — do the hiding from script, after the short form exists:
{{veşêre-ser}}
<syntaxhighlight lang="js">
// Ji bo şablonên [[Şablon:jêder]] hatiye nivîsandin.
// Parametreyên ku di navbera "<span class="j-pewist">...</span>" an "{{j-pêwîst|...}}" de ne venaşêre.
$(function() {
function nivisaKurtTevliBike(sund, nivisKurt) {
var zede = $('<a>+</a>')
.addClass('click')
.attr('href', '#')
.attr('title', 'zêdetir')
.css('font-weight', 'bold');
var kurt = $(' <a>↩</a>')
.addClass('click-kurt')
.attr('href', '#')
.attr('title', 'veşêre')
.css('font-weight', 'bold');
$('<span>' + nivisKurt + '</span>')
.append(zede).append(')')
.addClass('jeder-kurt')
.css('font-size', '0.85em')
.insertAfter(sund);
sund.append(' ').append(kurt);
// Only hide the full citation once the short summary actually exists.
// If this script never runs (no-JS clients, hover-preview extracts,
// action=render, etc.), the full citation stays visible instead of
// silently disappearing.
sund.css('display', 'none');
}
function vesere() {
$('.jeder').each(function() {
var elmTab = $(this).find('.j-pewist').clone();
if (elmTab.length) {
var elm = '';
for (var i = elmTab.length - 1; i >= 0; i--) {
elm = elmTab.eq(i).html() + ', ' + elm;
}
var nivisKurt = ' — (' + elm;
nivisaKurtTevliBike($(this), nivisKurt);
}
// else: no j-pewist fields to shorten — leave the full citation
// as it already renders (visible), nothing to do.
});
}
vesere();
$(".click").click(function(e) {
e.preventDefault();
$(this).parent('.jeder-kurt').css('display', 'none');
$(this).parent('.jeder-kurt').prev().css('display', 'inline');
});
$(".click-kurt").click(function(e) {
e.preventDefault();
$(this).parent('.jeder').css('display', 'none');
$(this).parent('.jeder').next().css('display', 'inline');
});
});
</syntaxhighlight>
Net effect:
- JS-enabled readers (normal article view): identical experience to today — collapsed short form with `+`/`↩` toggle.
- No-JS contexts (previews, extracts, screen readers before JS loads, print, etc.): full citation is shown instead of nothing — a real regression fix rather than a cosmetic one.
One caveat worth being upfront about: this fixes it *if* the preview context renders the gadget's HTML/CSS but doesn't execute gadget JS (which is the far more common case, and what this code strongly suggests is happening). If Image 2 instead comes from a pipeline that strips the `.jeder`/`.jegirtin-text` elements out of the HTML entirely before this CSS/JS even gets a chance to apply, no on-wiki CSS/JS change can help — that'd need the extract-generation config changed instead. Given what this gadget file shows, though, I'd bet on the CSS-hide explanation.
{{veşêre-bin}}
Em dûre biceribînin eger xeletî tinebe, vî tiştî jî rast bikin. --[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 20:00, 23 tîrmeh 2026 (UTC)
:Ez APIya MediaWiki rind nizanim belkî Claude dizane:) Em nikarin bibêjin dema ku moda "''action=edit''" e fonksiyona <code>function vesere()</code> bi kar meyîne. [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 15:57, 24 tîrmeh 2026 (UTC)
::Na, di moda "edît"-ê de <code>var elmTab = null</code>... [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 16:13, 24 tîrmeh 2026 (UTC)
?:
<syntaxhighlight lang="js">
if (
mw.config.get('wgAction') === 'edit' ||
mw.config.get('wgAction') === 'submit'
){
var elmTab = [];
} else {
var elmTab = $(this).find('.j-pewist').clone();
}
</syntaxhighlight>
--[[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 16:31, 24 tîrmeh 2026 (UTC)
:Ez jî nizanim Claude çiqas ji mediawiki fêm dike lê heta niha ti tişt nîne ku min jê pirs kir û nikaribû çêke, bila wekî reklam nebe feqat Claude mikemmel e, dibêjim "li vir çima xeletiyeke wisa derdikeve" di dosyeya 2000 rêzî de diçe tiştê xelet tenê rast dike tiştekî din naguherîne. Chatgpt û aistudio qet wisa nakin, eynî dosyeyê deh cara dinivîsin, deh netîceyên cuda derdikevin :D
:Em dikarin vê amûrê wextê edit û submitê neaktîv bikin wekî <syntaxhighlight lang="js">if (!(action === "edit" || action === "submit")) {
:return;</syntaxhighlight> lê wê demê display:none wê çibe nizanim. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 18:23, 24 tîrmeh 2026 (UTC)
::display:none ne hewce ye ma jixwe di nav kodê [https://ku.wiktionary.org/w/index.php?title=MediaWiki:Gadget-jeder.js&oldid=6069025#L-49 L-49] de inline/none heye? [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 18:53, 24 tîrmeh 2026 (UTC)
:Min bi vî şiklî [https://ku.wiktionary.org/w/index.php?title=Bikarh%C3%AAner:Wikihez/vector-2022.js&diff=prev&oldid=6290816#L-28] ceriband feqat nexebitî. "display:none" di pêşdîtinê de dixebite feqat js naşixule. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 14:43, 25 tîrmeh 2026 (UTC)
::Kodên JSê pir hez nakim (pêşta hukurina APIya MWyê hewce bû) dîsa jî ez ê seh bikim :) [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 16:49, 27 tîrmeh 2026 (UTC)
:::Ez niha bi vî şiklî [https://ku.wiktionary.org/w/index.php?title=Bikarh%C3%AAner:Wikihez/test.js&oldid=6290820] [https://ku.wiktionary.org/w/index.php?title=Bikarh%C3%AAner:Wikihez/common.css&oldid=6290821#L-8] bi kar tînim ti problem nîne. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 17:09, 27 tîrmeh 2026 (UTC)
== [[MediaWiki:Gadget-PagePreviews.js]] ==
Ez dibêjim em vê amûrê jî çêkin [[:en:MediaWiki:Gadget-PagePreviews.js]] --[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 10:56, 3 tebax 2026 (UTC)
= Moda tarî =
== [[Şablon:wîkîpediya]] ==
Rengê tarî de xirab e.--[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 19:36, 4 tebax 2026 (UTC)
= Bot =
Karên ku bi botê werin çêkirin ji kerema xwe li vir binivîsin.
== Kategorî:Biwêj ==
[[:Kategorî:Biwêj]] divê were paqijkirin, lîsteya madeyên {{ş|biwêj}} çêke, yên ku tê de bûn, kirin, man hene filtre bike yên din bi destî tê çêkirin.—[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:17, 16 tîrmeh 2026 (UTC)
== Jêgirtin ==
Xistina jêgirtinên beşa [https://ku.wiktionary.org/w/index.php?search=insource%3A%2F%3D+*Ji+%5BWw%5D%C3%AAjey%C3%AA+*%3D%2F&title=Taybet%3AL%C3%AAger%C3%AEn&profile=advanced&fulltext=1&ns0=1&searchToken=8rh0bmw8dccsi7aynl6zli8uf ji wêjeyê] li beşa maneyê. —[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:17, 16 tîrmeh 2026 (UTC)
== Bota Toolforgeê ==
Botekî Toolforgeê lazim e ji bo ku xeletiyên biçûk wekî şablonên bi navên îngilîzî werin kurdîkirin yan jî valahiya beşan rast bike û hwd.—[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:17, 16 tîrmeh 2026 (UTC)
:Min [[Bikarhêner:Wikihez/skrîpt/py/kuwiktkozmetik.py|paqijiyen kozmetîk]] hazir kir feqat hîn navên şablonan naguhêre. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 20:05, 4 tebax 2026 (UTC)
== Updatew ==
Bota [[Bikarhêner:Wikihez/skrîpt/py/updateW.py|updateW]] divê were rojanekirin. Yan jî yekî nû were çêkirin. Şablonên {{ş|W}} di beşa tercimeyan de sererast dike û zimanan rêz dike. Ya niha xeletiya navê zimanî dide.—[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:17, 16 tîrmeh 2026 (UTC)
== sihir --> sêhr ==
Tercimeyên ''[[sêhr]]'' hemû dibêje ''sihir'' loma bi botê lazim e kirin ''sêhr''. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 17:43, 18 tîrmeh 2026 (UTC)
:Sihirbaz --> sêhrbaz [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 18:07, 18 tîrmeh 2026 (UTC)
== Tercimeyên dîroknas ==
Li tercimeyên [[dîroknas]], hevmaneyên wê hewce ye were îlawekirin. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 18:44, 18 tîrmeh 2026 (UTC)
== Mewlûd ==
Sererastkirina jêgirtinên mewlûdê [https://ku.wiktionary.org/w/index.php?search=insource%3A%2Fw%5C%3AMela+His%C3%AAn%C3%AA+Batey%C3%AE%2F&title=Taybet%3AL%C3%AAger%C3%AEn&ns0=1&searchToken=8m0tguy3sqt7edr4sg0u8hedo] wekî [https://ku.wiktionary.org/w/index.php?title=dax%C3%AEdar&curid=284303&diff=6265851&oldid=6142285] [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 09:43, 20 tîrmeh 2026 (UTC)
6khke6ud6f1x68b6jgfd1q4wo5cytow
6333740
6333739
2026-08-14T21:44:10Z
Ghybu
1393
Guhartoya [[Special:Diff/6333739|6333739]] yê [[Special:Contributions/Ghybu|Ghybu]] ([[User talk:Ghybu|gotûbêj]]) şûnde kir
6333740
wikitext
text/x-wiki
{{/ser}}
= Karên ferhengî =
== Mane ==
* [[:Kategorî:Madeyên bê beşa mane]]
** [[:Kategorî:Madeyên bê beşa mane bi kurmancî]]
Li ser van rûpelan ev made hene ku maneyan wan nehatine nivîsin û divê werin nivîsin. —[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:17, 16 tîrmeh 2026 (UTC)
== Etîmolojî ==
*[[:Kategorî:Daxwazên etîmolojiyê]]
**[[:Kategorî:Daxwazên etîmolojiyê bi kurmancî]]
Li ser van rûpelan ev made hene ku etîmolojiya wan hîn nehatine nivîsin. Ji bo alîkariyê binêre [[WF:Etîmolojî]] —[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:17, 16 tîrmeh 2026 (UTC)
== Cureyê rêzimanî ==
* [[:Kategorî:Gotarên bê kategoriya rêzimanî]]
* [[:Kategorî:Gotarên bê kategoriya rêzimanî bi kurmancî]]
Li ser van rûpelan ev made hene ku cureyên wan yên rêzimanî hîn nehatine nivîsin. Ji bo alîkariyê binêre [[Alîkarî:Cureyên peyvan]] —[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:17, 16 tîrmeh 2026 (UTC)
== Kontrol ==
* [[:Kategorî:Kontrol]]
** [[:Kategorî:Kontrola maneyê]]
Ev madde bi botê hatine çêkirin, yek bi yek divê werin kontrolkirin. —[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:17, 16 tîrmeh 2026 (UTC)
= Şablon =
== IPA ==
* {{ş|IPA}} divê [[Modul:IPA]] bi kar bîne. —[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:17, 16 tîrmeh 2026 (UTC)
== Deng ==
Kurdîkirina belgekirina {{ş|deng}} lazim e.--[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 00:06, 19 tîrmeh 2026 (UTC)
= Modul =
== Modul:form of/templates ==
* [[Modul:form of/templates]]: Divê ev modul were rojanekirin û xeletiyên berê wekî ([[hevalê]]) werin rastkirin. —[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:17, 16 tîrmeh 2026 (UTC)
*:Merheba @[[Bikarhêner:Ghybu|Ghybu]] Te gotibû di vê modulê de xeletî hene, jkx tu dikarî li vir binivîsî çi kêmasî hene, daku wextê rojane dikim ez ji bîr nekim? [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:16, 21 tîrmeh 2026 (UTC)
*::Silav. Nizanim ji bîra min çûye... Herwiha ji bo çêkirina formên navdêran zanînên cîns û tîpa dawî bes e:
*::* (-ê, mê) => çemandî, bangkirin
*::* (-ê, nêr) => îzafe
*::* (-ê, mê û nêr) => îzafe (nêr), bangkirin (mê), çemandî (mê)
*::* (-a) => îzafe (mê)
*::* (-ekî) => îzafe û çemandî (nêr, nebinavkirî)
*::* (-eke) = > îzafe (mê, nebinavkirî)
*::* ...
*:: <code>if find(mw.title.getCurrentTitle().subpageText, 'ekî$') then ... end</code>
*::<code><nowiki>{{ku-tewîn-navForm|<navdêr>|<zayend>}</nowiki></code>
*::Tablo û nivîs di yekcarî de tên çêkirin...
*::Feqet problem lêzêdekirina mînakan e. [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 17:34, 21 tîrmeh 2026 (UTC)
*:::Lêzêdekirina kîjan nimûneyan? Ev koda js ji bo çi ye? Qisûrê nenêre min fêm nekir :/ [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 18:13, 21 tîrmeh 2026 (UTC)
*::::Li vira ([[hevalê#Formeke navdêrê]]) di bin maneyên 1. û 2. mînak nayên tevlî kirin :) [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 18:18, 21 tîrmeh 2026 (UTC)
*:::::Ev tercîh e, ne mecbûrî ye, em dikarin [https://ku.wiktionary.org/w/index.php?title=heval%C3%AA&diff=prev&oldid=6276350 wisa] bikin. Wekî din? [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 18:29, 21 tîrmeh 2026 (UTC)
*::::::Min li jor tênê got ku tenê parametreyên "navdêr" û "zayend" hewce nee. Bi '''[//ku.wiktionary.org/w/index.php?title=heval%C3%AA&curid=969734&diff=6276353&oldid=6276350 vî]''' awayî jî tê çêkirin. Parametreyên din ne hewce ne. [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 18:38, 21 tîrmeh 2026 (UTC)
*:::::::Ji bo wê şabloneke din lazim e, bila ev şablon wekî îngilîzî bimîne em ji bo kurmancî yekî din çêkin. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 18:42, 21 tîrmeh 2026 (UTC)
*::::::::[https://ku.wiktionary.org/w/index.php?title=heval%C3%AA&oldid=6276885 wisa] çawa ye? Bi min nivîsîna nimûneyan zêde ne lazim e ji ber ku ti kes serê xwe pê naêşîne. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 09:46, 23 tîrmeh 2026 (UTC)
*:::::::::@[[Bikarhêner:Ghybu|Ghybu]] Vê şablonê bi kar bînin an na? Navê şablonê kê çi be? [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 19:07, 24 tîrmeh 2026 (UTC)
== Modul:columns ==
* [[Modul:columns]] were rojanekirin û {{ş|kol3}} bila lînka ''nîşan bide'' deyne beriya sernavê, kolê di qutiya rengî de bila nebe. —[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:17, 16 tîrmeh 2026 (UTC)
== Modul:etymon ==
* [[Modul:etymon kevn]]: Rojanekirin hewce ye. —[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:17, 16 tîrmeh 2026 (UTC)
== [[Modul:ziman/code to canonical name]] ==
Belgekirina skrîptê û js divê were rastkirin. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 09:31, 22 tîrmeh 2026 (UTC)
:* [[MediaWiki:UpdateLanguageNameAndCode.js]]
:[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 09:50, 22 tîrmeh 2026 (UTC)
::* [[Modul:ziman/print]]
::[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 09:52, 22 tîrmeh 2026 (UTC)
:::*[[Modul:ziman/şablon]]
:::[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 09:56, 22 tîrmeh 2026 (UTC)
::::* [[MediaWiki:Gadget-translation editor.js/ziman.json]]
::::[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 11:06, 22 tîrmeh 2026 (UTC)
== [[Modul:quote]] ==
Piştî ev modul hate hazirkirin, lazim e navên jegirtinan werin rastkirin û li hemûyan {{param|jêgirtin}} were zêdekirin. Bnr. [[Gotûbêja şablonê:Jêgirtin/Ehmedê Xanî/Mem û Zîn]] [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 22:27, 5 tebax 2026 (UTC)
::Ev modul hema bêje hazir e. Hûn li ser van madeyan çi difikirin:
# {{para|tarîx}} lazim e full date be eger na, lazim e {{para|sal}} were bikaranîn. Feqat "'''2021''' kanûna pêşîn 23" bi vî şiklî bi min ne problem e çnkî derdê en.wikt "attestation" e delîla herî pêşî jî sal e.
#: {{demo|sep=wisa xuya dibe<br>|<nowiki>{{jêder-kitêb/ceribandin|en
|tarîx=23 December 2021|nivîskar=Harry Hobbs; George Williams|sernav=Micronations and the Search for Sovereignty|url=https://www.cambridge.org/core/books/micronations-and-the-search-for-sovereignty/B0414A3A322695D9EE71E4CDDFDA06DE|weşanxane=Cambridge University Press|rûpel=155|isbn=978-1-009-15012-5|jêgirtin=jêgirtin.|t=-}}</nowiki>}}
#{{para|amadekar}}/{{para|edîtor}}/{{para|terciman}} bi şiklê edîtoriya, amadekariya, tercimekirina
#: {{demo|sep=dide<br>|<nowiki>{{jêder-kitêb/ceribandin|en
|sernav=Medical Surgical Nursing|serî=Juta's Manual of Nursing|cildê-seriyê=volume 4|edîtor=Sophie Mataniele Mogotlane; Joyce Mokoena; Motshedisi Eunice Chauke; Anne Young|sal=2005|weşanxane=Juta Academic|isbn=978-0702171840|rûpel=!12-29|jêgirtin=jêgirtin|t=-}}</nowiki>}}
--[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 13:09, 10 tebax 2026 (UTC)
:@[[Bikarhêner:Bikarhêner|Bikarhêner]] û @[[Bikarhêner:Ghybu|Ghybu]] Hîn gelek tişt hene divê îzah bikin û fikrê we pirs bikim, feqat îzahkirin pir zor e, em dest bi bikaranînê bikin û dûre tiştên ku hûn naxwazin em dikarin biguherînîn, dibe? [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 13:11, 10 tebax 2026 (UTC)
::Dibe, piştî çêbû, em di praktîkê de bibînin ku çawa ye. -- [[Bikarhêner:Bikarhêner|Bikarhêner]] ([[Gotûbêja bikarhêner:Bikarhêner|gotûbêj]]) 18:05, 10 tebax 2026 (UTC)
= Javascript =
== [[Mediawiki:Gadget-citoid-helper.js]] ==
Ji bo bi citoidê kopîkirina malûmatên çavkaniyan amûreke wisa lazim e. Xisûsen ji ber ku bi çend amûrên din dikare were bikaranîn.
Feqat çend problem hene, şablonên me de kêmasiya parametreyan gelek in û xerîteyên citoidê hîn nehatine çêkirin. Wana sererast bikin dûre vê amûrê çêkin, piştre [[MediaWiki:Gadget-start.js|start.js]] û [[MediaWiki:Gadget-wikt.add-examples.js|add examples.js]] were rojanekirin.
- --[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 00:04, 19 tîrmeh 2026 (UTC)
:Merheba @[[Bikarhêner:Bikarhêner|Bikarhêner]], ez dibêjim karê Modul:quote zêde wext bistîne, bila em dest bi bikaranîna van amûran bikin dûre kêmasiyan em ê temam bikin înşela. Dikarî vana li cihên xwe yên rast kopî paste bikî?
# [[Special:PermanentLink/6291574|Bikarhêner:Wikihez/skrîpt/js/Gadget-citoid-helper.js]] --> [[Mediawiki:Gadget-citoid-helper.js]]
# Ya li jêr kopî bike qismê herî dawî ya AmûrênVeşartî li [[MediaWiki:Gadgets-definition]]:
## <code><nowiki>* citoid-helper[ResourceLoader|hidden|default|dependencies=mediawiki.util]|citoid-helper.js</nowiki></code>
--[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:58, 26 tîrmeh 2026 (UTC)
== [[MediaWiki:Gadget-start.js]] ==
Rojanekirin hewce ye. Min gelek tişt lê zêde kir lê ez niha test dikime. Piştre em bar bikin:
* [[Bikarhêner:Wikihez/Gadget-start.js]] --> [[MediaWiki:Gadget-start.js]]
* [[Bikarhêner:Wikihez/Gadget-start.css]] --> [[MediaWiki:Gadget-start.css]]
--[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 22:08, 17 tîrmeh 2026 (UTC)
:Min [[MediaWiki:Gadget-start/data.json|data.json]] çêkir ji bo ku bi hêsanî malûmatên heyî werin guhartin bêyî guhartina Javascriptê. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 19:49, 18 tîrmeh 2026 (UTC)
:Xeletiyên ku ji bîr nekim rast bikim:
:* Wextê min çavkanî "kitêb" hilbijart û bi destî tije kir xeletiyeke [https://ku.wiktionary.org/w/index.php?title=xezete&diff=prev&oldid=6265392 wisa] derket her kelîme hate lînkkirin.
:* <code>html("⠿")</code> ev ne lazim e.
:* textarea ji bo çavkaniyên jêgirtinan xaseten yên sernav hîn jî ne draggable e.
:* pêşdîtina zindî checkbox wextê tê rakirin, pêşdîtin winda nabe.
:* Butona mobîlê ya vekirina formê di moda tarî de belî nabe, tenê wekî qutiyeke tarî xuya dibe.
:* Metna hişyarkirinê di guhartina rûpelên heyî de lazim e baştir bikim.
:[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 23:51, 18 tîrmeh 2026 (UTC)
::Ev problem çêbûn, ez ê binêrim ka çi problemên din hene. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 14:15, 19 tîrmeh 2026 (UTC)
:::Çêke: Ji bo qismê çavkaniyê yek dikare API call û Kategorî:Çavkanî bi kar bîne ji bo ku şablon zêde bikî ji yên heyî. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 21:21, 19 tîrmeh 2026 (UTC)
::::Ev jî çêbû, min beşa çavkanî jî çêkir. Eger xeletî dernekeve û problema valahiya piştî etîketê ji bîr nekim, piştî rojanekirina amûrên linkify, û citoid em dikarin bar bikin. Ez ê ti tiştê nû îlawe nekim, zêde dirêj bû. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:14, 21 tîrmeh 2026 (UTC)
:::::Merheba @[[Bikarhêner:Bikarhêner|Bikarhêner]]. Dikarî wana bar bikî?
:::::* [[Bikarhêner:Wikihez/Gadget-start.js]] --> [[MediaWiki:Gadget-start.js]]
:::::* [[Bikarhêner:Wikihez/Gadget-start.css]] --> [[MediaWiki:Gadget-start.css]]
:::::* [[MediaWiki:Gadgets-definition]] wisa rojane bike:
:::::* start[ResourceLoader|default|package|dependencies=mediawiki.util,ext.gadget.StorageUtils,ext.gadget.citoid-helper]|start.js|start.css|start.js/data.json
:::::[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 09:39, 5 tebax 2026 (UTC)
{{şirove}} Dewama ''[[Special:PermanentLink/6333688|Gotûbêja bikarhêner:Rewiye tine#WF:Nû]]'' bila gotûbêja wî em spam nekin. :D
{{r|Ghybu}} dikarî [[Special:PermanentLink/6333689|vê htmlê]] binêrî claude rast fêm kiriye yan na? Daxîne û wek html qeyd bike. --[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 18:43, 14 tebax 2026 (UTC)
:Min seh wîkîyên din jî kir, li wîkiya fransî tiştekî wekî daxwaza min çêkirine (tiştên ku ne hewce ne wekî "tab" çêkirine an jî hatine vêşartin): [//fr.wiktionary.org/w/index.php?title=fdsdfdsf&action=edit&redlink=1]. Formata me yê berî jî bi vê lojîkê hatibû çêkirin, wekî de.wiktionary ([//de.wiktionary.org/w/index.php?title=sdfdsfsdfs&action=edit&preload=Vorlage:Formatvorlage_(Substantiv_vereinfacht)]) [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 19:01, 14 tebax 2026 (UTC)
::PS: Dîsa jî Claude min rind fêm kiriye :)) Feqet min got ku beşên Mane", "Bilêvkirin" û "Beşên din" cem hev (wekî "tab") ". Û dema ku tu terî di nav "Besên din" Hevmane, Jê, ... li wira werin dayîn. Wêne/Resim û Nimûne jî di nav beşa ("tab") "Mane" [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 19:17, 14 tebax 2026 (UTC)
::Erê ya fr.wikt min jî dîtibû jixwe fikrê tab min ji wan girtibû :D (feqat min li cem wan tenê tab-a maneyê dît yên din nedît çawa tê vekirin nizanim) Berê hemû beş piştî maneyê bibûn, dûre min sê Tab çêkir, Bingehîn+Lînkkirin+Bikaranîn. Niha lazim e Tabeke din çêkim. Ya ku claude çêkiriye bnr. [[Special:PermanentLink/6333698#L-7]] ne baş e bnr. [[Special:PermanentLink/6333703|qiyaskirinê li ser vê htmlê]] Êdî ez Claude abuse dikime ji ber ku Pro ye :D [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 19:26, 14 tebax 2026 (UTC)
:::Claude dibêje:
:::Good clarification — that's a real simplification, not just a relabel. Updated STEP_GROUPS from 5 tabs down to 3:
:::Mane — the definitions themselves, plus Wêne (image), now grouped in with it instead of sitting in a separate misc tab. Nimûne needed no change since it was already rendering inside each Mane sense block, not as its own step.
:::Bilêvkirin — unchanged, still just pronunciation.
:::Beşên din — everything else in one flat bucket: hevmane, jê, têkildar, herwiha binêre, formên alternatîv, dijmane, jornav, jêrnav, notên bikaranînê, bi alfabeyên din, dûnde, çavkanî, bêhtir bixwîne, tewandin, etîmolojî, zaravayên din, werger, and bnr-h — instead of being split across the old Bingehîn/Lînkkirin/Bikaranîn/Din tabs.
:::No DOM-order changes were needed this time — the fix from the blank-tab bug looks up the tab bar's position dynamically now, so it didn't matter that I regrouped which steps go where. Same two files, saved to your Wiki folder — worth another pass through all three tabs once you've pasted this in, same as last time. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 19:34, 14 tebax 2026 (UTC)
::::Mînak:
Ziman
---------------------------------------------
Cureyê rêzimanî (Navdêr)
Navdêr (hilbijêre) ┆ Cîns (hilbijêre) ┆ Jimar (hilbijêre)
- lêker -mê -yekjimar
- rengdêr -nêr -pirjimar
- ... -... -...
---------------------------------------------
Mane || Bilêvkirin || Beşên din
hilbijêre:
- mane - IPA - Hevmane
- nimûne - kîte - Dijmane
- wêne
Dema ku tu "Cureyê rêzimanî" dikî "Lêker" :
Cureyê rêzimanî (Lêker)
Lêker (hilbijêre) ┆ Cure (hilbijêre)
- navdêr -rehê niha
- rengdêr -rehê borî
- ... -...
---------------------------------------------
┆ : select/option ("tab" nîne, tê dîtin)<br>
|| : "tab"
-- [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 19:45, 14 tebax 2026 (UTC)
'''Sê-stûnî ("┆" = ne tab), li gorî Cureyê rêzimanî:'''
{| class="wikitable"
! Cureyê rêzimanî !! Stûna 2 !! Stûna 3 !! Têbînî
|-
| Navdêr / Serenav
| Cîns (hilbijêre ▾: mê / nêr / ... — tenê heke ziman zayendê rêzimanî hebe)
| '''Jimar''' (?) — pirs li jêr
| Qadên "Forma mê/nêr/pirjimar/yekjimar" niha jî li vir hene — ma ev di "Jimar"-ê de tên tevlihev kirin, an cuda dimînin?
|-
| Rengdêr
| (heman m/n/p/y forman ku Navdêr distîne)
| Sûperlatîv (sûp) / Komparatîv (komp)
| Ne li ser her du nîgaran hatiye behs kirin — ma sê-stûnî li vir jî tê bikaranîn?
|-
| Lêker
| '''Cure''' = Cureyê lêkerê (hilbijêre ▾: gerguhêz / negerguhêz / xwerû-... / pêkhatî-... / hevedudanî-... / biwêjî-... — 10 vebijêrk)
| Di heman stûnê de: Rehê dema niha / Rehê dema borî / Rehê dema bilanî (her sê qadên nivîsandinê ne, ne hilbijêrk in)
| Ma "Cure" her sê rehan di xwe de digire wek yek stûn, an her yek stûneke cuda ye?
|-
| Tîp (herf/sembol)
| Girdêk (gir) / Hûrek (hûr)
| —
| Ne behs kiriye
|-
| Her cureyek, li gorî zimên
| Transliterasyon (tr) / Transkrîpsiyon (ts)
| —
| Bi zimên ve girêdayî ye, ne bi cureyê rêzimanî ve
|-
| Her cureyek, tenê ziman=japonî
| Hanja / Translit. hanja
| —
| Ne bi cureyê rêzimanî ve girêdayî ye
|-
| Her cureyek
| '''Tercîhên pêşketî''' (kolapsî): form, formaalt, nekatcure, nekatcins, nekatçendterm, serlînkneke, nekatpalîndrom, neformtr
| —
| Vebijarkî, ji bo hemû cureyan
|}
'''Tabên jêrîn — Mane ‖ Bilêvkirin ‖ Beşên din ("||" = tab):'''
{| class="wikitable"
! Mane !! Bilêvkirin !! Beşên din (hemû 18 hêman)
|-
| mane, nimûne, wêne
| şablonên bilêvkirinê (mînak: IPA, kîte)
| tewandin, etîmolojî, bi zaravayên din, werger, jê, têkildar, herwiha binêre, formên alternatîv, hevmane, dijmane, jornav, jêrnav, notên bikaranînê, bi alfabeyên din, dûnde, çavkanî, bêhtir bixwîne, bnr-h
|}
'''Pirsên vekirî:'''
# "Jimar" (yekjimar/pirjimar) — qadeke ku nîşan dide têketî bi xwe yekjimar e an pirjimar e. Ev cuda ye ji "Forma yekjimar (y)"/"Forma pirjimar (p)" ya heyî (ku forma DÎN a kelîmeyê tomar dike). Herdu bimînin, an werin yek kirin?
# Ma sê-stûnî tenê ji bo Navdêr/Lêker e, an ji bo Rengdêr/Tîp jî heman mantiq derbas dibe?
# Di "Beşên din" de: dixwazî pêşî navnîşek/hilbijartinek nîşan bide (17 hêmanên din jî tê de), û qad tenê piştî hilbijartinê xuya bibin?
:Tu dikarî start.js ji Tercîh/ Amûran rakî û bi test.js li Amûran herî taliyê ye biceribînî. Claude ya li jor hazir kir, Jimar ez dikarim îzah bikim. Feqat bi min di tab-a maneyê de lazim e Bi zaravayên din (heta wek werger her car bila li rûpelan were zêdekirin) û werger jî hebe.--[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 20:18, 14 tebax 2026 (UTC)
:;Navdêr: Tenê "cîns" û "jimar" bes e. "Forma mê", "Forma nêr", ... nayê fêm kirin. Bi min wekî "Tercîhên pêşketî" bi navkî din veşartî çêke.
:;Lêker: "Cureyê lêkerê" nayê fêm kirin, bi min pêşta "geguhez/negerguhêz" were hilbijartin, paşê jî form "hevdudanî/pêkatî/..." ji ber ku her kes vana nizanî... Dîsa jî tu dizanî.
:Bi min beşên "Hevmane" û dijmane jî bike de nav beşa Mane ("tab") ji ber ku pirr tên xwestin.
:Şûnda Wêne jî Nimûne/jêgirtin...
:Herwiha hemû bi rengê şîn hatine çêkirin, nizanim beşên din (===) bi rengê gewr an reş çito dibe? [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 21:35, 14 tebax 2026 (UTC)
== [[Mediawiki:Gadget-QQ.js]] ==
Ev amûr di şikle Minerva de. Her daîm vê xeletiyê dide:
<syntaxhighlight lang="js">
TypeError: Cannot read properties of null (reading 'addEventListener') at css () at runScript () at Array.<anonymous> () at flushCssBuffer ()
</syntaxhighlight> [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 19:29, 18 tîrmeh 2026 (UTC)
:* [[Bikarhêner:Wikihez/skrîpt/js/Gadget-QQ.js]] --> [[Mediawiki:Gadget-QQ.js]]
:* [[Bikarhêner:Wikihez/Gadget-QQ.css]] --> [[Mediawiki:Gadget-QQ.css]]
:Ez dibêjim çêbû lê ka çend roj biceribînim. Tiştên ku hatin sererastkirin:
:# Google Books API Key dikarî zêde bikî, dixe cookies û di gerokê de dimîne. Berê bê API Key dixebitiya lê êdî mecbûr e ku API Key-a te hebe, bidestxistina wê ne zêde zor e lê dîsa jî tevlihev e.
:# Êdî di mobîlê de dixebite, heta di mobîlê de xweştir xuya dike.
:# Moda tarî
:# OOUI dewsa jquery.ui
:# Li qutiyê çi dixwazî zêde bikî, dikare li gorî îsm, sifet, fiîl bitewîne. Lê ji bo fiîl tenê dikare çend heb inflection bîne.
:# Butona paqij bike lê zêde kir.
:# Çend paqijiyên jêgirtinên Google Kitêbê niha hene.
:[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 23:38, 18 tîrmeh 2026 (UTC)
::Tewandina fiîlan û xeletiya modulê lazim e were rastkirin. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 14:40, 21 tîrmeh 2026 (UTC)
== [[MediaWiki:Gadget-wikt.add-examples.js]] ==
Min ev amûr hinek rojane kir feqat çend problem hene berî ku bar bikin.
Tiştên ku min guhart:
# Êdî li sayfeyên bi {{ş|maneid}} jî dixebite,
# Cihê di wîkîtekstê de yê ku jêgirtin were îlawekirin baştir bû,
# [[Mediawiki:Gadget-citoid-helper.js|citoid helper]] zêde kir ji bo ku bi hêsanî çavkanî bi riya doi, isbn an urlyê werin tijîkirin.
* [[Bikarhêner:Wikihez/Gadget-wikt.add-examples.css]] --> [[MediaWiki:Gadget-wikt.add-examples.css]]
* [[Bikarhêner:Wikihez/Gadget-wikt.add-examples.js]] --> [[MediaWiki:Gadget-wikt.add-examples.js]]
- --[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 00:50, 19 tîrmeh 2026 (UTC)
:Min "wikt." qismên cache kirinê ya wîkiya fransî bi [[MediaWiki:Gadget-StorageUtils.js]] guhartiye. loma ji bîr nekin wê amûrê li [[MediaWiki:Gadgets-definition]] zêde bikin. û navê amûrê jî biguhêrînin. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 09:15, 23 tîrmeh 2026 (UTC)
::Berê li ser WF:ceribandin dixebitî. niha naxebite. Divê were rastkirin. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 22:10, 7 tebax 2026 (UTC)
== Gadget-translation editor ==
* [[MediaWiki:Gadget-translation editor.js]]: divê formata en.wîktê were bikaranîn ji ber ku me gelek tercime ji en.wîktê kopî kir û ev js hîn nikare formata wekî li jêr bi kar bîne.
<syntaxhighlight lang="wikitext">
* {{Z|sh}}:
*: Kirîlî:
*: Latînî
</syntaxhighlight>
—[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:17, 16 tîrmeh 2026 (UTC)
== [[Mediawiki:Gadget-linkify.js]] ==
* ''rûpeleke'' wekî<syntaxhighlight lang="wikitext">[[rûpeleke]]</syntaxhighlight> lînk dike, bi regexê belkî dikare wisa bike <syntaxhighlight lang="wikitext">[[rûpel]]eke</syntaxhighlight>
—[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:17, 16 tîrmeh 2026 (UTC)
* Amûreke din wekî [[User:Wikihez/Gadget-linkify.js|linkify]] lazim e ku herfên mezin biçûk bike ji bo kurmancî.—[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:17, 16 tîrmeh 2026 (UTC)
:{{r|Bikarhêner}} Merheba bira, dikarî viya jî bar bikî?:
* [[Special:PermanentLink/6291974|linkify]] --> [[Mediawiki:Gadget-linkify.js]]
Spas--[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 11:42, 29 tîrmeh 2026 (UTC)
:Dûre [https://ku.wiktionary.org/wiki/MediaWiki:Gadget-start.js#L-283 li vir] wiktviLinkify bike kuLinkify xêra xwe [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 11:51, 29 tîrmeh 2026 (UTC)
::Min ji bîr kir lê zêde bikim niha nikare "Dİ" bike "di", xeletiyeke berbelav a di nivîsên kurdî de, herfên din ên wekî ll yan rr jî hewce ne werin zêdekirin. Dûre em zêde bikin. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 21:42, 29 tîrmeh 2026 (UTC)
:::Min nû ferq kir, sayfeyên ku hîn nehatine çêkirin wîkîlînk nake. Problemeke mezin e divê were rastkirin. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 18:15, 30 tîrmeh 2026 (UTC)
::::Na, lînk dike, tiştekî din heye... [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 10:49, 31 tîrmeh 2026 (UTC)
== Amûra manayê ==
Amûreke din ji bo nivîsina maneyê wekî Nimûne zêde bike lazim e [https://ku.wiktionary.org/w/index.php?title=Bikarh%C3%AAner:Wikihez/test.js&oldid=6276876 js] [https://ku.wiktionary.org/w/index.php?title=%C5%9Eablon:ceribandin2&oldid=6265629 şablon] [https://ku.wiktionary.org/w/index.php?title=Bikarh%C3%AAner:Wikihez/common.css&oldid=6265642 css] --[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 09:12, 23 tîrmeh 2026 (UTC)
== [[MediaWiki:Gadget-jeder.js]] ==
@[[Bikarhêner:Ghybu|Ghybu]] Çavkaniyên jêderê di moda pêşdîtinê de jêderê vedişêre, ew jî min gelek eciz dike wextê çavkanî zêde dikim. Min ji Claude pirsî û kodan nîşanî wê da, wisa cewab da:
Yes — and this file actually explains the whole thing precisely, better than my earlier guess about extract-stripping.
What's happening: the CSS rule
<syntaxhighlight lang="css">
.jeder{
display:none;
}
</syntaxhighlight>
hides every citation by default, *unconditionally*. The only thing that ever makes it visible again is the gadget's JS: it finds each `.jeder`, builds the short "`— (year, author, +)`" summary from the `.j-pewist` fields, and either reveals the short version or — for citations with no `.j-pewist` fields — explicitly sets `display:inline` on the original.
So visibility of citations depends entirely on this JS running. In the normal article view (Image 1) it runs, so you see the collapsed "`(1918, E. Rehmî Ji Mala Hekariyan, Amadekar: M. E. Bozarslan, +)`" form. In whatever generated Image 2 — a hover-preview/extract/API render — gadget JS doesn't execute, so nothing ever removes the `display:none`, and the citation vanishes completely rather than degrading to "still visible, just not collapsed."
<b>The fix:</b> flip the default so the *un-collapsed* state is the safe fallback, and let JS do the hiding only after it successfully builds the short version. That way, any context without JS shows the full citation instead of nothing.
CSS — remove the blanket hide:
<syntaxhighlight lang="css">
.jeder {
/* intentionally no display:none here — see Gadget-... .js */
}
</syntaxhighlight>
JS — do the hiding from script, after the short form exists:
{{veşêre-ser}}
<syntaxhighlight lang="js">
// Ji bo şablonên [[Şablon:jêder]] hatiye nivîsandin.
// Parametreyên ku di navbera "<span class="j-pewist">...</span>" an "{{j-pêwîst|...}}" de ne venaşêre.
$(function() {
function nivisaKurtTevliBike(sund, nivisKurt) {
var zede = $('<a>+</a>')
.addClass('click')
.attr('href', '#')
.attr('title', 'zêdetir')
.css('font-weight', 'bold');
var kurt = $(' <a>↩</a>')
.addClass('click-kurt')
.attr('href', '#')
.attr('title', 'veşêre')
.css('font-weight', 'bold');
$('<span>' + nivisKurt + '</span>')
.append(zede).append(')')
.addClass('jeder-kurt')
.css('font-size', '0.85em')
.insertAfter(sund);
sund.append(' ').append(kurt);
// Only hide the full citation once the short summary actually exists.
// If this script never runs (no-JS clients, hover-preview extracts,
// action=render, etc.), the full citation stays visible instead of
// silently disappearing.
sund.css('display', 'none');
}
function vesere() {
$('.jeder').each(function() {
var elmTab = $(this).find('.j-pewist').clone();
if (elmTab.length) {
var elm = '';
for (var i = elmTab.length - 1; i >= 0; i--) {
elm = elmTab.eq(i).html() + ', ' + elm;
}
var nivisKurt = ' — (' + elm;
nivisaKurtTevliBike($(this), nivisKurt);
}
// else: no j-pewist fields to shorten — leave the full citation
// as it already renders (visible), nothing to do.
});
}
vesere();
$(".click").click(function(e) {
e.preventDefault();
$(this).parent('.jeder-kurt').css('display', 'none');
$(this).parent('.jeder-kurt').prev().css('display', 'inline');
});
$(".click-kurt").click(function(e) {
e.preventDefault();
$(this).parent('.jeder').css('display', 'none');
$(this).parent('.jeder').next().css('display', 'inline');
});
});
</syntaxhighlight>
Net effect:
- JS-enabled readers (normal article view): identical experience to today — collapsed short form with `+`/`↩` toggle.
- No-JS contexts (previews, extracts, screen readers before JS loads, print, etc.): full citation is shown instead of nothing — a real regression fix rather than a cosmetic one.
One caveat worth being upfront about: this fixes it *if* the preview context renders the gadget's HTML/CSS but doesn't execute gadget JS (which is the far more common case, and what this code strongly suggests is happening). If Image 2 instead comes from a pipeline that strips the `.jeder`/`.jegirtin-text` elements out of the HTML entirely before this CSS/JS even gets a chance to apply, no on-wiki CSS/JS change can help — that'd need the extract-generation config changed instead. Given what this gadget file shows, though, I'd bet on the CSS-hide explanation.
{{veşêre-bin}}
Em dûre biceribînin eger xeletî tinebe, vî tiştî jî rast bikin. --[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 20:00, 23 tîrmeh 2026 (UTC)
:Ez APIya MediaWiki rind nizanim belkî Claude dizane:) Em nikarin bibêjin dema ku moda "''action=edit''" e fonksiyona <code>function vesere()</code> bi kar meyîne. [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 15:57, 24 tîrmeh 2026 (UTC)
::Na, di moda "edît"-ê de <code>var elmTab = null</code>... [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 16:13, 24 tîrmeh 2026 (UTC)
?:
<syntaxhighlight lang="js">
if (
mw.config.get('wgAction') === 'edit' ||
mw.config.get('wgAction') === 'submit'
){
var elmTab = [];
} else {
var elmTab = $(this).find('.j-pewist').clone();
}
</syntaxhighlight>
--[[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 16:31, 24 tîrmeh 2026 (UTC)
:Ez jî nizanim Claude çiqas ji mediawiki fêm dike lê heta niha ti tişt nîne ku min jê pirs kir û nikaribû çêke, bila wekî reklam nebe feqat Claude mikemmel e, dibêjim "li vir çima xeletiyeke wisa derdikeve" di dosyeya 2000 rêzî de diçe tiştê xelet tenê rast dike tiştekî din naguherîne. Chatgpt û aistudio qet wisa nakin, eynî dosyeyê deh cara dinivîsin, deh netîceyên cuda derdikevin :D
:Em dikarin vê amûrê wextê edit û submitê neaktîv bikin wekî <syntaxhighlight lang="js">if (!(action === "edit" || action === "submit")) {
:return;</syntaxhighlight> lê wê demê display:none wê çibe nizanim. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 18:23, 24 tîrmeh 2026 (UTC)
::display:none ne hewce ye ma jixwe di nav kodê [https://ku.wiktionary.org/w/index.php?title=MediaWiki:Gadget-jeder.js&oldid=6069025#L-49 L-49] de inline/none heye? [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 18:53, 24 tîrmeh 2026 (UTC)
:Min bi vî şiklî [https://ku.wiktionary.org/w/index.php?title=Bikarh%C3%AAner:Wikihez/vector-2022.js&diff=prev&oldid=6290816#L-28] ceriband feqat nexebitî. "display:none" di pêşdîtinê de dixebite feqat js naşixule. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 14:43, 25 tîrmeh 2026 (UTC)
::Kodên JSê pir hez nakim (pêşta hukurina APIya MWyê hewce bû) dîsa jî ez ê seh bikim :) [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 16:49, 27 tîrmeh 2026 (UTC)
:::Ez niha bi vî şiklî [https://ku.wiktionary.org/w/index.php?title=Bikarh%C3%AAner:Wikihez/test.js&oldid=6290820] [https://ku.wiktionary.org/w/index.php?title=Bikarh%C3%AAner:Wikihez/common.css&oldid=6290821#L-8] bi kar tînim ti problem nîne. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 17:09, 27 tîrmeh 2026 (UTC)
== [[MediaWiki:Gadget-PagePreviews.js]] ==
Ez dibêjim em vê amûrê jî çêkin [[:en:MediaWiki:Gadget-PagePreviews.js]] --[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 10:56, 3 tebax 2026 (UTC)
= Moda tarî =
== [[Şablon:wîkîpediya]] ==
Rengê tarî de xirab e.--[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 19:36, 4 tebax 2026 (UTC)
= Bot =
Karên ku bi botê werin çêkirin ji kerema xwe li vir binivîsin.
== Kategorî:Biwêj ==
[[:Kategorî:Biwêj]] divê were paqijkirin, lîsteya madeyên {{ş|biwêj}} çêke, yên ku tê de bûn, kirin, man hene filtre bike yên din bi destî tê çêkirin.—[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:17, 16 tîrmeh 2026 (UTC)
== Jêgirtin ==
Xistina jêgirtinên beşa [https://ku.wiktionary.org/w/index.php?search=insource%3A%2F%3D+*Ji+%5BWw%5D%C3%AAjey%C3%AA+*%3D%2F&title=Taybet%3AL%C3%AAger%C3%AEn&profile=advanced&fulltext=1&ns0=1&searchToken=8rh0bmw8dccsi7aynl6zli8uf ji wêjeyê] li beşa maneyê. —[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:17, 16 tîrmeh 2026 (UTC)
== Bota Toolforgeê ==
Botekî Toolforgeê lazim e ji bo ku xeletiyên biçûk wekî şablonên bi navên îngilîzî werin kurdîkirin yan jî valahiya beşan rast bike û hwd.—[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:17, 16 tîrmeh 2026 (UTC)
:Min [[Bikarhêner:Wikihez/skrîpt/py/kuwiktkozmetik.py|paqijiyen kozmetîk]] hazir kir feqat hîn navên şablonan naguhêre. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 20:05, 4 tebax 2026 (UTC)
== Updatew ==
Bota [[Bikarhêner:Wikihez/skrîpt/py/updateW.py|updateW]] divê were rojanekirin. Yan jî yekî nû were çêkirin. Şablonên {{ş|W}} di beşa tercimeyan de sererast dike û zimanan rêz dike. Ya niha xeletiya navê zimanî dide.—[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:17, 16 tîrmeh 2026 (UTC)
== sihir --> sêhr ==
Tercimeyên ''[[sêhr]]'' hemû dibêje ''sihir'' loma bi botê lazim e kirin ''sêhr''. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 17:43, 18 tîrmeh 2026 (UTC)
:Sihirbaz --> sêhrbaz [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 18:07, 18 tîrmeh 2026 (UTC)
== Tercimeyên dîroknas ==
Li tercimeyên [[dîroknas]], hevmaneyên wê hewce ye were îlawekirin. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 18:44, 18 tîrmeh 2026 (UTC)
== Mewlûd ==
Sererastkirina jêgirtinên mewlûdê [https://ku.wiktionary.org/w/index.php?search=insource%3A%2Fw%5C%3AMela+His%C3%AAn%C3%AA+Batey%C3%AE%2F&title=Taybet%3AL%C3%AAger%C3%AEn&ns0=1&searchToken=8m0tguy3sqt7edr4sg0u8hedo] wekî [https://ku.wiktionary.org/w/index.php?title=dax%C3%AEdar&curid=284303&diff=6265851&oldid=6142285] [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 09:43, 20 tîrmeh 2026 (UTC)
pfhdvitcx1cyq4iw4quz3wah1cwmgn0
6333741
6333740
2026-08-14T21:45:07Z
Wikihez
7344
/* MediaWiki:Gadget-start.js */ Bersiv
6333741
wikitext
text/x-wiki
{{/ser}}
= Karên ferhengî =
== Mane ==
* [[:Kategorî:Madeyên bê beşa mane]]
** [[:Kategorî:Madeyên bê beşa mane bi kurmancî]]
Li ser van rûpelan ev made hene ku maneyan wan nehatine nivîsin û divê werin nivîsin. —[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:17, 16 tîrmeh 2026 (UTC)
== Etîmolojî ==
*[[:Kategorî:Daxwazên etîmolojiyê]]
**[[:Kategorî:Daxwazên etîmolojiyê bi kurmancî]]
Li ser van rûpelan ev made hene ku etîmolojiya wan hîn nehatine nivîsin. Ji bo alîkariyê binêre [[WF:Etîmolojî]] —[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:17, 16 tîrmeh 2026 (UTC)
== Cureyê rêzimanî ==
* [[:Kategorî:Gotarên bê kategoriya rêzimanî]]
* [[:Kategorî:Gotarên bê kategoriya rêzimanî bi kurmancî]]
Li ser van rûpelan ev made hene ku cureyên wan yên rêzimanî hîn nehatine nivîsin. Ji bo alîkariyê binêre [[Alîkarî:Cureyên peyvan]] —[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:17, 16 tîrmeh 2026 (UTC)
== Kontrol ==
* [[:Kategorî:Kontrol]]
** [[:Kategorî:Kontrola maneyê]]
Ev madde bi botê hatine çêkirin, yek bi yek divê werin kontrolkirin. —[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:17, 16 tîrmeh 2026 (UTC)
= Şablon =
== IPA ==
* {{ş|IPA}} divê [[Modul:IPA]] bi kar bîne. —[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:17, 16 tîrmeh 2026 (UTC)
== Deng ==
Kurdîkirina belgekirina {{ş|deng}} lazim e.--[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 00:06, 19 tîrmeh 2026 (UTC)
= Modul =
== Modul:form of/templates ==
* [[Modul:form of/templates]]: Divê ev modul were rojanekirin û xeletiyên berê wekî ([[hevalê]]) werin rastkirin. —[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:17, 16 tîrmeh 2026 (UTC)
*:Merheba @[[Bikarhêner:Ghybu|Ghybu]] Te gotibû di vê modulê de xeletî hene, jkx tu dikarî li vir binivîsî çi kêmasî hene, daku wextê rojane dikim ez ji bîr nekim? [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:16, 21 tîrmeh 2026 (UTC)
*::Silav. Nizanim ji bîra min çûye... Herwiha ji bo çêkirina formên navdêran zanînên cîns û tîpa dawî bes e:
*::* (-ê, mê) => çemandî, bangkirin
*::* (-ê, nêr) => îzafe
*::* (-ê, mê û nêr) => îzafe (nêr), bangkirin (mê), çemandî (mê)
*::* (-a) => îzafe (mê)
*::* (-ekî) => îzafe û çemandî (nêr, nebinavkirî)
*::* (-eke) = > îzafe (mê, nebinavkirî)
*::* ...
*:: <code>if find(mw.title.getCurrentTitle().subpageText, 'ekî$') then ... end</code>
*::<code><nowiki>{{ku-tewîn-navForm|<navdêr>|<zayend>}</nowiki></code>
*::Tablo û nivîs di yekcarî de tên çêkirin...
*::Feqet problem lêzêdekirina mînakan e. [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 17:34, 21 tîrmeh 2026 (UTC)
*:::Lêzêdekirina kîjan nimûneyan? Ev koda js ji bo çi ye? Qisûrê nenêre min fêm nekir :/ [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 18:13, 21 tîrmeh 2026 (UTC)
*::::Li vira ([[hevalê#Formeke navdêrê]]) di bin maneyên 1. û 2. mînak nayên tevlî kirin :) [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 18:18, 21 tîrmeh 2026 (UTC)
*:::::Ev tercîh e, ne mecbûrî ye, em dikarin [https://ku.wiktionary.org/w/index.php?title=heval%C3%AA&diff=prev&oldid=6276350 wisa] bikin. Wekî din? [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 18:29, 21 tîrmeh 2026 (UTC)
*::::::Min li jor tênê got ku tenê parametreyên "navdêr" û "zayend" hewce nee. Bi '''[//ku.wiktionary.org/w/index.php?title=heval%C3%AA&curid=969734&diff=6276353&oldid=6276350 vî]''' awayî jî tê çêkirin. Parametreyên din ne hewce ne. [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 18:38, 21 tîrmeh 2026 (UTC)
*:::::::Ji bo wê şabloneke din lazim e, bila ev şablon wekî îngilîzî bimîne em ji bo kurmancî yekî din çêkin. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 18:42, 21 tîrmeh 2026 (UTC)
*::::::::[https://ku.wiktionary.org/w/index.php?title=heval%C3%AA&oldid=6276885 wisa] çawa ye? Bi min nivîsîna nimûneyan zêde ne lazim e ji ber ku ti kes serê xwe pê naêşîne. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 09:46, 23 tîrmeh 2026 (UTC)
*:::::::::@[[Bikarhêner:Ghybu|Ghybu]] Vê şablonê bi kar bînin an na? Navê şablonê kê çi be? [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 19:07, 24 tîrmeh 2026 (UTC)
== Modul:columns ==
* [[Modul:columns]] were rojanekirin û {{ş|kol3}} bila lînka ''nîşan bide'' deyne beriya sernavê, kolê di qutiya rengî de bila nebe. —[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:17, 16 tîrmeh 2026 (UTC)
== Modul:etymon ==
* [[Modul:etymon kevn]]: Rojanekirin hewce ye. —[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:17, 16 tîrmeh 2026 (UTC)
== [[Modul:ziman/code to canonical name]] ==
Belgekirina skrîptê û js divê were rastkirin. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 09:31, 22 tîrmeh 2026 (UTC)
:* [[MediaWiki:UpdateLanguageNameAndCode.js]]
:[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 09:50, 22 tîrmeh 2026 (UTC)
::* [[Modul:ziman/print]]
::[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 09:52, 22 tîrmeh 2026 (UTC)
:::*[[Modul:ziman/şablon]]
:::[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 09:56, 22 tîrmeh 2026 (UTC)
::::* [[MediaWiki:Gadget-translation editor.js/ziman.json]]
::::[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 11:06, 22 tîrmeh 2026 (UTC)
== [[Modul:quote]] ==
Piştî ev modul hate hazirkirin, lazim e navên jegirtinan werin rastkirin û li hemûyan {{param|jêgirtin}} were zêdekirin. Bnr. [[Gotûbêja şablonê:Jêgirtin/Ehmedê Xanî/Mem û Zîn]] [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 22:27, 5 tebax 2026 (UTC)
::Ev modul hema bêje hazir e. Hûn li ser van madeyan çi difikirin:
# {{para|tarîx}} lazim e full date be eger na, lazim e {{para|sal}} were bikaranîn. Feqat "'''2021''' kanûna pêşîn 23" bi vî şiklî bi min ne problem e çnkî derdê en.wikt "attestation" e delîla herî pêşî jî sal e.
#: {{demo|sep=wisa xuya dibe<br>|<nowiki>{{jêder-kitêb/ceribandin|en
|tarîx=23 December 2021|nivîskar=Harry Hobbs; George Williams|sernav=Micronations and the Search for Sovereignty|url=https://www.cambridge.org/core/books/micronations-and-the-search-for-sovereignty/B0414A3A322695D9EE71E4CDDFDA06DE|weşanxane=Cambridge University Press|rûpel=155|isbn=978-1-009-15012-5|jêgirtin=jêgirtin.|t=-}}</nowiki>}}
#{{para|amadekar}}/{{para|edîtor}}/{{para|terciman}} bi şiklê edîtoriya, amadekariya, tercimekirina
#: {{demo|sep=dide<br>|<nowiki>{{jêder-kitêb/ceribandin|en
|sernav=Medical Surgical Nursing|serî=Juta's Manual of Nursing|cildê-seriyê=volume 4|edîtor=Sophie Mataniele Mogotlane; Joyce Mokoena; Motshedisi Eunice Chauke; Anne Young|sal=2005|weşanxane=Juta Academic|isbn=978-0702171840|rûpel=!12-29|jêgirtin=jêgirtin|t=-}}</nowiki>}}
--[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 13:09, 10 tebax 2026 (UTC)
:@[[Bikarhêner:Bikarhêner|Bikarhêner]] û @[[Bikarhêner:Ghybu|Ghybu]] Hîn gelek tişt hene divê îzah bikin û fikrê we pirs bikim, feqat îzahkirin pir zor e, em dest bi bikaranînê bikin û dûre tiştên ku hûn naxwazin em dikarin biguherînîn, dibe? [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 13:11, 10 tebax 2026 (UTC)
::Dibe, piştî çêbû, em di praktîkê de bibînin ku çawa ye. -- [[Bikarhêner:Bikarhêner|Bikarhêner]] ([[Gotûbêja bikarhêner:Bikarhêner|gotûbêj]]) 18:05, 10 tebax 2026 (UTC)
= Javascript =
== [[Mediawiki:Gadget-citoid-helper.js]] ==
Ji bo bi citoidê kopîkirina malûmatên çavkaniyan amûreke wisa lazim e. Xisûsen ji ber ku bi çend amûrên din dikare were bikaranîn.
Feqat çend problem hene, şablonên me de kêmasiya parametreyan gelek in û xerîteyên citoidê hîn nehatine çêkirin. Wana sererast bikin dûre vê amûrê çêkin, piştre [[MediaWiki:Gadget-start.js|start.js]] û [[MediaWiki:Gadget-wikt.add-examples.js|add examples.js]] were rojanekirin.
- --[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 00:04, 19 tîrmeh 2026 (UTC)
:Merheba @[[Bikarhêner:Bikarhêner|Bikarhêner]], ez dibêjim karê Modul:quote zêde wext bistîne, bila em dest bi bikaranîna van amûran bikin dûre kêmasiyan em ê temam bikin înşela. Dikarî vana li cihên xwe yên rast kopî paste bikî?
# [[Special:PermanentLink/6291574|Bikarhêner:Wikihez/skrîpt/js/Gadget-citoid-helper.js]] --> [[Mediawiki:Gadget-citoid-helper.js]]
# Ya li jêr kopî bike qismê herî dawî ya AmûrênVeşartî li [[MediaWiki:Gadgets-definition]]:
## <code><nowiki>* citoid-helper[ResourceLoader|hidden|default|dependencies=mediawiki.util]|citoid-helper.js</nowiki></code>
--[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:58, 26 tîrmeh 2026 (UTC)
== [[MediaWiki:Gadget-start.js]] ==
Rojanekirin hewce ye. Min gelek tişt lê zêde kir lê ez niha test dikime. Piştre em bar bikin:
* [[Bikarhêner:Wikihez/Gadget-start.js]] --> [[MediaWiki:Gadget-start.js]]
* [[Bikarhêner:Wikihez/Gadget-start.css]] --> [[MediaWiki:Gadget-start.css]]
--[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 22:08, 17 tîrmeh 2026 (UTC)
:Min [[MediaWiki:Gadget-start/data.json|data.json]] çêkir ji bo ku bi hêsanî malûmatên heyî werin guhartin bêyî guhartina Javascriptê. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 19:49, 18 tîrmeh 2026 (UTC)
:Xeletiyên ku ji bîr nekim rast bikim:
:* Wextê min çavkanî "kitêb" hilbijart û bi destî tije kir xeletiyeke [https://ku.wiktionary.org/w/index.php?title=xezete&diff=prev&oldid=6265392 wisa] derket her kelîme hate lînkkirin.
:* <code>html("⠿")</code> ev ne lazim e.
:* textarea ji bo çavkaniyên jêgirtinan xaseten yên sernav hîn jî ne draggable e.
:* pêşdîtina zindî checkbox wextê tê rakirin, pêşdîtin winda nabe.
:* Butona mobîlê ya vekirina formê di moda tarî de belî nabe, tenê wekî qutiyeke tarî xuya dibe.
:* Metna hişyarkirinê di guhartina rûpelên heyî de lazim e baştir bikim.
:[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 23:51, 18 tîrmeh 2026 (UTC)
::Ev problem çêbûn, ez ê binêrim ka çi problemên din hene. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 14:15, 19 tîrmeh 2026 (UTC)
:::Çêke: Ji bo qismê çavkaniyê yek dikare API call û Kategorî:Çavkanî bi kar bîne ji bo ku şablon zêde bikî ji yên heyî. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 21:21, 19 tîrmeh 2026 (UTC)
::::Ev jî çêbû, min beşa çavkanî jî çêkir. Eger xeletî dernekeve û problema valahiya piştî etîketê ji bîr nekim, piştî rojanekirina amûrên linkify, û citoid em dikarin bar bikin. Ez ê ti tiştê nû îlawe nekim, zêde dirêj bû. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:14, 21 tîrmeh 2026 (UTC)
:::::Merheba @[[Bikarhêner:Bikarhêner|Bikarhêner]]. Dikarî wana bar bikî?
:::::* [[Bikarhêner:Wikihez/Gadget-start.js]] --> [[MediaWiki:Gadget-start.js]]
:::::* [[Bikarhêner:Wikihez/Gadget-start.css]] --> [[MediaWiki:Gadget-start.css]]
:::::* [[MediaWiki:Gadgets-definition]] wisa rojane bike:
:::::* start[ResourceLoader|default|package|dependencies=mediawiki.util,ext.gadget.StorageUtils,ext.gadget.citoid-helper]|start.js|start.css|start.js/data.json
:::::[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 09:39, 5 tebax 2026 (UTC)
{{şirove}} Dewama ''[[Special:PermanentLink/6333688|Gotûbêja bikarhêner:Rewiye tine#WF:Nû]]'' bila gotûbêja wî em spam nekin. :D
{{r|Ghybu}} dikarî [[Special:PermanentLink/6333689|vê htmlê]] binêrî claude rast fêm kiriye yan na? Daxîne û wek html qeyd bike. --[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 18:43, 14 tebax 2026 (UTC)
:Min seh wîkîyên din jî kir, li wîkiya fransî tiştekî wekî daxwaza min çêkirine (tiştên ku ne hewce ne wekî "tab" çêkirine an jî hatine vêşartin): [//fr.wiktionary.org/w/index.php?title=fdsdfdsf&action=edit&redlink=1]. Formata me yê berî jî bi vê lojîkê hatibû çêkirin, wekî de.wiktionary ([//de.wiktionary.org/w/index.php?title=sdfdsfsdfs&action=edit&preload=Vorlage:Formatvorlage_(Substantiv_vereinfacht)]) [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 19:01, 14 tebax 2026 (UTC)
::PS: Dîsa jî Claude min rind fêm kiriye :)) Feqet min got ku beşên Mane", "Bilêvkirin" û "Beşên din" cem hev (wekî "tab") ". Û dema ku tu terî di nav "Besên din" Hevmane, Jê, ... li wira werin dayîn. Wêne/Resim û Nimûne jî di nav beşa ("tab") "Mane" [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 19:17, 14 tebax 2026 (UTC)
::Erê ya fr.wikt min jî dîtibû jixwe fikrê tab min ji wan girtibû :D (feqat min li cem wan tenê tab-a maneyê dît yên din nedît çawa tê vekirin nizanim) Berê hemû beş piştî maneyê bibûn, dûre min sê Tab çêkir, Bingehîn+Lînkkirin+Bikaranîn. Niha lazim e Tabeke din çêkim. Ya ku claude çêkiriye bnr. [[Special:PermanentLink/6333698#L-7]] ne baş e bnr. [[Special:PermanentLink/6333703|qiyaskirinê li ser vê htmlê]] Êdî ez Claude abuse dikime ji ber ku Pro ye :D [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 19:26, 14 tebax 2026 (UTC)
:::Claude dibêje:
:::Good clarification — that's a real simplification, not just a relabel. Updated STEP_GROUPS from 5 tabs down to 3:
:::Mane — the definitions themselves, plus Wêne (image), now grouped in with it instead of sitting in a separate misc tab. Nimûne needed no change since it was already rendering inside each Mane sense block, not as its own step.
:::Bilêvkirin — unchanged, still just pronunciation.
:::Beşên din — everything else in one flat bucket: hevmane, jê, têkildar, herwiha binêre, formên alternatîv, dijmane, jornav, jêrnav, notên bikaranînê, bi alfabeyên din, dûnde, çavkanî, bêhtir bixwîne, tewandin, etîmolojî, zaravayên din, werger, and bnr-h — instead of being split across the old Bingehîn/Lînkkirin/Bikaranîn/Din tabs.
:::No DOM-order changes were needed this time — the fix from the blank-tab bug looks up the tab bar's position dynamically now, so it didn't matter that I regrouped which steps go where. Same two files, saved to your Wiki folder — worth another pass through all three tabs once you've pasted this in, same as last time. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 19:34, 14 tebax 2026 (UTC)
::::Mînak:
Ziman
---------------------------------------------
Cureyê rêzimanî (Navdêr)
Navdêr (hilbijêre) ┆ Cîns (hilbijêre) ┆ Jimar (hilbijêre)
- lêker -mê -yekjimar
- rengdêr -nêr -pirjimar
- ... -... -...
---------------------------------------------
Mane || Bilêvkirin || Beşên din
hilbijêre:
- mane - IPA - Hevmane
- nimûne - kîte - Dijmane
- wêne
Dema ku tu "Cureyê rêzimanî" dikî "Lêker" :
Cureyê rêzimanî (Lêker)
Lêker (hilbijêre) ┆ Cure (hilbijêre)
- navdêr -rehê niha
- rengdêr -rehê borî
- ... -...
---------------------------------------------
┆ : select/option ("tab" nîne, tê dîtin)<br>
|| : "tab"
-- [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 19:45, 14 tebax 2026 (UTC)
'''Sê-stûnî ("┆" = ne tab), li gorî Cureyê rêzimanî:'''
{| class="wikitable"
! Cureyê rêzimanî !! Stûna 2 !! Stûna 3 !! Têbînî
|-
| Navdêr / Serenav
| Cîns (hilbijêre ▾: mê / nêr / ... — tenê heke ziman zayendê rêzimanî hebe)
| '''Jimar''' (?) — pirs li jêr
| Qadên "Forma mê/nêr/pirjimar/yekjimar" niha jî li vir hene — ma ev di "Jimar"-ê de tên tevlihev kirin, an cuda dimînin?
|-
| Rengdêr
| (heman m/n/p/y forman ku Navdêr distîne)
| Sûperlatîv (sûp) / Komparatîv (komp)
| Ne li ser her du nîgaran hatiye behs kirin — ma sê-stûnî li vir jî tê bikaranîn?
|-
| Lêker
| '''Cure''' = Cureyê lêkerê (hilbijêre ▾: gerguhêz / negerguhêz / xwerû-... / pêkhatî-... / hevedudanî-... / biwêjî-... — 10 vebijêrk)
| Di heman stûnê de: Rehê dema niha / Rehê dema borî / Rehê dema bilanî (her sê qadên nivîsandinê ne, ne hilbijêrk in)
| Ma "Cure" her sê rehan di xwe de digire wek yek stûn, an her yek stûneke cuda ye?
|-
| Tîp (herf/sembol)
| Girdêk (gir) / Hûrek (hûr)
| —
| Ne behs kiriye
|-
| Her cureyek, li gorî zimên
| Transliterasyon (tr) / Transkrîpsiyon (ts)
| —
| Bi zimên ve girêdayî ye, ne bi cureyê rêzimanî ve
|-
| Her cureyek, tenê ziman=japonî
| Hanja / Translit. hanja
| —
| Ne bi cureyê rêzimanî ve girêdayî ye
|-
| Her cureyek
| '''Tercîhên pêşketî''' (kolapsî): form, formaalt, nekatcure, nekatcins, nekatçendterm, serlînkneke, nekatpalîndrom, neformtr
| —
| Vebijarkî, ji bo hemû cureyan
|}
'''Tabên jêrîn — Mane ‖ Bilêvkirin ‖ Beşên din ("||" = tab):'''
{| class="wikitable"
! Mane !! Bilêvkirin !! Beşên din (hemû 18 hêman)
|-
| mane, nimûne, wêne
| şablonên bilêvkirinê (mînak: IPA, kîte)
| tewandin, etîmolojî, bi zaravayên din, werger, jê, têkildar, herwiha binêre, formên alternatîv, hevmane, dijmane, jornav, jêrnav, notên bikaranînê, bi alfabeyên din, dûnde, çavkanî, bêhtir bixwîne, bnr-h
|}
'''Pirsên vekirî:'''
# "Jimar" (yekjimar/pirjimar) — qadeke ku nîşan dide têketî bi xwe yekjimar e an pirjimar e. Ev cuda ye ji "Forma yekjimar (y)"/"Forma pirjimar (p)" ya heyî (ku forma DÎN a kelîmeyê tomar dike). Herdu bimînin, an werin yek kirin?
# Ma sê-stûnî tenê ji bo Navdêr/Lêker e, an ji bo Rengdêr/Tîp jî heman mantiq derbas dibe?
# Di "Beşên din" de: dixwazî pêşî navnîşek/hilbijartinek nîşan bide (17 hêmanên din jî tê de), û qad tenê piştî hilbijartinê xuya bibin?
:Tu dikarî start.js ji Tercîh/ Amûran rakî û bi test.js li Amûran herî taliyê ye biceribînî. Claude ya li jor hazir kir, Jimar ez dikarim îzah bikim. Feqat bi min di tab-a maneyê de lazim e Bi zaravayên din (heta wek werger her car bila li rûpelan were zêdekirin) û werger jî hebe.--[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 20:18, 14 tebax 2026 (UTC)
:;Navdêr: Tenê "cîns" û "jimar" bes e. "Forma mê", "Forma nêr", ... nayê fêm kirin. Bi min wekî "Tercîhên pêşketî" bi navkî din veşartî çêke.
:;Lêker: "Cureyê lêkerê" nayê fêm kirin, bi min pêşta "geguhez/negerguhêz" were hilbijartin, paşê jî form "hevdudanî/pêkatî/..." ji ber ku her kes vana nizanî... Dîsa jî tu dizanî.
:Bi min beşên "Hevmane" û dijmane jî bike de nav beşa Mane ("tab") ji ber ku pirr tên xwestin.
:Şûnda Wêne jî Nimûne/jêgirtin...
:Herwiha hemû bi rengê şîn hatine çêkirin, nizanim beşên din (===) bi rengê gewr an reş çito dibe? [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 21:35, 14 tebax 2026 (UTC)
::Nimûne/jêgirtin, hevmane, Dijmane li binê her maneyê hene. ji ber ku wana bi maneyê ve girêdayî ne lazim e wisa bimîne feqat belkî şiklekî baştir bibînin. Hînbûna bikaranîna formeke nû bi qasî hînbûna koda wîkiyê zor e heqîqeten... [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 21:45, 14 tebax 2026 (UTC)
== [[Mediawiki:Gadget-QQ.js]] ==
Ev amûr di şikle Minerva de. Her daîm vê xeletiyê dide:
<syntaxhighlight lang="js">
TypeError: Cannot read properties of null (reading 'addEventListener') at css () at runScript () at Array.<anonymous> () at flushCssBuffer ()
</syntaxhighlight> [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 19:29, 18 tîrmeh 2026 (UTC)
:* [[Bikarhêner:Wikihez/skrîpt/js/Gadget-QQ.js]] --> [[Mediawiki:Gadget-QQ.js]]
:* [[Bikarhêner:Wikihez/Gadget-QQ.css]] --> [[Mediawiki:Gadget-QQ.css]]
:Ez dibêjim çêbû lê ka çend roj biceribînim. Tiştên ku hatin sererastkirin:
:# Google Books API Key dikarî zêde bikî, dixe cookies û di gerokê de dimîne. Berê bê API Key dixebitiya lê êdî mecbûr e ku API Key-a te hebe, bidestxistina wê ne zêde zor e lê dîsa jî tevlihev e.
:# Êdî di mobîlê de dixebite, heta di mobîlê de xweştir xuya dike.
:# Moda tarî
:# OOUI dewsa jquery.ui
:# Li qutiyê çi dixwazî zêde bikî, dikare li gorî îsm, sifet, fiîl bitewîne. Lê ji bo fiîl tenê dikare çend heb inflection bîne.
:# Butona paqij bike lê zêde kir.
:# Çend paqijiyên jêgirtinên Google Kitêbê niha hene.
:[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 23:38, 18 tîrmeh 2026 (UTC)
::Tewandina fiîlan û xeletiya modulê lazim e were rastkirin. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 14:40, 21 tîrmeh 2026 (UTC)
== [[MediaWiki:Gadget-wikt.add-examples.js]] ==
Min ev amûr hinek rojane kir feqat çend problem hene berî ku bar bikin.
Tiştên ku min guhart:
# Êdî li sayfeyên bi {{ş|maneid}} jî dixebite,
# Cihê di wîkîtekstê de yê ku jêgirtin were îlawekirin baştir bû,
# [[Mediawiki:Gadget-citoid-helper.js|citoid helper]] zêde kir ji bo ku bi hêsanî çavkanî bi riya doi, isbn an urlyê werin tijîkirin.
* [[Bikarhêner:Wikihez/Gadget-wikt.add-examples.css]] --> [[MediaWiki:Gadget-wikt.add-examples.css]]
* [[Bikarhêner:Wikihez/Gadget-wikt.add-examples.js]] --> [[MediaWiki:Gadget-wikt.add-examples.js]]
- --[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 00:50, 19 tîrmeh 2026 (UTC)
:Min "wikt." qismên cache kirinê ya wîkiya fransî bi [[MediaWiki:Gadget-StorageUtils.js]] guhartiye. loma ji bîr nekin wê amûrê li [[MediaWiki:Gadgets-definition]] zêde bikin. û navê amûrê jî biguhêrînin. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 09:15, 23 tîrmeh 2026 (UTC)
::Berê li ser WF:ceribandin dixebitî. niha naxebite. Divê were rastkirin. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 22:10, 7 tebax 2026 (UTC)
== Gadget-translation editor ==
* [[MediaWiki:Gadget-translation editor.js]]: divê formata en.wîktê were bikaranîn ji ber ku me gelek tercime ji en.wîktê kopî kir û ev js hîn nikare formata wekî li jêr bi kar bîne.
<syntaxhighlight lang="wikitext">
* {{Z|sh}}:
*: Kirîlî:
*: Latînî
</syntaxhighlight>
—[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:17, 16 tîrmeh 2026 (UTC)
== [[Mediawiki:Gadget-linkify.js]] ==
* ''rûpeleke'' wekî<syntaxhighlight lang="wikitext">[[rûpeleke]]</syntaxhighlight> lînk dike, bi regexê belkî dikare wisa bike <syntaxhighlight lang="wikitext">[[rûpel]]eke</syntaxhighlight>
—[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:17, 16 tîrmeh 2026 (UTC)
* Amûreke din wekî [[User:Wikihez/Gadget-linkify.js|linkify]] lazim e ku herfên mezin biçûk bike ji bo kurmancî.—[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:17, 16 tîrmeh 2026 (UTC)
:{{r|Bikarhêner}} Merheba bira, dikarî viya jî bar bikî?:
* [[Special:PermanentLink/6291974|linkify]] --> [[Mediawiki:Gadget-linkify.js]]
Spas--[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 11:42, 29 tîrmeh 2026 (UTC)
:Dûre [https://ku.wiktionary.org/wiki/MediaWiki:Gadget-start.js#L-283 li vir] wiktviLinkify bike kuLinkify xêra xwe [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 11:51, 29 tîrmeh 2026 (UTC)
::Min ji bîr kir lê zêde bikim niha nikare "Dİ" bike "di", xeletiyeke berbelav a di nivîsên kurdî de, herfên din ên wekî ll yan rr jî hewce ne werin zêdekirin. Dûre em zêde bikin. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 21:42, 29 tîrmeh 2026 (UTC)
:::Min nû ferq kir, sayfeyên ku hîn nehatine çêkirin wîkîlînk nake. Problemeke mezin e divê were rastkirin. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 18:15, 30 tîrmeh 2026 (UTC)
::::Na, lînk dike, tiştekî din heye... [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 10:49, 31 tîrmeh 2026 (UTC)
== Amûra manayê ==
Amûreke din ji bo nivîsina maneyê wekî Nimûne zêde bike lazim e [https://ku.wiktionary.org/w/index.php?title=Bikarh%C3%AAner:Wikihez/test.js&oldid=6276876 js] [https://ku.wiktionary.org/w/index.php?title=%C5%9Eablon:ceribandin2&oldid=6265629 şablon] [https://ku.wiktionary.org/w/index.php?title=Bikarh%C3%AAner:Wikihez/common.css&oldid=6265642 css] --[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 09:12, 23 tîrmeh 2026 (UTC)
== [[MediaWiki:Gadget-jeder.js]] ==
@[[Bikarhêner:Ghybu|Ghybu]] Çavkaniyên jêderê di moda pêşdîtinê de jêderê vedişêre, ew jî min gelek eciz dike wextê çavkanî zêde dikim. Min ji Claude pirsî û kodan nîşanî wê da, wisa cewab da:
Yes — and this file actually explains the whole thing precisely, better than my earlier guess about extract-stripping.
What's happening: the CSS rule
<syntaxhighlight lang="css">
.jeder{
display:none;
}
</syntaxhighlight>
hides every citation by default, *unconditionally*. The only thing that ever makes it visible again is the gadget's JS: it finds each `.jeder`, builds the short "`— (year, author, +)`" summary from the `.j-pewist` fields, and either reveals the short version or — for citations with no `.j-pewist` fields — explicitly sets `display:inline` on the original.
So visibility of citations depends entirely on this JS running. In the normal article view (Image 1) it runs, so you see the collapsed "`(1918, E. Rehmî Ji Mala Hekariyan, Amadekar: M. E. Bozarslan, +)`" form. In whatever generated Image 2 — a hover-preview/extract/API render — gadget JS doesn't execute, so nothing ever removes the `display:none`, and the citation vanishes completely rather than degrading to "still visible, just not collapsed."
<b>The fix:</b> flip the default so the *un-collapsed* state is the safe fallback, and let JS do the hiding only after it successfully builds the short version. That way, any context without JS shows the full citation instead of nothing.
CSS — remove the blanket hide:
<syntaxhighlight lang="css">
.jeder {
/* intentionally no display:none here — see Gadget-... .js */
}
</syntaxhighlight>
JS — do the hiding from script, after the short form exists:
{{veşêre-ser}}
<syntaxhighlight lang="js">
// Ji bo şablonên [[Şablon:jêder]] hatiye nivîsandin.
// Parametreyên ku di navbera "<span class="j-pewist">...</span>" an "{{j-pêwîst|...}}" de ne venaşêre.
$(function() {
function nivisaKurtTevliBike(sund, nivisKurt) {
var zede = $('<a>+</a>')
.addClass('click')
.attr('href', '#')
.attr('title', 'zêdetir')
.css('font-weight', 'bold');
var kurt = $(' <a>↩</a>')
.addClass('click-kurt')
.attr('href', '#')
.attr('title', 'veşêre')
.css('font-weight', 'bold');
$('<span>' + nivisKurt + '</span>')
.append(zede).append(')')
.addClass('jeder-kurt')
.css('font-size', '0.85em')
.insertAfter(sund);
sund.append(' ').append(kurt);
// Only hide the full citation once the short summary actually exists.
// If this script never runs (no-JS clients, hover-preview extracts,
// action=render, etc.), the full citation stays visible instead of
// silently disappearing.
sund.css('display', 'none');
}
function vesere() {
$('.jeder').each(function() {
var elmTab = $(this).find('.j-pewist').clone();
if (elmTab.length) {
var elm = '';
for (var i = elmTab.length - 1; i >= 0; i--) {
elm = elmTab.eq(i).html() + ', ' + elm;
}
var nivisKurt = ' — (' + elm;
nivisaKurtTevliBike($(this), nivisKurt);
}
// else: no j-pewist fields to shorten — leave the full citation
// as it already renders (visible), nothing to do.
});
}
vesere();
$(".click").click(function(e) {
e.preventDefault();
$(this).parent('.jeder-kurt').css('display', 'none');
$(this).parent('.jeder-kurt').prev().css('display', 'inline');
});
$(".click-kurt").click(function(e) {
e.preventDefault();
$(this).parent('.jeder').css('display', 'none');
$(this).parent('.jeder').next().css('display', 'inline');
});
});
</syntaxhighlight>
Net effect:
- JS-enabled readers (normal article view): identical experience to today — collapsed short form with `+`/`↩` toggle.
- No-JS contexts (previews, extracts, screen readers before JS loads, print, etc.): full citation is shown instead of nothing — a real regression fix rather than a cosmetic one.
One caveat worth being upfront about: this fixes it *if* the preview context renders the gadget's HTML/CSS but doesn't execute gadget JS (which is the far more common case, and what this code strongly suggests is happening). If Image 2 instead comes from a pipeline that strips the `.jeder`/`.jegirtin-text` elements out of the HTML entirely before this CSS/JS even gets a chance to apply, no on-wiki CSS/JS change can help — that'd need the extract-generation config changed instead. Given what this gadget file shows, though, I'd bet on the CSS-hide explanation.
{{veşêre-bin}}
Em dûre biceribînin eger xeletî tinebe, vî tiştî jî rast bikin. --[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 20:00, 23 tîrmeh 2026 (UTC)
:Ez APIya MediaWiki rind nizanim belkî Claude dizane:) Em nikarin bibêjin dema ku moda "''action=edit''" e fonksiyona <code>function vesere()</code> bi kar meyîne. [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 15:57, 24 tîrmeh 2026 (UTC)
::Na, di moda "edît"-ê de <code>var elmTab = null</code>... [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 16:13, 24 tîrmeh 2026 (UTC)
?:
<syntaxhighlight lang="js">
if (
mw.config.get('wgAction') === 'edit' ||
mw.config.get('wgAction') === 'submit'
){
var elmTab = [];
} else {
var elmTab = $(this).find('.j-pewist').clone();
}
</syntaxhighlight>
--[[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 16:31, 24 tîrmeh 2026 (UTC)
:Ez jî nizanim Claude çiqas ji mediawiki fêm dike lê heta niha ti tişt nîne ku min jê pirs kir û nikaribû çêke, bila wekî reklam nebe feqat Claude mikemmel e, dibêjim "li vir çima xeletiyeke wisa derdikeve" di dosyeya 2000 rêzî de diçe tiştê xelet tenê rast dike tiştekî din naguherîne. Chatgpt û aistudio qet wisa nakin, eynî dosyeyê deh cara dinivîsin, deh netîceyên cuda derdikevin :D
:Em dikarin vê amûrê wextê edit û submitê neaktîv bikin wekî <syntaxhighlight lang="js">if (!(action === "edit" || action === "submit")) {
:return;</syntaxhighlight> lê wê demê display:none wê çibe nizanim. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 18:23, 24 tîrmeh 2026 (UTC)
::display:none ne hewce ye ma jixwe di nav kodê [https://ku.wiktionary.org/w/index.php?title=MediaWiki:Gadget-jeder.js&oldid=6069025#L-49 L-49] de inline/none heye? [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 18:53, 24 tîrmeh 2026 (UTC)
:Min bi vî şiklî [https://ku.wiktionary.org/w/index.php?title=Bikarh%C3%AAner:Wikihez/vector-2022.js&diff=prev&oldid=6290816#L-28] ceriband feqat nexebitî. "display:none" di pêşdîtinê de dixebite feqat js naşixule. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 14:43, 25 tîrmeh 2026 (UTC)
::Kodên JSê pir hez nakim (pêşta hukurina APIya MWyê hewce bû) dîsa jî ez ê seh bikim :) [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 16:49, 27 tîrmeh 2026 (UTC)
:::Ez niha bi vî şiklî [https://ku.wiktionary.org/w/index.php?title=Bikarh%C3%AAner:Wikihez/test.js&oldid=6290820] [https://ku.wiktionary.org/w/index.php?title=Bikarh%C3%AAner:Wikihez/common.css&oldid=6290821#L-8] bi kar tînim ti problem nîne. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 17:09, 27 tîrmeh 2026 (UTC)
== [[MediaWiki:Gadget-PagePreviews.js]] ==
Ez dibêjim em vê amûrê jî çêkin [[:en:MediaWiki:Gadget-PagePreviews.js]] --[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 10:56, 3 tebax 2026 (UTC)
= Moda tarî =
== [[Şablon:wîkîpediya]] ==
Rengê tarî de xirab e.--[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 19:36, 4 tebax 2026 (UTC)
= Bot =
Karên ku bi botê werin çêkirin ji kerema xwe li vir binivîsin.
== Kategorî:Biwêj ==
[[:Kategorî:Biwêj]] divê were paqijkirin, lîsteya madeyên {{ş|biwêj}} çêke, yên ku tê de bûn, kirin, man hene filtre bike yên din bi destî tê çêkirin.—[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:17, 16 tîrmeh 2026 (UTC)
== Jêgirtin ==
Xistina jêgirtinên beşa [https://ku.wiktionary.org/w/index.php?search=insource%3A%2F%3D+*Ji+%5BWw%5D%C3%AAjey%C3%AA+*%3D%2F&title=Taybet%3AL%C3%AAger%C3%AEn&profile=advanced&fulltext=1&ns0=1&searchToken=8rh0bmw8dccsi7aynl6zli8uf ji wêjeyê] li beşa maneyê. —[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:17, 16 tîrmeh 2026 (UTC)
== Bota Toolforgeê ==
Botekî Toolforgeê lazim e ji bo ku xeletiyên biçûk wekî şablonên bi navên îngilîzî werin kurdîkirin yan jî valahiya beşan rast bike û hwd.—[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:17, 16 tîrmeh 2026 (UTC)
:Min [[Bikarhêner:Wikihez/skrîpt/py/kuwiktkozmetik.py|paqijiyen kozmetîk]] hazir kir feqat hîn navên şablonan naguhêre. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 20:05, 4 tebax 2026 (UTC)
== Updatew ==
Bota [[Bikarhêner:Wikihez/skrîpt/py/updateW.py|updateW]] divê were rojanekirin. Yan jî yekî nû were çêkirin. Şablonên {{ş|W}} di beşa tercimeyan de sererast dike û zimanan rêz dike. Ya niha xeletiya navê zimanî dide.—[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:17, 16 tîrmeh 2026 (UTC)
== sihir --> sêhr ==
Tercimeyên ''[[sêhr]]'' hemû dibêje ''sihir'' loma bi botê lazim e kirin ''sêhr''. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 17:43, 18 tîrmeh 2026 (UTC)
:Sihirbaz --> sêhrbaz [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 18:07, 18 tîrmeh 2026 (UTC)
== Tercimeyên dîroknas ==
Li tercimeyên [[dîroknas]], hevmaneyên wê hewce ye were îlawekirin. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 18:44, 18 tîrmeh 2026 (UTC)
== Mewlûd ==
Sererastkirina jêgirtinên mewlûdê [https://ku.wiktionary.org/w/index.php?search=insource%3A%2Fw%5C%3AMela+His%C3%AAn%C3%AA+Batey%C3%AE%2F&title=Taybet%3AL%C3%AAger%C3%AEn&ns0=1&searchToken=8m0tguy3sqt7edr4sg0u8hedo] wekî [https://ku.wiktionary.org/w/index.php?title=dax%C3%AEdar&curid=284303&diff=6265851&oldid=6142285] [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 09:43, 20 tîrmeh 2026 (UTC)
6f2044ollusc0rar77ilufr8zzho51m
6333742
6333741
2026-08-14T22:12:34Z
Ghybu
1393
/* MediaWiki:Gadget-start.js */ Bersiv
6333742
wikitext
text/x-wiki
{{/ser}}
= Karên ferhengî =
== Mane ==
* [[:Kategorî:Madeyên bê beşa mane]]
** [[:Kategorî:Madeyên bê beşa mane bi kurmancî]]
Li ser van rûpelan ev made hene ku maneyan wan nehatine nivîsin û divê werin nivîsin. —[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:17, 16 tîrmeh 2026 (UTC)
== Etîmolojî ==
*[[:Kategorî:Daxwazên etîmolojiyê]]
**[[:Kategorî:Daxwazên etîmolojiyê bi kurmancî]]
Li ser van rûpelan ev made hene ku etîmolojiya wan hîn nehatine nivîsin. Ji bo alîkariyê binêre [[WF:Etîmolojî]] —[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:17, 16 tîrmeh 2026 (UTC)
== Cureyê rêzimanî ==
* [[:Kategorî:Gotarên bê kategoriya rêzimanî]]
* [[:Kategorî:Gotarên bê kategoriya rêzimanî bi kurmancî]]
Li ser van rûpelan ev made hene ku cureyên wan yên rêzimanî hîn nehatine nivîsin. Ji bo alîkariyê binêre [[Alîkarî:Cureyên peyvan]] —[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:17, 16 tîrmeh 2026 (UTC)
== Kontrol ==
* [[:Kategorî:Kontrol]]
** [[:Kategorî:Kontrola maneyê]]
Ev madde bi botê hatine çêkirin, yek bi yek divê werin kontrolkirin. —[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:17, 16 tîrmeh 2026 (UTC)
= Şablon =
== IPA ==
* {{ş|IPA}} divê [[Modul:IPA]] bi kar bîne. —[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:17, 16 tîrmeh 2026 (UTC)
== Deng ==
Kurdîkirina belgekirina {{ş|deng}} lazim e.--[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 00:06, 19 tîrmeh 2026 (UTC)
= Modul =
== Modul:form of/templates ==
* [[Modul:form of/templates]]: Divê ev modul were rojanekirin û xeletiyên berê wekî ([[hevalê]]) werin rastkirin. —[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:17, 16 tîrmeh 2026 (UTC)
*:Merheba @[[Bikarhêner:Ghybu|Ghybu]] Te gotibû di vê modulê de xeletî hene, jkx tu dikarî li vir binivîsî çi kêmasî hene, daku wextê rojane dikim ez ji bîr nekim? [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:16, 21 tîrmeh 2026 (UTC)
*::Silav. Nizanim ji bîra min çûye... Herwiha ji bo çêkirina formên navdêran zanînên cîns û tîpa dawî bes e:
*::* (-ê, mê) => çemandî, bangkirin
*::* (-ê, nêr) => îzafe
*::* (-ê, mê û nêr) => îzafe (nêr), bangkirin (mê), çemandî (mê)
*::* (-a) => îzafe (mê)
*::* (-ekî) => îzafe û çemandî (nêr, nebinavkirî)
*::* (-eke) = > îzafe (mê, nebinavkirî)
*::* ...
*:: <code>if find(mw.title.getCurrentTitle().subpageText, 'ekî$') then ... end</code>
*::<code><nowiki>{{ku-tewîn-navForm|<navdêr>|<zayend>}</nowiki></code>
*::Tablo û nivîs di yekcarî de tên çêkirin...
*::Feqet problem lêzêdekirina mînakan e. [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 17:34, 21 tîrmeh 2026 (UTC)
*:::Lêzêdekirina kîjan nimûneyan? Ev koda js ji bo çi ye? Qisûrê nenêre min fêm nekir :/ [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 18:13, 21 tîrmeh 2026 (UTC)
*::::Li vira ([[hevalê#Formeke navdêrê]]) di bin maneyên 1. û 2. mînak nayên tevlî kirin :) [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 18:18, 21 tîrmeh 2026 (UTC)
*:::::Ev tercîh e, ne mecbûrî ye, em dikarin [https://ku.wiktionary.org/w/index.php?title=heval%C3%AA&diff=prev&oldid=6276350 wisa] bikin. Wekî din? [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 18:29, 21 tîrmeh 2026 (UTC)
*::::::Min li jor tênê got ku tenê parametreyên "navdêr" û "zayend" hewce nee. Bi '''[//ku.wiktionary.org/w/index.php?title=heval%C3%AA&curid=969734&diff=6276353&oldid=6276350 vî]''' awayî jî tê çêkirin. Parametreyên din ne hewce ne. [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 18:38, 21 tîrmeh 2026 (UTC)
*:::::::Ji bo wê şabloneke din lazim e, bila ev şablon wekî îngilîzî bimîne em ji bo kurmancî yekî din çêkin. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 18:42, 21 tîrmeh 2026 (UTC)
*::::::::[https://ku.wiktionary.org/w/index.php?title=heval%C3%AA&oldid=6276885 wisa] çawa ye? Bi min nivîsîna nimûneyan zêde ne lazim e ji ber ku ti kes serê xwe pê naêşîne. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 09:46, 23 tîrmeh 2026 (UTC)
*:::::::::@[[Bikarhêner:Ghybu|Ghybu]] Vê şablonê bi kar bînin an na? Navê şablonê kê çi be? [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 19:07, 24 tîrmeh 2026 (UTC)
== Modul:columns ==
* [[Modul:columns]] were rojanekirin û {{ş|kol3}} bila lînka ''nîşan bide'' deyne beriya sernavê, kolê di qutiya rengî de bila nebe. —[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:17, 16 tîrmeh 2026 (UTC)
== Modul:etymon ==
* [[Modul:etymon kevn]]: Rojanekirin hewce ye. —[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:17, 16 tîrmeh 2026 (UTC)
== [[Modul:ziman/code to canonical name]] ==
Belgekirina skrîptê û js divê were rastkirin. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 09:31, 22 tîrmeh 2026 (UTC)
:* [[MediaWiki:UpdateLanguageNameAndCode.js]]
:[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 09:50, 22 tîrmeh 2026 (UTC)
::* [[Modul:ziman/print]]
::[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 09:52, 22 tîrmeh 2026 (UTC)
:::*[[Modul:ziman/şablon]]
:::[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 09:56, 22 tîrmeh 2026 (UTC)
::::* [[MediaWiki:Gadget-translation editor.js/ziman.json]]
::::[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 11:06, 22 tîrmeh 2026 (UTC)
== [[Modul:quote]] ==
Piştî ev modul hate hazirkirin, lazim e navên jegirtinan werin rastkirin û li hemûyan {{param|jêgirtin}} were zêdekirin. Bnr. [[Gotûbêja şablonê:Jêgirtin/Ehmedê Xanî/Mem û Zîn]] [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 22:27, 5 tebax 2026 (UTC)
::Ev modul hema bêje hazir e. Hûn li ser van madeyan çi difikirin:
# {{para|tarîx}} lazim e full date be eger na, lazim e {{para|sal}} were bikaranîn. Feqat "'''2021''' kanûna pêşîn 23" bi vî şiklî bi min ne problem e çnkî derdê en.wikt "attestation" e delîla herî pêşî jî sal e.
#: {{demo|sep=wisa xuya dibe<br>|<nowiki>{{jêder-kitêb/ceribandin|en
|tarîx=23 December 2021|nivîskar=Harry Hobbs; George Williams|sernav=Micronations and the Search for Sovereignty|url=https://www.cambridge.org/core/books/micronations-and-the-search-for-sovereignty/B0414A3A322695D9EE71E4CDDFDA06DE|weşanxane=Cambridge University Press|rûpel=155|isbn=978-1-009-15012-5|jêgirtin=jêgirtin.|t=-}}</nowiki>}}
#{{para|amadekar}}/{{para|edîtor}}/{{para|terciman}} bi şiklê edîtoriya, amadekariya, tercimekirina
#: {{demo|sep=dide<br>|<nowiki>{{jêder-kitêb/ceribandin|en
|sernav=Medical Surgical Nursing|serî=Juta's Manual of Nursing|cildê-seriyê=volume 4|edîtor=Sophie Mataniele Mogotlane; Joyce Mokoena; Motshedisi Eunice Chauke; Anne Young|sal=2005|weşanxane=Juta Academic|isbn=978-0702171840|rûpel=!12-29|jêgirtin=jêgirtin|t=-}}</nowiki>}}
--[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 13:09, 10 tebax 2026 (UTC)
:@[[Bikarhêner:Bikarhêner|Bikarhêner]] û @[[Bikarhêner:Ghybu|Ghybu]] Hîn gelek tişt hene divê îzah bikin û fikrê we pirs bikim, feqat îzahkirin pir zor e, em dest bi bikaranînê bikin û dûre tiştên ku hûn naxwazin em dikarin biguherînîn, dibe? [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 13:11, 10 tebax 2026 (UTC)
::Dibe, piştî çêbû, em di praktîkê de bibînin ku çawa ye. -- [[Bikarhêner:Bikarhêner|Bikarhêner]] ([[Gotûbêja bikarhêner:Bikarhêner|gotûbêj]]) 18:05, 10 tebax 2026 (UTC)
= Javascript =
== [[Mediawiki:Gadget-citoid-helper.js]] ==
Ji bo bi citoidê kopîkirina malûmatên çavkaniyan amûreke wisa lazim e. Xisûsen ji ber ku bi çend amûrên din dikare were bikaranîn.
Feqat çend problem hene, şablonên me de kêmasiya parametreyan gelek in û xerîteyên citoidê hîn nehatine çêkirin. Wana sererast bikin dûre vê amûrê çêkin, piştre [[MediaWiki:Gadget-start.js|start.js]] û [[MediaWiki:Gadget-wikt.add-examples.js|add examples.js]] were rojanekirin.
- --[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 00:04, 19 tîrmeh 2026 (UTC)
:Merheba @[[Bikarhêner:Bikarhêner|Bikarhêner]], ez dibêjim karê Modul:quote zêde wext bistîne, bila em dest bi bikaranîna van amûran bikin dûre kêmasiyan em ê temam bikin înşela. Dikarî vana li cihên xwe yên rast kopî paste bikî?
# [[Special:PermanentLink/6291574|Bikarhêner:Wikihez/skrîpt/js/Gadget-citoid-helper.js]] --> [[Mediawiki:Gadget-citoid-helper.js]]
# Ya li jêr kopî bike qismê herî dawî ya AmûrênVeşartî li [[MediaWiki:Gadgets-definition]]:
## <code><nowiki>* citoid-helper[ResourceLoader|hidden|default|dependencies=mediawiki.util]|citoid-helper.js</nowiki></code>
--[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:58, 26 tîrmeh 2026 (UTC)
== [[MediaWiki:Gadget-start.js]] ==
Rojanekirin hewce ye. Min gelek tişt lê zêde kir lê ez niha test dikime. Piştre em bar bikin:
* [[Bikarhêner:Wikihez/Gadget-start.js]] --> [[MediaWiki:Gadget-start.js]]
* [[Bikarhêner:Wikihez/Gadget-start.css]] --> [[MediaWiki:Gadget-start.css]]
--[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 22:08, 17 tîrmeh 2026 (UTC)
:Min [[MediaWiki:Gadget-start/data.json|data.json]] çêkir ji bo ku bi hêsanî malûmatên heyî werin guhartin bêyî guhartina Javascriptê. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 19:49, 18 tîrmeh 2026 (UTC)
:Xeletiyên ku ji bîr nekim rast bikim:
:* Wextê min çavkanî "kitêb" hilbijart û bi destî tije kir xeletiyeke [https://ku.wiktionary.org/w/index.php?title=xezete&diff=prev&oldid=6265392 wisa] derket her kelîme hate lînkkirin.
:* <code>html("⠿")</code> ev ne lazim e.
:* textarea ji bo çavkaniyên jêgirtinan xaseten yên sernav hîn jî ne draggable e.
:* pêşdîtina zindî checkbox wextê tê rakirin, pêşdîtin winda nabe.
:* Butona mobîlê ya vekirina formê di moda tarî de belî nabe, tenê wekî qutiyeke tarî xuya dibe.
:* Metna hişyarkirinê di guhartina rûpelên heyî de lazim e baştir bikim.
:[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 23:51, 18 tîrmeh 2026 (UTC)
::Ev problem çêbûn, ez ê binêrim ka çi problemên din hene. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 14:15, 19 tîrmeh 2026 (UTC)
:::Çêke: Ji bo qismê çavkaniyê yek dikare API call û Kategorî:Çavkanî bi kar bîne ji bo ku şablon zêde bikî ji yên heyî. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 21:21, 19 tîrmeh 2026 (UTC)
::::Ev jî çêbû, min beşa çavkanî jî çêkir. Eger xeletî dernekeve û problema valahiya piştî etîketê ji bîr nekim, piştî rojanekirina amûrên linkify, û citoid em dikarin bar bikin. Ez ê ti tiştê nû îlawe nekim, zêde dirêj bû. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:14, 21 tîrmeh 2026 (UTC)
:::::Merheba @[[Bikarhêner:Bikarhêner|Bikarhêner]]. Dikarî wana bar bikî?
:::::* [[Bikarhêner:Wikihez/Gadget-start.js]] --> [[MediaWiki:Gadget-start.js]]
:::::* [[Bikarhêner:Wikihez/Gadget-start.css]] --> [[MediaWiki:Gadget-start.css]]
:::::* [[MediaWiki:Gadgets-definition]] wisa rojane bike:
:::::* start[ResourceLoader|default|package|dependencies=mediawiki.util,ext.gadget.StorageUtils,ext.gadget.citoid-helper]|start.js|start.css|start.js/data.json
:::::[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 09:39, 5 tebax 2026 (UTC)
{{şirove}} Dewama ''[[Special:PermanentLink/6333688|Gotûbêja bikarhêner:Rewiye tine#WF:Nû]]'' bila gotûbêja wî em spam nekin. :D
{{r|Ghybu}} dikarî [[Special:PermanentLink/6333689|vê htmlê]] binêrî claude rast fêm kiriye yan na? Daxîne û wek html qeyd bike. --[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 18:43, 14 tebax 2026 (UTC)
:Min seh wîkîyên din jî kir, li wîkiya fransî tiştekî wekî daxwaza min çêkirine (tiştên ku ne hewce ne wekî "tab" çêkirine an jî hatine vêşartin): [//fr.wiktionary.org/w/index.php?title=fdsdfdsf&action=edit&redlink=1]. Formata me yê berî jî bi vê lojîkê hatibû çêkirin, wekî de.wiktionary ([//de.wiktionary.org/w/index.php?title=sdfdsfsdfs&action=edit&preload=Vorlage:Formatvorlage_(Substantiv_vereinfacht)]) [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 19:01, 14 tebax 2026 (UTC)
::PS: Dîsa jî Claude min rind fêm kiriye :)) Feqet min got ku beşên Mane", "Bilêvkirin" û "Beşên din" cem hev (wekî "tab") ". Û dema ku tu terî di nav "Besên din" Hevmane, Jê, ... li wira werin dayîn. Wêne/Resim û Nimûne jî di nav beşa ("tab") "Mane" [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 19:17, 14 tebax 2026 (UTC)
::Erê ya fr.wikt min jî dîtibû jixwe fikrê tab min ji wan girtibû :D (feqat min li cem wan tenê tab-a maneyê dît yên din nedît çawa tê vekirin nizanim) Berê hemû beş piştî maneyê bibûn, dûre min sê Tab çêkir, Bingehîn+Lînkkirin+Bikaranîn. Niha lazim e Tabeke din çêkim. Ya ku claude çêkiriye bnr. [[Special:PermanentLink/6333698#L-7]] ne baş e bnr. [[Special:PermanentLink/6333703|qiyaskirinê li ser vê htmlê]] Êdî ez Claude abuse dikime ji ber ku Pro ye :D [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 19:26, 14 tebax 2026 (UTC)
:::Claude dibêje:
:::Good clarification — that's a real simplification, not just a relabel. Updated STEP_GROUPS from 5 tabs down to 3:
:::Mane — the definitions themselves, plus Wêne (image), now grouped in with it instead of sitting in a separate misc tab. Nimûne needed no change since it was already rendering inside each Mane sense block, not as its own step.
:::Bilêvkirin — unchanged, still just pronunciation.
:::Beşên din — everything else in one flat bucket: hevmane, jê, têkildar, herwiha binêre, formên alternatîv, dijmane, jornav, jêrnav, notên bikaranînê, bi alfabeyên din, dûnde, çavkanî, bêhtir bixwîne, tewandin, etîmolojî, zaravayên din, werger, and bnr-h — instead of being split across the old Bingehîn/Lînkkirin/Bikaranîn/Din tabs.
:::No DOM-order changes were needed this time — the fix from the blank-tab bug looks up the tab bar's position dynamically now, so it didn't matter that I regrouped which steps go where. Same two files, saved to your Wiki folder — worth another pass through all three tabs once you've pasted this in, same as last time. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 19:34, 14 tebax 2026 (UTC)
::::Mînak:
Ziman
---------------------------------------------
Cureyê rêzimanî (Navdêr)
Navdêr (hilbijêre) ┆ Cîns (hilbijêre) ┆ Jimar (hilbijêre)
- lêker -mê -yekjimar
- rengdêr -nêr -pirjimar
- ... -... -...
---------------------------------------------
Mane || Bilêvkirin || Beşên din
hilbijêre:
- mane - IPA - Hevmane
- nimûne - kîte - Dijmane
- wêne
Dema ku tu "Cureyê rêzimanî" dikî "Lêker" :
Cureyê rêzimanî (Lêker)
Lêker (hilbijêre) ┆ Cure (hilbijêre)
- navdêr -rehê niha
- rengdêr -rehê borî
- ... -...
---------------------------------------------
┆ : select/option ("tab" nîne, tê dîtin)<br>
|| : "tab"
-- [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 19:45, 14 tebax 2026 (UTC)
'''Sê-stûnî ("┆" = ne tab), li gorî Cureyê rêzimanî:'''
{| class="wikitable"
! Cureyê rêzimanî !! Stûna 2 !! Stûna 3 !! Têbînî
|-
| Navdêr / Serenav
| Cîns (hilbijêre ▾: mê / nêr / ... — tenê heke ziman zayendê rêzimanî hebe)
| '''Jimar''' (?) — pirs li jêr
| Qadên "Forma mê/nêr/pirjimar/yekjimar" niha jî li vir hene — ma ev di "Jimar"-ê de tên tevlihev kirin, an cuda dimînin?
|-
| Rengdêr
| (heman m/n/p/y forman ku Navdêr distîne)
| Sûperlatîv (sûp) / Komparatîv (komp)
| Ne li ser her du nîgaran hatiye behs kirin — ma sê-stûnî li vir jî tê bikaranîn?
|-
| Lêker
| '''Cure''' = Cureyê lêkerê (hilbijêre ▾: gerguhêz / negerguhêz / xwerû-... / pêkhatî-... / hevedudanî-... / biwêjî-... — 10 vebijêrk)
| Di heman stûnê de: Rehê dema niha / Rehê dema borî / Rehê dema bilanî (her sê qadên nivîsandinê ne, ne hilbijêrk in)
| Ma "Cure" her sê rehan di xwe de digire wek yek stûn, an her yek stûneke cuda ye?
|-
| Tîp (herf/sembol)
| Girdêk (gir) / Hûrek (hûr)
| —
| Ne behs kiriye
|-
| Her cureyek, li gorî zimên
| Transliterasyon (tr) / Transkrîpsiyon (ts)
| —
| Bi zimên ve girêdayî ye, ne bi cureyê rêzimanî ve
|-
| Her cureyek, tenê ziman=japonî
| Hanja / Translit. hanja
| —
| Ne bi cureyê rêzimanî ve girêdayî ye
|-
| Her cureyek
| '''Tercîhên pêşketî''' (kolapsî): form, formaalt, nekatcure, nekatcins, nekatçendterm, serlînkneke, nekatpalîndrom, neformtr
| —
| Vebijarkî, ji bo hemû cureyan
|}
'''Tabên jêrîn — Mane ‖ Bilêvkirin ‖ Beşên din ("||" = tab):'''
{| class="wikitable"
! Mane !! Bilêvkirin !! Beşên din (hemû 18 hêman)
|-
| mane, nimûne, wêne
| şablonên bilêvkirinê (mînak: IPA, kîte)
| tewandin, etîmolojî, bi zaravayên din, werger, jê, têkildar, herwiha binêre, formên alternatîv, hevmane, dijmane, jornav, jêrnav, notên bikaranînê, bi alfabeyên din, dûnde, çavkanî, bêhtir bixwîne, bnr-h
|}
'''Pirsên vekirî:'''
# "Jimar" (yekjimar/pirjimar) — qadeke ku nîşan dide têketî bi xwe yekjimar e an pirjimar e. Ev cuda ye ji "Forma yekjimar (y)"/"Forma pirjimar (p)" ya heyî (ku forma DÎN a kelîmeyê tomar dike). Herdu bimînin, an werin yek kirin?
# Ma sê-stûnî tenê ji bo Navdêr/Lêker e, an ji bo Rengdêr/Tîp jî heman mantiq derbas dibe?
# Di "Beşên din" de: dixwazî pêşî navnîşek/hilbijartinek nîşan bide (17 hêmanên din jî tê de), û qad tenê piştî hilbijartinê xuya bibin?
:Tu dikarî start.js ji Tercîh/ Amûran rakî û bi test.js li Amûran herî taliyê ye biceribînî. Claude ya li jor hazir kir, Jimar ez dikarim îzah bikim. Feqat bi min di tab-a maneyê de lazim e Bi zaravayên din (heta wek werger her car bila li rûpelan were zêdekirin) û werger jî hebe.--[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 20:18, 14 tebax 2026 (UTC)
:;Navdêr: Tenê "cîns" û "jimar" bes e. "Forma mê", "Forma nêr", ... nayê fêm kirin. Bi min wekî "Tercîhên pêşketî" bi navkî din veşartî çêke.
:;Lêker: "Cureyê lêkerê" nayê fêm kirin, bi min pêşta "geguhez/negerguhêz" were hilbijartin, paşê jî form "hevdudanî/pêkatî/..." ji ber ku her kes vana nizanî... Dîsa jî tu dizanî.
:Bi min beşên "Hevmane" û dijmane jî bike de nav beşa Mane ("tab") ji ber ku pirr tên xwestin.
:Şûnda Wêne jî Nimûne/jêgirtin...
:Herwiha hemû bi rengê şîn hatine çêkirin, nizanim beşên din (===) bi rengê gewr an reş çito dibe? [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 21:35, 14 tebax 2026 (UTC)
::Nimûne/jêgirtin, hevmane, Dijmane li binê her maneyê hene. ji ber ku wana bi maneyê ve girêdayî ne lazim e wisa bimîne feqat belkî şiklekî baştir bibînin. Hînbûna bikaranîna formeke nû bi qasî hînbûna koda wîkiyê zor e heqîqeten... [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 21:45, 14 tebax 2026 (UTC)
:::Min şaş fêm meke feqet te amûrekî ji bo Wikihez çêkiriye :) Tu dixwazî ku hemû tiştên ku te çêkiriye tevlî vê Gadgetê bikî û bikarhênerên din jî hû kin... Tu jî dizanî ku kesên ku tên vira çito peyv çêdikin: Ziman > Mane > Mînak > Hevmane > Dijmane ! Du Gadget çêke yek ji bo bikarhênerên ku hertim li vira ne, yekeke din jî ji bo bikarhênerên din (yên ku pirr nên vira).
:::Herwiha kesên ku hertim li vira ne bi Gadgetê gotar çênekirin, ''copy/paste'' dikin. [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 22:12, 14 tebax 2026 (UTC)
== [[Mediawiki:Gadget-QQ.js]] ==
Ev amûr di şikle Minerva de. Her daîm vê xeletiyê dide:
<syntaxhighlight lang="js">
TypeError: Cannot read properties of null (reading 'addEventListener') at css () at runScript () at Array.<anonymous> () at flushCssBuffer ()
</syntaxhighlight> [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 19:29, 18 tîrmeh 2026 (UTC)
:* [[Bikarhêner:Wikihez/skrîpt/js/Gadget-QQ.js]] --> [[Mediawiki:Gadget-QQ.js]]
:* [[Bikarhêner:Wikihez/Gadget-QQ.css]] --> [[Mediawiki:Gadget-QQ.css]]
:Ez dibêjim çêbû lê ka çend roj biceribînim. Tiştên ku hatin sererastkirin:
:# Google Books API Key dikarî zêde bikî, dixe cookies û di gerokê de dimîne. Berê bê API Key dixebitiya lê êdî mecbûr e ku API Key-a te hebe, bidestxistina wê ne zêde zor e lê dîsa jî tevlihev e.
:# Êdî di mobîlê de dixebite, heta di mobîlê de xweştir xuya dike.
:# Moda tarî
:# OOUI dewsa jquery.ui
:# Li qutiyê çi dixwazî zêde bikî, dikare li gorî îsm, sifet, fiîl bitewîne. Lê ji bo fiîl tenê dikare çend heb inflection bîne.
:# Butona paqij bike lê zêde kir.
:# Çend paqijiyên jêgirtinên Google Kitêbê niha hene.
:[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 23:38, 18 tîrmeh 2026 (UTC)
::Tewandina fiîlan û xeletiya modulê lazim e were rastkirin. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 14:40, 21 tîrmeh 2026 (UTC)
== [[MediaWiki:Gadget-wikt.add-examples.js]] ==
Min ev amûr hinek rojane kir feqat çend problem hene berî ku bar bikin.
Tiştên ku min guhart:
# Êdî li sayfeyên bi {{ş|maneid}} jî dixebite,
# Cihê di wîkîtekstê de yê ku jêgirtin were îlawekirin baştir bû,
# [[Mediawiki:Gadget-citoid-helper.js|citoid helper]] zêde kir ji bo ku bi hêsanî çavkanî bi riya doi, isbn an urlyê werin tijîkirin.
* [[Bikarhêner:Wikihez/Gadget-wikt.add-examples.css]] --> [[MediaWiki:Gadget-wikt.add-examples.css]]
* [[Bikarhêner:Wikihez/Gadget-wikt.add-examples.js]] --> [[MediaWiki:Gadget-wikt.add-examples.js]]
- --[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 00:50, 19 tîrmeh 2026 (UTC)
:Min "wikt." qismên cache kirinê ya wîkiya fransî bi [[MediaWiki:Gadget-StorageUtils.js]] guhartiye. loma ji bîr nekin wê amûrê li [[MediaWiki:Gadgets-definition]] zêde bikin. û navê amûrê jî biguhêrînin. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 09:15, 23 tîrmeh 2026 (UTC)
::Berê li ser WF:ceribandin dixebitî. niha naxebite. Divê were rastkirin. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 22:10, 7 tebax 2026 (UTC)
== Gadget-translation editor ==
* [[MediaWiki:Gadget-translation editor.js]]: divê formata en.wîktê were bikaranîn ji ber ku me gelek tercime ji en.wîktê kopî kir û ev js hîn nikare formata wekî li jêr bi kar bîne.
<syntaxhighlight lang="wikitext">
* {{Z|sh}}:
*: Kirîlî:
*: Latînî
</syntaxhighlight>
—[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:17, 16 tîrmeh 2026 (UTC)
== [[Mediawiki:Gadget-linkify.js]] ==
* ''rûpeleke'' wekî<syntaxhighlight lang="wikitext">[[rûpeleke]]</syntaxhighlight> lînk dike, bi regexê belkî dikare wisa bike <syntaxhighlight lang="wikitext">[[rûpel]]eke</syntaxhighlight>
—[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:17, 16 tîrmeh 2026 (UTC)
* Amûreke din wekî [[User:Wikihez/Gadget-linkify.js|linkify]] lazim e ku herfên mezin biçûk bike ji bo kurmancî.—[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:17, 16 tîrmeh 2026 (UTC)
:{{r|Bikarhêner}} Merheba bira, dikarî viya jî bar bikî?:
* [[Special:PermanentLink/6291974|linkify]] --> [[Mediawiki:Gadget-linkify.js]]
Spas--[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 11:42, 29 tîrmeh 2026 (UTC)
:Dûre [https://ku.wiktionary.org/wiki/MediaWiki:Gadget-start.js#L-283 li vir] wiktviLinkify bike kuLinkify xêra xwe [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 11:51, 29 tîrmeh 2026 (UTC)
::Min ji bîr kir lê zêde bikim niha nikare "Dİ" bike "di", xeletiyeke berbelav a di nivîsên kurdî de, herfên din ên wekî ll yan rr jî hewce ne werin zêdekirin. Dûre em zêde bikin. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 21:42, 29 tîrmeh 2026 (UTC)
:::Min nû ferq kir, sayfeyên ku hîn nehatine çêkirin wîkîlînk nake. Problemeke mezin e divê were rastkirin. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 18:15, 30 tîrmeh 2026 (UTC)
::::Na, lînk dike, tiştekî din heye... [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 10:49, 31 tîrmeh 2026 (UTC)
== Amûra manayê ==
Amûreke din ji bo nivîsina maneyê wekî Nimûne zêde bike lazim e [https://ku.wiktionary.org/w/index.php?title=Bikarh%C3%AAner:Wikihez/test.js&oldid=6276876 js] [https://ku.wiktionary.org/w/index.php?title=%C5%9Eablon:ceribandin2&oldid=6265629 şablon] [https://ku.wiktionary.org/w/index.php?title=Bikarh%C3%AAner:Wikihez/common.css&oldid=6265642 css] --[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 09:12, 23 tîrmeh 2026 (UTC)
== [[MediaWiki:Gadget-jeder.js]] ==
@[[Bikarhêner:Ghybu|Ghybu]] Çavkaniyên jêderê di moda pêşdîtinê de jêderê vedişêre, ew jî min gelek eciz dike wextê çavkanî zêde dikim. Min ji Claude pirsî û kodan nîşanî wê da, wisa cewab da:
Yes — and this file actually explains the whole thing precisely, better than my earlier guess about extract-stripping.
What's happening: the CSS rule
<syntaxhighlight lang="css">
.jeder{
display:none;
}
</syntaxhighlight>
hides every citation by default, *unconditionally*. The only thing that ever makes it visible again is the gadget's JS: it finds each `.jeder`, builds the short "`— (year, author, +)`" summary from the `.j-pewist` fields, and either reveals the short version or — for citations with no `.j-pewist` fields — explicitly sets `display:inline` on the original.
So visibility of citations depends entirely on this JS running. In the normal article view (Image 1) it runs, so you see the collapsed "`(1918, E. Rehmî Ji Mala Hekariyan, Amadekar: M. E. Bozarslan, +)`" form. In whatever generated Image 2 — a hover-preview/extract/API render — gadget JS doesn't execute, so nothing ever removes the `display:none`, and the citation vanishes completely rather than degrading to "still visible, just not collapsed."
<b>The fix:</b> flip the default so the *un-collapsed* state is the safe fallback, and let JS do the hiding only after it successfully builds the short version. That way, any context without JS shows the full citation instead of nothing.
CSS — remove the blanket hide:
<syntaxhighlight lang="css">
.jeder {
/* intentionally no display:none here — see Gadget-... .js */
}
</syntaxhighlight>
JS — do the hiding from script, after the short form exists:
{{veşêre-ser}}
<syntaxhighlight lang="js">
// Ji bo şablonên [[Şablon:jêder]] hatiye nivîsandin.
// Parametreyên ku di navbera "<span class="j-pewist">...</span>" an "{{j-pêwîst|...}}" de ne venaşêre.
$(function() {
function nivisaKurtTevliBike(sund, nivisKurt) {
var zede = $('<a>+</a>')
.addClass('click')
.attr('href', '#')
.attr('title', 'zêdetir')
.css('font-weight', 'bold');
var kurt = $(' <a>↩</a>')
.addClass('click-kurt')
.attr('href', '#')
.attr('title', 'veşêre')
.css('font-weight', 'bold');
$('<span>' + nivisKurt + '</span>')
.append(zede).append(')')
.addClass('jeder-kurt')
.css('font-size', '0.85em')
.insertAfter(sund);
sund.append(' ').append(kurt);
// Only hide the full citation once the short summary actually exists.
// If this script never runs (no-JS clients, hover-preview extracts,
// action=render, etc.), the full citation stays visible instead of
// silently disappearing.
sund.css('display', 'none');
}
function vesere() {
$('.jeder').each(function() {
var elmTab = $(this).find('.j-pewist').clone();
if (elmTab.length) {
var elm = '';
for (var i = elmTab.length - 1; i >= 0; i--) {
elm = elmTab.eq(i).html() + ', ' + elm;
}
var nivisKurt = ' — (' + elm;
nivisaKurtTevliBike($(this), nivisKurt);
}
// else: no j-pewist fields to shorten — leave the full citation
// as it already renders (visible), nothing to do.
});
}
vesere();
$(".click").click(function(e) {
e.preventDefault();
$(this).parent('.jeder-kurt').css('display', 'none');
$(this).parent('.jeder-kurt').prev().css('display', 'inline');
});
$(".click-kurt").click(function(e) {
e.preventDefault();
$(this).parent('.jeder').css('display', 'none');
$(this).parent('.jeder').next().css('display', 'inline');
});
});
</syntaxhighlight>
Net effect:
- JS-enabled readers (normal article view): identical experience to today — collapsed short form with `+`/`↩` toggle.
- No-JS contexts (previews, extracts, screen readers before JS loads, print, etc.): full citation is shown instead of nothing — a real regression fix rather than a cosmetic one.
One caveat worth being upfront about: this fixes it *if* the preview context renders the gadget's HTML/CSS but doesn't execute gadget JS (which is the far more common case, and what this code strongly suggests is happening). If Image 2 instead comes from a pipeline that strips the `.jeder`/`.jegirtin-text` elements out of the HTML entirely before this CSS/JS even gets a chance to apply, no on-wiki CSS/JS change can help — that'd need the extract-generation config changed instead. Given what this gadget file shows, though, I'd bet on the CSS-hide explanation.
{{veşêre-bin}}
Em dûre biceribînin eger xeletî tinebe, vî tiştî jî rast bikin. --[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 20:00, 23 tîrmeh 2026 (UTC)
:Ez APIya MediaWiki rind nizanim belkî Claude dizane:) Em nikarin bibêjin dema ku moda "''action=edit''" e fonksiyona <code>function vesere()</code> bi kar meyîne. [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 15:57, 24 tîrmeh 2026 (UTC)
::Na, di moda "edît"-ê de <code>var elmTab = null</code>... [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 16:13, 24 tîrmeh 2026 (UTC)
?:
<syntaxhighlight lang="js">
if (
mw.config.get('wgAction') === 'edit' ||
mw.config.get('wgAction') === 'submit'
){
var elmTab = [];
} else {
var elmTab = $(this).find('.j-pewist').clone();
}
</syntaxhighlight>
--[[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 16:31, 24 tîrmeh 2026 (UTC)
:Ez jî nizanim Claude çiqas ji mediawiki fêm dike lê heta niha ti tişt nîne ku min jê pirs kir û nikaribû çêke, bila wekî reklam nebe feqat Claude mikemmel e, dibêjim "li vir çima xeletiyeke wisa derdikeve" di dosyeya 2000 rêzî de diçe tiştê xelet tenê rast dike tiştekî din naguherîne. Chatgpt û aistudio qet wisa nakin, eynî dosyeyê deh cara dinivîsin, deh netîceyên cuda derdikevin :D
:Em dikarin vê amûrê wextê edit û submitê neaktîv bikin wekî <syntaxhighlight lang="js">if (!(action === "edit" || action === "submit")) {
:return;</syntaxhighlight> lê wê demê display:none wê çibe nizanim. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 18:23, 24 tîrmeh 2026 (UTC)
::display:none ne hewce ye ma jixwe di nav kodê [https://ku.wiktionary.org/w/index.php?title=MediaWiki:Gadget-jeder.js&oldid=6069025#L-49 L-49] de inline/none heye? [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 18:53, 24 tîrmeh 2026 (UTC)
:Min bi vî şiklî [https://ku.wiktionary.org/w/index.php?title=Bikarh%C3%AAner:Wikihez/vector-2022.js&diff=prev&oldid=6290816#L-28] ceriband feqat nexebitî. "display:none" di pêşdîtinê de dixebite feqat js naşixule. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 14:43, 25 tîrmeh 2026 (UTC)
::Kodên JSê pir hez nakim (pêşta hukurina APIya MWyê hewce bû) dîsa jî ez ê seh bikim :) [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 16:49, 27 tîrmeh 2026 (UTC)
:::Ez niha bi vî şiklî [https://ku.wiktionary.org/w/index.php?title=Bikarh%C3%AAner:Wikihez/test.js&oldid=6290820] [https://ku.wiktionary.org/w/index.php?title=Bikarh%C3%AAner:Wikihez/common.css&oldid=6290821#L-8] bi kar tînim ti problem nîne. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 17:09, 27 tîrmeh 2026 (UTC)
== [[MediaWiki:Gadget-PagePreviews.js]] ==
Ez dibêjim em vê amûrê jî çêkin [[:en:MediaWiki:Gadget-PagePreviews.js]] --[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 10:56, 3 tebax 2026 (UTC)
= Moda tarî =
== [[Şablon:wîkîpediya]] ==
Rengê tarî de xirab e.--[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 19:36, 4 tebax 2026 (UTC)
= Bot =
Karên ku bi botê werin çêkirin ji kerema xwe li vir binivîsin.
== Kategorî:Biwêj ==
[[:Kategorî:Biwêj]] divê were paqijkirin, lîsteya madeyên {{ş|biwêj}} çêke, yên ku tê de bûn, kirin, man hene filtre bike yên din bi destî tê çêkirin.—[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:17, 16 tîrmeh 2026 (UTC)
== Jêgirtin ==
Xistina jêgirtinên beşa [https://ku.wiktionary.org/w/index.php?search=insource%3A%2F%3D+*Ji+%5BWw%5D%C3%AAjey%C3%AA+*%3D%2F&title=Taybet%3AL%C3%AAger%C3%AEn&profile=advanced&fulltext=1&ns0=1&searchToken=8rh0bmw8dccsi7aynl6zli8uf ji wêjeyê] li beşa maneyê. —[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:17, 16 tîrmeh 2026 (UTC)
== Bota Toolforgeê ==
Botekî Toolforgeê lazim e ji bo ku xeletiyên biçûk wekî şablonên bi navên îngilîzî werin kurdîkirin yan jî valahiya beşan rast bike û hwd.—[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:17, 16 tîrmeh 2026 (UTC)
:Min [[Bikarhêner:Wikihez/skrîpt/py/kuwiktkozmetik.py|paqijiyen kozmetîk]] hazir kir feqat hîn navên şablonan naguhêre. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 20:05, 4 tebax 2026 (UTC)
== Updatew ==
Bota [[Bikarhêner:Wikihez/skrîpt/py/updateW.py|updateW]] divê were rojanekirin. Yan jî yekî nû were çêkirin. Şablonên {{ş|W}} di beşa tercimeyan de sererast dike û zimanan rêz dike. Ya niha xeletiya navê zimanî dide.—[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:17, 16 tîrmeh 2026 (UTC)
== sihir --> sêhr ==
Tercimeyên ''[[sêhr]]'' hemû dibêje ''sihir'' loma bi botê lazim e kirin ''sêhr''. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 17:43, 18 tîrmeh 2026 (UTC)
:Sihirbaz --> sêhrbaz [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 18:07, 18 tîrmeh 2026 (UTC)
== Tercimeyên dîroknas ==
Li tercimeyên [[dîroknas]], hevmaneyên wê hewce ye were îlawekirin. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 18:44, 18 tîrmeh 2026 (UTC)
== Mewlûd ==
Sererastkirina jêgirtinên mewlûdê [https://ku.wiktionary.org/w/index.php?search=insource%3A%2Fw%5C%3AMela+His%C3%AAn%C3%AA+Batey%C3%AE%2F&title=Taybet%3AL%C3%AAger%C3%AEn&ns0=1&searchToken=8m0tguy3sqt7edr4sg0u8hedo] wekî [https://ku.wiktionary.org/w/index.php?title=dax%C3%AEdar&curid=284303&diff=6265851&oldid=6142285] [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 09:43, 20 tîrmeh 2026 (UTC)
dlatg1lfk94k0um86fzac1n4bvoh38k
6333743
6333742
2026-08-14T22:14:22Z
Ghybu
1393
/* MediaWiki:Gadget-start.js */
6333743
wikitext
text/x-wiki
{{/ser}}
= Karên ferhengî =
== Mane ==
* [[:Kategorî:Madeyên bê beşa mane]]
** [[:Kategorî:Madeyên bê beşa mane bi kurmancî]]
Li ser van rûpelan ev made hene ku maneyan wan nehatine nivîsin û divê werin nivîsin. —[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:17, 16 tîrmeh 2026 (UTC)
== Etîmolojî ==
*[[:Kategorî:Daxwazên etîmolojiyê]]
**[[:Kategorî:Daxwazên etîmolojiyê bi kurmancî]]
Li ser van rûpelan ev made hene ku etîmolojiya wan hîn nehatine nivîsin. Ji bo alîkariyê binêre [[WF:Etîmolojî]] —[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:17, 16 tîrmeh 2026 (UTC)
== Cureyê rêzimanî ==
* [[:Kategorî:Gotarên bê kategoriya rêzimanî]]
* [[:Kategorî:Gotarên bê kategoriya rêzimanî bi kurmancî]]
Li ser van rûpelan ev made hene ku cureyên wan yên rêzimanî hîn nehatine nivîsin. Ji bo alîkariyê binêre [[Alîkarî:Cureyên peyvan]] —[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:17, 16 tîrmeh 2026 (UTC)
== Kontrol ==
* [[:Kategorî:Kontrol]]
** [[:Kategorî:Kontrola maneyê]]
Ev madde bi botê hatine çêkirin, yek bi yek divê werin kontrolkirin. —[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:17, 16 tîrmeh 2026 (UTC)
= Şablon =
== IPA ==
* {{ş|IPA}} divê [[Modul:IPA]] bi kar bîne. —[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:17, 16 tîrmeh 2026 (UTC)
== Deng ==
Kurdîkirina belgekirina {{ş|deng}} lazim e.--[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 00:06, 19 tîrmeh 2026 (UTC)
= Modul =
== Modul:form of/templates ==
* [[Modul:form of/templates]]: Divê ev modul were rojanekirin û xeletiyên berê wekî ([[hevalê]]) werin rastkirin. —[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:17, 16 tîrmeh 2026 (UTC)
*:Merheba @[[Bikarhêner:Ghybu|Ghybu]] Te gotibû di vê modulê de xeletî hene, jkx tu dikarî li vir binivîsî çi kêmasî hene, daku wextê rojane dikim ez ji bîr nekim? [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:16, 21 tîrmeh 2026 (UTC)
*::Silav. Nizanim ji bîra min çûye... Herwiha ji bo çêkirina formên navdêran zanînên cîns û tîpa dawî bes e:
*::* (-ê, mê) => çemandî, bangkirin
*::* (-ê, nêr) => îzafe
*::* (-ê, mê û nêr) => îzafe (nêr), bangkirin (mê), çemandî (mê)
*::* (-a) => îzafe (mê)
*::* (-ekî) => îzafe û çemandî (nêr, nebinavkirî)
*::* (-eke) = > îzafe (mê, nebinavkirî)
*::* ...
*:: <code>if find(mw.title.getCurrentTitle().subpageText, 'ekî$') then ... end</code>
*::<code><nowiki>{{ku-tewîn-navForm|<navdêr>|<zayend>}</nowiki></code>
*::Tablo û nivîs di yekcarî de tên çêkirin...
*::Feqet problem lêzêdekirina mînakan e. [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 17:34, 21 tîrmeh 2026 (UTC)
*:::Lêzêdekirina kîjan nimûneyan? Ev koda js ji bo çi ye? Qisûrê nenêre min fêm nekir :/ [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 18:13, 21 tîrmeh 2026 (UTC)
*::::Li vira ([[hevalê#Formeke navdêrê]]) di bin maneyên 1. û 2. mînak nayên tevlî kirin :) [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 18:18, 21 tîrmeh 2026 (UTC)
*:::::Ev tercîh e, ne mecbûrî ye, em dikarin [https://ku.wiktionary.org/w/index.php?title=heval%C3%AA&diff=prev&oldid=6276350 wisa] bikin. Wekî din? [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 18:29, 21 tîrmeh 2026 (UTC)
*::::::Min li jor tênê got ku tenê parametreyên "navdêr" û "zayend" hewce nee. Bi '''[//ku.wiktionary.org/w/index.php?title=heval%C3%AA&curid=969734&diff=6276353&oldid=6276350 vî]''' awayî jî tê çêkirin. Parametreyên din ne hewce ne. [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 18:38, 21 tîrmeh 2026 (UTC)
*:::::::Ji bo wê şabloneke din lazim e, bila ev şablon wekî îngilîzî bimîne em ji bo kurmancî yekî din çêkin. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 18:42, 21 tîrmeh 2026 (UTC)
*::::::::[https://ku.wiktionary.org/w/index.php?title=heval%C3%AA&oldid=6276885 wisa] çawa ye? Bi min nivîsîna nimûneyan zêde ne lazim e ji ber ku ti kes serê xwe pê naêşîne. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 09:46, 23 tîrmeh 2026 (UTC)
*:::::::::@[[Bikarhêner:Ghybu|Ghybu]] Vê şablonê bi kar bînin an na? Navê şablonê kê çi be? [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 19:07, 24 tîrmeh 2026 (UTC)
== Modul:columns ==
* [[Modul:columns]] were rojanekirin û {{ş|kol3}} bila lînka ''nîşan bide'' deyne beriya sernavê, kolê di qutiya rengî de bila nebe. —[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:17, 16 tîrmeh 2026 (UTC)
== Modul:etymon ==
* [[Modul:etymon kevn]]: Rojanekirin hewce ye. —[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:17, 16 tîrmeh 2026 (UTC)
== [[Modul:ziman/code to canonical name]] ==
Belgekirina skrîptê û js divê were rastkirin. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 09:31, 22 tîrmeh 2026 (UTC)
:* [[MediaWiki:UpdateLanguageNameAndCode.js]]
:[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 09:50, 22 tîrmeh 2026 (UTC)
::* [[Modul:ziman/print]]
::[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 09:52, 22 tîrmeh 2026 (UTC)
:::*[[Modul:ziman/şablon]]
:::[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 09:56, 22 tîrmeh 2026 (UTC)
::::* [[MediaWiki:Gadget-translation editor.js/ziman.json]]
::::[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 11:06, 22 tîrmeh 2026 (UTC)
== [[Modul:quote]] ==
Piştî ev modul hate hazirkirin, lazim e navên jegirtinan werin rastkirin û li hemûyan {{param|jêgirtin}} were zêdekirin. Bnr. [[Gotûbêja şablonê:Jêgirtin/Ehmedê Xanî/Mem û Zîn]] [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 22:27, 5 tebax 2026 (UTC)
::Ev modul hema bêje hazir e. Hûn li ser van madeyan çi difikirin:
# {{para|tarîx}} lazim e full date be eger na, lazim e {{para|sal}} were bikaranîn. Feqat "'''2021''' kanûna pêşîn 23" bi vî şiklî bi min ne problem e çnkî derdê en.wikt "attestation" e delîla herî pêşî jî sal e.
#: {{demo|sep=wisa xuya dibe<br>|<nowiki>{{jêder-kitêb/ceribandin|en
|tarîx=23 December 2021|nivîskar=Harry Hobbs; George Williams|sernav=Micronations and the Search for Sovereignty|url=https://www.cambridge.org/core/books/micronations-and-the-search-for-sovereignty/B0414A3A322695D9EE71E4CDDFDA06DE|weşanxane=Cambridge University Press|rûpel=155|isbn=978-1-009-15012-5|jêgirtin=jêgirtin.|t=-}}</nowiki>}}
#{{para|amadekar}}/{{para|edîtor}}/{{para|terciman}} bi şiklê edîtoriya, amadekariya, tercimekirina
#: {{demo|sep=dide<br>|<nowiki>{{jêder-kitêb/ceribandin|en
|sernav=Medical Surgical Nursing|serî=Juta's Manual of Nursing|cildê-seriyê=volume 4|edîtor=Sophie Mataniele Mogotlane; Joyce Mokoena; Motshedisi Eunice Chauke; Anne Young|sal=2005|weşanxane=Juta Academic|isbn=978-0702171840|rûpel=!12-29|jêgirtin=jêgirtin|t=-}}</nowiki>}}
--[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 13:09, 10 tebax 2026 (UTC)
:@[[Bikarhêner:Bikarhêner|Bikarhêner]] û @[[Bikarhêner:Ghybu|Ghybu]] Hîn gelek tişt hene divê îzah bikin û fikrê we pirs bikim, feqat îzahkirin pir zor e, em dest bi bikaranînê bikin û dûre tiştên ku hûn naxwazin em dikarin biguherînîn, dibe? [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 13:11, 10 tebax 2026 (UTC)
::Dibe, piştî çêbû, em di praktîkê de bibînin ku çawa ye. -- [[Bikarhêner:Bikarhêner|Bikarhêner]] ([[Gotûbêja bikarhêner:Bikarhêner|gotûbêj]]) 18:05, 10 tebax 2026 (UTC)
= Javascript =
== [[Mediawiki:Gadget-citoid-helper.js]] ==
Ji bo bi citoidê kopîkirina malûmatên çavkaniyan amûreke wisa lazim e. Xisûsen ji ber ku bi çend amûrên din dikare were bikaranîn.
Feqat çend problem hene, şablonên me de kêmasiya parametreyan gelek in û xerîteyên citoidê hîn nehatine çêkirin. Wana sererast bikin dûre vê amûrê çêkin, piştre [[MediaWiki:Gadget-start.js|start.js]] û [[MediaWiki:Gadget-wikt.add-examples.js|add examples.js]] were rojanekirin.
- --[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 00:04, 19 tîrmeh 2026 (UTC)
:Merheba @[[Bikarhêner:Bikarhêner|Bikarhêner]], ez dibêjim karê Modul:quote zêde wext bistîne, bila em dest bi bikaranîna van amûran bikin dûre kêmasiyan em ê temam bikin înşela. Dikarî vana li cihên xwe yên rast kopî paste bikî?
# [[Special:PermanentLink/6291574|Bikarhêner:Wikihez/skrîpt/js/Gadget-citoid-helper.js]] --> [[Mediawiki:Gadget-citoid-helper.js]]
# Ya li jêr kopî bike qismê herî dawî ya AmûrênVeşartî li [[MediaWiki:Gadgets-definition]]:
## <code><nowiki>* citoid-helper[ResourceLoader|hidden|default|dependencies=mediawiki.util]|citoid-helper.js</nowiki></code>
--[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:58, 26 tîrmeh 2026 (UTC)
== [[MediaWiki:Gadget-start.js]] ==
Rojanekirin hewce ye. Min gelek tişt lê zêde kir lê ez niha test dikime. Piştre em bar bikin:
* [[Bikarhêner:Wikihez/Gadget-start.js]] --> [[MediaWiki:Gadget-start.js]]
* [[Bikarhêner:Wikihez/Gadget-start.css]] --> [[MediaWiki:Gadget-start.css]]
--[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 22:08, 17 tîrmeh 2026 (UTC)
:Min [[MediaWiki:Gadget-start/data.json|data.json]] çêkir ji bo ku bi hêsanî malûmatên heyî werin guhartin bêyî guhartina Javascriptê. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 19:49, 18 tîrmeh 2026 (UTC)
:Xeletiyên ku ji bîr nekim rast bikim:
:* Wextê min çavkanî "kitêb" hilbijart û bi destî tije kir xeletiyeke [https://ku.wiktionary.org/w/index.php?title=xezete&diff=prev&oldid=6265392 wisa] derket her kelîme hate lînkkirin.
:* <code>html("⠿")</code> ev ne lazim e.
:* textarea ji bo çavkaniyên jêgirtinan xaseten yên sernav hîn jî ne draggable e.
:* pêşdîtina zindî checkbox wextê tê rakirin, pêşdîtin winda nabe.
:* Butona mobîlê ya vekirina formê di moda tarî de belî nabe, tenê wekî qutiyeke tarî xuya dibe.
:* Metna hişyarkirinê di guhartina rûpelên heyî de lazim e baştir bikim.
:[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 23:51, 18 tîrmeh 2026 (UTC)
::Ev problem çêbûn, ez ê binêrim ka çi problemên din hene. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 14:15, 19 tîrmeh 2026 (UTC)
:::Çêke: Ji bo qismê çavkaniyê yek dikare API call û Kategorî:Çavkanî bi kar bîne ji bo ku şablon zêde bikî ji yên heyî. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 21:21, 19 tîrmeh 2026 (UTC)
::::Ev jî çêbû, min beşa çavkanî jî çêkir. Eger xeletî dernekeve û problema valahiya piştî etîketê ji bîr nekim, piştî rojanekirina amûrên linkify, û citoid em dikarin bar bikin. Ez ê ti tiştê nû îlawe nekim, zêde dirêj bû. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:14, 21 tîrmeh 2026 (UTC)
:::::Merheba @[[Bikarhêner:Bikarhêner|Bikarhêner]]. Dikarî wana bar bikî?
:::::* [[Bikarhêner:Wikihez/Gadget-start.js]] --> [[MediaWiki:Gadget-start.js]]
:::::* [[Bikarhêner:Wikihez/Gadget-start.css]] --> [[MediaWiki:Gadget-start.css]]
:::::* [[MediaWiki:Gadgets-definition]] wisa rojane bike:
:::::* start[ResourceLoader|default|package|dependencies=mediawiki.util,ext.gadget.StorageUtils,ext.gadget.citoid-helper]|start.js|start.css|start.js/data.json
:::::[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 09:39, 5 tebax 2026 (UTC)
{{şirove}} Dewama ''[[Special:PermanentLink/6333688|Gotûbêja bikarhêner:Rewiye tine#WF:Nû]]'' bila gotûbêja wî em spam nekin. :D
{{r|Ghybu}} dikarî [[Special:PermanentLink/6333689|vê htmlê]] binêrî claude rast fêm kiriye yan na? Daxîne û wek html qeyd bike. --[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 18:43, 14 tebax 2026 (UTC)
:Min seh wîkîyên din jî kir, li wîkiya fransî tiştekî wekî daxwaza min çêkirine (tiştên ku ne hewce ne wekî "tab" çêkirine an jî hatine vêşartin): [//fr.wiktionary.org/w/index.php?title=fdsdfdsf&action=edit&redlink=1]. Formata me yê berî jî bi vê lojîkê hatibû çêkirin, wekî de.wiktionary ([//de.wiktionary.org/w/index.php?title=sdfdsfsdfs&action=edit&preload=Vorlage:Formatvorlage_(Substantiv_vereinfacht)]) [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 19:01, 14 tebax 2026 (UTC)
::PS: Dîsa jî Claude min rind fêm kiriye :)) Feqet min got ku beşên Mane", "Bilêvkirin" û "Beşên din" cem hev (wekî "tab") ". Û dema ku tu terî di nav "Besên din" Hevmane, Jê, ... li wira werin dayîn. Wêne/Resim û Nimûne jî di nav beşa ("tab") "Mane" [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 19:17, 14 tebax 2026 (UTC)
::Erê ya fr.wikt min jî dîtibû jixwe fikrê tab min ji wan girtibû :D (feqat min li cem wan tenê tab-a maneyê dît yên din nedît çawa tê vekirin nizanim) Berê hemû beş piştî maneyê bibûn, dûre min sê Tab çêkir, Bingehîn+Lînkkirin+Bikaranîn. Niha lazim e Tabeke din çêkim. Ya ku claude çêkiriye bnr. [[Special:PermanentLink/6333698#L-7]] ne baş e bnr. [[Special:PermanentLink/6333703|qiyaskirinê li ser vê htmlê]] Êdî ez Claude abuse dikime ji ber ku Pro ye :D [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 19:26, 14 tebax 2026 (UTC)
:::Claude dibêje:
:::Good clarification — that's a real simplification, not just a relabel. Updated STEP_GROUPS from 5 tabs down to 3:
:::Mane — the definitions themselves, plus Wêne (image), now grouped in with it instead of sitting in a separate misc tab. Nimûne needed no change since it was already rendering inside each Mane sense block, not as its own step.
:::Bilêvkirin — unchanged, still just pronunciation.
:::Beşên din — everything else in one flat bucket: hevmane, jê, têkildar, herwiha binêre, formên alternatîv, dijmane, jornav, jêrnav, notên bikaranînê, bi alfabeyên din, dûnde, çavkanî, bêhtir bixwîne, tewandin, etîmolojî, zaravayên din, werger, and bnr-h — instead of being split across the old Bingehîn/Lînkkirin/Bikaranîn/Din tabs.
:::No DOM-order changes were needed this time — the fix from the blank-tab bug looks up the tab bar's position dynamically now, so it didn't matter that I regrouped which steps go where. Same two files, saved to your Wiki folder — worth another pass through all three tabs once you've pasted this in, same as last time. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 19:34, 14 tebax 2026 (UTC)
::::Mînak:
Ziman
---------------------------------------------
Cureyê rêzimanî (Navdêr)
Navdêr (hilbijêre) ┆ Cîns (hilbijêre) ┆ Jimar (hilbijêre)
- lêker -mê -yekjimar
- rengdêr -nêr -pirjimar
- ... -... -...
---------------------------------------------
Mane || Bilêvkirin || Beşên din
hilbijêre:
- mane - IPA - Hevmane
- nimûne - kîte - Dijmane
- wêne
Dema ku tu "Cureyê rêzimanî" dikî "Lêker" :
Cureyê rêzimanî (Lêker)
Lêker (hilbijêre) ┆ Cure (hilbijêre)
- navdêr -rehê niha
- rengdêr -rehê borî
- ... -...
---------------------------------------------
┆ : select/option ("tab" nîne, tê dîtin)<br>
|| : "tab"
-- [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 19:45, 14 tebax 2026 (UTC)
'''Sê-stûnî ("┆" = ne tab), li gorî Cureyê rêzimanî:'''
{| class="wikitable"
! Cureyê rêzimanî !! Stûna 2 !! Stûna 3 !! Têbînî
|-
| Navdêr / Serenav
| Cîns (hilbijêre ▾: mê / nêr / ... — tenê heke ziman zayendê rêzimanî hebe)
| '''Jimar''' (?) — pirs li jêr
| Qadên "Forma mê/nêr/pirjimar/yekjimar" niha jî li vir hene — ma ev di "Jimar"-ê de tên tevlihev kirin, an cuda dimînin?
|-
| Rengdêr
| (heman m/n/p/y forman ku Navdêr distîne)
| Sûperlatîv (sûp) / Komparatîv (komp)
| Ne li ser her du nîgaran hatiye behs kirin — ma sê-stûnî li vir jî tê bikaranîn?
|-
| Lêker
| '''Cure''' = Cureyê lêkerê (hilbijêre ▾: gerguhêz / negerguhêz / xwerû-... / pêkhatî-... / hevedudanî-... / biwêjî-... — 10 vebijêrk)
| Di heman stûnê de: Rehê dema niha / Rehê dema borî / Rehê dema bilanî (her sê qadên nivîsandinê ne, ne hilbijêrk in)
| Ma "Cure" her sê rehan di xwe de digire wek yek stûn, an her yek stûneke cuda ye?
|-
| Tîp (herf/sembol)
| Girdêk (gir) / Hûrek (hûr)
| —
| Ne behs kiriye
|-
| Her cureyek, li gorî zimên
| Transliterasyon (tr) / Transkrîpsiyon (ts)
| —
| Bi zimên ve girêdayî ye, ne bi cureyê rêzimanî ve
|-
| Her cureyek, tenê ziman=japonî
| Hanja / Translit. hanja
| —
| Ne bi cureyê rêzimanî ve girêdayî ye
|-
| Her cureyek
| '''Tercîhên pêşketî''' (kolapsî): form, formaalt, nekatcure, nekatcins, nekatçendterm, serlînkneke, nekatpalîndrom, neformtr
| —
| Vebijarkî, ji bo hemû cureyan
|}
'''Tabên jêrîn — Mane ‖ Bilêvkirin ‖ Beşên din ("||" = tab):'''
{| class="wikitable"
! Mane !! Bilêvkirin !! Beşên din (hemû 18 hêman)
|-
| mane, nimûne, wêne
| şablonên bilêvkirinê (mînak: IPA, kîte)
| tewandin, etîmolojî, bi zaravayên din, werger, jê, têkildar, herwiha binêre, formên alternatîv, hevmane, dijmane, jornav, jêrnav, notên bikaranînê, bi alfabeyên din, dûnde, çavkanî, bêhtir bixwîne, bnr-h
|}
'''Pirsên vekirî:'''
# "Jimar" (yekjimar/pirjimar) — qadeke ku nîşan dide têketî bi xwe yekjimar e an pirjimar e. Ev cuda ye ji "Forma yekjimar (y)"/"Forma pirjimar (p)" ya heyî (ku forma DÎN a kelîmeyê tomar dike). Herdu bimînin, an werin yek kirin?
# Ma sê-stûnî tenê ji bo Navdêr/Lêker e, an ji bo Rengdêr/Tîp jî heman mantiq derbas dibe?
# Di "Beşên din" de: dixwazî pêşî navnîşek/hilbijartinek nîşan bide (17 hêmanên din jî tê de), û qad tenê piştî hilbijartinê xuya bibin?
:Tu dikarî start.js ji Tercîh/ Amûran rakî û bi test.js li Amûran herî taliyê ye biceribînî. Claude ya li jor hazir kir, Jimar ez dikarim îzah bikim. Feqat bi min di tab-a maneyê de lazim e Bi zaravayên din (heta wek werger her car bila li rûpelan were zêdekirin) û werger jî hebe.--[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 20:18, 14 tebax 2026 (UTC)
:;Navdêr: Tenê "cîns" û "jimar" bes e. "Forma mê", "Forma nêr", ... nayê fêm kirin. Bi min wekî "Tercîhên pêşketî" bi navkî din veşartî çêke.
:;Lêker: "Cureyê lêkerê" nayê fêm kirin, bi min pêşta "geguhez/negerguhêz" were hilbijartin, paşê jî form "hevdudanî/pêkatî/..." ji ber ku her kes vana nizanî... Dîsa jî tu dizanî.
:Bi min beşên "Hevmane" û dijmane jî bike de nav beşa Mane ("tab") ji ber ku pirr tên xwestin.
:Şûnda Wêne jî Nimûne/jêgirtin...
:Herwiha hemû bi rengê şîn hatine çêkirin, nizanim beşên din (===) bi rengê gewr an reş çito dibe? [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 21:35, 14 tebax 2026 (UTC)
::Nimûne/jêgirtin, hevmane, Dijmane li binê her maneyê hene. ji ber ku wana bi maneyê ve girêdayî ne lazim e wisa bimîne feqat belkî şiklekî baştir bibînin. Hînbûna bikaranîna formeke nû bi qasî hînbûna koda wîkiyê zor e heqîqeten... [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 21:45, 14 tebax 2026 (UTC)
:::Min şaş fêm meke feqet te amûrek ji bo Wikihez çêkiriye :) Tu dixwazî ku hemû tiştên ku te çêkiriye tevlî vê Gadgetê bikî û bikarhênerên din jî hû kin... Tu jî dizanî ku kesên ku tên vira çito peyv çêdikin: Ziman > Mane > Mînak > Hevmane > Dijmane ! Du Gadget çêke yek ji bo bikarhênerên ku hertim li vira ne, yekeke din jî ji bo bikarhênerên din (yên ku pirr nên vira).
:::Herwiha kesên ku hertim li vira ne bi Gadgetê gotar çênekirin, ''copy/paste'' dikin. [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 22:12, 14 tebax 2026 (UTC)
== [[Mediawiki:Gadget-QQ.js]] ==
Ev amûr di şikle Minerva de. Her daîm vê xeletiyê dide:
<syntaxhighlight lang="js">
TypeError: Cannot read properties of null (reading 'addEventListener') at css () at runScript () at Array.<anonymous> () at flushCssBuffer ()
</syntaxhighlight> [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 19:29, 18 tîrmeh 2026 (UTC)
:* [[Bikarhêner:Wikihez/skrîpt/js/Gadget-QQ.js]] --> [[Mediawiki:Gadget-QQ.js]]
:* [[Bikarhêner:Wikihez/Gadget-QQ.css]] --> [[Mediawiki:Gadget-QQ.css]]
:Ez dibêjim çêbû lê ka çend roj biceribînim. Tiştên ku hatin sererastkirin:
:# Google Books API Key dikarî zêde bikî, dixe cookies û di gerokê de dimîne. Berê bê API Key dixebitiya lê êdî mecbûr e ku API Key-a te hebe, bidestxistina wê ne zêde zor e lê dîsa jî tevlihev e.
:# Êdî di mobîlê de dixebite, heta di mobîlê de xweştir xuya dike.
:# Moda tarî
:# OOUI dewsa jquery.ui
:# Li qutiyê çi dixwazî zêde bikî, dikare li gorî îsm, sifet, fiîl bitewîne. Lê ji bo fiîl tenê dikare çend heb inflection bîne.
:# Butona paqij bike lê zêde kir.
:# Çend paqijiyên jêgirtinên Google Kitêbê niha hene.
:[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 23:38, 18 tîrmeh 2026 (UTC)
::Tewandina fiîlan û xeletiya modulê lazim e were rastkirin. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 14:40, 21 tîrmeh 2026 (UTC)
== [[MediaWiki:Gadget-wikt.add-examples.js]] ==
Min ev amûr hinek rojane kir feqat çend problem hene berî ku bar bikin.
Tiştên ku min guhart:
# Êdî li sayfeyên bi {{ş|maneid}} jî dixebite,
# Cihê di wîkîtekstê de yê ku jêgirtin were îlawekirin baştir bû,
# [[Mediawiki:Gadget-citoid-helper.js|citoid helper]] zêde kir ji bo ku bi hêsanî çavkanî bi riya doi, isbn an urlyê werin tijîkirin.
* [[Bikarhêner:Wikihez/Gadget-wikt.add-examples.css]] --> [[MediaWiki:Gadget-wikt.add-examples.css]]
* [[Bikarhêner:Wikihez/Gadget-wikt.add-examples.js]] --> [[MediaWiki:Gadget-wikt.add-examples.js]]
- --[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 00:50, 19 tîrmeh 2026 (UTC)
:Min "wikt." qismên cache kirinê ya wîkiya fransî bi [[MediaWiki:Gadget-StorageUtils.js]] guhartiye. loma ji bîr nekin wê amûrê li [[MediaWiki:Gadgets-definition]] zêde bikin. û navê amûrê jî biguhêrînin. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 09:15, 23 tîrmeh 2026 (UTC)
::Berê li ser WF:ceribandin dixebitî. niha naxebite. Divê were rastkirin. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 22:10, 7 tebax 2026 (UTC)
== Gadget-translation editor ==
* [[MediaWiki:Gadget-translation editor.js]]: divê formata en.wîktê were bikaranîn ji ber ku me gelek tercime ji en.wîktê kopî kir û ev js hîn nikare formata wekî li jêr bi kar bîne.
<syntaxhighlight lang="wikitext">
* {{Z|sh}}:
*: Kirîlî:
*: Latînî
</syntaxhighlight>
—[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:17, 16 tîrmeh 2026 (UTC)
== [[Mediawiki:Gadget-linkify.js]] ==
* ''rûpeleke'' wekî<syntaxhighlight lang="wikitext">[[rûpeleke]]</syntaxhighlight> lînk dike, bi regexê belkî dikare wisa bike <syntaxhighlight lang="wikitext">[[rûpel]]eke</syntaxhighlight>
—[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:17, 16 tîrmeh 2026 (UTC)
* Amûreke din wekî [[User:Wikihez/Gadget-linkify.js|linkify]] lazim e ku herfên mezin biçûk bike ji bo kurmancî.—[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:17, 16 tîrmeh 2026 (UTC)
:{{r|Bikarhêner}} Merheba bira, dikarî viya jî bar bikî?:
* [[Special:PermanentLink/6291974|linkify]] --> [[Mediawiki:Gadget-linkify.js]]
Spas--[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 11:42, 29 tîrmeh 2026 (UTC)
:Dûre [https://ku.wiktionary.org/wiki/MediaWiki:Gadget-start.js#L-283 li vir] wiktviLinkify bike kuLinkify xêra xwe [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 11:51, 29 tîrmeh 2026 (UTC)
::Min ji bîr kir lê zêde bikim niha nikare "Dİ" bike "di", xeletiyeke berbelav a di nivîsên kurdî de, herfên din ên wekî ll yan rr jî hewce ne werin zêdekirin. Dûre em zêde bikin. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 21:42, 29 tîrmeh 2026 (UTC)
:::Min nû ferq kir, sayfeyên ku hîn nehatine çêkirin wîkîlînk nake. Problemeke mezin e divê were rastkirin. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 18:15, 30 tîrmeh 2026 (UTC)
::::Na, lînk dike, tiştekî din heye... [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 10:49, 31 tîrmeh 2026 (UTC)
== Amûra manayê ==
Amûreke din ji bo nivîsina maneyê wekî Nimûne zêde bike lazim e [https://ku.wiktionary.org/w/index.php?title=Bikarh%C3%AAner:Wikihez/test.js&oldid=6276876 js] [https://ku.wiktionary.org/w/index.php?title=%C5%9Eablon:ceribandin2&oldid=6265629 şablon] [https://ku.wiktionary.org/w/index.php?title=Bikarh%C3%AAner:Wikihez/common.css&oldid=6265642 css] --[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 09:12, 23 tîrmeh 2026 (UTC)
== [[MediaWiki:Gadget-jeder.js]] ==
@[[Bikarhêner:Ghybu|Ghybu]] Çavkaniyên jêderê di moda pêşdîtinê de jêderê vedişêre, ew jî min gelek eciz dike wextê çavkanî zêde dikim. Min ji Claude pirsî û kodan nîşanî wê da, wisa cewab da:
Yes — and this file actually explains the whole thing precisely, better than my earlier guess about extract-stripping.
What's happening: the CSS rule
<syntaxhighlight lang="css">
.jeder{
display:none;
}
</syntaxhighlight>
hides every citation by default, *unconditionally*. The only thing that ever makes it visible again is the gadget's JS: it finds each `.jeder`, builds the short "`— (year, author, +)`" summary from the `.j-pewist` fields, and either reveals the short version or — for citations with no `.j-pewist` fields — explicitly sets `display:inline` on the original.
So visibility of citations depends entirely on this JS running. In the normal article view (Image 1) it runs, so you see the collapsed "`(1918, E. Rehmî Ji Mala Hekariyan, Amadekar: M. E. Bozarslan, +)`" form. In whatever generated Image 2 — a hover-preview/extract/API render — gadget JS doesn't execute, so nothing ever removes the `display:none`, and the citation vanishes completely rather than degrading to "still visible, just not collapsed."
<b>The fix:</b> flip the default so the *un-collapsed* state is the safe fallback, and let JS do the hiding only after it successfully builds the short version. That way, any context without JS shows the full citation instead of nothing.
CSS — remove the blanket hide:
<syntaxhighlight lang="css">
.jeder {
/* intentionally no display:none here — see Gadget-... .js */
}
</syntaxhighlight>
JS — do the hiding from script, after the short form exists:
{{veşêre-ser}}
<syntaxhighlight lang="js">
// Ji bo şablonên [[Şablon:jêder]] hatiye nivîsandin.
// Parametreyên ku di navbera "<span class="j-pewist">...</span>" an "{{j-pêwîst|...}}" de ne venaşêre.
$(function() {
function nivisaKurtTevliBike(sund, nivisKurt) {
var zede = $('<a>+</a>')
.addClass('click')
.attr('href', '#')
.attr('title', 'zêdetir')
.css('font-weight', 'bold');
var kurt = $(' <a>↩</a>')
.addClass('click-kurt')
.attr('href', '#')
.attr('title', 'veşêre')
.css('font-weight', 'bold');
$('<span>' + nivisKurt + '</span>')
.append(zede).append(')')
.addClass('jeder-kurt')
.css('font-size', '0.85em')
.insertAfter(sund);
sund.append(' ').append(kurt);
// Only hide the full citation once the short summary actually exists.
// If this script never runs (no-JS clients, hover-preview extracts,
// action=render, etc.), the full citation stays visible instead of
// silently disappearing.
sund.css('display', 'none');
}
function vesere() {
$('.jeder').each(function() {
var elmTab = $(this).find('.j-pewist').clone();
if (elmTab.length) {
var elm = '';
for (var i = elmTab.length - 1; i >= 0; i--) {
elm = elmTab.eq(i).html() + ', ' + elm;
}
var nivisKurt = ' — (' + elm;
nivisaKurtTevliBike($(this), nivisKurt);
}
// else: no j-pewist fields to shorten — leave the full citation
// as it already renders (visible), nothing to do.
});
}
vesere();
$(".click").click(function(e) {
e.preventDefault();
$(this).parent('.jeder-kurt').css('display', 'none');
$(this).parent('.jeder-kurt').prev().css('display', 'inline');
});
$(".click-kurt").click(function(e) {
e.preventDefault();
$(this).parent('.jeder').css('display', 'none');
$(this).parent('.jeder').next().css('display', 'inline');
});
});
</syntaxhighlight>
Net effect:
- JS-enabled readers (normal article view): identical experience to today — collapsed short form with `+`/`↩` toggle.
- No-JS contexts (previews, extracts, screen readers before JS loads, print, etc.): full citation is shown instead of nothing — a real regression fix rather than a cosmetic one.
One caveat worth being upfront about: this fixes it *if* the preview context renders the gadget's HTML/CSS but doesn't execute gadget JS (which is the far more common case, and what this code strongly suggests is happening). If Image 2 instead comes from a pipeline that strips the `.jeder`/`.jegirtin-text` elements out of the HTML entirely before this CSS/JS even gets a chance to apply, no on-wiki CSS/JS change can help — that'd need the extract-generation config changed instead. Given what this gadget file shows, though, I'd bet on the CSS-hide explanation.
{{veşêre-bin}}
Em dûre biceribînin eger xeletî tinebe, vî tiştî jî rast bikin. --[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 20:00, 23 tîrmeh 2026 (UTC)
:Ez APIya MediaWiki rind nizanim belkî Claude dizane:) Em nikarin bibêjin dema ku moda "''action=edit''" e fonksiyona <code>function vesere()</code> bi kar meyîne. [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 15:57, 24 tîrmeh 2026 (UTC)
::Na, di moda "edît"-ê de <code>var elmTab = null</code>... [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 16:13, 24 tîrmeh 2026 (UTC)
?:
<syntaxhighlight lang="js">
if (
mw.config.get('wgAction') === 'edit' ||
mw.config.get('wgAction') === 'submit'
){
var elmTab = [];
} else {
var elmTab = $(this).find('.j-pewist').clone();
}
</syntaxhighlight>
--[[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 16:31, 24 tîrmeh 2026 (UTC)
:Ez jî nizanim Claude çiqas ji mediawiki fêm dike lê heta niha ti tişt nîne ku min jê pirs kir û nikaribû çêke, bila wekî reklam nebe feqat Claude mikemmel e, dibêjim "li vir çima xeletiyeke wisa derdikeve" di dosyeya 2000 rêzî de diçe tiştê xelet tenê rast dike tiştekî din naguherîne. Chatgpt û aistudio qet wisa nakin, eynî dosyeyê deh cara dinivîsin, deh netîceyên cuda derdikevin :D
:Em dikarin vê amûrê wextê edit û submitê neaktîv bikin wekî <syntaxhighlight lang="js">if (!(action === "edit" || action === "submit")) {
:return;</syntaxhighlight> lê wê demê display:none wê çibe nizanim. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 18:23, 24 tîrmeh 2026 (UTC)
::display:none ne hewce ye ma jixwe di nav kodê [https://ku.wiktionary.org/w/index.php?title=MediaWiki:Gadget-jeder.js&oldid=6069025#L-49 L-49] de inline/none heye? [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 18:53, 24 tîrmeh 2026 (UTC)
:Min bi vî şiklî [https://ku.wiktionary.org/w/index.php?title=Bikarh%C3%AAner:Wikihez/vector-2022.js&diff=prev&oldid=6290816#L-28] ceriband feqat nexebitî. "display:none" di pêşdîtinê de dixebite feqat js naşixule. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 14:43, 25 tîrmeh 2026 (UTC)
::Kodên JSê pir hez nakim (pêşta hukurina APIya MWyê hewce bû) dîsa jî ez ê seh bikim :) [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 16:49, 27 tîrmeh 2026 (UTC)
:::Ez niha bi vî şiklî [https://ku.wiktionary.org/w/index.php?title=Bikarh%C3%AAner:Wikihez/test.js&oldid=6290820] [https://ku.wiktionary.org/w/index.php?title=Bikarh%C3%AAner:Wikihez/common.css&oldid=6290821#L-8] bi kar tînim ti problem nîne. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 17:09, 27 tîrmeh 2026 (UTC)
== [[MediaWiki:Gadget-PagePreviews.js]] ==
Ez dibêjim em vê amûrê jî çêkin [[:en:MediaWiki:Gadget-PagePreviews.js]] --[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 10:56, 3 tebax 2026 (UTC)
= Moda tarî =
== [[Şablon:wîkîpediya]] ==
Rengê tarî de xirab e.--[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 19:36, 4 tebax 2026 (UTC)
= Bot =
Karên ku bi botê werin çêkirin ji kerema xwe li vir binivîsin.
== Kategorî:Biwêj ==
[[:Kategorî:Biwêj]] divê were paqijkirin, lîsteya madeyên {{ş|biwêj}} çêke, yên ku tê de bûn, kirin, man hene filtre bike yên din bi destî tê çêkirin.—[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:17, 16 tîrmeh 2026 (UTC)
== Jêgirtin ==
Xistina jêgirtinên beşa [https://ku.wiktionary.org/w/index.php?search=insource%3A%2F%3D+*Ji+%5BWw%5D%C3%AAjey%C3%AA+*%3D%2F&title=Taybet%3AL%C3%AAger%C3%AEn&profile=advanced&fulltext=1&ns0=1&searchToken=8rh0bmw8dccsi7aynl6zli8uf ji wêjeyê] li beşa maneyê. —[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:17, 16 tîrmeh 2026 (UTC)
== Bota Toolforgeê ==
Botekî Toolforgeê lazim e ji bo ku xeletiyên biçûk wekî şablonên bi navên îngilîzî werin kurdîkirin yan jî valahiya beşan rast bike û hwd.—[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:17, 16 tîrmeh 2026 (UTC)
:Min [[Bikarhêner:Wikihez/skrîpt/py/kuwiktkozmetik.py|paqijiyen kozmetîk]] hazir kir feqat hîn navên şablonan naguhêre. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 20:05, 4 tebax 2026 (UTC)
== Updatew ==
Bota [[Bikarhêner:Wikihez/skrîpt/py/updateW.py|updateW]] divê were rojanekirin. Yan jî yekî nû were çêkirin. Şablonên {{ş|W}} di beşa tercimeyan de sererast dike û zimanan rêz dike. Ya niha xeletiya navê zimanî dide.—[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:17, 16 tîrmeh 2026 (UTC)
== sihir --> sêhr ==
Tercimeyên ''[[sêhr]]'' hemû dibêje ''sihir'' loma bi botê lazim e kirin ''sêhr''. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 17:43, 18 tîrmeh 2026 (UTC)
:Sihirbaz --> sêhrbaz [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 18:07, 18 tîrmeh 2026 (UTC)
== Tercimeyên dîroknas ==
Li tercimeyên [[dîroknas]], hevmaneyên wê hewce ye were îlawekirin. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 18:44, 18 tîrmeh 2026 (UTC)
== Mewlûd ==
Sererastkirina jêgirtinên mewlûdê [https://ku.wiktionary.org/w/index.php?search=insource%3A%2Fw%5C%3AMela+His%C3%AAn%C3%AA+Batey%C3%AE%2F&title=Taybet%3AL%C3%AAger%C3%AEn&ns0=1&searchToken=8m0tguy3sqt7edr4sg0u8hedo] wekî [https://ku.wiktionary.org/w/index.php?title=dax%C3%AEdar&curid=284303&diff=6265851&oldid=6142285] [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 09:43, 20 tîrmeh 2026 (UTC)
7wlsi14szezbgduwlx37hs8jzi2s8zx
6333745
6333743
2026-08-14T22:16:20Z
Ghybu
1393
/* MediaWiki:Gadget-start.js */
6333745
wikitext
text/x-wiki
{{/ser}}
= Karên ferhengî =
== Mane ==
* [[:Kategorî:Madeyên bê beşa mane]]
** [[:Kategorî:Madeyên bê beşa mane bi kurmancî]]
Li ser van rûpelan ev made hene ku maneyan wan nehatine nivîsin û divê werin nivîsin. —[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:17, 16 tîrmeh 2026 (UTC)
== Etîmolojî ==
*[[:Kategorî:Daxwazên etîmolojiyê]]
**[[:Kategorî:Daxwazên etîmolojiyê bi kurmancî]]
Li ser van rûpelan ev made hene ku etîmolojiya wan hîn nehatine nivîsin. Ji bo alîkariyê binêre [[WF:Etîmolojî]] —[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:17, 16 tîrmeh 2026 (UTC)
== Cureyê rêzimanî ==
* [[:Kategorî:Gotarên bê kategoriya rêzimanî]]
* [[:Kategorî:Gotarên bê kategoriya rêzimanî bi kurmancî]]
Li ser van rûpelan ev made hene ku cureyên wan yên rêzimanî hîn nehatine nivîsin. Ji bo alîkariyê binêre [[Alîkarî:Cureyên peyvan]] —[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:17, 16 tîrmeh 2026 (UTC)
== Kontrol ==
* [[:Kategorî:Kontrol]]
** [[:Kategorî:Kontrola maneyê]]
Ev madde bi botê hatine çêkirin, yek bi yek divê werin kontrolkirin. —[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:17, 16 tîrmeh 2026 (UTC)
= Şablon =
== IPA ==
* {{ş|IPA}} divê [[Modul:IPA]] bi kar bîne. —[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:17, 16 tîrmeh 2026 (UTC)
== Deng ==
Kurdîkirina belgekirina {{ş|deng}} lazim e.--[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 00:06, 19 tîrmeh 2026 (UTC)
= Modul =
== Modul:form of/templates ==
* [[Modul:form of/templates]]: Divê ev modul were rojanekirin û xeletiyên berê wekî ([[hevalê]]) werin rastkirin. —[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:17, 16 tîrmeh 2026 (UTC)
*:Merheba @[[Bikarhêner:Ghybu|Ghybu]] Te gotibû di vê modulê de xeletî hene, jkx tu dikarî li vir binivîsî çi kêmasî hene, daku wextê rojane dikim ez ji bîr nekim? [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:16, 21 tîrmeh 2026 (UTC)
*::Silav. Nizanim ji bîra min çûye... Herwiha ji bo çêkirina formên navdêran zanînên cîns û tîpa dawî bes e:
*::* (-ê, mê) => çemandî, bangkirin
*::* (-ê, nêr) => îzafe
*::* (-ê, mê û nêr) => îzafe (nêr), bangkirin (mê), çemandî (mê)
*::* (-a) => îzafe (mê)
*::* (-ekî) => îzafe û çemandî (nêr, nebinavkirî)
*::* (-eke) = > îzafe (mê, nebinavkirî)
*::* ...
*:: <code>if find(mw.title.getCurrentTitle().subpageText, 'ekî$') then ... end</code>
*::<code><nowiki>{{ku-tewîn-navForm|<navdêr>|<zayend>}</nowiki></code>
*::Tablo û nivîs di yekcarî de tên çêkirin...
*::Feqet problem lêzêdekirina mînakan e. [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 17:34, 21 tîrmeh 2026 (UTC)
*:::Lêzêdekirina kîjan nimûneyan? Ev koda js ji bo çi ye? Qisûrê nenêre min fêm nekir :/ [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 18:13, 21 tîrmeh 2026 (UTC)
*::::Li vira ([[hevalê#Formeke navdêrê]]) di bin maneyên 1. û 2. mînak nayên tevlî kirin :) [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 18:18, 21 tîrmeh 2026 (UTC)
*:::::Ev tercîh e, ne mecbûrî ye, em dikarin [https://ku.wiktionary.org/w/index.php?title=heval%C3%AA&diff=prev&oldid=6276350 wisa] bikin. Wekî din? [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 18:29, 21 tîrmeh 2026 (UTC)
*::::::Min li jor tênê got ku tenê parametreyên "navdêr" û "zayend" hewce nee. Bi '''[//ku.wiktionary.org/w/index.php?title=heval%C3%AA&curid=969734&diff=6276353&oldid=6276350 vî]''' awayî jî tê çêkirin. Parametreyên din ne hewce ne. [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 18:38, 21 tîrmeh 2026 (UTC)
*:::::::Ji bo wê şabloneke din lazim e, bila ev şablon wekî îngilîzî bimîne em ji bo kurmancî yekî din çêkin. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 18:42, 21 tîrmeh 2026 (UTC)
*::::::::[https://ku.wiktionary.org/w/index.php?title=heval%C3%AA&oldid=6276885 wisa] çawa ye? Bi min nivîsîna nimûneyan zêde ne lazim e ji ber ku ti kes serê xwe pê naêşîne. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 09:46, 23 tîrmeh 2026 (UTC)
*:::::::::@[[Bikarhêner:Ghybu|Ghybu]] Vê şablonê bi kar bînin an na? Navê şablonê kê çi be? [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 19:07, 24 tîrmeh 2026 (UTC)
== Modul:columns ==
* [[Modul:columns]] were rojanekirin û {{ş|kol3}} bila lînka ''nîşan bide'' deyne beriya sernavê, kolê di qutiya rengî de bila nebe. —[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:17, 16 tîrmeh 2026 (UTC)
== Modul:etymon ==
* [[Modul:etymon kevn]]: Rojanekirin hewce ye. —[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:17, 16 tîrmeh 2026 (UTC)
== [[Modul:ziman/code to canonical name]] ==
Belgekirina skrîptê û js divê were rastkirin. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 09:31, 22 tîrmeh 2026 (UTC)
:* [[MediaWiki:UpdateLanguageNameAndCode.js]]
:[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 09:50, 22 tîrmeh 2026 (UTC)
::* [[Modul:ziman/print]]
::[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 09:52, 22 tîrmeh 2026 (UTC)
:::*[[Modul:ziman/şablon]]
:::[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 09:56, 22 tîrmeh 2026 (UTC)
::::* [[MediaWiki:Gadget-translation editor.js/ziman.json]]
::::[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 11:06, 22 tîrmeh 2026 (UTC)
== [[Modul:quote]] ==
Piştî ev modul hate hazirkirin, lazim e navên jegirtinan werin rastkirin û li hemûyan {{param|jêgirtin}} were zêdekirin. Bnr. [[Gotûbêja şablonê:Jêgirtin/Ehmedê Xanî/Mem û Zîn]] [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 22:27, 5 tebax 2026 (UTC)
::Ev modul hema bêje hazir e. Hûn li ser van madeyan çi difikirin:
# {{para|tarîx}} lazim e full date be eger na, lazim e {{para|sal}} were bikaranîn. Feqat "'''2021''' kanûna pêşîn 23" bi vî şiklî bi min ne problem e çnkî derdê en.wikt "attestation" e delîla herî pêşî jî sal e.
#: {{demo|sep=wisa xuya dibe<br>|<nowiki>{{jêder-kitêb/ceribandin|en
|tarîx=23 December 2021|nivîskar=Harry Hobbs; George Williams|sernav=Micronations and the Search for Sovereignty|url=https://www.cambridge.org/core/books/micronations-and-the-search-for-sovereignty/B0414A3A322695D9EE71E4CDDFDA06DE|weşanxane=Cambridge University Press|rûpel=155|isbn=978-1-009-15012-5|jêgirtin=jêgirtin.|t=-}}</nowiki>}}
#{{para|amadekar}}/{{para|edîtor}}/{{para|terciman}} bi şiklê edîtoriya, amadekariya, tercimekirina
#: {{demo|sep=dide<br>|<nowiki>{{jêder-kitêb/ceribandin|en
|sernav=Medical Surgical Nursing|serî=Juta's Manual of Nursing|cildê-seriyê=volume 4|edîtor=Sophie Mataniele Mogotlane; Joyce Mokoena; Motshedisi Eunice Chauke; Anne Young|sal=2005|weşanxane=Juta Academic|isbn=978-0702171840|rûpel=!12-29|jêgirtin=jêgirtin|t=-}}</nowiki>}}
--[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 13:09, 10 tebax 2026 (UTC)
:@[[Bikarhêner:Bikarhêner|Bikarhêner]] û @[[Bikarhêner:Ghybu|Ghybu]] Hîn gelek tişt hene divê îzah bikin û fikrê we pirs bikim, feqat îzahkirin pir zor e, em dest bi bikaranînê bikin û dûre tiştên ku hûn naxwazin em dikarin biguherînîn, dibe? [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 13:11, 10 tebax 2026 (UTC)
::Dibe, piştî çêbû, em di praktîkê de bibînin ku çawa ye. -- [[Bikarhêner:Bikarhêner|Bikarhêner]] ([[Gotûbêja bikarhêner:Bikarhêner|gotûbêj]]) 18:05, 10 tebax 2026 (UTC)
= Javascript =
== [[Mediawiki:Gadget-citoid-helper.js]] ==
Ji bo bi citoidê kopîkirina malûmatên çavkaniyan amûreke wisa lazim e. Xisûsen ji ber ku bi çend amûrên din dikare were bikaranîn.
Feqat çend problem hene, şablonên me de kêmasiya parametreyan gelek in û xerîteyên citoidê hîn nehatine çêkirin. Wana sererast bikin dûre vê amûrê çêkin, piştre [[MediaWiki:Gadget-start.js|start.js]] û [[MediaWiki:Gadget-wikt.add-examples.js|add examples.js]] were rojanekirin.
- --[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 00:04, 19 tîrmeh 2026 (UTC)
:Merheba @[[Bikarhêner:Bikarhêner|Bikarhêner]], ez dibêjim karê Modul:quote zêde wext bistîne, bila em dest bi bikaranîna van amûran bikin dûre kêmasiyan em ê temam bikin înşela. Dikarî vana li cihên xwe yên rast kopî paste bikî?
# [[Special:PermanentLink/6291574|Bikarhêner:Wikihez/skrîpt/js/Gadget-citoid-helper.js]] --> [[Mediawiki:Gadget-citoid-helper.js]]
# Ya li jêr kopî bike qismê herî dawî ya AmûrênVeşartî li [[MediaWiki:Gadgets-definition]]:
## <code><nowiki>* citoid-helper[ResourceLoader|hidden|default|dependencies=mediawiki.util]|citoid-helper.js</nowiki></code>
--[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:58, 26 tîrmeh 2026 (UTC)
== [[MediaWiki:Gadget-start.js]] ==
Rojanekirin hewce ye. Min gelek tişt lê zêde kir lê ez niha test dikime. Piştre em bar bikin:
* [[Bikarhêner:Wikihez/Gadget-start.js]] --> [[MediaWiki:Gadget-start.js]]
* [[Bikarhêner:Wikihez/Gadget-start.css]] --> [[MediaWiki:Gadget-start.css]]
--[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 22:08, 17 tîrmeh 2026 (UTC)
:Min [[MediaWiki:Gadget-start/data.json|data.json]] çêkir ji bo ku bi hêsanî malûmatên heyî werin guhartin bêyî guhartina Javascriptê. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 19:49, 18 tîrmeh 2026 (UTC)
:Xeletiyên ku ji bîr nekim rast bikim:
:* Wextê min çavkanî "kitêb" hilbijart û bi destî tije kir xeletiyeke [https://ku.wiktionary.org/w/index.php?title=xezete&diff=prev&oldid=6265392 wisa] derket her kelîme hate lînkkirin.
:* <code>html("⠿")</code> ev ne lazim e.
:* textarea ji bo çavkaniyên jêgirtinan xaseten yên sernav hîn jî ne draggable e.
:* pêşdîtina zindî checkbox wextê tê rakirin, pêşdîtin winda nabe.
:* Butona mobîlê ya vekirina formê di moda tarî de belî nabe, tenê wekî qutiyeke tarî xuya dibe.
:* Metna hişyarkirinê di guhartina rûpelên heyî de lazim e baştir bikim.
:[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 23:51, 18 tîrmeh 2026 (UTC)
::Ev problem çêbûn, ez ê binêrim ka çi problemên din hene. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 14:15, 19 tîrmeh 2026 (UTC)
:::Çêke: Ji bo qismê çavkaniyê yek dikare API call û Kategorî:Çavkanî bi kar bîne ji bo ku şablon zêde bikî ji yên heyî. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 21:21, 19 tîrmeh 2026 (UTC)
::::Ev jî çêbû, min beşa çavkanî jî çêkir. Eger xeletî dernekeve û problema valahiya piştî etîketê ji bîr nekim, piştî rojanekirina amûrên linkify, û citoid em dikarin bar bikin. Ez ê ti tiştê nû îlawe nekim, zêde dirêj bû. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:14, 21 tîrmeh 2026 (UTC)
:::::Merheba @[[Bikarhêner:Bikarhêner|Bikarhêner]]. Dikarî wana bar bikî?
:::::* [[Bikarhêner:Wikihez/Gadget-start.js]] --> [[MediaWiki:Gadget-start.js]]
:::::* [[Bikarhêner:Wikihez/Gadget-start.css]] --> [[MediaWiki:Gadget-start.css]]
:::::* [[MediaWiki:Gadgets-definition]] wisa rojane bike:
:::::* start[ResourceLoader|default|package|dependencies=mediawiki.util,ext.gadget.StorageUtils,ext.gadget.citoid-helper]|start.js|start.css|start.js/data.json
:::::[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 09:39, 5 tebax 2026 (UTC)
{{şirove}} Dewama ''[[Special:PermanentLink/6333688|Gotûbêja bikarhêner:Rewiye tine#WF:Nû]]'' bila gotûbêja wî em spam nekin. :D
{{r|Ghybu}} dikarî [[Special:PermanentLink/6333689|vê htmlê]] binêrî claude rast fêm kiriye yan na? Daxîne û wek html qeyd bike. --[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 18:43, 14 tebax 2026 (UTC)
:Min seh wîkîyên din jî kir, li wîkiya fransî tiştekî wekî daxwaza min çêkirine (tiştên ku ne hewce ne wekî "tab" çêkirine an jî hatine vêşartin): [//fr.wiktionary.org/w/index.php?title=fdsdfdsf&action=edit&redlink=1]. Formata me yê berî jî bi vê lojîkê hatibû çêkirin, wekî de.wiktionary ([//de.wiktionary.org/w/index.php?title=sdfdsfsdfs&action=edit&preload=Vorlage:Formatvorlage_(Substantiv_vereinfacht)]) [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 19:01, 14 tebax 2026 (UTC)
::PS: Dîsa jî Claude min rind fêm kiriye :)) Feqet min got ku beşên Mane", "Bilêvkirin" û "Beşên din" cem hev (wekî "tab") ". Û dema ku tu terî di nav "Besên din" Hevmane, Jê, ... li wira werin dayîn. Wêne/Resim û Nimûne jî di nav beşa ("tab") "Mane" [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 19:17, 14 tebax 2026 (UTC)
::Erê ya fr.wikt min jî dîtibû jixwe fikrê tab min ji wan girtibû :D (feqat min li cem wan tenê tab-a maneyê dît yên din nedît çawa tê vekirin nizanim) Berê hemû beş piştî maneyê bibûn, dûre min sê Tab çêkir, Bingehîn+Lînkkirin+Bikaranîn. Niha lazim e Tabeke din çêkim. Ya ku claude çêkiriye bnr. [[Special:PermanentLink/6333698#L-7]] ne baş e bnr. [[Special:PermanentLink/6333703|qiyaskirinê li ser vê htmlê]] Êdî ez Claude abuse dikime ji ber ku Pro ye :D [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 19:26, 14 tebax 2026 (UTC)
:::Claude dibêje:
:::Good clarification — that's a real simplification, not just a relabel. Updated STEP_GROUPS from 5 tabs down to 3:
:::Mane — the definitions themselves, plus Wêne (image), now grouped in with it instead of sitting in a separate misc tab. Nimûne needed no change since it was already rendering inside each Mane sense block, not as its own step.
:::Bilêvkirin — unchanged, still just pronunciation.
:::Beşên din — everything else in one flat bucket: hevmane, jê, têkildar, herwiha binêre, formên alternatîv, dijmane, jornav, jêrnav, notên bikaranînê, bi alfabeyên din, dûnde, çavkanî, bêhtir bixwîne, tewandin, etîmolojî, zaravayên din, werger, and bnr-h — instead of being split across the old Bingehîn/Lînkkirin/Bikaranîn/Din tabs.
:::No DOM-order changes were needed this time — the fix from the blank-tab bug looks up the tab bar's position dynamically now, so it didn't matter that I regrouped which steps go where. Same two files, saved to your Wiki folder — worth another pass through all three tabs once you've pasted this in, same as last time. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 19:34, 14 tebax 2026 (UTC)
::::Mînak:
Ziman
---------------------------------------------
Cureyê rêzimanî (Navdêr)
Navdêr (hilbijêre) ┆ Cîns (hilbijêre) ┆ Jimar (hilbijêre)
- lêker -mê -yekjimar
- rengdêr -nêr -pirjimar
- ... -... -...
---------------------------------------------
Mane || Bilêvkirin || Beşên din
hilbijêre:
- mane - IPA - Hevmane
- nimûne - kîte - Dijmane
- wêne
Dema ku tu "Cureyê rêzimanî" dikî "Lêker" :
Cureyê rêzimanî (Lêker)
Lêker (hilbijêre) ┆ Cure (hilbijêre)
- navdêr -rehê niha
- rengdêr -rehê borî
- ... -...
---------------------------------------------
┆ : select/option ("tab" nîne, tê dîtin)<br>
|| : "tab"
-- [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 19:45, 14 tebax 2026 (UTC)
'''Sê-stûnî ("┆" = ne tab), li gorî Cureyê rêzimanî:'''
{| class="wikitable"
! Cureyê rêzimanî !! Stûna 2 !! Stûna 3 !! Têbînî
|-
| Navdêr / Serenav
| Cîns (hilbijêre ▾: mê / nêr / ... — tenê heke ziman zayendê rêzimanî hebe)
| '''Jimar''' (?) — pirs li jêr
| Qadên "Forma mê/nêr/pirjimar/yekjimar" niha jî li vir hene — ma ev di "Jimar"-ê de tên tevlihev kirin, an cuda dimînin?
|-
| Rengdêr
| (heman m/n/p/y forman ku Navdêr distîne)
| Sûperlatîv (sûp) / Komparatîv (komp)
| Ne li ser her du nîgaran hatiye behs kirin — ma sê-stûnî li vir jî tê bikaranîn?
|-
| Lêker
| '''Cure''' = Cureyê lêkerê (hilbijêre ▾: gerguhêz / negerguhêz / xwerû-... / pêkhatî-... / hevedudanî-... / biwêjî-... — 10 vebijêrk)
| Di heman stûnê de: Rehê dema niha / Rehê dema borî / Rehê dema bilanî (her sê qadên nivîsandinê ne, ne hilbijêrk in)
| Ma "Cure" her sê rehan di xwe de digire wek yek stûn, an her yek stûneke cuda ye?
|-
| Tîp (herf/sembol)
| Girdêk (gir) / Hûrek (hûr)
| —
| Ne behs kiriye
|-
| Her cureyek, li gorî zimên
| Transliterasyon (tr) / Transkrîpsiyon (ts)
| —
| Bi zimên ve girêdayî ye, ne bi cureyê rêzimanî ve
|-
| Her cureyek, tenê ziman=japonî
| Hanja / Translit. hanja
| —
| Ne bi cureyê rêzimanî ve girêdayî ye
|-
| Her cureyek
| '''Tercîhên pêşketî''' (kolapsî): form, formaalt, nekatcure, nekatcins, nekatçendterm, serlînkneke, nekatpalîndrom, neformtr
| —
| Vebijarkî, ji bo hemû cureyan
|}
'''Tabên jêrîn — Mane ‖ Bilêvkirin ‖ Beşên din ("||" = tab):'''
{| class="wikitable"
! Mane !! Bilêvkirin !! Beşên din (hemû 18 hêman)
|-
| mane, nimûne, wêne
| şablonên bilêvkirinê (mînak: IPA, kîte)
| tewandin, etîmolojî, bi zaravayên din, werger, jê, têkildar, herwiha binêre, formên alternatîv, hevmane, dijmane, jornav, jêrnav, notên bikaranînê, bi alfabeyên din, dûnde, çavkanî, bêhtir bixwîne, bnr-h
|}
'''Pirsên vekirî:'''
# "Jimar" (yekjimar/pirjimar) — qadeke ku nîşan dide têketî bi xwe yekjimar e an pirjimar e. Ev cuda ye ji "Forma yekjimar (y)"/"Forma pirjimar (p)" ya heyî (ku forma DÎN a kelîmeyê tomar dike). Herdu bimînin, an werin yek kirin?
# Ma sê-stûnî tenê ji bo Navdêr/Lêker e, an ji bo Rengdêr/Tîp jî heman mantiq derbas dibe?
# Di "Beşên din" de: dixwazî pêşî navnîşek/hilbijartinek nîşan bide (17 hêmanên din jî tê de), û qad tenê piştî hilbijartinê xuya bibin?
:Tu dikarî start.js ji Tercîh/ Amûran rakî û bi test.js li Amûran herî taliyê ye biceribînî. Claude ya li jor hazir kir, Jimar ez dikarim îzah bikim. Feqat bi min di tab-a maneyê de lazim e Bi zaravayên din (heta wek werger her car bila li rûpelan were zêdekirin) û werger jî hebe.--[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 20:18, 14 tebax 2026 (UTC)
:;Navdêr: Tenê "cîns" û "jimar" bes e. "Forma mê", "Forma nêr", ... nayê fêm kirin. Bi min wekî "Tercîhên pêşketî" bi navkî din veşartî çêke.
:;Lêker: "Cureyê lêkerê" nayê fêm kirin, bi min pêşta "geguhez/negerguhêz" were hilbijartin, paşê jî form "hevdudanî/pêkatî/..." ji ber ku her kes vana nizanî... Dîsa jî tu dizanî.
:Bi min beşên "Hevmane" û dijmane jî bike de nav beşa Mane ("tab") ji ber ku pirr tên xwestin.
:Şûnda Wêne jî Nimûne/jêgirtin...
:Herwiha hemû bi rengê şîn hatine çêkirin, nizanim beşên din (===) bi rengê gewr an reş çito dibe? [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 21:35, 14 tebax 2026 (UTC)
::Nimûne/jêgirtin, hevmane, Dijmane li binê her maneyê hene. ji ber ku wana bi maneyê ve girêdayî ne lazim e wisa bimîne feqat belkî şiklekî baştir bibînin. Hînbûna bikaranîna formeke nû bi qasî hînbûna koda wîkiyê zor e heqîqeten... [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 21:45, 14 tebax 2026 (UTC)
:::Min şaş fêm meke feqet te amûrek ji bo Wikihez çêkiriye :) Tu dixwazî ku hemû tiştên ku te çêkiriye tevlî vê Gadgetê bikî û bikarhênerên din jî bi kar bînin... Tu jî dizanî ku kesên ku tên vira çito peyv çêdikin: Ziman > Mane > Mînak > Hevmane > Dijmane ! Du Gadget çêke yek ji bo bikarhênerên ku hertim li vira ne, yekeke din jî ji bo bikarhênerên din (yên ku pirr nên vira).
:::Herwiha kesên ku hertim li vira ne bi Gadgetê gotar çênekirin, ''copy/paste'' dikin. [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 22:12, 14 tebax 2026 (UTC)
== [[Mediawiki:Gadget-QQ.js]] ==
Ev amûr di şikle Minerva de. Her daîm vê xeletiyê dide:
<syntaxhighlight lang="js">
TypeError: Cannot read properties of null (reading 'addEventListener') at css () at runScript () at Array.<anonymous> () at flushCssBuffer ()
</syntaxhighlight> [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 19:29, 18 tîrmeh 2026 (UTC)
:* [[Bikarhêner:Wikihez/skrîpt/js/Gadget-QQ.js]] --> [[Mediawiki:Gadget-QQ.js]]
:* [[Bikarhêner:Wikihez/Gadget-QQ.css]] --> [[Mediawiki:Gadget-QQ.css]]
:Ez dibêjim çêbû lê ka çend roj biceribînim. Tiştên ku hatin sererastkirin:
:# Google Books API Key dikarî zêde bikî, dixe cookies û di gerokê de dimîne. Berê bê API Key dixebitiya lê êdî mecbûr e ku API Key-a te hebe, bidestxistina wê ne zêde zor e lê dîsa jî tevlihev e.
:# Êdî di mobîlê de dixebite, heta di mobîlê de xweştir xuya dike.
:# Moda tarî
:# OOUI dewsa jquery.ui
:# Li qutiyê çi dixwazî zêde bikî, dikare li gorî îsm, sifet, fiîl bitewîne. Lê ji bo fiîl tenê dikare çend heb inflection bîne.
:# Butona paqij bike lê zêde kir.
:# Çend paqijiyên jêgirtinên Google Kitêbê niha hene.
:[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 23:38, 18 tîrmeh 2026 (UTC)
::Tewandina fiîlan û xeletiya modulê lazim e were rastkirin. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 14:40, 21 tîrmeh 2026 (UTC)
== [[MediaWiki:Gadget-wikt.add-examples.js]] ==
Min ev amûr hinek rojane kir feqat çend problem hene berî ku bar bikin.
Tiştên ku min guhart:
# Êdî li sayfeyên bi {{ş|maneid}} jî dixebite,
# Cihê di wîkîtekstê de yê ku jêgirtin were îlawekirin baştir bû,
# [[Mediawiki:Gadget-citoid-helper.js|citoid helper]] zêde kir ji bo ku bi hêsanî çavkanî bi riya doi, isbn an urlyê werin tijîkirin.
* [[Bikarhêner:Wikihez/Gadget-wikt.add-examples.css]] --> [[MediaWiki:Gadget-wikt.add-examples.css]]
* [[Bikarhêner:Wikihez/Gadget-wikt.add-examples.js]] --> [[MediaWiki:Gadget-wikt.add-examples.js]]
- --[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 00:50, 19 tîrmeh 2026 (UTC)
:Min "wikt." qismên cache kirinê ya wîkiya fransî bi [[MediaWiki:Gadget-StorageUtils.js]] guhartiye. loma ji bîr nekin wê amûrê li [[MediaWiki:Gadgets-definition]] zêde bikin. û navê amûrê jî biguhêrînin. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 09:15, 23 tîrmeh 2026 (UTC)
::Berê li ser WF:ceribandin dixebitî. niha naxebite. Divê were rastkirin. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 22:10, 7 tebax 2026 (UTC)
== Gadget-translation editor ==
* [[MediaWiki:Gadget-translation editor.js]]: divê formata en.wîktê were bikaranîn ji ber ku me gelek tercime ji en.wîktê kopî kir û ev js hîn nikare formata wekî li jêr bi kar bîne.
<syntaxhighlight lang="wikitext">
* {{Z|sh}}:
*: Kirîlî:
*: Latînî
</syntaxhighlight>
—[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:17, 16 tîrmeh 2026 (UTC)
== [[Mediawiki:Gadget-linkify.js]] ==
* ''rûpeleke'' wekî<syntaxhighlight lang="wikitext">[[rûpeleke]]</syntaxhighlight> lînk dike, bi regexê belkî dikare wisa bike <syntaxhighlight lang="wikitext">[[rûpel]]eke</syntaxhighlight>
—[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:17, 16 tîrmeh 2026 (UTC)
* Amûreke din wekî [[User:Wikihez/Gadget-linkify.js|linkify]] lazim e ku herfên mezin biçûk bike ji bo kurmancî.—[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:17, 16 tîrmeh 2026 (UTC)
:{{r|Bikarhêner}} Merheba bira, dikarî viya jî bar bikî?:
* [[Special:PermanentLink/6291974|linkify]] --> [[Mediawiki:Gadget-linkify.js]]
Spas--[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 11:42, 29 tîrmeh 2026 (UTC)
:Dûre [https://ku.wiktionary.org/wiki/MediaWiki:Gadget-start.js#L-283 li vir] wiktviLinkify bike kuLinkify xêra xwe [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 11:51, 29 tîrmeh 2026 (UTC)
::Min ji bîr kir lê zêde bikim niha nikare "Dİ" bike "di", xeletiyeke berbelav a di nivîsên kurdî de, herfên din ên wekî ll yan rr jî hewce ne werin zêdekirin. Dûre em zêde bikin. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 21:42, 29 tîrmeh 2026 (UTC)
:::Min nû ferq kir, sayfeyên ku hîn nehatine çêkirin wîkîlînk nake. Problemeke mezin e divê were rastkirin. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 18:15, 30 tîrmeh 2026 (UTC)
::::Na, lînk dike, tiştekî din heye... [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 10:49, 31 tîrmeh 2026 (UTC)
== Amûra manayê ==
Amûreke din ji bo nivîsina maneyê wekî Nimûne zêde bike lazim e [https://ku.wiktionary.org/w/index.php?title=Bikarh%C3%AAner:Wikihez/test.js&oldid=6276876 js] [https://ku.wiktionary.org/w/index.php?title=%C5%9Eablon:ceribandin2&oldid=6265629 şablon] [https://ku.wiktionary.org/w/index.php?title=Bikarh%C3%AAner:Wikihez/common.css&oldid=6265642 css] --[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 09:12, 23 tîrmeh 2026 (UTC)
== [[MediaWiki:Gadget-jeder.js]] ==
@[[Bikarhêner:Ghybu|Ghybu]] Çavkaniyên jêderê di moda pêşdîtinê de jêderê vedişêre, ew jî min gelek eciz dike wextê çavkanî zêde dikim. Min ji Claude pirsî û kodan nîşanî wê da, wisa cewab da:
Yes — and this file actually explains the whole thing precisely, better than my earlier guess about extract-stripping.
What's happening: the CSS rule
<syntaxhighlight lang="css">
.jeder{
display:none;
}
</syntaxhighlight>
hides every citation by default, *unconditionally*. The only thing that ever makes it visible again is the gadget's JS: it finds each `.jeder`, builds the short "`— (year, author, +)`" summary from the `.j-pewist` fields, and either reveals the short version or — for citations with no `.j-pewist` fields — explicitly sets `display:inline` on the original.
So visibility of citations depends entirely on this JS running. In the normal article view (Image 1) it runs, so you see the collapsed "`(1918, E. Rehmî Ji Mala Hekariyan, Amadekar: M. E. Bozarslan, +)`" form. In whatever generated Image 2 — a hover-preview/extract/API render — gadget JS doesn't execute, so nothing ever removes the `display:none`, and the citation vanishes completely rather than degrading to "still visible, just not collapsed."
<b>The fix:</b> flip the default so the *un-collapsed* state is the safe fallback, and let JS do the hiding only after it successfully builds the short version. That way, any context without JS shows the full citation instead of nothing.
CSS — remove the blanket hide:
<syntaxhighlight lang="css">
.jeder {
/* intentionally no display:none here — see Gadget-... .js */
}
</syntaxhighlight>
JS — do the hiding from script, after the short form exists:
{{veşêre-ser}}
<syntaxhighlight lang="js">
// Ji bo şablonên [[Şablon:jêder]] hatiye nivîsandin.
// Parametreyên ku di navbera "<span class="j-pewist">...</span>" an "{{j-pêwîst|...}}" de ne venaşêre.
$(function() {
function nivisaKurtTevliBike(sund, nivisKurt) {
var zede = $('<a>+</a>')
.addClass('click')
.attr('href', '#')
.attr('title', 'zêdetir')
.css('font-weight', 'bold');
var kurt = $(' <a>↩</a>')
.addClass('click-kurt')
.attr('href', '#')
.attr('title', 'veşêre')
.css('font-weight', 'bold');
$('<span>' + nivisKurt + '</span>')
.append(zede).append(')')
.addClass('jeder-kurt')
.css('font-size', '0.85em')
.insertAfter(sund);
sund.append(' ').append(kurt);
// Only hide the full citation once the short summary actually exists.
// If this script never runs (no-JS clients, hover-preview extracts,
// action=render, etc.), the full citation stays visible instead of
// silently disappearing.
sund.css('display', 'none');
}
function vesere() {
$('.jeder').each(function() {
var elmTab = $(this).find('.j-pewist').clone();
if (elmTab.length) {
var elm = '';
for (var i = elmTab.length - 1; i >= 0; i--) {
elm = elmTab.eq(i).html() + ', ' + elm;
}
var nivisKurt = ' — (' + elm;
nivisaKurtTevliBike($(this), nivisKurt);
}
// else: no j-pewist fields to shorten — leave the full citation
// as it already renders (visible), nothing to do.
});
}
vesere();
$(".click").click(function(e) {
e.preventDefault();
$(this).parent('.jeder-kurt').css('display', 'none');
$(this).parent('.jeder-kurt').prev().css('display', 'inline');
});
$(".click-kurt").click(function(e) {
e.preventDefault();
$(this).parent('.jeder').css('display', 'none');
$(this).parent('.jeder').next().css('display', 'inline');
});
});
</syntaxhighlight>
Net effect:
- JS-enabled readers (normal article view): identical experience to today — collapsed short form with `+`/`↩` toggle.
- No-JS contexts (previews, extracts, screen readers before JS loads, print, etc.): full citation is shown instead of nothing — a real regression fix rather than a cosmetic one.
One caveat worth being upfront about: this fixes it *if* the preview context renders the gadget's HTML/CSS but doesn't execute gadget JS (which is the far more common case, and what this code strongly suggests is happening). If Image 2 instead comes from a pipeline that strips the `.jeder`/`.jegirtin-text` elements out of the HTML entirely before this CSS/JS even gets a chance to apply, no on-wiki CSS/JS change can help — that'd need the extract-generation config changed instead. Given what this gadget file shows, though, I'd bet on the CSS-hide explanation.
{{veşêre-bin}}
Em dûre biceribînin eger xeletî tinebe, vî tiştî jî rast bikin. --[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 20:00, 23 tîrmeh 2026 (UTC)
:Ez APIya MediaWiki rind nizanim belkî Claude dizane:) Em nikarin bibêjin dema ku moda "''action=edit''" e fonksiyona <code>function vesere()</code> bi kar meyîne. [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 15:57, 24 tîrmeh 2026 (UTC)
::Na, di moda "edît"-ê de <code>var elmTab = null</code>... [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 16:13, 24 tîrmeh 2026 (UTC)
?:
<syntaxhighlight lang="js">
if (
mw.config.get('wgAction') === 'edit' ||
mw.config.get('wgAction') === 'submit'
){
var elmTab = [];
} else {
var elmTab = $(this).find('.j-pewist').clone();
}
</syntaxhighlight>
--[[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 16:31, 24 tîrmeh 2026 (UTC)
:Ez jî nizanim Claude çiqas ji mediawiki fêm dike lê heta niha ti tişt nîne ku min jê pirs kir û nikaribû çêke, bila wekî reklam nebe feqat Claude mikemmel e, dibêjim "li vir çima xeletiyeke wisa derdikeve" di dosyeya 2000 rêzî de diçe tiştê xelet tenê rast dike tiştekî din naguherîne. Chatgpt û aistudio qet wisa nakin, eynî dosyeyê deh cara dinivîsin, deh netîceyên cuda derdikevin :D
:Em dikarin vê amûrê wextê edit û submitê neaktîv bikin wekî <syntaxhighlight lang="js">if (!(action === "edit" || action === "submit")) {
:return;</syntaxhighlight> lê wê demê display:none wê çibe nizanim. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 18:23, 24 tîrmeh 2026 (UTC)
::display:none ne hewce ye ma jixwe di nav kodê [https://ku.wiktionary.org/w/index.php?title=MediaWiki:Gadget-jeder.js&oldid=6069025#L-49 L-49] de inline/none heye? [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 18:53, 24 tîrmeh 2026 (UTC)
:Min bi vî şiklî [https://ku.wiktionary.org/w/index.php?title=Bikarh%C3%AAner:Wikihez/vector-2022.js&diff=prev&oldid=6290816#L-28] ceriband feqat nexebitî. "display:none" di pêşdîtinê de dixebite feqat js naşixule. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 14:43, 25 tîrmeh 2026 (UTC)
::Kodên JSê pir hez nakim (pêşta hukurina APIya MWyê hewce bû) dîsa jî ez ê seh bikim :) [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 16:49, 27 tîrmeh 2026 (UTC)
:::Ez niha bi vî şiklî [https://ku.wiktionary.org/w/index.php?title=Bikarh%C3%AAner:Wikihez/test.js&oldid=6290820] [https://ku.wiktionary.org/w/index.php?title=Bikarh%C3%AAner:Wikihez/common.css&oldid=6290821#L-8] bi kar tînim ti problem nîne. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 17:09, 27 tîrmeh 2026 (UTC)
== [[MediaWiki:Gadget-PagePreviews.js]] ==
Ez dibêjim em vê amûrê jî çêkin [[:en:MediaWiki:Gadget-PagePreviews.js]] --[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 10:56, 3 tebax 2026 (UTC)
= Moda tarî =
== [[Şablon:wîkîpediya]] ==
Rengê tarî de xirab e.--[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 19:36, 4 tebax 2026 (UTC)
= Bot =
Karên ku bi botê werin çêkirin ji kerema xwe li vir binivîsin.
== Kategorî:Biwêj ==
[[:Kategorî:Biwêj]] divê were paqijkirin, lîsteya madeyên {{ş|biwêj}} çêke, yên ku tê de bûn, kirin, man hene filtre bike yên din bi destî tê çêkirin.—[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:17, 16 tîrmeh 2026 (UTC)
== Jêgirtin ==
Xistina jêgirtinên beşa [https://ku.wiktionary.org/w/index.php?search=insource%3A%2F%3D+*Ji+%5BWw%5D%C3%AAjey%C3%AA+*%3D%2F&title=Taybet%3AL%C3%AAger%C3%AEn&profile=advanced&fulltext=1&ns0=1&searchToken=8rh0bmw8dccsi7aynl6zli8uf ji wêjeyê] li beşa maneyê. —[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:17, 16 tîrmeh 2026 (UTC)
== Bota Toolforgeê ==
Botekî Toolforgeê lazim e ji bo ku xeletiyên biçûk wekî şablonên bi navên îngilîzî werin kurdîkirin yan jî valahiya beşan rast bike û hwd.—[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:17, 16 tîrmeh 2026 (UTC)
:Min [[Bikarhêner:Wikihez/skrîpt/py/kuwiktkozmetik.py|paqijiyen kozmetîk]] hazir kir feqat hîn navên şablonan naguhêre. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 20:05, 4 tebax 2026 (UTC)
== Updatew ==
Bota [[Bikarhêner:Wikihez/skrîpt/py/updateW.py|updateW]] divê were rojanekirin. Yan jî yekî nû were çêkirin. Şablonên {{ş|W}} di beşa tercimeyan de sererast dike û zimanan rêz dike. Ya niha xeletiya navê zimanî dide.—[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:17, 16 tîrmeh 2026 (UTC)
== sihir --> sêhr ==
Tercimeyên ''[[sêhr]]'' hemû dibêje ''sihir'' loma bi botê lazim e kirin ''sêhr''. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 17:43, 18 tîrmeh 2026 (UTC)
:Sihirbaz --> sêhrbaz [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 18:07, 18 tîrmeh 2026 (UTC)
== Tercimeyên dîroknas ==
Li tercimeyên [[dîroknas]], hevmaneyên wê hewce ye were îlawekirin. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 18:44, 18 tîrmeh 2026 (UTC)
== Mewlûd ==
Sererastkirina jêgirtinên mewlûdê [https://ku.wiktionary.org/w/index.php?search=insource%3A%2Fw%5C%3AMela+His%C3%AAn%C3%AA+Batey%C3%AE%2F&title=Taybet%3AL%C3%AAger%C3%AEn&ns0=1&searchToken=8m0tguy3sqt7edr4sg0u8hedo] wekî [https://ku.wiktionary.org/w/index.php?title=dax%C3%AEdar&curid=284303&diff=6265851&oldid=6142285] [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 09:43, 20 tîrmeh 2026 (UTC)
6h70eotoafds3ydg5uxe4wh7arf1n8q
6333746
6333745
2026-08-14T22:18:07Z
Ghybu
1393
/* MediaWiki:Gadget-start.js */
6333746
wikitext
text/x-wiki
{{/ser}}
= Karên ferhengî =
== Mane ==
* [[:Kategorî:Madeyên bê beşa mane]]
** [[:Kategorî:Madeyên bê beşa mane bi kurmancî]]
Li ser van rûpelan ev made hene ku maneyan wan nehatine nivîsin û divê werin nivîsin. —[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:17, 16 tîrmeh 2026 (UTC)
== Etîmolojî ==
*[[:Kategorî:Daxwazên etîmolojiyê]]
**[[:Kategorî:Daxwazên etîmolojiyê bi kurmancî]]
Li ser van rûpelan ev made hene ku etîmolojiya wan hîn nehatine nivîsin. Ji bo alîkariyê binêre [[WF:Etîmolojî]] —[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:17, 16 tîrmeh 2026 (UTC)
== Cureyê rêzimanî ==
* [[:Kategorî:Gotarên bê kategoriya rêzimanî]]
* [[:Kategorî:Gotarên bê kategoriya rêzimanî bi kurmancî]]
Li ser van rûpelan ev made hene ku cureyên wan yên rêzimanî hîn nehatine nivîsin. Ji bo alîkariyê binêre [[Alîkarî:Cureyên peyvan]] —[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:17, 16 tîrmeh 2026 (UTC)
== Kontrol ==
* [[:Kategorî:Kontrol]]
** [[:Kategorî:Kontrola maneyê]]
Ev madde bi botê hatine çêkirin, yek bi yek divê werin kontrolkirin. —[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:17, 16 tîrmeh 2026 (UTC)
= Şablon =
== IPA ==
* {{ş|IPA}} divê [[Modul:IPA]] bi kar bîne. —[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:17, 16 tîrmeh 2026 (UTC)
== Deng ==
Kurdîkirina belgekirina {{ş|deng}} lazim e.--[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 00:06, 19 tîrmeh 2026 (UTC)
= Modul =
== Modul:form of/templates ==
* [[Modul:form of/templates]]: Divê ev modul were rojanekirin û xeletiyên berê wekî ([[hevalê]]) werin rastkirin. —[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:17, 16 tîrmeh 2026 (UTC)
*:Merheba @[[Bikarhêner:Ghybu|Ghybu]] Te gotibû di vê modulê de xeletî hene, jkx tu dikarî li vir binivîsî çi kêmasî hene, daku wextê rojane dikim ez ji bîr nekim? [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:16, 21 tîrmeh 2026 (UTC)
*::Silav. Nizanim ji bîra min çûye... Herwiha ji bo çêkirina formên navdêran zanînên cîns û tîpa dawî bes e:
*::* (-ê, mê) => çemandî, bangkirin
*::* (-ê, nêr) => îzafe
*::* (-ê, mê û nêr) => îzafe (nêr), bangkirin (mê), çemandî (mê)
*::* (-a) => îzafe (mê)
*::* (-ekî) => îzafe û çemandî (nêr, nebinavkirî)
*::* (-eke) = > îzafe (mê, nebinavkirî)
*::* ...
*:: <code>if find(mw.title.getCurrentTitle().subpageText, 'ekî$') then ... end</code>
*::<code><nowiki>{{ku-tewîn-navForm|<navdêr>|<zayend>}</nowiki></code>
*::Tablo û nivîs di yekcarî de tên çêkirin...
*::Feqet problem lêzêdekirina mînakan e. [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 17:34, 21 tîrmeh 2026 (UTC)
*:::Lêzêdekirina kîjan nimûneyan? Ev koda js ji bo çi ye? Qisûrê nenêre min fêm nekir :/ [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 18:13, 21 tîrmeh 2026 (UTC)
*::::Li vira ([[hevalê#Formeke navdêrê]]) di bin maneyên 1. û 2. mînak nayên tevlî kirin :) [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 18:18, 21 tîrmeh 2026 (UTC)
*:::::Ev tercîh e, ne mecbûrî ye, em dikarin [https://ku.wiktionary.org/w/index.php?title=heval%C3%AA&diff=prev&oldid=6276350 wisa] bikin. Wekî din? [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 18:29, 21 tîrmeh 2026 (UTC)
*::::::Min li jor tênê got ku tenê parametreyên "navdêr" û "zayend" hewce nee. Bi '''[//ku.wiktionary.org/w/index.php?title=heval%C3%AA&curid=969734&diff=6276353&oldid=6276350 vî]''' awayî jî tê çêkirin. Parametreyên din ne hewce ne. [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 18:38, 21 tîrmeh 2026 (UTC)
*:::::::Ji bo wê şabloneke din lazim e, bila ev şablon wekî îngilîzî bimîne em ji bo kurmancî yekî din çêkin. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 18:42, 21 tîrmeh 2026 (UTC)
*::::::::[https://ku.wiktionary.org/w/index.php?title=heval%C3%AA&oldid=6276885 wisa] çawa ye? Bi min nivîsîna nimûneyan zêde ne lazim e ji ber ku ti kes serê xwe pê naêşîne. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 09:46, 23 tîrmeh 2026 (UTC)
*:::::::::@[[Bikarhêner:Ghybu|Ghybu]] Vê şablonê bi kar bînin an na? Navê şablonê kê çi be? [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 19:07, 24 tîrmeh 2026 (UTC)
== Modul:columns ==
* [[Modul:columns]] were rojanekirin û {{ş|kol3}} bila lînka ''nîşan bide'' deyne beriya sernavê, kolê di qutiya rengî de bila nebe. —[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:17, 16 tîrmeh 2026 (UTC)
== Modul:etymon ==
* [[Modul:etymon kevn]]: Rojanekirin hewce ye. —[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:17, 16 tîrmeh 2026 (UTC)
== [[Modul:ziman/code to canonical name]] ==
Belgekirina skrîptê û js divê were rastkirin. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 09:31, 22 tîrmeh 2026 (UTC)
:* [[MediaWiki:UpdateLanguageNameAndCode.js]]
:[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 09:50, 22 tîrmeh 2026 (UTC)
::* [[Modul:ziman/print]]
::[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 09:52, 22 tîrmeh 2026 (UTC)
:::*[[Modul:ziman/şablon]]
:::[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 09:56, 22 tîrmeh 2026 (UTC)
::::* [[MediaWiki:Gadget-translation editor.js/ziman.json]]
::::[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 11:06, 22 tîrmeh 2026 (UTC)
== [[Modul:quote]] ==
Piştî ev modul hate hazirkirin, lazim e navên jegirtinan werin rastkirin û li hemûyan {{param|jêgirtin}} were zêdekirin. Bnr. [[Gotûbêja şablonê:Jêgirtin/Ehmedê Xanî/Mem û Zîn]] [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 22:27, 5 tebax 2026 (UTC)
::Ev modul hema bêje hazir e. Hûn li ser van madeyan çi difikirin:
# {{para|tarîx}} lazim e full date be eger na, lazim e {{para|sal}} were bikaranîn. Feqat "'''2021''' kanûna pêşîn 23" bi vî şiklî bi min ne problem e çnkî derdê en.wikt "attestation" e delîla herî pêşî jî sal e.
#: {{demo|sep=wisa xuya dibe<br>|<nowiki>{{jêder-kitêb/ceribandin|en
|tarîx=23 December 2021|nivîskar=Harry Hobbs; George Williams|sernav=Micronations and the Search for Sovereignty|url=https://www.cambridge.org/core/books/micronations-and-the-search-for-sovereignty/B0414A3A322695D9EE71E4CDDFDA06DE|weşanxane=Cambridge University Press|rûpel=155|isbn=978-1-009-15012-5|jêgirtin=jêgirtin.|t=-}}</nowiki>}}
#{{para|amadekar}}/{{para|edîtor}}/{{para|terciman}} bi şiklê edîtoriya, amadekariya, tercimekirina
#: {{demo|sep=dide<br>|<nowiki>{{jêder-kitêb/ceribandin|en
|sernav=Medical Surgical Nursing|serî=Juta's Manual of Nursing|cildê-seriyê=volume 4|edîtor=Sophie Mataniele Mogotlane; Joyce Mokoena; Motshedisi Eunice Chauke; Anne Young|sal=2005|weşanxane=Juta Academic|isbn=978-0702171840|rûpel=!12-29|jêgirtin=jêgirtin|t=-}}</nowiki>}}
--[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 13:09, 10 tebax 2026 (UTC)
:@[[Bikarhêner:Bikarhêner|Bikarhêner]] û @[[Bikarhêner:Ghybu|Ghybu]] Hîn gelek tişt hene divê îzah bikin û fikrê we pirs bikim, feqat îzahkirin pir zor e, em dest bi bikaranînê bikin û dûre tiştên ku hûn naxwazin em dikarin biguherînîn, dibe? [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 13:11, 10 tebax 2026 (UTC)
::Dibe, piştî çêbû, em di praktîkê de bibînin ku çawa ye. -- [[Bikarhêner:Bikarhêner|Bikarhêner]] ([[Gotûbêja bikarhêner:Bikarhêner|gotûbêj]]) 18:05, 10 tebax 2026 (UTC)
= Javascript =
== [[Mediawiki:Gadget-citoid-helper.js]] ==
Ji bo bi citoidê kopîkirina malûmatên çavkaniyan amûreke wisa lazim e. Xisûsen ji ber ku bi çend amûrên din dikare were bikaranîn.
Feqat çend problem hene, şablonên me de kêmasiya parametreyan gelek in û xerîteyên citoidê hîn nehatine çêkirin. Wana sererast bikin dûre vê amûrê çêkin, piştre [[MediaWiki:Gadget-start.js|start.js]] û [[MediaWiki:Gadget-wikt.add-examples.js|add examples.js]] were rojanekirin.
- --[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 00:04, 19 tîrmeh 2026 (UTC)
:Merheba @[[Bikarhêner:Bikarhêner|Bikarhêner]], ez dibêjim karê Modul:quote zêde wext bistîne, bila em dest bi bikaranîna van amûran bikin dûre kêmasiyan em ê temam bikin înşela. Dikarî vana li cihên xwe yên rast kopî paste bikî?
# [[Special:PermanentLink/6291574|Bikarhêner:Wikihez/skrîpt/js/Gadget-citoid-helper.js]] --> [[Mediawiki:Gadget-citoid-helper.js]]
# Ya li jêr kopî bike qismê herî dawî ya AmûrênVeşartî li [[MediaWiki:Gadgets-definition]]:
## <code><nowiki>* citoid-helper[ResourceLoader|hidden|default|dependencies=mediawiki.util]|citoid-helper.js</nowiki></code>
--[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:58, 26 tîrmeh 2026 (UTC)
== [[MediaWiki:Gadget-start.js]] ==
Rojanekirin hewce ye. Min gelek tişt lê zêde kir lê ez niha test dikime. Piştre em bar bikin:
* [[Bikarhêner:Wikihez/Gadget-start.js]] --> [[MediaWiki:Gadget-start.js]]
* [[Bikarhêner:Wikihez/Gadget-start.css]] --> [[MediaWiki:Gadget-start.css]]
--[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 22:08, 17 tîrmeh 2026 (UTC)
:Min [[MediaWiki:Gadget-start/data.json|data.json]] çêkir ji bo ku bi hêsanî malûmatên heyî werin guhartin bêyî guhartina Javascriptê. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 19:49, 18 tîrmeh 2026 (UTC)
:Xeletiyên ku ji bîr nekim rast bikim:
:* Wextê min çavkanî "kitêb" hilbijart û bi destî tije kir xeletiyeke [https://ku.wiktionary.org/w/index.php?title=xezete&diff=prev&oldid=6265392 wisa] derket her kelîme hate lînkkirin.
:* <code>html("⠿")</code> ev ne lazim e.
:* textarea ji bo çavkaniyên jêgirtinan xaseten yên sernav hîn jî ne draggable e.
:* pêşdîtina zindî checkbox wextê tê rakirin, pêşdîtin winda nabe.
:* Butona mobîlê ya vekirina formê di moda tarî de belî nabe, tenê wekî qutiyeke tarî xuya dibe.
:* Metna hişyarkirinê di guhartina rûpelên heyî de lazim e baştir bikim.
:[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 23:51, 18 tîrmeh 2026 (UTC)
::Ev problem çêbûn, ez ê binêrim ka çi problemên din hene. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 14:15, 19 tîrmeh 2026 (UTC)
:::Çêke: Ji bo qismê çavkaniyê yek dikare API call û Kategorî:Çavkanî bi kar bîne ji bo ku şablon zêde bikî ji yên heyî. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 21:21, 19 tîrmeh 2026 (UTC)
::::Ev jî çêbû, min beşa çavkanî jî çêkir. Eger xeletî dernekeve û problema valahiya piştî etîketê ji bîr nekim, piştî rojanekirina amûrên linkify, û citoid em dikarin bar bikin. Ez ê ti tiştê nû îlawe nekim, zêde dirêj bû. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:14, 21 tîrmeh 2026 (UTC)
:::::Merheba @[[Bikarhêner:Bikarhêner|Bikarhêner]]. Dikarî wana bar bikî?
:::::* [[Bikarhêner:Wikihez/Gadget-start.js]] --> [[MediaWiki:Gadget-start.js]]
:::::* [[Bikarhêner:Wikihez/Gadget-start.css]] --> [[MediaWiki:Gadget-start.css]]
:::::* [[MediaWiki:Gadgets-definition]] wisa rojane bike:
:::::* start[ResourceLoader|default|package|dependencies=mediawiki.util,ext.gadget.StorageUtils,ext.gadget.citoid-helper]|start.js|start.css|start.js/data.json
:::::[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 09:39, 5 tebax 2026 (UTC)
{{şirove}} Dewama ''[[Special:PermanentLink/6333688|Gotûbêja bikarhêner:Rewiye tine#WF:Nû]]'' bila gotûbêja wî em spam nekin. :D
{{r|Ghybu}} dikarî [[Special:PermanentLink/6333689|vê htmlê]] binêrî claude rast fêm kiriye yan na? Daxîne û wek html qeyd bike. --[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 18:43, 14 tebax 2026 (UTC)
:Min seh wîkîyên din jî kir, li wîkiya fransî tiştekî wekî daxwaza min çêkirine (tiştên ku ne hewce ne wekî "tab" çêkirine an jî hatine vêşartin): [//fr.wiktionary.org/w/index.php?title=fdsdfdsf&action=edit&redlink=1]. Formata me yê berî jî bi vê lojîkê hatibû çêkirin, wekî de.wiktionary ([//de.wiktionary.org/w/index.php?title=sdfdsfsdfs&action=edit&preload=Vorlage:Formatvorlage_(Substantiv_vereinfacht)]) [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 19:01, 14 tebax 2026 (UTC)
::PS: Dîsa jî Claude min rind fêm kiriye :)) Feqet min got ku beşên Mane", "Bilêvkirin" û "Beşên din" cem hev (wekî "tab") ". Û dema ku tu terî di nav "Besên din" Hevmane, Jê, ... li wira werin dayîn. Wêne/Resim û Nimûne jî di nav beşa ("tab") "Mane" [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 19:17, 14 tebax 2026 (UTC)
::Erê ya fr.wikt min jî dîtibû jixwe fikrê tab min ji wan girtibû :D (feqat min li cem wan tenê tab-a maneyê dît yên din nedît çawa tê vekirin nizanim) Berê hemû beş piştî maneyê bibûn, dûre min sê Tab çêkir, Bingehîn+Lînkkirin+Bikaranîn. Niha lazim e Tabeke din çêkim. Ya ku claude çêkiriye bnr. [[Special:PermanentLink/6333698#L-7]] ne baş e bnr. [[Special:PermanentLink/6333703|qiyaskirinê li ser vê htmlê]] Êdî ez Claude abuse dikime ji ber ku Pro ye :D [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 19:26, 14 tebax 2026 (UTC)
:::Claude dibêje:
:::Good clarification — that's a real simplification, not just a relabel. Updated STEP_GROUPS from 5 tabs down to 3:
:::Mane — the definitions themselves, plus Wêne (image), now grouped in with it instead of sitting in a separate misc tab. Nimûne needed no change since it was already rendering inside each Mane sense block, not as its own step.
:::Bilêvkirin — unchanged, still just pronunciation.
:::Beşên din — everything else in one flat bucket: hevmane, jê, têkildar, herwiha binêre, formên alternatîv, dijmane, jornav, jêrnav, notên bikaranînê, bi alfabeyên din, dûnde, çavkanî, bêhtir bixwîne, tewandin, etîmolojî, zaravayên din, werger, and bnr-h — instead of being split across the old Bingehîn/Lînkkirin/Bikaranîn/Din tabs.
:::No DOM-order changes were needed this time — the fix from the blank-tab bug looks up the tab bar's position dynamically now, so it didn't matter that I regrouped which steps go where. Same two files, saved to your Wiki folder — worth another pass through all three tabs once you've pasted this in, same as last time. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 19:34, 14 tebax 2026 (UTC)
::::Mînak:
Ziman
---------------------------------------------
Cureyê rêzimanî (Navdêr)
Navdêr (hilbijêre) ┆ Cîns (hilbijêre) ┆ Jimar (hilbijêre)
- lêker -mê -yekjimar
- rengdêr -nêr -pirjimar
- ... -... -...
---------------------------------------------
Mane || Bilêvkirin || Beşên din
hilbijêre:
- mane - IPA - Hevmane
- nimûne - kîte - Dijmane
- wêne
Dema ku tu "Cureyê rêzimanî" dikî "Lêker" :
Cureyê rêzimanî (Lêker)
Lêker (hilbijêre) ┆ Cure (hilbijêre)
- navdêr -rehê niha
- rengdêr -rehê borî
- ... -...
---------------------------------------------
┆ : select/option ("tab" nîne, tê dîtin)<br>
|| : "tab"
-- [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 19:45, 14 tebax 2026 (UTC)
'''Sê-stûnî ("┆" = ne tab), li gorî Cureyê rêzimanî:'''
{| class="wikitable"
! Cureyê rêzimanî !! Stûna 2 !! Stûna 3 !! Têbînî
|-
| Navdêr / Serenav
| Cîns (hilbijêre ▾: mê / nêr / ... — tenê heke ziman zayendê rêzimanî hebe)
| '''Jimar''' (?) — pirs li jêr
| Qadên "Forma mê/nêr/pirjimar/yekjimar" niha jî li vir hene — ma ev di "Jimar"-ê de tên tevlihev kirin, an cuda dimînin?
|-
| Rengdêr
| (heman m/n/p/y forman ku Navdêr distîne)
| Sûperlatîv (sûp) / Komparatîv (komp)
| Ne li ser her du nîgaran hatiye behs kirin — ma sê-stûnî li vir jî tê bikaranîn?
|-
| Lêker
| '''Cure''' = Cureyê lêkerê (hilbijêre ▾: gerguhêz / negerguhêz / xwerû-... / pêkhatî-... / hevedudanî-... / biwêjî-... — 10 vebijêrk)
| Di heman stûnê de: Rehê dema niha / Rehê dema borî / Rehê dema bilanî (her sê qadên nivîsandinê ne, ne hilbijêrk in)
| Ma "Cure" her sê rehan di xwe de digire wek yek stûn, an her yek stûneke cuda ye?
|-
| Tîp (herf/sembol)
| Girdêk (gir) / Hûrek (hûr)
| —
| Ne behs kiriye
|-
| Her cureyek, li gorî zimên
| Transliterasyon (tr) / Transkrîpsiyon (ts)
| —
| Bi zimên ve girêdayî ye, ne bi cureyê rêzimanî ve
|-
| Her cureyek, tenê ziman=japonî
| Hanja / Translit. hanja
| —
| Ne bi cureyê rêzimanî ve girêdayî ye
|-
| Her cureyek
| '''Tercîhên pêşketî''' (kolapsî): form, formaalt, nekatcure, nekatcins, nekatçendterm, serlînkneke, nekatpalîndrom, neformtr
| —
| Vebijarkî, ji bo hemû cureyan
|}
'''Tabên jêrîn — Mane ‖ Bilêvkirin ‖ Beşên din ("||" = tab):'''
{| class="wikitable"
! Mane !! Bilêvkirin !! Beşên din (hemû 18 hêman)
|-
| mane, nimûne, wêne
| şablonên bilêvkirinê (mînak: IPA, kîte)
| tewandin, etîmolojî, bi zaravayên din, werger, jê, têkildar, herwiha binêre, formên alternatîv, hevmane, dijmane, jornav, jêrnav, notên bikaranînê, bi alfabeyên din, dûnde, çavkanî, bêhtir bixwîne, bnr-h
|}
'''Pirsên vekirî:'''
# "Jimar" (yekjimar/pirjimar) — qadeke ku nîşan dide têketî bi xwe yekjimar e an pirjimar e. Ev cuda ye ji "Forma yekjimar (y)"/"Forma pirjimar (p)" ya heyî (ku forma DÎN a kelîmeyê tomar dike). Herdu bimînin, an werin yek kirin?
# Ma sê-stûnî tenê ji bo Navdêr/Lêker e, an ji bo Rengdêr/Tîp jî heman mantiq derbas dibe?
# Di "Beşên din" de: dixwazî pêşî navnîşek/hilbijartinek nîşan bide (17 hêmanên din jî tê de), û qad tenê piştî hilbijartinê xuya bibin?
:Tu dikarî start.js ji Tercîh/ Amûran rakî û bi test.js li Amûran herî taliyê ye biceribînî. Claude ya li jor hazir kir, Jimar ez dikarim îzah bikim. Feqat bi min di tab-a maneyê de lazim e Bi zaravayên din (heta wek werger her car bila li rûpelan were zêdekirin) û werger jî hebe.--[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 20:18, 14 tebax 2026 (UTC)
:;Navdêr: Tenê "cîns" û "jimar" bes e. "Forma mê", "Forma nêr", ... nayê fêm kirin. Bi min wekî "Tercîhên pêşketî" bi navkî din veşartî çêke.
:;Lêker: "Cureyê lêkerê" nayê fêm kirin, bi min pêşta "geguhez/negerguhêz" were hilbijartin, paşê jî form "hevdudanî/pêkatî/..." ji ber ku her kes vana nizanî... Dîsa jî tu dizanî.
:Bi min beşên "Hevmane" û dijmane jî bike de nav beşa Mane ("tab") ji ber ku pirr tên xwestin.
:Şûnda Wêne jî Nimûne/jêgirtin...
:Herwiha hemû bi rengê şîn hatine çêkirin, nizanim beşên din (===) bi rengê gewr an reş çito dibe? [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 21:35, 14 tebax 2026 (UTC)
::Nimûne/jêgirtin, hevmane, Dijmane li binê her maneyê hene. ji ber ku wana bi maneyê ve girêdayî ne lazim e wisa bimîne feqat belkî şiklekî baştir bibînin. Hînbûna bikaranîna formeke nû bi qasî hînbûna koda wîkiyê zor e heqîqeten... [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 21:45, 14 tebax 2026 (UTC)
:::Min şaş fêm meke feqet te amûrek ji bo Wikihez çêkiriye :) Tu dixwazî ku hemû tiştên ku te çêkiriye tevlî vê Gadgetê bikî û bikarhênerên din jî bi kar bînin... Tu jî dizanî ku kesên ku tên vira çito peyv çêdikin: Ziman > Mane > Mînak > Hevmane > Dijmane ! Du Gadget çêke yek ji bo bikarhênerên ku hertim li vira ne, yekeke din jî ji bo bikarhênerên din (yên ku pirr nên vira).
:::Herwiha kesên ku hertim li vira ne bi Gadgetê gotar çênekin, ''copy/paste'' dikin. [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 22:12, 14 tebax 2026 (UTC)
== [[Mediawiki:Gadget-QQ.js]] ==
Ev amûr di şikle Minerva de. Her daîm vê xeletiyê dide:
<syntaxhighlight lang="js">
TypeError: Cannot read properties of null (reading 'addEventListener') at css () at runScript () at Array.<anonymous> () at flushCssBuffer ()
</syntaxhighlight> [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 19:29, 18 tîrmeh 2026 (UTC)
:* [[Bikarhêner:Wikihez/skrîpt/js/Gadget-QQ.js]] --> [[Mediawiki:Gadget-QQ.js]]
:* [[Bikarhêner:Wikihez/Gadget-QQ.css]] --> [[Mediawiki:Gadget-QQ.css]]
:Ez dibêjim çêbû lê ka çend roj biceribînim. Tiştên ku hatin sererastkirin:
:# Google Books API Key dikarî zêde bikî, dixe cookies û di gerokê de dimîne. Berê bê API Key dixebitiya lê êdî mecbûr e ku API Key-a te hebe, bidestxistina wê ne zêde zor e lê dîsa jî tevlihev e.
:# Êdî di mobîlê de dixebite, heta di mobîlê de xweştir xuya dike.
:# Moda tarî
:# OOUI dewsa jquery.ui
:# Li qutiyê çi dixwazî zêde bikî, dikare li gorî îsm, sifet, fiîl bitewîne. Lê ji bo fiîl tenê dikare çend heb inflection bîne.
:# Butona paqij bike lê zêde kir.
:# Çend paqijiyên jêgirtinên Google Kitêbê niha hene.
:[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 23:38, 18 tîrmeh 2026 (UTC)
::Tewandina fiîlan û xeletiya modulê lazim e were rastkirin. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 14:40, 21 tîrmeh 2026 (UTC)
== [[MediaWiki:Gadget-wikt.add-examples.js]] ==
Min ev amûr hinek rojane kir feqat çend problem hene berî ku bar bikin.
Tiştên ku min guhart:
# Êdî li sayfeyên bi {{ş|maneid}} jî dixebite,
# Cihê di wîkîtekstê de yê ku jêgirtin were îlawekirin baştir bû,
# [[Mediawiki:Gadget-citoid-helper.js|citoid helper]] zêde kir ji bo ku bi hêsanî çavkanî bi riya doi, isbn an urlyê werin tijîkirin.
* [[Bikarhêner:Wikihez/Gadget-wikt.add-examples.css]] --> [[MediaWiki:Gadget-wikt.add-examples.css]]
* [[Bikarhêner:Wikihez/Gadget-wikt.add-examples.js]] --> [[MediaWiki:Gadget-wikt.add-examples.js]]
- --[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 00:50, 19 tîrmeh 2026 (UTC)
:Min "wikt." qismên cache kirinê ya wîkiya fransî bi [[MediaWiki:Gadget-StorageUtils.js]] guhartiye. loma ji bîr nekin wê amûrê li [[MediaWiki:Gadgets-definition]] zêde bikin. û navê amûrê jî biguhêrînin. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 09:15, 23 tîrmeh 2026 (UTC)
::Berê li ser WF:ceribandin dixebitî. niha naxebite. Divê were rastkirin. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 22:10, 7 tebax 2026 (UTC)
== Gadget-translation editor ==
* [[MediaWiki:Gadget-translation editor.js]]: divê formata en.wîktê were bikaranîn ji ber ku me gelek tercime ji en.wîktê kopî kir û ev js hîn nikare formata wekî li jêr bi kar bîne.
<syntaxhighlight lang="wikitext">
* {{Z|sh}}:
*: Kirîlî:
*: Latînî
</syntaxhighlight>
—[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:17, 16 tîrmeh 2026 (UTC)
== [[Mediawiki:Gadget-linkify.js]] ==
* ''rûpeleke'' wekî<syntaxhighlight lang="wikitext">[[rûpeleke]]</syntaxhighlight> lînk dike, bi regexê belkî dikare wisa bike <syntaxhighlight lang="wikitext">[[rûpel]]eke</syntaxhighlight>
—[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:17, 16 tîrmeh 2026 (UTC)
* Amûreke din wekî [[User:Wikihez/Gadget-linkify.js|linkify]] lazim e ku herfên mezin biçûk bike ji bo kurmancî.—[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:17, 16 tîrmeh 2026 (UTC)
:{{r|Bikarhêner}} Merheba bira, dikarî viya jî bar bikî?:
* [[Special:PermanentLink/6291974|linkify]] --> [[Mediawiki:Gadget-linkify.js]]
Spas--[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 11:42, 29 tîrmeh 2026 (UTC)
:Dûre [https://ku.wiktionary.org/wiki/MediaWiki:Gadget-start.js#L-283 li vir] wiktviLinkify bike kuLinkify xêra xwe [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 11:51, 29 tîrmeh 2026 (UTC)
::Min ji bîr kir lê zêde bikim niha nikare "Dİ" bike "di", xeletiyeke berbelav a di nivîsên kurdî de, herfên din ên wekî ll yan rr jî hewce ne werin zêdekirin. Dûre em zêde bikin. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 21:42, 29 tîrmeh 2026 (UTC)
:::Min nû ferq kir, sayfeyên ku hîn nehatine çêkirin wîkîlînk nake. Problemeke mezin e divê were rastkirin. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 18:15, 30 tîrmeh 2026 (UTC)
::::Na, lînk dike, tiştekî din heye... [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 10:49, 31 tîrmeh 2026 (UTC)
== Amûra manayê ==
Amûreke din ji bo nivîsina maneyê wekî Nimûne zêde bike lazim e [https://ku.wiktionary.org/w/index.php?title=Bikarh%C3%AAner:Wikihez/test.js&oldid=6276876 js] [https://ku.wiktionary.org/w/index.php?title=%C5%9Eablon:ceribandin2&oldid=6265629 şablon] [https://ku.wiktionary.org/w/index.php?title=Bikarh%C3%AAner:Wikihez/common.css&oldid=6265642 css] --[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 09:12, 23 tîrmeh 2026 (UTC)
== [[MediaWiki:Gadget-jeder.js]] ==
@[[Bikarhêner:Ghybu|Ghybu]] Çavkaniyên jêderê di moda pêşdîtinê de jêderê vedişêre, ew jî min gelek eciz dike wextê çavkanî zêde dikim. Min ji Claude pirsî û kodan nîşanî wê da, wisa cewab da:
Yes — and this file actually explains the whole thing precisely, better than my earlier guess about extract-stripping.
What's happening: the CSS rule
<syntaxhighlight lang="css">
.jeder{
display:none;
}
</syntaxhighlight>
hides every citation by default, *unconditionally*. The only thing that ever makes it visible again is the gadget's JS: it finds each `.jeder`, builds the short "`— (year, author, +)`" summary from the `.j-pewist` fields, and either reveals the short version or — for citations with no `.j-pewist` fields — explicitly sets `display:inline` on the original.
So visibility of citations depends entirely on this JS running. In the normal article view (Image 1) it runs, so you see the collapsed "`(1918, E. Rehmî Ji Mala Hekariyan, Amadekar: M. E. Bozarslan, +)`" form. In whatever generated Image 2 — a hover-preview/extract/API render — gadget JS doesn't execute, so nothing ever removes the `display:none`, and the citation vanishes completely rather than degrading to "still visible, just not collapsed."
<b>The fix:</b> flip the default so the *un-collapsed* state is the safe fallback, and let JS do the hiding only after it successfully builds the short version. That way, any context without JS shows the full citation instead of nothing.
CSS — remove the blanket hide:
<syntaxhighlight lang="css">
.jeder {
/* intentionally no display:none here — see Gadget-... .js */
}
</syntaxhighlight>
JS — do the hiding from script, after the short form exists:
{{veşêre-ser}}
<syntaxhighlight lang="js">
// Ji bo şablonên [[Şablon:jêder]] hatiye nivîsandin.
// Parametreyên ku di navbera "<span class="j-pewist">...</span>" an "{{j-pêwîst|...}}" de ne venaşêre.
$(function() {
function nivisaKurtTevliBike(sund, nivisKurt) {
var zede = $('<a>+</a>')
.addClass('click')
.attr('href', '#')
.attr('title', 'zêdetir')
.css('font-weight', 'bold');
var kurt = $(' <a>↩</a>')
.addClass('click-kurt')
.attr('href', '#')
.attr('title', 'veşêre')
.css('font-weight', 'bold');
$('<span>' + nivisKurt + '</span>')
.append(zede).append(')')
.addClass('jeder-kurt')
.css('font-size', '0.85em')
.insertAfter(sund);
sund.append(' ').append(kurt);
// Only hide the full citation once the short summary actually exists.
// If this script never runs (no-JS clients, hover-preview extracts,
// action=render, etc.), the full citation stays visible instead of
// silently disappearing.
sund.css('display', 'none');
}
function vesere() {
$('.jeder').each(function() {
var elmTab = $(this).find('.j-pewist').clone();
if (elmTab.length) {
var elm = '';
for (var i = elmTab.length - 1; i >= 0; i--) {
elm = elmTab.eq(i).html() + ', ' + elm;
}
var nivisKurt = ' — (' + elm;
nivisaKurtTevliBike($(this), nivisKurt);
}
// else: no j-pewist fields to shorten — leave the full citation
// as it already renders (visible), nothing to do.
});
}
vesere();
$(".click").click(function(e) {
e.preventDefault();
$(this).parent('.jeder-kurt').css('display', 'none');
$(this).parent('.jeder-kurt').prev().css('display', 'inline');
});
$(".click-kurt").click(function(e) {
e.preventDefault();
$(this).parent('.jeder').css('display', 'none');
$(this).parent('.jeder').next().css('display', 'inline');
});
});
</syntaxhighlight>
Net effect:
- JS-enabled readers (normal article view): identical experience to today — collapsed short form with `+`/`↩` toggle.
- No-JS contexts (previews, extracts, screen readers before JS loads, print, etc.): full citation is shown instead of nothing — a real regression fix rather than a cosmetic one.
One caveat worth being upfront about: this fixes it *if* the preview context renders the gadget's HTML/CSS but doesn't execute gadget JS (which is the far more common case, and what this code strongly suggests is happening). If Image 2 instead comes from a pipeline that strips the `.jeder`/`.jegirtin-text` elements out of the HTML entirely before this CSS/JS even gets a chance to apply, no on-wiki CSS/JS change can help — that'd need the extract-generation config changed instead. Given what this gadget file shows, though, I'd bet on the CSS-hide explanation.
{{veşêre-bin}}
Em dûre biceribînin eger xeletî tinebe, vî tiştî jî rast bikin. --[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 20:00, 23 tîrmeh 2026 (UTC)
:Ez APIya MediaWiki rind nizanim belkî Claude dizane:) Em nikarin bibêjin dema ku moda "''action=edit''" e fonksiyona <code>function vesere()</code> bi kar meyîne. [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 15:57, 24 tîrmeh 2026 (UTC)
::Na, di moda "edît"-ê de <code>var elmTab = null</code>... [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 16:13, 24 tîrmeh 2026 (UTC)
?:
<syntaxhighlight lang="js">
if (
mw.config.get('wgAction') === 'edit' ||
mw.config.get('wgAction') === 'submit'
){
var elmTab = [];
} else {
var elmTab = $(this).find('.j-pewist').clone();
}
</syntaxhighlight>
--[[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 16:31, 24 tîrmeh 2026 (UTC)
:Ez jî nizanim Claude çiqas ji mediawiki fêm dike lê heta niha ti tişt nîne ku min jê pirs kir û nikaribû çêke, bila wekî reklam nebe feqat Claude mikemmel e, dibêjim "li vir çima xeletiyeke wisa derdikeve" di dosyeya 2000 rêzî de diçe tiştê xelet tenê rast dike tiştekî din naguherîne. Chatgpt û aistudio qet wisa nakin, eynî dosyeyê deh cara dinivîsin, deh netîceyên cuda derdikevin :D
:Em dikarin vê amûrê wextê edit û submitê neaktîv bikin wekî <syntaxhighlight lang="js">if (!(action === "edit" || action === "submit")) {
:return;</syntaxhighlight> lê wê demê display:none wê çibe nizanim. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 18:23, 24 tîrmeh 2026 (UTC)
::display:none ne hewce ye ma jixwe di nav kodê [https://ku.wiktionary.org/w/index.php?title=MediaWiki:Gadget-jeder.js&oldid=6069025#L-49 L-49] de inline/none heye? [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 18:53, 24 tîrmeh 2026 (UTC)
:Min bi vî şiklî [https://ku.wiktionary.org/w/index.php?title=Bikarh%C3%AAner:Wikihez/vector-2022.js&diff=prev&oldid=6290816#L-28] ceriband feqat nexebitî. "display:none" di pêşdîtinê de dixebite feqat js naşixule. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 14:43, 25 tîrmeh 2026 (UTC)
::Kodên JSê pir hez nakim (pêşta hukurina APIya MWyê hewce bû) dîsa jî ez ê seh bikim :) [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 16:49, 27 tîrmeh 2026 (UTC)
:::Ez niha bi vî şiklî [https://ku.wiktionary.org/w/index.php?title=Bikarh%C3%AAner:Wikihez/test.js&oldid=6290820] [https://ku.wiktionary.org/w/index.php?title=Bikarh%C3%AAner:Wikihez/common.css&oldid=6290821#L-8] bi kar tînim ti problem nîne. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 17:09, 27 tîrmeh 2026 (UTC)
== [[MediaWiki:Gadget-PagePreviews.js]] ==
Ez dibêjim em vê amûrê jî çêkin [[:en:MediaWiki:Gadget-PagePreviews.js]] --[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 10:56, 3 tebax 2026 (UTC)
= Moda tarî =
== [[Şablon:wîkîpediya]] ==
Rengê tarî de xirab e.--[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 19:36, 4 tebax 2026 (UTC)
= Bot =
Karên ku bi botê werin çêkirin ji kerema xwe li vir binivîsin.
== Kategorî:Biwêj ==
[[:Kategorî:Biwêj]] divê were paqijkirin, lîsteya madeyên {{ş|biwêj}} çêke, yên ku tê de bûn, kirin, man hene filtre bike yên din bi destî tê çêkirin.—[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:17, 16 tîrmeh 2026 (UTC)
== Jêgirtin ==
Xistina jêgirtinên beşa [https://ku.wiktionary.org/w/index.php?search=insource%3A%2F%3D+*Ji+%5BWw%5D%C3%AAjey%C3%AA+*%3D%2F&title=Taybet%3AL%C3%AAger%C3%AEn&profile=advanced&fulltext=1&ns0=1&searchToken=8rh0bmw8dccsi7aynl6zli8uf ji wêjeyê] li beşa maneyê. —[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:17, 16 tîrmeh 2026 (UTC)
== Bota Toolforgeê ==
Botekî Toolforgeê lazim e ji bo ku xeletiyên biçûk wekî şablonên bi navên îngilîzî werin kurdîkirin yan jî valahiya beşan rast bike û hwd.—[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:17, 16 tîrmeh 2026 (UTC)
:Min [[Bikarhêner:Wikihez/skrîpt/py/kuwiktkozmetik.py|paqijiyen kozmetîk]] hazir kir feqat hîn navên şablonan naguhêre. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 20:05, 4 tebax 2026 (UTC)
== Updatew ==
Bota [[Bikarhêner:Wikihez/skrîpt/py/updateW.py|updateW]] divê were rojanekirin. Yan jî yekî nû were çêkirin. Şablonên {{ş|W}} di beşa tercimeyan de sererast dike û zimanan rêz dike. Ya niha xeletiya navê zimanî dide.—[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:17, 16 tîrmeh 2026 (UTC)
== sihir --> sêhr ==
Tercimeyên ''[[sêhr]]'' hemû dibêje ''sihir'' loma bi botê lazim e kirin ''sêhr''. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 17:43, 18 tîrmeh 2026 (UTC)
:Sihirbaz --> sêhrbaz [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 18:07, 18 tîrmeh 2026 (UTC)
== Tercimeyên dîroknas ==
Li tercimeyên [[dîroknas]], hevmaneyên wê hewce ye were îlawekirin. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 18:44, 18 tîrmeh 2026 (UTC)
== Mewlûd ==
Sererastkirina jêgirtinên mewlûdê [https://ku.wiktionary.org/w/index.php?search=insource%3A%2Fw%5C%3AMela+His%C3%AAn%C3%AA+Batey%C3%AE%2F&title=Taybet%3AL%C3%AAger%C3%AEn&ns0=1&searchToken=8m0tguy3sqt7edr4sg0u8hedo] wekî [https://ku.wiktionary.org/w/index.php?title=dax%C3%AEdar&curid=284303&diff=6265851&oldid=6142285] [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 09:43, 20 tîrmeh 2026 (UTC)
nlqbkrtt6jlwfzgslc0ckganm1r2zdy
6333747
6333746
2026-08-14T22:26:32Z
Wikihez
7344
/* MediaWiki:Gadget-start.js */ Bersiv
6333747
wikitext
text/x-wiki
{{/ser}}
= Karên ferhengî =
== Mane ==
* [[:Kategorî:Madeyên bê beşa mane]]
** [[:Kategorî:Madeyên bê beşa mane bi kurmancî]]
Li ser van rûpelan ev made hene ku maneyan wan nehatine nivîsin û divê werin nivîsin. —[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:17, 16 tîrmeh 2026 (UTC)
== Etîmolojî ==
*[[:Kategorî:Daxwazên etîmolojiyê]]
**[[:Kategorî:Daxwazên etîmolojiyê bi kurmancî]]
Li ser van rûpelan ev made hene ku etîmolojiya wan hîn nehatine nivîsin. Ji bo alîkariyê binêre [[WF:Etîmolojî]] —[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:17, 16 tîrmeh 2026 (UTC)
== Cureyê rêzimanî ==
* [[:Kategorî:Gotarên bê kategoriya rêzimanî]]
* [[:Kategorî:Gotarên bê kategoriya rêzimanî bi kurmancî]]
Li ser van rûpelan ev made hene ku cureyên wan yên rêzimanî hîn nehatine nivîsin. Ji bo alîkariyê binêre [[Alîkarî:Cureyên peyvan]] —[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:17, 16 tîrmeh 2026 (UTC)
== Kontrol ==
* [[:Kategorî:Kontrol]]
** [[:Kategorî:Kontrola maneyê]]
Ev madde bi botê hatine çêkirin, yek bi yek divê werin kontrolkirin. —[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:17, 16 tîrmeh 2026 (UTC)
= Şablon =
== IPA ==
* {{ş|IPA}} divê [[Modul:IPA]] bi kar bîne. —[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:17, 16 tîrmeh 2026 (UTC)
== Deng ==
Kurdîkirina belgekirina {{ş|deng}} lazim e.--[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 00:06, 19 tîrmeh 2026 (UTC)
= Modul =
== Modul:form of/templates ==
* [[Modul:form of/templates]]: Divê ev modul were rojanekirin û xeletiyên berê wekî ([[hevalê]]) werin rastkirin. —[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:17, 16 tîrmeh 2026 (UTC)
*:Merheba @[[Bikarhêner:Ghybu|Ghybu]] Te gotibû di vê modulê de xeletî hene, jkx tu dikarî li vir binivîsî çi kêmasî hene, daku wextê rojane dikim ez ji bîr nekim? [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:16, 21 tîrmeh 2026 (UTC)
*::Silav. Nizanim ji bîra min çûye... Herwiha ji bo çêkirina formên navdêran zanînên cîns û tîpa dawî bes e:
*::* (-ê, mê) => çemandî, bangkirin
*::* (-ê, nêr) => îzafe
*::* (-ê, mê û nêr) => îzafe (nêr), bangkirin (mê), çemandî (mê)
*::* (-a) => îzafe (mê)
*::* (-ekî) => îzafe û çemandî (nêr, nebinavkirî)
*::* (-eke) = > îzafe (mê, nebinavkirî)
*::* ...
*:: <code>if find(mw.title.getCurrentTitle().subpageText, 'ekî$') then ... end</code>
*::<code><nowiki>{{ku-tewîn-navForm|<navdêr>|<zayend>}</nowiki></code>
*::Tablo û nivîs di yekcarî de tên çêkirin...
*::Feqet problem lêzêdekirina mînakan e. [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 17:34, 21 tîrmeh 2026 (UTC)
*:::Lêzêdekirina kîjan nimûneyan? Ev koda js ji bo çi ye? Qisûrê nenêre min fêm nekir :/ [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 18:13, 21 tîrmeh 2026 (UTC)
*::::Li vira ([[hevalê#Formeke navdêrê]]) di bin maneyên 1. û 2. mînak nayên tevlî kirin :) [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 18:18, 21 tîrmeh 2026 (UTC)
*:::::Ev tercîh e, ne mecbûrî ye, em dikarin [https://ku.wiktionary.org/w/index.php?title=heval%C3%AA&diff=prev&oldid=6276350 wisa] bikin. Wekî din? [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 18:29, 21 tîrmeh 2026 (UTC)
*::::::Min li jor tênê got ku tenê parametreyên "navdêr" û "zayend" hewce nee. Bi '''[//ku.wiktionary.org/w/index.php?title=heval%C3%AA&curid=969734&diff=6276353&oldid=6276350 vî]''' awayî jî tê çêkirin. Parametreyên din ne hewce ne. [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 18:38, 21 tîrmeh 2026 (UTC)
*:::::::Ji bo wê şabloneke din lazim e, bila ev şablon wekî îngilîzî bimîne em ji bo kurmancî yekî din çêkin. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 18:42, 21 tîrmeh 2026 (UTC)
*::::::::[https://ku.wiktionary.org/w/index.php?title=heval%C3%AA&oldid=6276885 wisa] çawa ye? Bi min nivîsîna nimûneyan zêde ne lazim e ji ber ku ti kes serê xwe pê naêşîne. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 09:46, 23 tîrmeh 2026 (UTC)
*:::::::::@[[Bikarhêner:Ghybu|Ghybu]] Vê şablonê bi kar bînin an na? Navê şablonê kê çi be? [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 19:07, 24 tîrmeh 2026 (UTC)
== Modul:columns ==
* [[Modul:columns]] were rojanekirin û {{ş|kol3}} bila lînka ''nîşan bide'' deyne beriya sernavê, kolê di qutiya rengî de bila nebe. —[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:17, 16 tîrmeh 2026 (UTC)
== Modul:etymon ==
* [[Modul:etymon kevn]]: Rojanekirin hewce ye. —[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:17, 16 tîrmeh 2026 (UTC)
== [[Modul:ziman/code to canonical name]] ==
Belgekirina skrîptê û js divê were rastkirin. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 09:31, 22 tîrmeh 2026 (UTC)
:* [[MediaWiki:UpdateLanguageNameAndCode.js]]
:[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 09:50, 22 tîrmeh 2026 (UTC)
::* [[Modul:ziman/print]]
::[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 09:52, 22 tîrmeh 2026 (UTC)
:::*[[Modul:ziman/şablon]]
:::[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 09:56, 22 tîrmeh 2026 (UTC)
::::* [[MediaWiki:Gadget-translation editor.js/ziman.json]]
::::[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 11:06, 22 tîrmeh 2026 (UTC)
== [[Modul:quote]] ==
Piştî ev modul hate hazirkirin, lazim e navên jegirtinan werin rastkirin û li hemûyan {{param|jêgirtin}} were zêdekirin. Bnr. [[Gotûbêja şablonê:Jêgirtin/Ehmedê Xanî/Mem û Zîn]] [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 22:27, 5 tebax 2026 (UTC)
::Ev modul hema bêje hazir e. Hûn li ser van madeyan çi difikirin:
# {{para|tarîx}} lazim e full date be eger na, lazim e {{para|sal}} were bikaranîn. Feqat "'''2021''' kanûna pêşîn 23" bi vî şiklî bi min ne problem e çnkî derdê en.wikt "attestation" e delîla herî pêşî jî sal e.
#: {{demo|sep=wisa xuya dibe<br>|<nowiki>{{jêder-kitêb/ceribandin|en
|tarîx=23 December 2021|nivîskar=Harry Hobbs; George Williams|sernav=Micronations and the Search for Sovereignty|url=https://www.cambridge.org/core/books/micronations-and-the-search-for-sovereignty/B0414A3A322695D9EE71E4CDDFDA06DE|weşanxane=Cambridge University Press|rûpel=155|isbn=978-1-009-15012-5|jêgirtin=jêgirtin.|t=-}}</nowiki>}}
#{{para|amadekar}}/{{para|edîtor}}/{{para|terciman}} bi şiklê edîtoriya, amadekariya, tercimekirina
#: {{demo|sep=dide<br>|<nowiki>{{jêder-kitêb/ceribandin|en
|sernav=Medical Surgical Nursing|serî=Juta's Manual of Nursing|cildê-seriyê=volume 4|edîtor=Sophie Mataniele Mogotlane; Joyce Mokoena; Motshedisi Eunice Chauke; Anne Young|sal=2005|weşanxane=Juta Academic|isbn=978-0702171840|rûpel=!12-29|jêgirtin=jêgirtin|t=-}}</nowiki>}}
--[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 13:09, 10 tebax 2026 (UTC)
:@[[Bikarhêner:Bikarhêner|Bikarhêner]] û @[[Bikarhêner:Ghybu|Ghybu]] Hîn gelek tişt hene divê îzah bikin û fikrê we pirs bikim, feqat îzahkirin pir zor e, em dest bi bikaranînê bikin û dûre tiştên ku hûn naxwazin em dikarin biguherînîn, dibe? [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 13:11, 10 tebax 2026 (UTC)
::Dibe, piştî çêbû, em di praktîkê de bibînin ku çawa ye. -- [[Bikarhêner:Bikarhêner|Bikarhêner]] ([[Gotûbêja bikarhêner:Bikarhêner|gotûbêj]]) 18:05, 10 tebax 2026 (UTC)
= Javascript =
== [[Mediawiki:Gadget-citoid-helper.js]] ==
Ji bo bi citoidê kopîkirina malûmatên çavkaniyan amûreke wisa lazim e. Xisûsen ji ber ku bi çend amûrên din dikare were bikaranîn.
Feqat çend problem hene, şablonên me de kêmasiya parametreyan gelek in û xerîteyên citoidê hîn nehatine çêkirin. Wana sererast bikin dûre vê amûrê çêkin, piştre [[MediaWiki:Gadget-start.js|start.js]] û [[MediaWiki:Gadget-wikt.add-examples.js|add examples.js]] were rojanekirin.
- --[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 00:04, 19 tîrmeh 2026 (UTC)
:Merheba @[[Bikarhêner:Bikarhêner|Bikarhêner]], ez dibêjim karê Modul:quote zêde wext bistîne, bila em dest bi bikaranîna van amûran bikin dûre kêmasiyan em ê temam bikin înşela. Dikarî vana li cihên xwe yên rast kopî paste bikî?
# [[Special:PermanentLink/6291574|Bikarhêner:Wikihez/skrîpt/js/Gadget-citoid-helper.js]] --> [[Mediawiki:Gadget-citoid-helper.js]]
# Ya li jêr kopî bike qismê herî dawî ya AmûrênVeşartî li [[MediaWiki:Gadgets-definition]]:
## <code><nowiki>* citoid-helper[ResourceLoader|hidden|default|dependencies=mediawiki.util]|citoid-helper.js</nowiki></code>
--[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:58, 26 tîrmeh 2026 (UTC)
== [[MediaWiki:Gadget-start.js]] ==
Rojanekirin hewce ye. Min gelek tişt lê zêde kir lê ez niha test dikime. Piştre em bar bikin:
* [[Bikarhêner:Wikihez/Gadget-start.js]] --> [[MediaWiki:Gadget-start.js]]
* [[Bikarhêner:Wikihez/Gadget-start.css]] --> [[MediaWiki:Gadget-start.css]]
--[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 22:08, 17 tîrmeh 2026 (UTC)
:Min [[MediaWiki:Gadget-start/data.json|data.json]] çêkir ji bo ku bi hêsanî malûmatên heyî werin guhartin bêyî guhartina Javascriptê. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 19:49, 18 tîrmeh 2026 (UTC)
:Xeletiyên ku ji bîr nekim rast bikim:
:* Wextê min çavkanî "kitêb" hilbijart û bi destî tije kir xeletiyeke [https://ku.wiktionary.org/w/index.php?title=xezete&diff=prev&oldid=6265392 wisa] derket her kelîme hate lînkkirin.
:* <code>html("⠿")</code> ev ne lazim e.
:* textarea ji bo çavkaniyên jêgirtinan xaseten yên sernav hîn jî ne draggable e.
:* pêşdîtina zindî checkbox wextê tê rakirin, pêşdîtin winda nabe.
:* Butona mobîlê ya vekirina formê di moda tarî de belî nabe, tenê wekî qutiyeke tarî xuya dibe.
:* Metna hişyarkirinê di guhartina rûpelên heyî de lazim e baştir bikim.
:[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 23:51, 18 tîrmeh 2026 (UTC)
::Ev problem çêbûn, ez ê binêrim ka çi problemên din hene. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 14:15, 19 tîrmeh 2026 (UTC)
:::Çêke: Ji bo qismê çavkaniyê yek dikare API call û Kategorî:Çavkanî bi kar bîne ji bo ku şablon zêde bikî ji yên heyî. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 21:21, 19 tîrmeh 2026 (UTC)
::::Ev jî çêbû, min beşa çavkanî jî çêkir. Eger xeletî dernekeve û problema valahiya piştî etîketê ji bîr nekim, piştî rojanekirina amûrên linkify, û citoid em dikarin bar bikin. Ez ê ti tiştê nû îlawe nekim, zêde dirêj bû. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:14, 21 tîrmeh 2026 (UTC)
:::::Merheba @[[Bikarhêner:Bikarhêner|Bikarhêner]]. Dikarî wana bar bikî?
:::::* [[Bikarhêner:Wikihez/Gadget-start.js]] --> [[MediaWiki:Gadget-start.js]]
:::::* [[Bikarhêner:Wikihez/Gadget-start.css]] --> [[MediaWiki:Gadget-start.css]]
:::::* [[MediaWiki:Gadgets-definition]] wisa rojane bike:
:::::* start[ResourceLoader|default|package|dependencies=mediawiki.util,ext.gadget.StorageUtils,ext.gadget.citoid-helper]|start.js|start.css|start.js/data.json
:::::[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 09:39, 5 tebax 2026 (UTC)
{{şirove}} Dewama ''[[Special:PermanentLink/6333688|Gotûbêja bikarhêner:Rewiye tine#WF:Nû]]'' bila gotûbêja wî em spam nekin. :D
{{r|Ghybu}} dikarî [[Special:PermanentLink/6333689|vê htmlê]] binêrî claude rast fêm kiriye yan na? Daxîne û wek html qeyd bike. --[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 18:43, 14 tebax 2026 (UTC)
:Min seh wîkîyên din jî kir, li wîkiya fransî tiştekî wekî daxwaza min çêkirine (tiştên ku ne hewce ne wekî "tab" çêkirine an jî hatine vêşartin): [//fr.wiktionary.org/w/index.php?title=fdsdfdsf&action=edit&redlink=1]. Formata me yê berî jî bi vê lojîkê hatibû çêkirin, wekî de.wiktionary ([//de.wiktionary.org/w/index.php?title=sdfdsfsdfs&action=edit&preload=Vorlage:Formatvorlage_(Substantiv_vereinfacht)]) [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 19:01, 14 tebax 2026 (UTC)
::PS: Dîsa jî Claude min rind fêm kiriye :)) Feqet min got ku beşên Mane", "Bilêvkirin" û "Beşên din" cem hev (wekî "tab") ". Û dema ku tu terî di nav "Besên din" Hevmane, Jê, ... li wira werin dayîn. Wêne/Resim û Nimûne jî di nav beşa ("tab") "Mane" [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 19:17, 14 tebax 2026 (UTC)
::Erê ya fr.wikt min jî dîtibû jixwe fikrê tab min ji wan girtibû :D (feqat min li cem wan tenê tab-a maneyê dît yên din nedît çawa tê vekirin nizanim) Berê hemû beş piştî maneyê bibûn, dûre min sê Tab çêkir, Bingehîn+Lînkkirin+Bikaranîn. Niha lazim e Tabeke din çêkim. Ya ku claude çêkiriye bnr. [[Special:PermanentLink/6333698#L-7]] ne baş e bnr. [[Special:PermanentLink/6333703|qiyaskirinê li ser vê htmlê]] Êdî ez Claude abuse dikime ji ber ku Pro ye :D [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 19:26, 14 tebax 2026 (UTC)
:::Claude dibêje:
:::Good clarification — that's a real simplification, not just a relabel. Updated STEP_GROUPS from 5 tabs down to 3:
:::Mane — the definitions themselves, plus Wêne (image), now grouped in with it instead of sitting in a separate misc tab. Nimûne needed no change since it was already rendering inside each Mane sense block, not as its own step.
:::Bilêvkirin — unchanged, still just pronunciation.
:::Beşên din — everything else in one flat bucket: hevmane, jê, têkildar, herwiha binêre, formên alternatîv, dijmane, jornav, jêrnav, notên bikaranînê, bi alfabeyên din, dûnde, çavkanî, bêhtir bixwîne, tewandin, etîmolojî, zaravayên din, werger, and bnr-h — instead of being split across the old Bingehîn/Lînkkirin/Bikaranîn/Din tabs.
:::No DOM-order changes were needed this time — the fix from the blank-tab bug looks up the tab bar's position dynamically now, so it didn't matter that I regrouped which steps go where. Same two files, saved to your Wiki folder — worth another pass through all three tabs once you've pasted this in, same as last time. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 19:34, 14 tebax 2026 (UTC)
::::Mînak:
Ziman
---------------------------------------------
Cureyê rêzimanî (Navdêr)
Navdêr (hilbijêre) ┆ Cîns (hilbijêre) ┆ Jimar (hilbijêre)
- lêker -mê -yekjimar
- rengdêr -nêr -pirjimar
- ... -... -...
---------------------------------------------
Mane || Bilêvkirin || Beşên din
hilbijêre:
- mane - IPA - Hevmane
- nimûne - kîte - Dijmane
- wêne
Dema ku tu "Cureyê rêzimanî" dikî "Lêker" :
Cureyê rêzimanî (Lêker)
Lêker (hilbijêre) ┆ Cure (hilbijêre)
- navdêr -rehê niha
- rengdêr -rehê borî
- ... -...
---------------------------------------------
┆ : select/option ("tab" nîne, tê dîtin)<br>
|| : "tab"
-- [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 19:45, 14 tebax 2026 (UTC)
'''Sê-stûnî ("┆" = ne tab), li gorî Cureyê rêzimanî:'''
{| class="wikitable"
! Cureyê rêzimanî !! Stûna 2 !! Stûna 3 !! Têbînî
|-
| Navdêr / Serenav
| Cîns (hilbijêre ▾: mê / nêr / ... — tenê heke ziman zayendê rêzimanî hebe)
| '''Jimar''' (?) — pirs li jêr
| Qadên "Forma mê/nêr/pirjimar/yekjimar" niha jî li vir hene — ma ev di "Jimar"-ê de tên tevlihev kirin, an cuda dimînin?
|-
| Rengdêr
| (heman m/n/p/y forman ku Navdêr distîne)
| Sûperlatîv (sûp) / Komparatîv (komp)
| Ne li ser her du nîgaran hatiye behs kirin — ma sê-stûnî li vir jî tê bikaranîn?
|-
| Lêker
| '''Cure''' = Cureyê lêkerê (hilbijêre ▾: gerguhêz / negerguhêz / xwerû-... / pêkhatî-... / hevedudanî-... / biwêjî-... — 10 vebijêrk)
| Di heman stûnê de: Rehê dema niha / Rehê dema borî / Rehê dema bilanî (her sê qadên nivîsandinê ne, ne hilbijêrk in)
| Ma "Cure" her sê rehan di xwe de digire wek yek stûn, an her yek stûneke cuda ye?
|-
| Tîp (herf/sembol)
| Girdêk (gir) / Hûrek (hûr)
| —
| Ne behs kiriye
|-
| Her cureyek, li gorî zimên
| Transliterasyon (tr) / Transkrîpsiyon (ts)
| —
| Bi zimên ve girêdayî ye, ne bi cureyê rêzimanî ve
|-
| Her cureyek, tenê ziman=japonî
| Hanja / Translit. hanja
| —
| Ne bi cureyê rêzimanî ve girêdayî ye
|-
| Her cureyek
| '''Tercîhên pêşketî''' (kolapsî): form, formaalt, nekatcure, nekatcins, nekatçendterm, serlînkneke, nekatpalîndrom, neformtr
| —
| Vebijarkî, ji bo hemû cureyan
|}
'''Tabên jêrîn — Mane ‖ Bilêvkirin ‖ Beşên din ("||" = tab):'''
{| class="wikitable"
! Mane !! Bilêvkirin !! Beşên din (hemû 18 hêman)
|-
| mane, nimûne, wêne
| şablonên bilêvkirinê (mînak: IPA, kîte)
| tewandin, etîmolojî, bi zaravayên din, werger, jê, têkildar, herwiha binêre, formên alternatîv, hevmane, dijmane, jornav, jêrnav, notên bikaranînê, bi alfabeyên din, dûnde, çavkanî, bêhtir bixwîne, bnr-h
|}
'''Pirsên vekirî:'''
# "Jimar" (yekjimar/pirjimar) — qadeke ku nîşan dide têketî bi xwe yekjimar e an pirjimar e. Ev cuda ye ji "Forma yekjimar (y)"/"Forma pirjimar (p)" ya heyî (ku forma DÎN a kelîmeyê tomar dike). Herdu bimînin, an werin yek kirin?
# Ma sê-stûnî tenê ji bo Navdêr/Lêker e, an ji bo Rengdêr/Tîp jî heman mantiq derbas dibe?
# Di "Beşên din" de: dixwazî pêşî navnîşek/hilbijartinek nîşan bide (17 hêmanên din jî tê de), û qad tenê piştî hilbijartinê xuya bibin?
:Tu dikarî start.js ji Tercîh/ Amûran rakî û bi test.js li Amûran herî taliyê ye biceribînî. Claude ya li jor hazir kir, Jimar ez dikarim îzah bikim. Feqat bi min di tab-a maneyê de lazim e Bi zaravayên din (heta wek werger her car bila li rûpelan were zêdekirin) û werger jî hebe.--[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 20:18, 14 tebax 2026 (UTC)
:;Navdêr: Tenê "cîns" û "jimar" bes e. "Forma mê", "Forma nêr", ... nayê fêm kirin. Bi min wekî "Tercîhên pêşketî" bi navkî din veşartî çêke.
:;Lêker: "Cureyê lêkerê" nayê fêm kirin, bi min pêşta "geguhez/negerguhêz" were hilbijartin, paşê jî form "hevdudanî/pêkatî/..." ji ber ku her kes vana nizanî... Dîsa jî tu dizanî.
:Bi min beşên "Hevmane" û dijmane jî bike de nav beşa Mane ("tab") ji ber ku pirr tên xwestin.
:Şûnda Wêne jî Nimûne/jêgirtin...
:Herwiha hemû bi rengê şîn hatine çêkirin, nizanim beşên din (===) bi rengê gewr an reş çito dibe? [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 21:35, 14 tebax 2026 (UTC)
::Nimûne/jêgirtin, hevmane, Dijmane li binê her maneyê hene. ji ber ku wana bi maneyê ve girêdayî ne lazim e wisa bimîne feqat belkî şiklekî baştir bibînin. Hînbûna bikaranîna formeke nû bi qasî hînbûna koda wîkiyê zor e heqîqeten... [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 21:45, 14 tebax 2026 (UTC)
:::Min şaş fêm meke feqet te amûrek ji bo Wikihez çêkiriye :) Tu dixwazî ku hemû tiştên ku te çêkiriye tevlî vê Gadgetê bikî û bikarhênerên din jî bi kar bînin... Tu jî dizanî ku kesên ku tên vira çito peyv çêdikin: Ziman > Mane > Mînak > Hevmane > Dijmane ! Du Gadget çêke yek ji bo bikarhênerên ku hertim li vira ne, yekeke din jî ji bo bikarhênerên din (yên ku pirr nên vira).
:::Herwiha kesên ku hertim li vira ne bi Gadgetê gotar çênekin, ''copy/paste'' dikin. [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 22:12, 14 tebax 2026 (UTC)
::::Min xwest her tişt li ser rêza xwe be ji bo ku hîn bibin çi diçe kû derê feqat bi vî şiklî jî zêde dirêj û tevlihev dibe. Loma ez ê wekî tu dibêjî bikim her tiştê din bila collapsed pêşketî be. Ê ku dixwaze pê lê ke û binêre çi dikare were zêdekirin. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 22:26, 14 tebax 2026 (UTC)
== [[Mediawiki:Gadget-QQ.js]] ==
Ev amûr di şikle Minerva de. Her daîm vê xeletiyê dide:
<syntaxhighlight lang="js">
TypeError: Cannot read properties of null (reading 'addEventListener') at css () at runScript () at Array.<anonymous> () at flushCssBuffer ()
</syntaxhighlight> [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 19:29, 18 tîrmeh 2026 (UTC)
:* [[Bikarhêner:Wikihez/skrîpt/js/Gadget-QQ.js]] --> [[Mediawiki:Gadget-QQ.js]]
:* [[Bikarhêner:Wikihez/Gadget-QQ.css]] --> [[Mediawiki:Gadget-QQ.css]]
:Ez dibêjim çêbû lê ka çend roj biceribînim. Tiştên ku hatin sererastkirin:
:# Google Books API Key dikarî zêde bikî, dixe cookies û di gerokê de dimîne. Berê bê API Key dixebitiya lê êdî mecbûr e ku API Key-a te hebe, bidestxistina wê ne zêde zor e lê dîsa jî tevlihev e.
:# Êdî di mobîlê de dixebite, heta di mobîlê de xweştir xuya dike.
:# Moda tarî
:# OOUI dewsa jquery.ui
:# Li qutiyê çi dixwazî zêde bikî, dikare li gorî îsm, sifet, fiîl bitewîne. Lê ji bo fiîl tenê dikare çend heb inflection bîne.
:# Butona paqij bike lê zêde kir.
:# Çend paqijiyên jêgirtinên Google Kitêbê niha hene.
:[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 23:38, 18 tîrmeh 2026 (UTC)
::Tewandina fiîlan û xeletiya modulê lazim e were rastkirin. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 14:40, 21 tîrmeh 2026 (UTC)
== [[MediaWiki:Gadget-wikt.add-examples.js]] ==
Min ev amûr hinek rojane kir feqat çend problem hene berî ku bar bikin.
Tiştên ku min guhart:
# Êdî li sayfeyên bi {{ş|maneid}} jî dixebite,
# Cihê di wîkîtekstê de yê ku jêgirtin were îlawekirin baştir bû,
# [[Mediawiki:Gadget-citoid-helper.js|citoid helper]] zêde kir ji bo ku bi hêsanî çavkanî bi riya doi, isbn an urlyê werin tijîkirin.
* [[Bikarhêner:Wikihez/Gadget-wikt.add-examples.css]] --> [[MediaWiki:Gadget-wikt.add-examples.css]]
* [[Bikarhêner:Wikihez/Gadget-wikt.add-examples.js]] --> [[MediaWiki:Gadget-wikt.add-examples.js]]
- --[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 00:50, 19 tîrmeh 2026 (UTC)
:Min "wikt." qismên cache kirinê ya wîkiya fransî bi [[MediaWiki:Gadget-StorageUtils.js]] guhartiye. loma ji bîr nekin wê amûrê li [[MediaWiki:Gadgets-definition]] zêde bikin. û navê amûrê jî biguhêrînin. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 09:15, 23 tîrmeh 2026 (UTC)
::Berê li ser WF:ceribandin dixebitî. niha naxebite. Divê were rastkirin. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 22:10, 7 tebax 2026 (UTC)
== Gadget-translation editor ==
* [[MediaWiki:Gadget-translation editor.js]]: divê formata en.wîktê were bikaranîn ji ber ku me gelek tercime ji en.wîktê kopî kir û ev js hîn nikare formata wekî li jêr bi kar bîne.
<syntaxhighlight lang="wikitext">
* {{Z|sh}}:
*: Kirîlî:
*: Latînî
</syntaxhighlight>
—[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:17, 16 tîrmeh 2026 (UTC)
== [[Mediawiki:Gadget-linkify.js]] ==
* ''rûpeleke'' wekî<syntaxhighlight lang="wikitext">[[rûpeleke]]</syntaxhighlight> lînk dike, bi regexê belkî dikare wisa bike <syntaxhighlight lang="wikitext">[[rûpel]]eke</syntaxhighlight>
—[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:17, 16 tîrmeh 2026 (UTC)
* Amûreke din wekî [[User:Wikihez/Gadget-linkify.js|linkify]] lazim e ku herfên mezin biçûk bike ji bo kurmancî.—[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:17, 16 tîrmeh 2026 (UTC)
:{{r|Bikarhêner}} Merheba bira, dikarî viya jî bar bikî?:
* [[Special:PermanentLink/6291974|linkify]] --> [[Mediawiki:Gadget-linkify.js]]
Spas--[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 11:42, 29 tîrmeh 2026 (UTC)
:Dûre [https://ku.wiktionary.org/wiki/MediaWiki:Gadget-start.js#L-283 li vir] wiktviLinkify bike kuLinkify xêra xwe [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 11:51, 29 tîrmeh 2026 (UTC)
::Min ji bîr kir lê zêde bikim niha nikare "Dİ" bike "di", xeletiyeke berbelav a di nivîsên kurdî de, herfên din ên wekî ll yan rr jî hewce ne werin zêdekirin. Dûre em zêde bikin. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 21:42, 29 tîrmeh 2026 (UTC)
:::Min nû ferq kir, sayfeyên ku hîn nehatine çêkirin wîkîlînk nake. Problemeke mezin e divê were rastkirin. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 18:15, 30 tîrmeh 2026 (UTC)
::::Na, lînk dike, tiştekî din heye... [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 10:49, 31 tîrmeh 2026 (UTC)
== Amûra manayê ==
Amûreke din ji bo nivîsina maneyê wekî Nimûne zêde bike lazim e [https://ku.wiktionary.org/w/index.php?title=Bikarh%C3%AAner:Wikihez/test.js&oldid=6276876 js] [https://ku.wiktionary.org/w/index.php?title=%C5%9Eablon:ceribandin2&oldid=6265629 şablon] [https://ku.wiktionary.org/w/index.php?title=Bikarh%C3%AAner:Wikihez/common.css&oldid=6265642 css] --[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 09:12, 23 tîrmeh 2026 (UTC)
== [[MediaWiki:Gadget-jeder.js]] ==
@[[Bikarhêner:Ghybu|Ghybu]] Çavkaniyên jêderê di moda pêşdîtinê de jêderê vedişêre, ew jî min gelek eciz dike wextê çavkanî zêde dikim. Min ji Claude pirsî û kodan nîşanî wê da, wisa cewab da:
Yes — and this file actually explains the whole thing precisely, better than my earlier guess about extract-stripping.
What's happening: the CSS rule
<syntaxhighlight lang="css">
.jeder{
display:none;
}
</syntaxhighlight>
hides every citation by default, *unconditionally*. The only thing that ever makes it visible again is the gadget's JS: it finds each `.jeder`, builds the short "`— (year, author, +)`" summary from the `.j-pewist` fields, and either reveals the short version or — for citations with no `.j-pewist` fields — explicitly sets `display:inline` on the original.
So visibility of citations depends entirely on this JS running. In the normal article view (Image 1) it runs, so you see the collapsed "`(1918, E. Rehmî Ji Mala Hekariyan, Amadekar: M. E. Bozarslan, +)`" form. In whatever generated Image 2 — a hover-preview/extract/API render — gadget JS doesn't execute, so nothing ever removes the `display:none`, and the citation vanishes completely rather than degrading to "still visible, just not collapsed."
<b>The fix:</b> flip the default so the *un-collapsed* state is the safe fallback, and let JS do the hiding only after it successfully builds the short version. That way, any context without JS shows the full citation instead of nothing.
CSS — remove the blanket hide:
<syntaxhighlight lang="css">
.jeder {
/* intentionally no display:none here — see Gadget-... .js */
}
</syntaxhighlight>
JS — do the hiding from script, after the short form exists:
{{veşêre-ser}}
<syntaxhighlight lang="js">
// Ji bo şablonên [[Şablon:jêder]] hatiye nivîsandin.
// Parametreyên ku di navbera "<span class="j-pewist">...</span>" an "{{j-pêwîst|...}}" de ne venaşêre.
$(function() {
function nivisaKurtTevliBike(sund, nivisKurt) {
var zede = $('<a>+</a>')
.addClass('click')
.attr('href', '#')
.attr('title', 'zêdetir')
.css('font-weight', 'bold');
var kurt = $(' <a>↩</a>')
.addClass('click-kurt')
.attr('href', '#')
.attr('title', 'veşêre')
.css('font-weight', 'bold');
$('<span>' + nivisKurt + '</span>')
.append(zede).append(')')
.addClass('jeder-kurt')
.css('font-size', '0.85em')
.insertAfter(sund);
sund.append(' ').append(kurt);
// Only hide the full citation once the short summary actually exists.
// If this script never runs (no-JS clients, hover-preview extracts,
// action=render, etc.), the full citation stays visible instead of
// silently disappearing.
sund.css('display', 'none');
}
function vesere() {
$('.jeder').each(function() {
var elmTab = $(this).find('.j-pewist').clone();
if (elmTab.length) {
var elm = '';
for (var i = elmTab.length - 1; i >= 0; i--) {
elm = elmTab.eq(i).html() + ', ' + elm;
}
var nivisKurt = ' — (' + elm;
nivisaKurtTevliBike($(this), nivisKurt);
}
// else: no j-pewist fields to shorten — leave the full citation
// as it already renders (visible), nothing to do.
});
}
vesere();
$(".click").click(function(e) {
e.preventDefault();
$(this).parent('.jeder-kurt').css('display', 'none');
$(this).parent('.jeder-kurt').prev().css('display', 'inline');
});
$(".click-kurt").click(function(e) {
e.preventDefault();
$(this).parent('.jeder').css('display', 'none');
$(this).parent('.jeder').next().css('display', 'inline');
});
});
</syntaxhighlight>
Net effect:
- JS-enabled readers (normal article view): identical experience to today — collapsed short form with `+`/`↩` toggle.
- No-JS contexts (previews, extracts, screen readers before JS loads, print, etc.): full citation is shown instead of nothing — a real regression fix rather than a cosmetic one.
One caveat worth being upfront about: this fixes it *if* the preview context renders the gadget's HTML/CSS but doesn't execute gadget JS (which is the far more common case, and what this code strongly suggests is happening). If Image 2 instead comes from a pipeline that strips the `.jeder`/`.jegirtin-text` elements out of the HTML entirely before this CSS/JS even gets a chance to apply, no on-wiki CSS/JS change can help — that'd need the extract-generation config changed instead. Given what this gadget file shows, though, I'd bet on the CSS-hide explanation.
{{veşêre-bin}}
Em dûre biceribînin eger xeletî tinebe, vî tiştî jî rast bikin. --[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 20:00, 23 tîrmeh 2026 (UTC)
:Ez APIya MediaWiki rind nizanim belkî Claude dizane:) Em nikarin bibêjin dema ku moda "''action=edit''" e fonksiyona <code>function vesere()</code> bi kar meyîne. [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 15:57, 24 tîrmeh 2026 (UTC)
::Na, di moda "edît"-ê de <code>var elmTab = null</code>... [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 16:13, 24 tîrmeh 2026 (UTC)
?:
<syntaxhighlight lang="js">
if (
mw.config.get('wgAction') === 'edit' ||
mw.config.get('wgAction') === 'submit'
){
var elmTab = [];
} else {
var elmTab = $(this).find('.j-pewist').clone();
}
</syntaxhighlight>
--[[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 16:31, 24 tîrmeh 2026 (UTC)
:Ez jî nizanim Claude çiqas ji mediawiki fêm dike lê heta niha ti tişt nîne ku min jê pirs kir û nikaribû çêke, bila wekî reklam nebe feqat Claude mikemmel e, dibêjim "li vir çima xeletiyeke wisa derdikeve" di dosyeya 2000 rêzî de diçe tiştê xelet tenê rast dike tiştekî din naguherîne. Chatgpt û aistudio qet wisa nakin, eynî dosyeyê deh cara dinivîsin, deh netîceyên cuda derdikevin :D
:Em dikarin vê amûrê wextê edit û submitê neaktîv bikin wekî <syntaxhighlight lang="js">if (!(action === "edit" || action === "submit")) {
:return;</syntaxhighlight> lê wê demê display:none wê çibe nizanim. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 18:23, 24 tîrmeh 2026 (UTC)
::display:none ne hewce ye ma jixwe di nav kodê [https://ku.wiktionary.org/w/index.php?title=MediaWiki:Gadget-jeder.js&oldid=6069025#L-49 L-49] de inline/none heye? [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 18:53, 24 tîrmeh 2026 (UTC)
:Min bi vî şiklî [https://ku.wiktionary.org/w/index.php?title=Bikarh%C3%AAner:Wikihez/vector-2022.js&diff=prev&oldid=6290816#L-28] ceriband feqat nexebitî. "display:none" di pêşdîtinê de dixebite feqat js naşixule. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 14:43, 25 tîrmeh 2026 (UTC)
::Kodên JSê pir hez nakim (pêşta hukurina APIya MWyê hewce bû) dîsa jî ez ê seh bikim :) [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 16:49, 27 tîrmeh 2026 (UTC)
:::Ez niha bi vî şiklî [https://ku.wiktionary.org/w/index.php?title=Bikarh%C3%AAner:Wikihez/test.js&oldid=6290820] [https://ku.wiktionary.org/w/index.php?title=Bikarh%C3%AAner:Wikihez/common.css&oldid=6290821#L-8] bi kar tînim ti problem nîne. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 17:09, 27 tîrmeh 2026 (UTC)
== [[MediaWiki:Gadget-PagePreviews.js]] ==
Ez dibêjim em vê amûrê jî çêkin [[:en:MediaWiki:Gadget-PagePreviews.js]] --[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 10:56, 3 tebax 2026 (UTC)
= Moda tarî =
== [[Şablon:wîkîpediya]] ==
Rengê tarî de xirab e.--[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 19:36, 4 tebax 2026 (UTC)
= Bot =
Karên ku bi botê werin çêkirin ji kerema xwe li vir binivîsin.
== Kategorî:Biwêj ==
[[:Kategorî:Biwêj]] divê were paqijkirin, lîsteya madeyên {{ş|biwêj}} çêke, yên ku tê de bûn, kirin, man hene filtre bike yên din bi destî tê çêkirin.—[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:17, 16 tîrmeh 2026 (UTC)
== Jêgirtin ==
Xistina jêgirtinên beşa [https://ku.wiktionary.org/w/index.php?search=insource%3A%2F%3D+*Ji+%5BWw%5D%C3%AAjey%C3%AA+*%3D%2F&title=Taybet%3AL%C3%AAger%C3%AEn&profile=advanced&fulltext=1&ns0=1&searchToken=8rh0bmw8dccsi7aynl6zli8uf ji wêjeyê] li beşa maneyê. —[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:17, 16 tîrmeh 2026 (UTC)
== Bota Toolforgeê ==
Botekî Toolforgeê lazim e ji bo ku xeletiyên biçûk wekî şablonên bi navên îngilîzî werin kurdîkirin yan jî valahiya beşan rast bike û hwd.—[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:17, 16 tîrmeh 2026 (UTC)
:Min [[Bikarhêner:Wikihez/skrîpt/py/kuwiktkozmetik.py|paqijiyen kozmetîk]] hazir kir feqat hîn navên şablonan naguhêre. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 20:05, 4 tebax 2026 (UTC)
== Updatew ==
Bota [[Bikarhêner:Wikihez/skrîpt/py/updateW.py|updateW]] divê were rojanekirin. Yan jî yekî nû were çêkirin. Şablonên {{ş|W}} di beşa tercimeyan de sererast dike û zimanan rêz dike. Ya niha xeletiya navê zimanî dide.—[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:17, 16 tîrmeh 2026 (UTC)
== sihir --> sêhr ==
Tercimeyên ''[[sêhr]]'' hemû dibêje ''sihir'' loma bi botê lazim e kirin ''sêhr''. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 17:43, 18 tîrmeh 2026 (UTC)
:Sihirbaz --> sêhrbaz [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 18:07, 18 tîrmeh 2026 (UTC)
== Tercimeyên dîroknas ==
Li tercimeyên [[dîroknas]], hevmaneyên wê hewce ye were îlawekirin. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 18:44, 18 tîrmeh 2026 (UTC)
== Mewlûd ==
Sererastkirina jêgirtinên mewlûdê [https://ku.wiktionary.org/w/index.php?search=insource%3A%2Fw%5C%3AMela+His%C3%AAn%C3%AA+Batey%C3%AE%2F&title=Taybet%3AL%C3%AAger%C3%AEn&ns0=1&searchToken=8m0tguy3sqt7edr4sg0u8hedo] wekî [https://ku.wiktionary.org/w/index.php?title=dax%C3%AEdar&curid=284303&diff=6265851&oldid=6142285] [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 09:43, 20 tîrmeh 2026 (UTC)
acr6fp4ujg7o5y968d702qs6oeeyjt6
6333754
6333747
2026-08-14T23:01:24Z
Ghybu
1393
/* MediaWiki:Gadget-start.js */ Bersiv
6333754
wikitext
text/x-wiki
{{/ser}}
= Karên ferhengî =
== Mane ==
* [[:Kategorî:Madeyên bê beşa mane]]
** [[:Kategorî:Madeyên bê beşa mane bi kurmancî]]
Li ser van rûpelan ev made hene ku maneyan wan nehatine nivîsin û divê werin nivîsin. —[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:17, 16 tîrmeh 2026 (UTC)
== Etîmolojî ==
*[[:Kategorî:Daxwazên etîmolojiyê]]
**[[:Kategorî:Daxwazên etîmolojiyê bi kurmancî]]
Li ser van rûpelan ev made hene ku etîmolojiya wan hîn nehatine nivîsin. Ji bo alîkariyê binêre [[WF:Etîmolojî]] —[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:17, 16 tîrmeh 2026 (UTC)
== Cureyê rêzimanî ==
* [[:Kategorî:Gotarên bê kategoriya rêzimanî]]
* [[:Kategorî:Gotarên bê kategoriya rêzimanî bi kurmancî]]
Li ser van rûpelan ev made hene ku cureyên wan yên rêzimanî hîn nehatine nivîsin. Ji bo alîkariyê binêre [[Alîkarî:Cureyên peyvan]] —[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:17, 16 tîrmeh 2026 (UTC)
== Kontrol ==
* [[:Kategorî:Kontrol]]
** [[:Kategorî:Kontrola maneyê]]
Ev madde bi botê hatine çêkirin, yek bi yek divê werin kontrolkirin. —[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:17, 16 tîrmeh 2026 (UTC)
= Şablon =
== IPA ==
* {{ş|IPA}} divê [[Modul:IPA]] bi kar bîne. —[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:17, 16 tîrmeh 2026 (UTC)
== Deng ==
Kurdîkirina belgekirina {{ş|deng}} lazim e.--[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 00:06, 19 tîrmeh 2026 (UTC)
= Modul =
== Modul:form of/templates ==
* [[Modul:form of/templates]]: Divê ev modul were rojanekirin û xeletiyên berê wekî ([[hevalê]]) werin rastkirin. —[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:17, 16 tîrmeh 2026 (UTC)
*:Merheba @[[Bikarhêner:Ghybu|Ghybu]] Te gotibû di vê modulê de xeletî hene, jkx tu dikarî li vir binivîsî çi kêmasî hene, daku wextê rojane dikim ez ji bîr nekim? [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:16, 21 tîrmeh 2026 (UTC)
*::Silav. Nizanim ji bîra min çûye... Herwiha ji bo çêkirina formên navdêran zanînên cîns û tîpa dawî bes e:
*::* (-ê, mê) => çemandî, bangkirin
*::* (-ê, nêr) => îzafe
*::* (-ê, mê û nêr) => îzafe (nêr), bangkirin (mê), çemandî (mê)
*::* (-a) => îzafe (mê)
*::* (-ekî) => îzafe û çemandî (nêr, nebinavkirî)
*::* (-eke) = > îzafe (mê, nebinavkirî)
*::* ...
*:: <code>if find(mw.title.getCurrentTitle().subpageText, 'ekî$') then ... end</code>
*::<code><nowiki>{{ku-tewîn-navForm|<navdêr>|<zayend>}</nowiki></code>
*::Tablo û nivîs di yekcarî de tên çêkirin...
*::Feqet problem lêzêdekirina mînakan e. [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 17:34, 21 tîrmeh 2026 (UTC)
*:::Lêzêdekirina kîjan nimûneyan? Ev koda js ji bo çi ye? Qisûrê nenêre min fêm nekir :/ [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 18:13, 21 tîrmeh 2026 (UTC)
*::::Li vira ([[hevalê#Formeke navdêrê]]) di bin maneyên 1. û 2. mînak nayên tevlî kirin :) [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 18:18, 21 tîrmeh 2026 (UTC)
*:::::Ev tercîh e, ne mecbûrî ye, em dikarin [https://ku.wiktionary.org/w/index.php?title=heval%C3%AA&diff=prev&oldid=6276350 wisa] bikin. Wekî din? [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 18:29, 21 tîrmeh 2026 (UTC)
*::::::Min li jor tênê got ku tenê parametreyên "navdêr" û "zayend" hewce nee. Bi '''[//ku.wiktionary.org/w/index.php?title=heval%C3%AA&curid=969734&diff=6276353&oldid=6276350 vî]''' awayî jî tê çêkirin. Parametreyên din ne hewce ne. [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 18:38, 21 tîrmeh 2026 (UTC)
*:::::::Ji bo wê şabloneke din lazim e, bila ev şablon wekî îngilîzî bimîne em ji bo kurmancî yekî din çêkin. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 18:42, 21 tîrmeh 2026 (UTC)
*::::::::[https://ku.wiktionary.org/w/index.php?title=heval%C3%AA&oldid=6276885 wisa] çawa ye? Bi min nivîsîna nimûneyan zêde ne lazim e ji ber ku ti kes serê xwe pê naêşîne. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 09:46, 23 tîrmeh 2026 (UTC)
*:::::::::@[[Bikarhêner:Ghybu|Ghybu]] Vê şablonê bi kar bînin an na? Navê şablonê kê çi be? [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 19:07, 24 tîrmeh 2026 (UTC)
== Modul:columns ==
* [[Modul:columns]] were rojanekirin û {{ş|kol3}} bila lînka ''nîşan bide'' deyne beriya sernavê, kolê di qutiya rengî de bila nebe. —[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:17, 16 tîrmeh 2026 (UTC)
== Modul:etymon ==
* [[Modul:etymon kevn]]: Rojanekirin hewce ye. —[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:17, 16 tîrmeh 2026 (UTC)
== [[Modul:ziman/code to canonical name]] ==
Belgekirina skrîptê û js divê were rastkirin. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 09:31, 22 tîrmeh 2026 (UTC)
:* [[MediaWiki:UpdateLanguageNameAndCode.js]]
:[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 09:50, 22 tîrmeh 2026 (UTC)
::* [[Modul:ziman/print]]
::[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 09:52, 22 tîrmeh 2026 (UTC)
:::*[[Modul:ziman/şablon]]
:::[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 09:56, 22 tîrmeh 2026 (UTC)
::::* [[MediaWiki:Gadget-translation editor.js/ziman.json]]
::::[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 11:06, 22 tîrmeh 2026 (UTC)
== [[Modul:quote]] ==
Piştî ev modul hate hazirkirin, lazim e navên jegirtinan werin rastkirin û li hemûyan {{param|jêgirtin}} were zêdekirin. Bnr. [[Gotûbêja şablonê:Jêgirtin/Ehmedê Xanî/Mem û Zîn]] [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 22:27, 5 tebax 2026 (UTC)
::Ev modul hema bêje hazir e. Hûn li ser van madeyan çi difikirin:
# {{para|tarîx}} lazim e full date be eger na, lazim e {{para|sal}} were bikaranîn. Feqat "'''2021''' kanûna pêşîn 23" bi vî şiklî bi min ne problem e çnkî derdê en.wikt "attestation" e delîla herî pêşî jî sal e.
#: {{demo|sep=wisa xuya dibe<br>|<nowiki>{{jêder-kitêb/ceribandin|en
|tarîx=23 December 2021|nivîskar=Harry Hobbs; George Williams|sernav=Micronations and the Search for Sovereignty|url=https://www.cambridge.org/core/books/micronations-and-the-search-for-sovereignty/B0414A3A322695D9EE71E4CDDFDA06DE|weşanxane=Cambridge University Press|rûpel=155|isbn=978-1-009-15012-5|jêgirtin=jêgirtin.|t=-}}</nowiki>}}
#{{para|amadekar}}/{{para|edîtor}}/{{para|terciman}} bi şiklê edîtoriya, amadekariya, tercimekirina
#: {{demo|sep=dide<br>|<nowiki>{{jêder-kitêb/ceribandin|en
|sernav=Medical Surgical Nursing|serî=Juta's Manual of Nursing|cildê-seriyê=volume 4|edîtor=Sophie Mataniele Mogotlane; Joyce Mokoena; Motshedisi Eunice Chauke; Anne Young|sal=2005|weşanxane=Juta Academic|isbn=978-0702171840|rûpel=!12-29|jêgirtin=jêgirtin|t=-}}</nowiki>}}
--[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 13:09, 10 tebax 2026 (UTC)
:@[[Bikarhêner:Bikarhêner|Bikarhêner]] û @[[Bikarhêner:Ghybu|Ghybu]] Hîn gelek tişt hene divê îzah bikin û fikrê we pirs bikim, feqat îzahkirin pir zor e, em dest bi bikaranînê bikin û dûre tiştên ku hûn naxwazin em dikarin biguherînîn, dibe? [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 13:11, 10 tebax 2026 (UTC)
::Dibe, piştî çêbû, em di praktîkê de bibînin ku çawa ye. -- [[Bikarhêner:Bikarhêner|Bikarhêner]] ([[Gotûbêja bikarhêner:Bikarhêner|gotûbêj]]) 18:05, 10 tebax 2026 (UTC)
= Javascript =
== [[Mediawiki:Gadget-citoid-helper.js]] ==
Ji bo bi citoidê kopîkirina malûmatên çavkaniyan amûreke wisa lazim e. Xisûsen ji ber ku bi çend amûrên din dikare were bikaranîn.
Feqat çend problem hene, şablonên me de kêmasiya parametreyan gelek in û xerîteyên citoidê hîn nehatine çêkirin. Wana sererast bikin dûre vê amûrê çêkin, piştre [[MediaWiki:Gadget-start.js|start.js]] û [[MediaWiki:Gadget-wikt.add-examples.js|add examples.js]] were rojanekirin.
- --[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 00:04, 19 tîrmeh 2026 (UTC)
:Merheba @[[Bikarhêner:Bikarhêner|Bikarhêner]], ez dibêjim karê Modul:quote zêde wext bistîne, bila em dest bi bikaranîna van amûran bikin dûre kêmasiyan em ê temam bikin înşela. Dikarî vana li cihên xwe yên rast kopî paste bikî?
# [[Special:PermanentLink/6291574|Bikarhêner:Wikihez/skrîpt/js/Gadget-citoid-helper.js]] --> [[Mediawiki:Gadget-citoid-helper.js]]
# Ya li jêr kopî bike qismê herî dawî ya AmûrênVeşartî li [[MediaWiki:Gadgets-definition]]:
## <code><nowiki>* citoid-helper[ResourceLoader|hidden|default|dependencies=mediawiki.util]|citoid-helper.js</nowiki></code>
--[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:58, 26 tîrmeh 2026 (UTC)
== [[MediaWiki:Gadget-start.js]] ==
Rojanekirin hewce ye. Min gelek tişt lê zêde kir lê ez niha test dikime. Piştre em bar bikin:
* [[Bikarhêner:Wikihez/Gadget-start.js]] --> [[MediaWiki:Gadget-start.js]]
* [[Bikarhêner:Wikihez/Gadget-start.css]] --> [[MediaWiki:Gadget-start.css]]
--[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 22:08, 17 tîrmeh 2026 (UTC)
:Min [[MediaWiki:Gadget-start/data.json|data.json]] çêkir ji bo ku bi hêsanî malûmatên heyî werin guhartin bêyî guhartina Javascriptê. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 19:49, 18 tîrmeh 2026 (UTC)
:Xeletiyên ku ji bîr nekim rast bikim:
:* Wextê min çavkanî "kitêb" hilbijart û bi destî tije kir xeletiyeke [https://ku.wiktionary.org/w/index.php?title=xezete&diff=prev&oldid=6265392 wisa] derket her kelîme hate lînkkirin.
:* <code>html("⠿")</code> ev ne lazim e.
:* textarea ji bo çavkaniyên jêgirtinan xaseten yên sernav hîn jî ne draggable e.
:* pêşdîtina zindî checkbox wextê tê rakirin, pêşdîtin winda nabe.
:* Butona mobîlê ya vekirina formê di moda tarî de belî nabe, tenê wekî qutiyeke tarî xuya dibe.
:* Metna hişyarkirinê di guhartina rûpelên heyî de lazim e baştir bikim.
:[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 23:51, 18 tîrmeh 2026 (UTC)
::Ev problem çêbûn, ez ê binêrim ka çi problemên din hene. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 14:15, 19 tîrmeh 2026 (UTC)
:::Çêke: Ji bo qismê çavkaniyê yek dikare API call û Kategorî:Çavkanî bi kar bîne ji bo ku şablon zêde bikî ji yên heyî. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 21:21, 19 tîrmeh 2026 (UTC)
::::Ev jî çêbû, min beşa çavkanî jî çêkir. Eger xeletî dernekeve û problema valahiya piştî etîketê ji bîr nekim, piştî rojanekirina amûrên linkify, û citoid em dikarin bar bikin. Ez ê ti tiştê nû îlawe nekim, zêde dirêj bû. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:14, 21 tîrmeh 2026 (UTC)
:::::Merheba @[[Bikarhêner:Bikarhêner|Bikarhêner]]. Dikarî wana bar bikî?
:::::* [[Bikarhêner:Wikihez/Gadget-start.js]] --> [[MediaWiki:Gadget-start.js]]
:::::* [[Bikarhêner:Wikihez/Gadget-start.css]] --> [[MediaWiki:Gadget-start.css]]
:::::* [[MediaWiki:Gadgets-definition]] wisa rojane bike:
:::::* start[ResourceLoader|default|package|dependencies=mediawiki.util,ext.gadget.StorageUtils,ext.gadget.citoid-helper]|start.js|start.css|start.js/data.json
:::::[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 09:39, 5 tebax 2026 (UTC)
{{şirove}} Dewama ''[[Special:PermanentLink/6333688|Gotûbêja bikarhêner:Rewiye tine#WF:Nû]]'' bila gotûbêja wî em spam nekin. :D
{{r|Ghybu}} dikarî [[Special:PermanentLink/6333689|vê htmlê]] binêrî claude rast fêm kiriye yan na? Daxîne û wek html qeyd bike. --[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 18:43, 14 tebax 2026 (UTC)
:Min seh wîkîyên din jî kir, li wîkiya fransî tiştekî wekî daxwaza min çêkirine (tiştên ku ne hewce ne wekî "tab" çêkirine an jî hatine vêşartin): [//fr.wiktionary.org/w/index.php?title=fdsdfdsf&action=edit&redlink=1]. Formata me yê berî jî bi vê lojîkê hatibû çêkirin, wekî de.wiktionary ([//de.wiktionary.org/w/index.php?title=sdfdsfsdfs&action=edit&preload=Vorlage:Formatvorlage_(Substantiv_vereinfacht)]) [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 19:01, 14 tebax 2026 (UTC)
::PS: Dîsa jî Claude min rind fêm kiriye :)) Feqet min got ku beşên Mane", "Bilêvkirin" û "Beşên din" cem hev (wekî "tab") ". Û dema ku tu terî di nav "Besên din" Hevmane, Jê, ... li wira werin dayîn. Wêne/Resim û Nimûne jî di nav beşa ("tab") "Mane" [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 19:17, 14 tebax 2026 (UTC)
::Erê ya fr.wikt min jî dîtibû jixwe fikrê tab min ji wan girtibû :D (feqat min li cem wan tenê tab-a maneyê dît yên din nedît çawa tê vekirin nizanim) Berê hemû beş piştî maneyê bibûn, dûre min sê Tab çêkir, Bingehîn+Lînkkirin+Bikaranîn. Niha lazim e Tabeke din çêkim. Ya ku claude çêkiriye bnr. [[Special:PermanentLink/6333698#L-7]] ne baş e bnr. [[Special:PermanentLink/6333703|qiyaskirinê li ser vê htmlê]] Êdî ez Claude abuse dikime ji ber ku Pro ye :D [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 19:26, 14 tebax 2026 (UTC)
:::Claude dibêje:
:::Good clarification — that's a real simplification, not just a relabel. Updated STEP_GROUPS from 5 tabs down to 3:
:::Mane — the definitions themselves, plus Wêne (image), now grouped in with it instead of sitting in a separate misc tab. Nimûne needed no change since it was already rendering inside each Mane sense block, not as its own step.
:::Bilêvkirin — unchanged, still just pronunciation.
:::Beşên din — everything else in one flat bucket: hevmane, jê, têkildar, herwiha binêre, formên alternatîv, dijmane, jornav, jêrnav, notên bikaranînê, bi alfabeyên din, dûnde, çavkanî, bêhtir bixwîne, tewandin, etîmolojî, zaravayên din, werger, and bnr-h — instead of being split across the old Bingehîn/Lînkkirin/Bikaranîn/Din tabs.
:::No DOM-order changes were needed this time — the fix from the blank-tab bug looks up the tab bar's position dynamically now, so it didn't matter that I regrouped which steps go where. Same two files, saved to your Wiki folder — worth another pass through all three tabs once you've pasted this in, same as last time. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 19:34, 14 tebax 2026 (UTC)
::::Mînak:
Ziman
---------------------------------------------
Cureyê rêzimanî (Navdêr)
Navdêr (hilbijêre) ┆ Cîns (hilbijêre) ┆ Jimar (hilbijêre)
- lêker -mê -yekjimar
- rengdêr -nêr -pirjimar
- ... -... -...
---------------------------------------------
Mane || Bilêvkirin || Beşên din
hilbijêre:
- mane - IPA - Hevmane
- nimûne - kîte - Dijmane
- wêne
Dema ku tu "Cureyê rêzimanî" dikî "Lêker" :
Cureyê rêzimanî (Lêker)
Lêker (hilbijêre) ┆ Cure (hilbijêre)
- navdêr -rehê niha
- rengdêr -rehê borî
- ... -...
---------------------------------------------
┆ : select/option ("tab" nîne, tê dîtin)<br>
|| : "tab"
-- [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 19:45, 14 tebax 2026 (UTC)
'''Sê-stûnî ("┆" = ne tab), li gorî Cureyê rêzimanî:'''
{| class="wikitable"
! Cureyê rêzimanî !! Stûna 2 !! Stûna 3 !! Têbînî
|-
| Navdêr / Serenav
| Cîns (hilbijêre ▾: mê / nêr / ... — tenê heke ziman zayendê rêzimanî hebe)
| '''Jimar''' (?) — pirs li jêr
| Qadên "Forma mê/nêr/pirjimar/yekjimar" niha jî li vir hene — ma ev di "Jimar"-ê de tên tevlihev kirin, an cuda dimînin?
|-
| Rengdêr
| (heman m/n/p/y forman ku Navdêr distîne)
| Sûperlatîv (sûp) / Komparatîv (komp)
| Ne li ser her du nîgaran hatiye behs kirin — ma sê-stûnî li vir jî tê bikaranîn?
|-
| Lêker
| '''Cure''' = Cureyê lêkerê (hilbijêre ▾: gerguhêz / negerguhêz / xwerû-... / pêkhatî-... / hevedudanî-... / biwêjî-... — 10 vebijêrk)
| Di heman stûnê de: Rehê dema niha / Rehê dema borî / Rehê dema bilanî (her sê qadên nivîsandinê ne, ne hilbijêrk in)
| Ma "Cure" her sê rehan di xwe de digire wek yek stûn, an her yek stûneke cuda ye?
|-
| Tîp (herf/sembol)
| Girdêk (gir) / Hûrek (hûr)
| —
| Ne behs kiriye
|-
| Her cureyek, li gorî zimên
| Transliterasyon (tr) / Transkrîpsiyon (ts)
| —
| Bi zimên ve girêdayî ye, ne bi cureyê rêzimanî ve
|-
| Her cureyek, tenê ziman=japonî
| Hanja / Translit. hanja
| —
| Ne bi cureyê rêzimanî ve girêdayî ye
|-
| Her cureyek
| '''Tercîhên pêşketî''' (kolapsî): form, formaalt, nekatcure, nekatcins, nekatçendterm, serlînkneke, nekatpalîndrom, neformtr
| —
| Vebijarkî, ji bo hemû cureyan
|}
'''Tabên jêrîn — Mane ‖ Bilêvkirin ‖ Beşên din ("||" = tab):'''
{| class="wikitable"
! Mane !! Bilêvkirin !! Beşên din (hemû 18 hêman)
|-
| mane, nimûne, wêne
| şablonên bilêvkirinê (mînak: IPA, kîte)
| tewandin, etîmolojî, bi zaravayên din, werger, jê, têkildar, herwiha binêre, formên alternatîv, hevmane, dijmane, jornav, jêrnav, notên bikaranînê, bi alfabeyên din, dûnde, çavkanî, bêhtir bixwîne, bnr-h
|}
'''Pirsên vekirî:'''
# "Jimar" (yekjimar/pirjimar) — qadeke ku nîşan dide têketî bi xwe yekjimar e an pirjimar e. Ev cuda ye ji "Forma yekjimar (y)"/"Forma pirjimar (p)" ya heyî (ku forma DÎN a kelîmeyê tomar dike). Herdu bimînin, an werin yek kirin?
# Ma sê-stûnî tenê ji bo Navdêr/Lêker e, an ji bo Rengdêr/Tîp jî heman mantiq derbas dibe?
# Di "Beşên din" de: dixwazî pêşî navnîşek/hilbijartinek nîşan bide (17 hêmanên din jî tê de), û qad tenê piştî hilbijartinê xuya bibin?
:Tu dikarî start.js ji Tercîh/ Amûran rakî û bi test.js li Amûran herî taliyê ye biceribînî. Claude ya li jor hazir kir, Jimar ez dikarim îzah bikim. Feqat bi min di tab-a maneyê de lazim e Bi zaravayên din (heta wek werger her car bila li rûpelan were zêdekirin) û werger jî hebe.--[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 20:18, 14 tebax 2026 (UTC)
:;Navdêr: Tenê "cîns" û "jimar" bes e. "Forma mê", "Forma nêr", ... nayê fêm kirin. Bi min wekî "Tercîhên pêşketî" bi navkî din veşartî çêke.
:;Lêker: "Cureyê lêkerê" nayê fêm kirin, bi min pêşta "geguhez/negerguhêz" were hilbijartin, paşê jî form "hevdudanî/pêkatî/..." ji ber ku her kes vana nizanî... Dîsa jî tu dizanî.
:Bi min beşên "Hevmane" û dijmane jî bike de nav beşa Mane ("tab") ji ber ku pirr tên xwestin.
:Şûnda Wêne jî Nimûne/jêgirtin...
:Herwiha hemû bi rengê şîn hatine çêkirin, nizanim beşên din (===) bi rengê gewr an reş çito dibe? [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 21:35, 14 tebax 2026 (UTC)
::Nimûne/jêgirtin, hevmane, Dijmane li binê her maneyê hene. ji ber ku wana bi maneyê ve girêdayî ne lazim e wisa bimîne feqat belkî şiklekî baştir bibînin. Hînbûna bikaranîna formeke nû bi qasî hînbûna koda wîkiyê zor e heqîqeten... [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 21:45, 14 tebax 2026 (UTC)
:::Min şaş fêm meke feqet te amûrek ji bo Wikihez çêkiriye :) Tu dixwazî ku hemû tiştên ku te çêkiriye tevlî vê Gadgetê bikî û bikarhênerên din jî bi kar bînin... Tu jî dizanî ku kesên ku tên vira çito peyv çêdikin: Ziman > Mane > Mînak > Hevmane > Dijmane ! Du Gadget çêke yek ji bo bikarhênerên ku hertim li vira ne, yekeke din jî ji bo bikarhênerên din (yên ku pirr nên vira).
:::Herwiha kesên ku hertim li vira ne bi Gadgetê gotar çênekin, ''copy/paste'' dikin. [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 22:12, 14 tebax 2026 (UTC)
::::Min xwest her tişt li ser rêza xwe be ji bo ku hîn bibin çi diçe kû derê feqat bi vî şiklî jî zêde dirêj û tevlihev dibe. Loma ez ê wekî tu dibêjî bikim her tiştê din bila collapsed pêşketî be. Ê ku dixwaze pê lê ke û binêre çi dikare were zêdekirin. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 22:26, 14 tebax 2026 (UTC)
:::::Niha baştir tê fêm kirin {{=)}} [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 23:01, 14 tebax 2026 (UTC)
== [[Mediawiki:Gadget-QQ.js]] ==
Ev amûr di şikle Minerva de. Her daîm vê xeletiyê dide:
<syntaxhighlight lang="js">
TypeError: Cannot read properties of null (reading 'addEventListener') at css () at runScript () at Array.<anonymous> () at flushCssBuffer ()
</syntaxhighlight> [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 19:29, 18 tîrmeh 2026 (UTC)
:* [[Bikarhêner:Wikihez/skrîpt/js/Gadget-QQ.js]] --> [[Mediawiki:Gadget-QQ.js]]
:* [[Bikarhêner:Wikihez/Gadget-QQ.css]] --> [[Mediawiki:Gadget-QQ.css]]
:Ez dibêjim çêbû lê ka çend roj biceribînim. Tiştên ku hatin sererastkirin:
:# Google Books API Key dikarî zêde bikî, dixe cookies û di gerokê de dimîne. Berê bê API Key dixebitiya lê êdî mecbûr e ku API Key-a te hebe, bidestxistina wê ne zêde zor e lê dîsa jî tevlihev e.
:# Êdî di mobîlê de dixebite, heta di mobîlê de xweştir xuya dike.
:# Moda tarî
:# OOUI dewsa jquery.ui
:# Li qutiyê çi dixwazî zêde bikî, dikare li gorî îsm, sifet, fiîl bitewîne. Lê ji bo fiîl tenê dikare çend heb inflection bîne.
:# Butona paqij bike lê zêde kir.
:# Çend paqijiyên jêgirtinên Google Kitêbê niha hene.
:[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 23:38, 18 tîrmeh 2026 (UTC)
::Tewandina fiîlan û xeletiya modulê lazim e were rastkirin. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 14:40, 21 tîrmeh 2026 (UTC)
== [[MediaWiki:Gadget-wikt.add-examples.js]] ==
Min ev amûr hinek rojane kir feqat çend problem hene berî ku bar bikin.
Tiştên ku min guhart:
# Êdî li sayfeyên bi {{ş|maneid}} jî dixebite,
# Cihê di wîkîtekstê de yê ku jêgirtin were îlawekirin baştir bû,
# [[Mediawiki:Gadget-citoid-helper.js|citoid helper]] zêde kir ji bo ku bi hêsanî çavkanî bi riya doi, isbn an urlyê werin tijîkirin.
* [[Bikarhêner:Wikihez/Gadget-wikt.add-examples.css]] --> [[MediaWiki:Gadget-wikt.add-examples.css]]
* [[Bikarhêner:Wikihez/Gadget-wikt.add-examples.js]] --> [[MediaWiki:Gadget-wikt.add-examples.js]]
- --[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 00:50, 19 tîrmeh 2026 (UTC)
:Min "wikt." qismên cache kirinê ya wîkiya fransî bi [[MediaWiki:Gadget-StorageUtils.js]] guhartiye. loma ji bîr nekin wê amûrê li [[MediaWiki:Gadgets-definition]] zêde bikin. û navê amûrê jî biguhêrînin. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 09:15, 23 tîrmeh 2026 (UTC)
::Berê li ser WF:ceribandin dixebitî. niha naxebite. Divê were rastkirin. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 22:10, 7 tebax 2026 (UTC)
== Gadget-translation editor ==
* [[MediaWiki:Gadget-translation editor.js]]: divê formata en.wîktê were bikaranîn ji ber ku me gelek tercime ji en.wîktê kopî kir û ev js hîn nikare formata wekî li jêr bi kar bîne.
<syntaxhighlight lang="wikitext">
* {{Z|sh}}:
*: Kirîlî:
*: Latînî
</syntaxhighlight>
—[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:17, 16 tîrmeh 2026 (UTC)
== [[Mediawiki:Gadget-linkify.js]] ==
* ''rûpeleke'' wekî<syntaxhighlight lang="wikitext">[[rûpeleke]]</syntaxhighlight> lînk dike, bi regexê belkî dikare wisa bike <syntaxhighlight lang="wikitext">[[rûpel]]eke</syntaxhighlight>
—[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:17, 16 tîrmeh 2026 (UTC)
* Amûreke din wekî [[User:Wikihez/Gadget-linkify.js|linkify]] lazim e ku herfên mezin biçûk bike ji bo kurmancî.—[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:17, 16 tîrmeh 2026 (UTC)
:{{r|Bikarhêner}} Merheba bira, dikarî viya jî bar bikî?:
* [[Special:PermanentLink/6291974|linkify]] --> [[Mediawiki:Gadget-linkify.js]]
Spas--[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 11:42, 29 tîrmeh 2026 (UTC)
:Dûre [https://ku.wiktionary.org/wiki/MediaWiki:Gadget-start.js#L-283 li vir] wiktviLinkify bike kuLinkify xêra xwe [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 11:51, 29 tîrmeh 2026 (UTC)
::Min ji bîr kir lê zêde bikim niha nikare "Dİ" bike "di", xeletiyeke berbelav a di nivîsên kurdî de, herfên din ên wekî ll yan rr jî hewce ne werin zêdekirin. Dûre em zêde bikin. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 21:42, 29 tîrmeh 2026 (UTC)
:::Min nû ferq kir, sayfeyên ku hîn nehatine çêkirin wîkîlînk nake. Problemeke mezin e divê were rastkirin. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 18:15, 30 tîrmeh 2026 (UTC)
::::Na, lînk dike, tiştekî din heye... [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 10:49, 31 tîrmeh 2026 (UTC)
== Amûra manayê ==
Amûreke din ji bo nivîsina maneyê wekî Nimûne zêde bike lazim e [https://ku.wiktionary.org/w/index.php?title=Bikarh%C3%AAner:Wikihez/test.js&oldid=6276876 js] [https://ku.wiktionary.org/w/index.php?title=%C5%9Eablon:ceribandin2&oldid=6265629 şablon] [https://ku.wiktionary.org/w/index.php?title=Bikarh%C3%AAner:Wikihez/common.css&oldid=6265642 css] --[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 09:12, 23 tîrmeh 2026 (UTC)
== [[MediaWiki:Gadget-jeder.js]] ==
@[[Bikarhêner:Ghybu|Ghybu]] Çavkaniyên jêderê di moda pêşdîtinê de jêderê vedişêre, ew jî min gelek eciz dike wextê çavkanî zêde dikim. Min ji Claude pirsî û kodan nîşanî wê da, wisa cewab da:
Yes — and this file actually explains the whole thing precisely, better than my earlier guess about extract-stripping.
What's happening: the CSS rule
<syntaxhighlight lang="css">
.jeder{
display:none;
}
</syntaxhighlight>
hides every citation by default, *unconditionally*. The only thing that ever makes it visible again is the gadget's JS: it finds each `.jeder`, builds the short "`— (year, author, +)`" summary from the `.j-pewist` fields, and either reveals the short version or — for citations with no `.j-pewist` fields — explicitly sets `display:inline` on the original.
So visibility of citations depends entirely on this JS running. In the normal article view (Image 1) it runs, so you see the collapsed "`(1918, E. Rehmî Ji Mala Hekariyan, Amadekar: M. E. Bozarslan, +)`" form. In whatever generated Image 2 — a hover-preview/extract/API render — gadget JS doesn't execute, so nothing ever removes the `display:none`, and the citation vanishes completely rather than degrading to "still visible, just not collapsed."
<b>The fix:</b> flip the default so the *un-collapsed* state is the safe fallback, and let JS do the hiding only after it successfully builds the short version. That way, any context without JS shows the full citation instead of nothing.
CSS — remove the blanket hide:
<syntaxhighlight lang="css">
.jeder {
/* intentionally no display:none here — see Gadget-... .js */
}
</syntaxhighlight>
JS — do the hiding from script, after the short form exists:
{{veşêre-ser}}
<syntaxhighlight lang="js">
// Ji bo şablonên [[Şablon:jêder]] hatiye nivîsandin.
// Parametreyên ku di navbera "<span class="j-pewist">...</span>" an "{{j-pêwîst|...}}" de ne venaşêre.
$(function() {
function nivisaKurtTevliBike(sund, nivisKurt) {
var zede = $('<a>+</a>')
.addClass('click')
.attr('href', '#')
.attr('title', 'zêdetir')
.css('font-weight', 'bold');
var kurt = $(' <a>↩</a>')
.addClass('click-kurt')
.attr('href', '#')
.attr('title', 'veşêre')
.css('font-weight', 'bold');
$('<span>' + nivisKurt + '</span>')
.append(zede).append(')')
.addClass('jeder-kurt')
.css('font-size', '0.85em')
.insertAfter(sund);
sund.append(' ').append(kurt);
// Only hide the full citation once the short summary actually exists.
// If this script never runs (no-JS clients, hover-preview extracts,
// action=render, etc.), the full citation stays visible instead of
// silently disappearing.
sund.css('display', 'none');
}
function vesere() {
$('.jeder').each(function() {
var elmTab = $(this).find('.j-pewist').clone();
if (elmTab.length) {
var elm = '';
for (var i = elmTab.length - 1; i >= 0; i--) {
elm = elmTab.eq(i).html() + ', ' + elm;
}
var nivisKurt = ' — (' + elm;
nivisaKurtTevliBike($(this), nivisKurt);
}
// else: no j-pewist fields to shorten — leave the full citation
// as it already renders (visible), nothing to do.
});
}
vesere();
$(".click").click(function(e) {
e.preventDefault();
$(this).parent('.jeder-kurt').css('display', 'none');
$(this).parent('.jeder-kurt').prev().css('display', 'inline');
});
$(".click-kurt").click(function(e) {
e.preventDefault();
$(this).parent('.jeder').css('display', 'none');
$(this).parent('.jeder').next().css('display', 'inline');
});
});
</syntaxhighlight>
Net effect:
- JS-enabled readers (normal article view): identical experience to today — collapsed short form with `+`/`↩` toggle.
- No-JS contexts (previews, extracts, screen readers before JS loads, print, etc.): full citation is shown instead of nothing — a real regression fix rather than a cosmetic one.
One caveat worth being upfront about: this fixes it *if* the preview context renders the gadget's HTML/CSS but doesn't execute gadget JS (which is the far more common case, and what this code strongly suggests is happening). If Image 2 instead comes from a pipeline that strips the `.jeder`/`.jegirtin-text` elements out of the HTML entirely before this CSS/JS even gets a chance to apply, no on-wiki CSS/JS change can help — that'd need the extract-generation config changed instead. Given what this gadget file shows, though, I'd bet on the CSS-hide explanation.
{{veşêre-bin}}
Em dûre biceribînin eger xeletî tinebe, vî tiştî jî rast bikin. --[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 20:00, 23 tîrmeh 2026 (UTC)
:Ez APIya MediaWiki rind nizanim belkî Claude dizane:) Em nikarin bibêjin dema ku moda "''action=edit''" e fonksiyona <code>function vesere()</code> bi kar meyîne. [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 15:57, 24 tîrmeh 2026 (UTC)
::Na, di moda "edît"-ê de <code>var elmTab = null</code>... [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 16:13, 24 tîrmeh 2026 (UTC)
?:
<syntaxhighlight lang="js">
if (
mw.config.get('wgAction') === 'edit' ||
mw.config.get('wgAction') === 'submit'
){
var elmTab = [];
} else {
var elmTab = $(this).find('.j-pewist').clone();
}
</syntaxhighlight>
--[[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 16:31, 24 tîrmeh 2026 (UTC)
:Ez jî nizanim Claude çiqas ji mediawiki fêm dike lê heta niha ti tişt nîne ku min jê pirs kir û nikaribû çêke, bila wekî reklam nebe feqat Claude mikemmel e, dibêjim "li vir çima xeletiyeke wisa derdikeve" di dosyeya 2000 rêzî de diçe tiştê xelet tenê rast dike tiştekî din naguherîne. Chatgpt û aistudio qet wisa nakin, eynî dosyeyê deh cara dinivîsin, deh netîceyên cuda derdikevin :D
:Em dikarin vê amûrê wextê edit û submitê neaktîv bikin wekî <syntaxhighlight lang="js">if (!(action === "edit" || action === "submit")) {
:return;</syntaxhighlight> lê wê demê display:none wê çibe nizanim. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 18:23, 24 tîrmeh 2026 (UTC)
::display:none ne hewce ye ma jixwe di nav kodê [https://ku.wiktionary.org/w/index.php?title=MediaWiki:Gadget-jeder.js&oldid=6069025#L-49 L-49] de inline/none heye? [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 18:53, 24 tîrmeh 2026 (UTC)
:Min bi vî şiklî [https://ku.wiktionary.org/w/index.php?title=Bikarh%C3%AAner:Wikihez/vector-2022.js&diff=prev&oldid=6290816#L-28] ceriband feqat nexebitî. "display:none" di pêşdîtinê de dixebite feqat js naşixule. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 14:43, 25 tîrmeh 2026 (UTC)
::Kodên JSê pir hez nakim (pêşta hukurina APIya MWyê hewce bû) dîsa jî ez ê seh bikim :) [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 16:49, 27 tîrmeh 2026 (UTC)
:::Ez niha bi vî şiklî [https://ku.wiktionary.org/w/index.php?title=Bikarh%C3%AAner:Wikihez/test.js&oldid=6290820] [https://ku.wiktionary.org/w/index.php?title=Bikarh%C3%AAner:Wikihez/common.css&oldid=6290821#L-8] bi kar tînim ti problem nîne. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 17:09, 27 tîrmeh 2026 (UTC)
== [[MediaWiki:Gadget-PagePreviews.js]] ==
Ez dibêjim em vê amûrê jî çêkin [[:en:MediaWiki:Gadget-PagePreviews.js]] --[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 10:56, 3 tebax 2026 (UTC)
= Moda tarî =
== [[Şablon:wîkîpediya]] ==
Rengê tarî de xirab e.--[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 19:36, 4 tebax 2026 (UTC)
= Bot =
Karên ku bi botê werin çêkirin ji kerema xwe li vir binivîsin.
== Kategorî:Biwêj ==
[[:Kategorî:Biwêj]] divê were paqijkirin, lîsteya madeyên {{ş|biwêj}} çêke, yên ku tê de bûn, kirin, man hene filtre bike yên din bi destî tê çêkirin.—[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:17, 16 tîrmeh 2026 (UTC)
== Jêgirtin ==
Xistina jêgirtinên beşa [https://ku.wiktionary.org/w/index.php?search=insource%3A%2F%3D+*Ji+%5BWw%5D%C3%AAjey%C3%AA+*%3D%2F&title=Taybet%3AL%C3%AAger%C3%AEn&profile=advanced&fulltext=1&ns0=1&searchToken=8rh0bmw8dccsi7aynl6zli8uf ji wêjeyê] li beşa maneyê. —[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:17, 16 tîrmeh 2026 (UTC)
== Bota Toolforgeê ==
Botekî Toolforgeê lazim e ji bo ku xeletiyên biçûk wekî şablonên bi navên îngilîzî werin kurdîkirin yan jî valahiya beşan rast bike û hwd.—[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:17, 16 tîrmeh 2026 (UTC)
:Min [[Bikarhêner:Wikihez/skrîpt/py/kuwiktkozmetik.py|paqijiyen kozmetîk]] hazir kir feqat hîn navên şablonan naguhêre. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 20:05, 4 tebax 2026 (UTC)
== Updatew ==
Bota [[Bikarhêner:Wikihez/skrîpt/py/updateW.py|updateW]] divê were rojanekirin. Yan jî yekî nû were çêkirin. Şablonên {{ş|W}} di beşa tercimeyan de sererast dike û zimanan rêz dike. Ya niha xeletiya navê zimanî dide.—[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:17, 16 tîrmeh 2026 (UTC)
== sihir --> sêhr ==
Tercimeyên ''[[sêhr]]'' hemû dibêje ''sihir'' loma bi botê lazim e kirin ''sêhr''. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 17:43, 18 tîrmeh 2026 (UTC)
:Sihirbaz --> sêhrbaz [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 18:07, 18 tîrmeh 2026 (UTC)
== Tercimeyên dîroknas ==
Li tercimeyên [[dîroknas]], hevmaneyên wê hewce ye were îlawekirin. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 18:44, 18 tîrmeh 2026 (UTC)
== Mewlûd ==
Sererastkirina jêgirtinên mewlûdê [https://ku.wiktionary.org/w/index.php?search=insource%3A%2Fw%5C%3AMela+His%C3%AAn%C3%AA+Batey%C3%AE%2F&title=Taybet%3AL%C3%AAger%C3%AEn&ns0=1&searchToken=8m0tguy3sqt7edr4sg0u8hedo] wekî [https://ku.wiktionary.org/w/index.php?title=dax%C3%AEdar&curid=284303&diff=6265851&oldid=6142285] [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 09:43, 20 tîrmeh 2026 (UTC)
f1z4kahuvf5tyuoskmzm8ojzq1x2vyj
6333755
6333754
2026-08-14T23:12:15Z
Wikihez
7344
/* MediaWiki:Gadget-start.js */ Bersiv
6333755
wikitext
text/x-wiki
{{/ser}}
= Karên ferhengî =
== Mane ==
* [[:Kategorî:Madeyên bê beşa mane]]
** [[:Kategorî:Madeyên bê beşa mane bi kurmancî]]
Li ser van rûpelan ev made hene ku maneyan wan nehatine nivîsin û divê werin nivîsin. —[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:17, 16 tîrmeh 2026 (UTC)
== Etîmolojî ==
*[[:Kategorî:Daxwazên etîmolojiyê]]
**[[:Kategorî:Daxwazên etîmolojiyê bi kurmancî]]
Li ser van rûpelan ev made hene ku etîmolojiya wan hîn nehatine nivîsin. Ji bo alîkariyê binêre [[WF:Etîmolojî]] —[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:17, 16 tîrmeh 2026 (UTC)
== Cureyê rêzimanî ==
* [[:Kategorî:Gotarên bê kategoriya rêzimanî]]
* [[:Kategorî:Gotarên bê kategoriya rêzimanî bi kurmancî]]
Li ser van rûpelan ev made hene ku cureyên wan yên rêzimanî hîn nehatine nivîsin. Ji bo alîkariyê binêre [[Alîkarî:Cureyên peyvan]] —[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:17, 16 tîrmeh 2026 (UTC)
== Kontrol ==
* [[:Kategorî:Kontrol]]
** [[:Kategorî:Kontrola maneyê]]
Ev madde bi botê hatine çêkirin, yek bi yek divê werin kontrolkirin. —[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:17, 16 tîrmeh 2026 (UTC)
= Şablon =
== IPA ==
* {{ş|IPA}} divê [[Modul:IPA]] bi kar bîne. —[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:17, 16 tîrmeh 2026 (UTC)
== Deng ==
Kurdîkirina belgekirina {{ş|deng}} lazim e.--[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 00:06, 19 tîrmeh 2026 (UTC)
= Modul =
== Modul:form of/templates ==
* [[Modul:form of/templates]]: Divê ev modul were rojanekirin û xeletiyên berê wekî ([[hevalê]]) werin rastkirin. —[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:17, 16 tîrmeh 2026 (UTC)
*:Merheba @[[Bikarhêner:Ghybu|Ghybu]] Te gotibû di vê modulê de xeletî hene, jkx tu dikarî li vir binivîsî çi kêmasî hene, daku wextê rojane dikim ez ji bîr nekim? [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:16, 21 tîrmeh 2026 (UTC)
*::Silav. Nizanim ji bîra min çûye... Herwiha ji bo çêkirina formên navdêran zanînên cîns û tîpa dawî bes e:
*::* (-ê, mê) => çemandî, bangkirin
*::* (-ê, nêr) => îzafe
*::* (-ê, mê û nêr) => îzafe (nêr), bangkirin (mê), çemandî (mê)
*::* (-a) => îzafe (mê)
*::* (-ekî) => îzafe û çemandî (nêr, nebinavkirî)
*::* (-eke) = > îzafe (mê, nebinavkirî)
*::* ...
*:: <code>if find(mw.title.getCurrentTitle().subpageText, 'ekî$') then ... end</code>
*::<code><nowiki>{{ku-tewîn-navForm|<navdêr>|<zayend>}</nowiki></code>
*::Tablo û nivîs di yekcarî de tên çêkirin...
*::Feqet problem lêzêdekirina mînakan e. [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 17:34, 21 tîrmeh 2026 (UTC)
*:::Lêzêdekirina kîjan nimûneyan? Ev koda js ji bo çi ye? Qisûrê nenêre min fêm nekir :/ [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 18:13, 21 tîrmeh 2026 (UTC)
*::::Li vira ([[hevalê#Formeke navdêrê]]) di bin maneyên 1. û 2. mînak nayên tevlî kirin :) [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 18:18, 21 tîrmeh 2026 (UTC)
*:::::Ev tercîh e, ne mecbûrî ye, em dikarin [https://ku.wiktionary.org/w/index.php?title=heval%C3%AA&diff=prev&oldid=6276350 wisa] bikin. Wekî din? [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 18:29, 21 tîrmeh 2026 (UTC)
*::::::Min li jor tênê got ku tenê parametreyên "navdêr" û "zayend" hewce nee. Bi '''[//ku.wiktionary.org/w/index.php?title=heval%C3%AA&curid=969734&diff=6276353&oldid=6276350 vî]''' awayî jî tê çêkirin. Parametreyên din ne hewce ne. [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 18:38, 21 tîrmeh 2026 (UTC)
*:::::::Ji bo wê şabloneke din lazim e, bila ev şablon wekî îngilîzî bimîne em ji bo kurmancî yekî din çêkin. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 18:42, 21 tîrmeh 2026 (UTC)
*::::::::[https://ku.wiktionary.org/w/index.php?title=heval%C3%AA&oldid=6276885 wisa] çawa ye? Bi min nivîsîna nimûneyan zêde ne lazim e ji ber ku ti kes serê xwe pê naêşîne. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 09:46, 23 tîrmeh 2026 (UTC)
*:::::::::@[[Bikarhêner:Ghybu|Ghybu]] Vê şablonê bi kar bînin an na? Navê şablonê kê çi be? [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 19:07, 24 tîrmeh 2026 (UTC)
== Modul:columns ==
* [[Modul:columns]] were rojanekirin û {{ş|kol3}} bila lînka ''nîşan bide'' deyne beriya sernavê, kolê di qutiya rengî de bila nebe. —[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:17, 16 tîrmeh 2026 (UTC)
== Modul:etymon ==
* [[Modul:etymon kevn]]: Rojanekirin hewce ye. —[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:17, 16 tîrmeh 2026 (UTC)
== [[Modul:ziman/code to canonical name]] ==
Belgekirina skrîptê û js divê were rastkirin. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 09:31, 22 tîrmeh 2026 (UTC)
:* [[MediaWiki:UpdateLanguageNameAndCode.js]]
:[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 09:50, 22 tîrmeh 2026 (UTC)
::* [[Modul:ziman/print]]
::[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 09:52, 22 tîrmeh 2026 (UTC)
:::*[[Modul:ziman/şablon]]
:::[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 09:56, 22 tîrmeh 2026 (UTC)
::::* [[MediaWiki:Gadget-translation editor.js/ziman.json]]
::::[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 11:06, 22 tîrmeh 2026 (UTC)
== [[Modul:quote]] ==
Piştî ev modul hate hazirkirin, lazim e navên jegirtinan werin rastkirin û li hemûyan {{param|jêgirtin}} were zêdekirin. Bnr. [[Gotûbêja şablonê:Jêgirtin/Ehmedê Xanî/Mem û Zîn]] [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 22:27, 5 tebax 2026 (UTC)
::Ev modul hema bêje hazir e. Hûn li ser van madeyan çi difikirin:
# {{para|tarîx}} lazim e full date be eger na, lazim e {{para|sal}} were bikaranîn. Feqat "'''2021''' kanûna pêşîn 23" bi vî şiklî bi min ne problem e çnkî derdê en.wikt "attestation" e delîla herî pêşî jî sal e.
#: {{demo|sep=wisa xuya dibe<br>|<nowiki>{{jêder-kitêb/ceribandin|en
|tarîx=23 December 2021|nivîskar=Harry Hobbs; George Williams|sernav=Micronations and the Search for Sovereignty|url=https://www.cambridge.org/core/books/micronations-and-the-search-for-sovereignty/B0414A3A322695D9EE71E4CDDFDA06DE|weşanxane=Cambridge University Press|rûpel=155|isbn=978-1-009-15012-5|jêgirtin=jêgirtin.|t=-}}</nowiki>}}
#{{para|amadekar}}/{{para|edîtor}}/{{para|terciman}} bi şiklê edîtoriya, amadekariya, tercimekirina
#: {{demo|sep=dide<br>|<nowiki>{{jêder-kitêb/ceribandin|en
|sernav=Medical Surgical Nursing|serî=Juta's Manual of Nursing|cildê-seriyê=volume 4|edîtor=Sophie Mataniele Mogotlane; Joyce Mokoena; Motshedisi Eunice Chauke; Anne Young|sal=2005|weşanxane=Juta Academic|isbn=978-0702171840|rûpel=!12-29|jêgirtin=jêgirtin|t=-}}</nowiki>}}
--[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 13:09, 10 tebax 2026 (UTC)
:@[[Bikarhêner:Bikarhêner|Bikarhêner]] û @[[Bikarhêner:Ghybu|Ghybu]] Hîn gelek tişt hene divê îzah bikin û fikrê we pirs bikim, feqat îzahkirin pir zor e, em dest bi bikaranînê bikin û dûre tiştên ku hûn naxwazin em dikarin biguherînîn, dibe? [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 13:11, 10 tebax 2026 (UTC)
::Dibe, piştî çêbû, em di praktîkê de bibînin ku çawa ye. -- [[Bikarhêner:Bikarhêner|Bikarhêner]] ([[Gotûbêja bikarhêner:Bikarhêner|gotûbêj]]) 18:05, 10 tebax 2026 (UTC)
= Javascript =
== [[Mediawiki:Gadget-citoid-helper.js]] ==
Ji bo bi citoidê kopîkirina malûmatên çavkaniyan amûreke wisa lazim e. Xisûsen ji ber ku bi çend amûrên din dikare were bikaranîn.
Feqat çend problem hene, şablonên me de kêmasiya parametreyan gelek in û xerîteyên citoidê hîn nehatine çêkirin. Wana sererast bikin dûre vê amûrê çêkin, piştre [[MediaWiki:Gadget-start.js|start.js]] û [[MediaWiki:Gadget-wikt.add-examples.js|add examples.js]] were rojanekirin.
- --[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 00:04, 19 tîrmeh 2026 (UTC)
:Merheba @[[Bikarhêner:Bikarhêner|Bikarhêner]], ez dibêjim karê Modul:quote zêde wext bistîne, bila em dest bi bikaranîna van amûran bikin dûre kêmasiyan em ê temam bikin înşela. Dikarî vana li cihên xwe yên rast kopî paste bikî?
# [[Special:PermanentLink/6291574|Bikarhêner:Wikihez/skrîpt/js/Gadget-citoid-helper.js]] --> [[Mediawiki:Gadget-citoid-helper.js]]
# Ya li jêr kopî bike qismê herî dawî ya AmûrênVeşartî li [[MediaWiki:Gadgets-definition]]:
## <code><nowiki>* citoid-helper[ResourceLoader|hidden|default|dependencies=mediawiki.util]|citoid-helper.js</nowiki></code>
--[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:58, 26 tîrmeh 2026 (UTC)
== [[MediaWiki:Gadget-start.js]] ==
Rojanekirin hewce ye. Min gelek tişt lê zêde kir lê ez niha test dikime. Piştre em bar bikin:
* [[Bikarhêner:Wikihez/Gadget-start.js]] --> [[MediaWiki:Gadget-start.js]]
* [[Bikarhêner:Wikihez/Gadget-start.css]] --> [[MediaWiki:Gadget-start.css]]
--[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 22:08, 17 tîrmeh 2026 (UTC)
:Min [[MediaWiki:Gadget-start/data.json|data.json]] çêkir ji bo ku bi hêsanî malûmatên heyî werin guhartin bêyî guhartina Javascriptê. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 19:49, 18 tîrmeh 2026 (UTC)
:Xeletiyên ku ji bîr nekim rast bikim:
:* Wextê min çavkanî "kitêb" hilbijart û bi destî tije kir xeletiyeke [https://ku.wiktionary.org/w/index.php?title=xezete&diff=prev&oldid=6265392 wisa] derket her kelîme hate lînkkirin.
:* <code>html("⠿")</code> ev ne lazim e.
:* textarea ji bo çavkaniyên jêgirtinan xaseten yên sernav hîn jî ne draggable e.
:* pêşdîtina zindî checkbox wextê tê rakirin, pêşdîtin winda nabe.
:* Butona mobîlê ya vekirina formê di moda tarî de belî nabe, tenê wekî qutiyeke tarî xuya dibe.
:* Metna hişyarkirinê di guhartina rûpelên heyî de lazim e baştir bikim.
:[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 23:51, 18 tîrmeh 2026 (UTC)
::Ev problem çêbûn, ez ê binêrim ka çi problemên din hene. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 14:15, 19 tîrmeh 2026 (UTC)
:::Çêke: Ji bo qismê çavkaniyê yek dikare API call û Kategorî:Çavkanî bi kar bîne ji bo ku şablon zêde bikî ji yên heyî. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 21:21, 19 tîrmeh 2026 (UTC)
::::Ev jî çêbû, min beşa çavkanî jî çêkir. Eger xeletî dernekeve û problema valahiya piştî etîketê ji bîr nekim, piştî rojanekirina amûrên linkify, û citoid em dikarin bar bikin. Ez ê ti tiştê nû îlawe nekim, zêde dirêj bû. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:14, 21 tîrmeh 2026 (UTC)
:::::Merheba @[[Bikarhêner:Bikarhêner|Bikarhêner]]. Dikarî wana bar bikî?
:::::* [[Bikarhêner:Wikihez/Gadget-start.js]] --> [[MediaWiki:Gadget-start.js]]
:::::* [[Bikarhêner:Wikihez/Gadget-start.css]] --> [[MediaWiki:Gadget-start.css]]
:::::* [[MediaWiki:Gadgets-definition]] wisa rojane bike:
:::::* start[ResourceLoader|default|package|dependencies=mediawiki.util,ext.gadget.StorageUtils,ext.gadget.citoid-helper]|start.js|start.css|start.js/data.json
:::::[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 09:39, 5 tebax 2026 (UTC)
{{şirove}} Dewama ''[[Special:PermanentLink/6333688|Gotûbêja bikarhêner:Rewiye tine#WF:Nû]]'' bila gotûbêja wî em spam nekin. :D
{{r|Ghybu}} dikarî [[Special:PermanentLink/6333689|vê htmlê]] binêrî claude rast fêm kiriye yan na? Daxîne û wek html qeyd bike. --[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 18:43, 14 tebax 2026 (UTC)
:Min seh wîkîyên din jî kir, li wîkiya fransî tiştekî wekî daxwaza min çêkirine (tiştên ku ne hewce ne wekî "tab" çêkirine an jî hatine vêşartin): [//fr.wiktionary.org/w/index.php?title=fdsdfdsf&action=edit&redlink=1]. Formata me yê berî jî bi vê lojîkê hatibû çêkirin, wekî de.wiktionary ([//de.wiktionary.org/w/index.php?title=sdfdsfsdfs&action=edit&preload=Vorlage:Formatvorlage_(Substantiv_vereinfacht)]) [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 19:01, 14 tebax 2026 (UTC)
::PS: Dîsa jî Claude min rind fêm kiriye :)) Feqet min got ku beşên Mane", "Bilêvkirin" û "Beşên din" cem hev (wekî "tab") ". Û dema ku tu terî di nav "Besên din" Hevmane, Jê, ... li wira werin dayîn. Wêne/Resim û Nimûne jî di nav beşa ("tab") "Mane" [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 19:17, 14 tebax 2026 (UTC)
::Erê ya fr.wikt min jî dîtibû jixwe fikrê tab min ji wan girtibû :D (feqat min li cem wan tenê tab-a maneyê dît yên din nedît çawa tê vekirin nizanim) Berê hemû beş piştî maneyê bibûn, dûre min sê Tab çêkir, Bingehîn+Lînkkirin+Bikaranîn. Niha lazim e Tabeke din çêkim. Ya ku claude çêkiriye bnr. [[Special:PermanentLink/6333698#L-7]] ne baş e bnr. [[Special:PermanentLink/6333703|qiyaskirinê li ser vê htmlê]] Êdî ez Claude abuse dikime ji ber ku Pro ye :D [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 19:26, 14 tebax 2026 (UTC)
:::Claude dibêje:
:::Good clarification — that's a real simplification, not just a relabel. Updated STEP_GROUPS from 5 tabs down to 3:
:::Mane — the definitions themselves, plus Wêne (image), now grouped in with it instead of sitting in a separate misc tab. Nimûne needed no change since it was already rendering inside each Mane sense block, not as its own step.
:::Bilêvkirin — unchanged, still just pronunciation.
:::Beşên din — everything else in one flat bucket: hevmane, jê, têkildar, herwiha binêre, formên alternatîv, dijmane, jornav, jêrnav, notên bikaranînê, bi alfabeyên din, dûnde, çavkanî, bêhtir bixwîne, tewandin, etîmolojî, zaravayên din, werger, and bnr-h — instead of being split across the old Bingehîn/Lînkkirin/Bikaranîn/Din tabs.
:::No DOM-order changes were needed this time — the fix from the blank-tab bug looks up the tab bar's position dynamically now, so it didn't matter that I regrouped which steps go where. Same two files, saved to your Wiki folder — worth another pass through all three tabs once you've pasted this in, same as last time. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 19:34, 14 tebax 2026 (UTC)
::::Mînak:
Ziman
---------------------------------------------
Cureyê rêzimanî (Navdêr)
Navdêr (hilbijêre) ┆ Cîns (hilbijêre) ┆ Jimar (hilbijêre)
- lêker -mê -yekjimar
- rengdêr -nêr -pirjimar
- ... -... -...
---------------------------------------------
Mane || Bilêvkirin || Beşên din
hilbijêre:
- mane - IPA - Hevmane
- nimûne - kîte - Dijmane
- wêne
Dema ku tu "Cureyê rêzimanî" dikî "Lêker" :
Cureyê rêzimanî (Lêker)
Lêker (hilbijêre) ┆ Cure (hilbijêre)
- navdêr -rehê niha
- rengdêr -rehê borî
- ... -...
---------------------------------------------
┆ : select/option ("tab" nîne, tê dîtin)<br>
|| : "tab"
-- [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 19:45, 14 tebax 2026 (UTC)
'''Sê-stûnî ("┆" = ne tab), li gorî Cureyê rêzimanî:'''
{| class="wikitable"
! Cureyê rêzimanî !! Stûna 2 !! Stûna 3 !! Têbînî
|-
| Navdêr / Serenav
| Cîns (hilbijêre ▾: mê / nêr / ... — tenê heke ziman zayendê rêzimanî hebe)
| '''Jimar''' (?) — pirs li jêr
| Qadên "Forma mê/nêr/pirjimar/yekjimar" niha jî li vir hene — ma ev di "Jimar"-ê de tên tevlihev kirin, an cuda dimînin?
|-
| Rengdêr
| (heman m/n/p/y forman ku Navdêr distîne)
| Sûperlatîv (sûp) / Komparatîv (komp)
| Ne li ser her du nîgaran hatiye behs kirin — ma sê-stûnî li vir jî tê bikaranîn?
|-
| Lêker
| '''Cure''' = Cureyê lêkerê (hilbijêre ▾: gerguhêz / negerguhêz / xwerû-... / pêkhatî-... / hevedudanî-... / biwêjî-... — 10 vebijêrk)
| Di heman stûnê de: Rehê dema niha / Rehê dema borî / Rehê dema bilanî (her sê qadên nivîsandinê ne, ne hilbijêrk in)
| Ma "Cure" her sê rehan di xwe de digire wek yek stûn, an her yek stûneke cuda ye?
|-
| Tîp (herf/sembol)
| Girdêk (gir) / Hûrek (hûr)
| —
| Ne behs kiriye
|-
| Her cureyek, li gorî zimên
| Transliterasyon (tr) / Transkrîpsiyon (ts)
| —
| Bi zimên ve girêdayî ye, ne bi cureyê rêzimanî ve
|-
| Her cureyek, tenê ziman=japonî
| Hanja / Translit. hanja
| —
| Ne bi cureyê rêzimanî ve girêdayî ye
|-
| Her cureyek
| '''Tercîhên pêşketî''' (kolapsî): form, formaalt, nekatcure, nekatcins, nekatçendterm, serlînkneke, nekatpalîndrom, neformtr
| —
| Vebijarkî, ji bo hemû cureyan
|}
'''Tabên jêrîn — Mane ‖ Bilêvkirin ‖ Beşên din ("||" = tab):'''
{| class="wikitable"
! Mane !! Bilêvkirin !! Beşên din (hemû 18 hêman)
|-
| mane, nimûne, wêne
| şablonên bilêvkirinê (mînak: IPA, kîte)
| tewandin, etîmolojî, bi zaravayên din, werger, jê, têkildar, herwiha binêre, formên alternatîv, hevmane, dijmane, jornav, jêrnav, notên bikaranînê, bi alfabeyên din, dûnde, çavkanî, bêhtir bixwîne, bnr-h
|}
'''Pirsên vekirî:'''
# "Jimar" (yekjimar/pirjimar) — qadeke ku nîşan dide têketî bi xwe yekjimar e an pirjimar e. Ev cuda ye ji "Forma yekjimar (y)"/"Forma pirjimar (p)" ya heyî (ku forma DÎN a kelîmeyê tomar dike). Herdu bimînin, an werin yek kirin?
# Ma sê-stûnî tenê ji bo Navdêr/Lêker e, an ji bo Rengdêr/Tîp jî heman mantiq derbas dibe?
# Di "Beşên din" de: dixwazî pêşî navnîşek/hilbijartinek nîşan bide (17 hêmanên din jî tê de), û qad tenê piştî hilbijartinê xuya bibin?
:Tu dikarî start.js ji Tercîh/ Amûran rakî û bi test.js li Amûran herî taliyê ye biceribînî. Claude ya li jor hazir kir, Jimar ez dikarim îzah bikim. Feqat bi min di tab-a maneyê de lazim e Bi zaravayên din (heta wek werger her car bila li rûpelan were zêdekirin) û werger jî hebe.--[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 20:18, 14 tebax 2026 (UTC)
:;Navdêr: Tenê "cîns" û "jimar" bes e. "Forma mê", "Forma nêr", ... nayê fêm kirin. Bi min wekî "Tercîhên pêşketî" bi navkî din veşartî çêke.
:;Lêker: "Cureyê lêkerê" nayê fêm kirin, bi min pêşta "geguhez/negerguhêz" were hilbijartin, paşê jî form "hevdudanî/pêkatî/..." ji ber ku her kes vana nizanî... Dîsa jî tu dizanî.
:Bi min beşên "Hevmane" û dijmane jî bike de nav beşa Mane ("tab") ji ber ku pirr tên xwestin.
:Şûnda Wêne jî Nimûne/jêgirtin...
:Herwiha hemû bi rengê şîn hatine çêkirin, nizanim beşên din (===) bi rengê gewr an reş çito dibe? [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 21:35, 14 tebax 2026 (UTC)
::Nimûne/jêgirtin, hevmane, Dijmane li binê her maneyê hene. ji ber ku wana bi maneyê ve girêdayî ne lazim e wisa bimîne feqat belkî şiklekî baştir bibînin. Hînbûna bikaranîna formeke nû bi qasî hînbûna koda wîkiyê zor e heqîqeten... [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 21:45, 14 tebax 2026 (UTC)
:::Min şaş fêm meke feqet te amûrek ji bo Wikihez çêkiriye :) Tu dixwazî ku hemû tiştên ku te çêkiriye tevlî vê Gadgetê bikî û bikarhênerên din jî bi kar bînin... Tu jî dizanî ku kesên ku tên vira çito peyv çêdikin: Ziman > Mane > Mînak > Hevmane > Dijmane ! Du Gadget çêke yek ji bo bikarhênerên ku hertim li vira ne, yekeke din jî ji bo bikarhênerên din (yên ku pirr nên vira).
:::Herwiha kesên ku hertim li vira ne bi Gadgetê gotar çênekin, ''copy/paste'' dikin. [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 22:12, 14 tebax 2026 (UTC)
::::Min xwest her tişt li ser rêza xwe be ji bo ku hîn bibin çi diçe kû derê feqat bi vî şiklî jî zêde dirêj û tevlihev dibe. Loma ez ê wekî tu dibêjî bikim her tiştê din bila collapsed pêşketî be. Ê ku dixwaze pê lê ke û binêre çi dikare were zêdekirin. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 22:26, 14 tebax 2026 (UTC)
:::::Niha baştir tê fêm kirin {{=)}} [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 23:01, 14 tebax 2026 (UTC)
::::::Min ji Opus 5 û Design Tool îstifade kiriye hema bêje milyonek token çûn :D pêşî dîzayn kir dûre dest pê kir wekî dîna bişuxile. Pereyê xwe %100 heq dike welleh :D feqat moda tarî ji bîr kiriye :D [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 23:12, 14 tebax 2026 (UTC)
== [[Mediawiki:Gadget-QQ.js]] ==
Ev amûr di şikle Minerva de. Her daîm vê xeletiyê dide:
<syntaxhighlight lang="js">
TypeError: Cannot read properties of null (reading 'addEventListener') at css () at runScript () at Array.<anonymous> () at flushCssBuffer ()
</syntaxhighlight> [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 19:29, 18 tîrmeh 2026 (UTC)
:* [[Bikarhêner:Wikihez/skrîpt/js/Gadget-QQ.js]] --> [[Mediawiki:Gadget-QQ.js]]
:* [[Bikarhêner:Wikihez/Gadget-QQ.css]] --> [[Mediawiki:Gadget-QQ.css]]
:Ez dibêjim çêbû lê ka çend roj biceribînim. Tiştên ku hatin sererastkirin:
:# Google Books API Key dikarî zêde bikî, dixe cookies û di gerokê de dimîne. Berê bê API Key dixebitiya lê êdî mecbûr e ku API Key-a te hebe, bidestxistina wê ne zêde zor e lê dîsa jî tevlihev e.
:# Êdî di mobîlê de dixebite, heta di mobîlê de xweştir xuya dike.
:# Moda tarî
:# OOUI dewsa jquery.ui
:# Li qutiyê çi dixwazî zêde bikî, dikare li gorî îsm, sifet, fiîl bitewîne. Lê ji bo fiîl tenê dikare çend heb inflection bîne.
:# Butona paqij bike lê zêde kir.
:# Çend paqijiyên jêgirtinên Google Kitêbê niha hene.
:[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 23:38, 18 tîrmeh 2026 (UTC)
::Tewandina fiîlan û xeletiya modulê lazim e were rastkirin. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 14:40, 21 tîrmeh 2026 (UTC)
== [[MediaWiki:Gadget-wikt.add-examples.js]] ==
Min ev amûr hinek rojane kir feqat çend problem hene berî ku bar bikin.
Tiştên ku min guhart:
# Êdî li sayfeyên bi {{ş|maneid}} jî dixebite,
# Cihê di wîkîtekstê de yê ku jêgirtin were îlawekirin baştir bû,
# [[Mediawiki:Gadget-citoid-helper.js|citoid helper]] zêde kir ji bo ku bi hêsanî çavkanî bi riya doi, isbn an urlyê werin tijîkirin.
* [[Bikarhêner:Wikihez/Gadget-wikt.add-examples.css]] --> [[MediaWiki:Gadget-wikt.add-examples.css]]
* [[Bikarhêner:Wikihez/Gadget-wikt.add-examples.js]] --> [[MediaWiki:Gadget-wikt.add-examples.js]]
- --[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 00:50, 19 tîrmeh 2026 (UTC)
:Min "wikt." qismên cache kirinê ya wîkiya fransî bi [[MediaWiki:Gadget-StorageUtils.js]] guhartiye. loma ji bîr nekin wê amûrê li [[MediaWiki:Gadgets-definition]] zêde bikin. û navê amûrê jî biguhêrînin. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 09:15, 23 tîrmeh 2026 (UTC)
::Berê li ser WF:ceribandin dixebitî. niha naxebite. Divê were rastkirin. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 22:10, 7 tebax 2026 (UTC)
== Gadget-translation editor ==
* [[MediaWiki:Gadget-translation editor.js]]: divê formata en.wîktê were bikaranîn ji ber ku me gelek tercime ji en.wîktê kopî kir û ev js hîn nikare formata wekî li jêr bi kar bîne.
<syntaxhighlight lang="wikitext">
* {{Z|sh}}:
*: Kirîlî:
*: Latînî
</syntaxhighlight>
—[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:17, 16 tîrmeh 2026 (UTC)
== [[Mediawiki:Gadget-linkify.js]] ==
* ''rûpeleke'' wekî<syntaxhighlight lang="wikitext">[[rûpeleke]]</syntaxhighlight> lînk dike, bi regexê belkî dikare wisa bike <syntaxhighlight lang="wikitext">[[rûpel]]eke</syntaxhighlight>
—[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:17, 16 tîrmeh 2026 (UTC)
* Amûreke din wekî [[User:Wikihez/Gadget-linkify.js|linkify]] lazim e ku herfên mezin biçûk bike ji bo kurmancî.—[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:17, 16 tîrmeh 2026 (UTC)
:{{r|Bikarhêner}} Merheba bira, dikarî viya jî bar bikî?:
* [[Special:PermanentLink/6291974|linkify]] --> [[Mediawiki:Gadget-linkify.js]]
Spas--[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 11:42, 29 tîrmeh 2026 (UTC)
:Dûre [https://ku.wiktionary.org/wiki/MediaWiki:Gadget-start.js#L-283 li vir] wiktviLinkify bike kuLinkify xêra xwe [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 11:51, 29 tîrmeh 2026 (UTC)
::Min ji bîr kir lê zêde bikim niha nikare "Dİ" bike "di", xeletiyeke berbelav a di nivîsên kurdî de, herfên din ên wekî ll yan rr jî hewce ne werin zêdekirin. Dûre em zêde bikin. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 21:42, 29 tîrmeh 2026 (UTC)
:::Min nû ferq kir, sayfeyên ku hîn nehatine çêkirin wîkîlînk nake. Problemeke mezin e divê were rastkirin. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 18:15, 30 tîrmeh 2026 (UTC)
::::Na, lînk dike, tiştekî din heye... [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 10:49, 31 tîrmeh 2026 (UTC)
== Amûra manayê ==
Amûreke din ji bo nivîsina maneyê wekî Nimûne zêde bike lazim e [https://ku.wiktionary.org/w/index.php?title=Bikarh%C3%AAner:Wikihez/test.js&oldid=6276876 js] [https://ku.wiktionary.org/w/index.php?title=%C5%9Eablon:ceribandin2&oldid=6265629 şablon] [https://ku.wiktionary.org/w/index.php?title=Bikarh%C3%AAner:Wikihez/common.css&oldid=6265642 css] --[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 09:12, 23 tîrmeh 2026 (UTC)
== [[MediaWiki:Gadget-jeder.js]] ==
@[[Bikarhêner:Ghybu|Ghybu]] Çavkaniyên jêderê di moda pêşdîtinê de jêderê vedişêre, ew jî min gelek eciz dike wextê çavkanî zêde dikim. Min ji Claude pirsî û kodan nîşanî wê da, wisa cewab da:
Yes — and this file actually explains the whole thing precisely, better than my earlier guess about extract-stripping.
What's happening: the CSS rule
<syntaxhighlight lang="css">
.jeder{
display:none;
}
</syntaxhighlight>
hides every citation by default, *unconditionally*. The only thing that ever makes it visible again is the gadget's JS: it finds each `.jeder`, builds the short "`— (year, author, +)`" summary from the `.j-pewist` fields, and either reveals the short version or — for citations with no `.j-pewist` fields — explicitly sets `display:inline` on the original.
So visibility of citations depends entirely on this JS running. In the normal article view (Image 1) it runs, so you see the collapsed "`(1918, E. Rehmî Ji Mala Hekariyan, Amadekar: M. E. Bozarslan, +)`" form. In whatever generated Image 2 — a hover-preview/extract/API render — gadget JS doesn't execute, so nothing ever removes the `display:none`, and the citation vanishes completely rather than degrading to "still visible, just not collapsed."
<b>The fix:</b> flip the default so the *un-collapsed* state is the safe fallback, and let JS do the hiding only after it successfully builds the short version. That way, any context without JS shows the full citation instead of nothing.
CSS — remove the blanket hide:
<syntaxhighlight lang="css">
.jeder {
/* intentionally no display:none here — see Gadget-... .js */
}
</syntaxhighlight>
JS — do the hiding from script, after the short form exists:
{{veşêre-ser}}
<syntaxhighlight lang="js">
// Ji bo şablonên [[Şablon:jêder]] hatiye nivîsandin.
// Parametreyên ku di navbera "<span class="j-pewist">...</span>" an "{{j-pêwîst|...}}" de ne venaşêre.
$(function() {
function nivisaKurtTevliBike(sund, nivisKurt) {
var zede = $('<a>+</a>')
.addClass('click')
.attr('href', '#')
.attr('title', 'zêdetir')
.css('font-weight', 'bold');
var kurt = $(' <a>↩</a>')
.addClass('click-kurt')
.attr('href', '#')
.attr('title', 'veşêre')
.css('font-weight', 'bold');
$('<span>' + nivisKurt + '</span>')
.append(zede).append(')')
.addClass('jeder-kurt')
.css('font-size', '0.85em')
.insertAfter(sund);
sund.append(' ').append(kurt);
// Only hide the full citation once the short summary actually exists.
// If this script never runs (no-JS clients, hover-preview extracts,
// action=render, etc.), the full citation stays visible instead of
// silently disappearing.
sund.css('display', 'none');
}
function vesere() {
$('.jeder').each(function() {
var elmTab = $(this).find('.j-pewist').clone();
if (elmTab.length) {
var elm = '';
for (var i = elmTab.length - 1; i >= 0; i--) {
elm = elmTab.eq(i).html() + ', ' + elm;
}
var nivisKurt = ' — (' + elm;
nivisaKurtTevliBike($(this), nivisKurt);
}
// else: no j-pewist fields to shorten — leave the full citation
// as it already renders (visible), nothing to do.
});
}
vesere();
$(".click").click(function(e) {
e.preventDefault();
$(this).parent('.jeder-kurt').css('display', 'none');
$(this).parent('.jeder-kurt').prev().css('display', 'inline');
});
$(".click-kurt").click(function(e) {
e.preventDefault();
$(this).parent('.jeder').css('display', 'none');
$(this).parent('.jeder').next().css('display', 'inline');
});
});
</syntaxhighlight>
Net effect:
- JS-enabled readers (normal article view): identical experience to today — collapsed short form with `+`/`↩` toggle.
- No-JS contexts (previews, extracts, screen readers before JS loads, print, etc.): full citation is shown instead of nothing — a real regression fix rather than a cosmetic one.
One caveat worth being upfront about: this fixes it *if* the preview context renders the gadget's HTML/CSS but doesn't execute gadget JS (which is the far more common case, and what this code strongly suggests is happening). If Image 2 instead comes from a pipeline that strips the `.jeder`/`.jegirtin-text` elements out of the HTML entirely before this CSS/JS even gets a chance to apply, no on-wiki CSS/JS change can help — that'd need the extract-generation config changed instead. Given what this gadget file shows, though, I'd bet on the CSS-hide explanation.
{{veşêre-bin}}
Em dûre biceribînin eger xeletî tinebe, vî tiştî jî rast bikin. --[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 20:00, 23 tîrmeh 2026 (UTC)
:Ez APIya MediaWiki rind nizanim belkî Claude dizane:) Em nikarin bibêjin dema ku moda "''action=edit''" e fonksiyona <code>function vesere()</code> bi kar meyîne. [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 15:57, 24 tîrmeh 2026 (UTC)
::Na, di moda "edît"-ê de <code>var elmTab = null</code>... [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 16:13, 24 tîrmeh 2026 (UTC)
?:
<syntaxhighlight lang="js">
if (
mw.config.get('wgAction') === 'edit' ||
mw.config.get('wgAction') === 'submit'
){
var elmTab = [];
} else {
var elmTab = $(this).find('.j-pewist').clone();
}
</syntaxhighlight>
--[[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 16:31, 24 tîrmeh 2026 (UTC)
:Ez jî nizanim Claude çiqas ji mediawiki fêm dike lê heta niha ti tişt nîne ku min jê pirs kir û nikaribû çêke, bila wekî reklam nebe feqat Claude mikemmel e, dibêjim "li vir çima xeletiyeke wisa derdikeve" di dosyeya 2000 rêzî de diçe tiştê xelet tenê rast dike tiştekî din naguherîne. Chatgpt û aistudio qet wisa nakin, eynî dosyeyê deh cara dinivîsin, deh netîceyên cuda derdikevin :D
:Em dikarin vê amûrê wextê edit û submitê neaktîv bikin wekî <syntaxhighlight lang="js">if (!(action === "edit" || action === "submit")) {
:return;</syntaxhighlight> lê wê demê display:none wê çibe nizanim. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 18:23, 24 tîrmeh 2026 (UTC)
::display:none ne hewce ye ma jixwe di nav kodê [https://ku.wiktionary.org/w/index.php?title=MediaWiki:Gadget-jeder.js&oldid=6069025#L-49 L-49] de inline/none heye? [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 18:53, 24 tîrmeh 2026 (UTC)
:Min bi vî şiklî [https://ku.wiktionary.org/w/index.php?title=Bikarh%C3%AAner:Wikihez/vector-2022.js&diff=prev&oldid=6290816#L-28] ceriband feqat nexebitî. "display:none" di pêşdîtinê de dixebite feqat js naşixule. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 14:43, 25 tîrmeh 2026 (UTC)
::Kodên JSê pir hez nakim (pêşta hukurina APIya MWyê hewce bû) dîsa jî ez ê seh bikim :) [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 16:49, 27 tîrmeh 2026 (UTC)
:::Ez niha bi vî şiklî [https://ku.wiktionary.org/w/index.php?title=Bikarh%C3%AAner:Wikihez/test.js&oldid=6290820] [https://ku.wiktionary.org/w/index.php?title=Bikarh%C3%AAner:Wikihez/common.css&oldid=6290821#L-8] bi kar tînim ti problem nîne. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 17:09, 27 tîrmeh 2026 (UTC)
== [[MediaWiki:Gadget-PagePreviews.js]] ==
Ez dibêjim em vê amûrê jî çêkin [[:en:MediaWiki:Gadget-PagePreviews.js]] --[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 10:56, 3 tebax 2026 (UTC)
= Moda tarî =
== [[Şablon:wîkîpediya]] ==
Rengê tarî de xirab e.--[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 19:36, 4 tebax 2026 (UTC)
= Bot =
Karên ku bi botê werin çêkirin ji kerema xwe li vir binivîsin.
== Kategorî:Biwêj ==
[[:Kategorî:Biwêj]] divê were paqijkirin, lîsteya madeyên {{ş|biwêj}} çêke, yên ku tê de bûn, kirin, man hene filtre bike yên din bi destî tê çêkirin.—[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:17, 16 tîrmeh 2026 (UTC)
== Jêgirtin ==
Xistina jêgirtinên beşa [https://ku.wiktionary.org/w/index.php?search=insource%3A%2F%3D+*Ji+%5BWw%5D%C3%AAjey%C3%AA+*%3D%2F&title=Taybet%3AL%C3%AAger%C3%AEn&profile=advanced&fulltext=1&ns0=1&searchToken=8rh0bmw8dccsi7aynl6zli8uf ji wêjeyê] li beşa maneyê. —[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:17, 16 tîrmeh 2026 (UTC)
== Bota Toolforgeê ==
Botekî Toolforgeê lazim e ji bo ku xeletiyên biçûk wekî şablonên bi navên îngilîzî werin kurdîkirin yan jî valahiya beşan rast bike û hwd.—[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:17, 16 tîrmeh 2026 (UTC)
:Min [[Bikarhêner:Wikihez/skrîpt/py/kuwiktkozmetik.py|paqijiyen kozmetîk]] hazir kir feqat hîn navên şablonan naguhêre. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 20:05, 4 tebax 2026 (UTC)
== Updatew ==
Bota [[Bikarhêner:Wikihez/skrîpt/py/updateW.py|updateW]] divê were rojanekirin. Yan jî yekî nû were çêkirin. Şablonên {{ş|W}} di beşa tercimeyan de sererast dike û zimanan rêz dike. Ya niha xeletiya navê zimanî dide.—[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:17, 16 tîrmeh 2026 (UTC)
== sihir --> sêhr ==
Tercimeyên ''[[sêhr]]'' hemû dibêje ''sihir'' loma bi botê lazim e kirin ''sêhr''. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 17:43, 18 tîrmeh 2026 (UTC)
:Sihirbaz --> sêhrbaz [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 18:07, 18 tîrmeh 2026 (UTC)
== Tercimeyên dîroknas ==
Li tercimeyên [[dîroknas]], hevmaneyên wê hewce ye were îlawekirin. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 18:44, 18 tîrmeh 2026 (UTC)
== Mewlûd ==
Sererastkirina jêgirtinên mewlûdê [https://ku.wiktionary.org/w/index.php?search=insource%3A%2Fw%5C%3AMela+His%C3%AAn%C3%AA+Batey%C3%AE%2F&title=Taybet%3AL%C3%AAger%C3%AEn&ns0=1&searchToken=8m0tguy3sqt7edr4sg0u8hedo] wekî [https://ku.wiktionary.org/w/index.php?title=dax%C3%AEdar&curid=284303&diff=6265851&oldid=6142285] [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 09:43, 20 tîrmeh 2026 (UTC)
fv6dkl83ipnpete3vir6k6o2nh142h0
6333756
6333755
2026-08-14T23:20:48Z
Ghybu
1393
/* MediaWiki:Gadget-start.js */ Bersiv
6333756
wikitext
text/x-wiki
{{/ser}}
= Karên ferhengî =
== Mane ==
* [[:Kategorî:Madeyên bê beşa mane]]
** [[:Kategorî:Madeyên bê beşa mane bi kurmancî]]
Li ser van rûpelan ev made hene ku maneyan wan nehatine nivîsin û divê werin nivîsin. —[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:17, 16 tîrmeh 2026 (UTC)
== Etîmolojî ==
*[[:Kategorî:Daxwazên etîmolojiyê]]
**[[:Kategorî:Daxwazên etîmolojiyê bi kurmancî]]
Li ser van rûpelan ev made hene ku etîmolojiya wan hîn nehatine nivîsin. Ji bo alîkariyê binêre [[WF:Etîmolojî]] —[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:17, 16 tîrmeh 2026 (UTC)
== Cureyê rêzimanî ==
* [[:Kategorî:Gotarên bê kategoriya rêzimanî]]
* [[:Kategorî:Gotarên bê kategoriya rêzimanî bi kurmancî]]
Li ser van rûpelan ev made hene ku cureyên wan yên rêzimanî hîn nehatine nivîsin. Ji bo alîkariyê binêre [[Alîkarî:Cureyên peyvan]] —[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:17, 16 tîrmeh 2026 (UTC)
== Kontrol ==
* [[:Kategorî:Kontrol]]
** [[:Kategorî:Kontrola maneyê]]
Ev madde bi botê hatine çêkirin, yek bi yek divê werin kontrolkirin. —[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:17, 16 tîrmeh 2026 (UTC)
= Şablon =
== IPA ==
* {{ş|IPA}} divê [[Modul:IPA]] bi kar bîne. —[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:17, 16 tîrmeh 2026 (UTC)
== Deng ==
Kurdîkirina belgekirina {{ş|deng}} lazim e.--[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 00:06, 19 tîrmeh 2026 (UTC)
= Modul =
== Modul:form of/templates ==
* [[Modul:form of/templates]]: Divê ev modul were rojanekirin û xeletiyên berê wekî ([[hevalê]]) werin rastkirin. —[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:17, 16 tîrmeh 2026 (UTC)
*:Merheba @[[Bikarhêner:Ghybu|Ghybu]] Te gotibû di vê modulê de xeletî hene, jkx tu dikarî li vir binivîsî çi kêmasî hene, daku wextê rojane dikim ez ji bîr nekim? [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:16, 21 tîrmeh 2026 (UTC)
*::Silav. Nizanim ji bîra min çûye... Herwiha ji bo çêkirina formên navdêran zanînên cîns û tîpa dawî bes e:
*::* (-ê, mê) => çemandî, bangkirin
*::* (-ê, nêr) => îzafe
*::* (-ê, mê û nêr) => îzafe (nêr), bangkirin (mê), çemandî (mê)
*::* (-a) => îzafe (mê)
*::* (-ekî) => îzafe û çemandî (nêr, nebinavkirî)
*::* (-eke) = > îzafe (mê, nebinavkirî)
*::* ...
*:: <code>if find(mw.title.getCurrentTitle().subpageText, 'ekî$') then ... end</code>
*::<code><nowiki>{{ku-tewîn-navForm|<navdêr>|<zayend>}</nowiki></code>
*::Tablo û nivîs di yekcarî de tên çêkirin...
*::Feqet problem lêzêdekirina mînakan e. [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 17:34, 21 tîrmeh 2026 (UTC)
*:::Lêzêdekirina kîjan nimûneyan? Ev koda js ji bo çi ye? Qisûrê nenêre min fêm nekir :/ [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 18:13, 21 tîrmeh 2026 (UTC)
*::::Li vira ([[hevalê#Formeke navdêrê]]) di bin maneyên 1. û 2. mînak nayên tevlî kirin :) [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 18:18, 21 tîrmeh 2026 (UTC)
*:::::Ev tercîh e, ne mecbûrî ye, em dikarin [https://ku.wiktionary.org/w/index.php?title=heval%C3%AA&diff=prev&oldid=6276350 wisa] bikin. Wekî din? [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 18:29, 21 tîrmeh 2026 (UTC)
*::::::Min li jor tênê got ku tenê parametreyên "navdêr" û "zayend" hewce nee. Bi '''[//ku.wiktionary.org/w/index.php?title=heval%C3%AA&curid=969734&diff=6276353&oldid=6276350 vî]''' awayî jî tê çêkirin. Parametreyên din ne hewce ne. [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 18:38, 21 tîrmeh 2026 (UTC)
*:::::::Ji bo wê şabloneke din lazim e, bila ev şablon wekî îngilîzî bimîne em ji bo kurmancî yekî din çêkin. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 18:42, 21 tîrmeh 2026 (UTC)
*::::::::[https://ku.wiktionary.org/w/index.php?title=heval%C3%AA&oldid=6276885 wisa] çawa ye? Bi min nivîsîna nimûneyan zêde ne lazim e ji ber ku ti kes serê xwe pê naêşîne. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 09:46, 23 tîrmeh 2026 (UTC)
*:::::::::@[[Bikarhêner:Ghybu|Ghybu]] Vê şablonê bi kar bînin an na? Navê şablonê kê çi be? [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 19:07, 24 tîrmeh 2026 (UTC)
== Modul:columns ==
* [[Modul:columns]] were rojanekirin û {{ş|kol3}} bila lînka ''nîşan bide'' deyne beriya sernavê, kolê di qutiya rengî de bila nebe. —[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:17, 16 tîrmeh 2026 (UTC)
== Modul:etymon ==
* [[Modul:etymon kevn]]: Rojanekirin hewce ye. —[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:17, 16 tîrmeh 2026 (UTC)
== [[Modul:ziman/code to canonical name]] ==
Belgekirina skrîptê û js divê were rastkirin. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 09:31, 22 tîrmeh 2026 (UTC)
:* [[MediaWiki:UpdateLanguageNameAndCode.js]]
:[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 09:50, 22 tîrmeh 2026 (UTC)
::* [[Modul:ziman/print]]
::[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 09:52, 22 tîrmeh 2026 (UTC)
:::*[[Modul:ziman/şablon]]
:::[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 09:56, 22 tîrmeh 2026 (UTC)
::::* [[MediaWiki:Gadget-translation editor.js/ziman.json]]
::::[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 11:06, 22 tîrmeh 2026 (UTC)
== [[Modul:quote]] ==
Piştî ev modul hate hazirkirin, lazim e navên jegirtinan werin rastkirin û li hemûyan {{param|jêgirtin}} were zêdekirin. Bnr. [[Gotûbêja şablonê:Jêgirtin/Ehmedê Xanî/Mem û Zîn]] [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 22:27, 5 tebax 2026 (UTC)
::Ev modul hema bêje hazir e. Hûn li ser van madeyan çi difikirin:
# {{para|tarîx}} lazim e full date be eger na, lazim e {{para|sal}} were bikaranîn. Feqat "'''2021''' kanûna pêşîn 23" bi vî şiklî bi min ne problem e çnkî derdê en.wikt "attestation" e delîla herî pêşî jî sal e.
#: {{demo|sep=wisa xuya dibe<br>|<nowiki>{{jêder-kitêb/ceribandin|en
|tarîx=23 December 2021|nivîskar=Harry Hobbs; George Williams|sernav=Micronations and the Search for Sovereignty|url=https://www.cambridge.org/core/books/micronations-and-the-search-for-sovereignty/B0414A3A322695D9EE71E4CDDFDA06DE|weşanxane=Cambridge University Press|rûpel=155|isbn=978-1-009-15012-5|jêgirtin=jêgirtin.|t=-}}</nowiki>}}
#{{para|amadekar}}/{{para|edîtor}}/{{para|terciman}} bi şiklê edîtoriya, amadekariya, tercimekirina
#: {{demo|sep=dide<br>|<nowiki>{{jêder-kitêb/ceribandin|en
|sernav=Medical Surgical Nursing|serî=Juta's Manual of Nursing|cildê-seriyê=volume 4|edîtor=Sophie Mataniele Mogotlane; Joyce Mokoena; Motshedisi Eunice Chauke; Anne Young|sal=2005|weşanxane=Juta Academic|isbn=978-0702171840|rûpel=!12-29|jêgirtin=jêgirtin|t=-}}</nowiki>}}
--[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 13:09, 10 tebax 2026 (UTC)
:@[[Bikarhêner:Bikarhêner|Bikarhêner]] û @[[Bikarhêner:Ghybu|Ghybu]] Hîn gelek tişt hene divê îzah bikin û fikrê we pirs bikim, feqat îzahkirin pir zor e, em dest bi bikaranînê bikin û dûre tiştên ku hûn naxwazin em dikarin biguherînîn, dibe? [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 13:11, 10 tebax 2026 (UTC)
::Dibe, piştî çêbû, em di praktîkê de bibînin ku çawa ye. -- [[Bikarhêner:Bikarhêner|Bikarhêner]] ([[Gotûbêja bikarhêner:Bikarhêner|gotûbêj]]) 18:05, 10 tebax 2026 (UTC)
= Javascript =
== [[Mediawiki:Gadget-citoid-helper.js]] ==
Ji bo bi citoidê kopîkirina malûmatên çavkaniyan amûreke wisa lazim e. Xisûsen ji ber ku bi çend amûrên din dikare were bikaranîn.
Feqat çend problem hene, şablonên me de kêmasiya parametreyan gelek in û xerîteyên citoidê hîn nehatine çêkirin. Wana sererast bikin dûre vê amûrê çêkin, piştre [[MediaWiki:Gadget-start.js|start.js]] û [[MediaWiki:Gadget-wikt.add-examples.js|add examples.js]] were rojanekirin.
- --[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 00:04, 19 tîrmeh 2026 (UTC)
:Merheba @[[Bikarhêner:Bikarhêner|Bikarhêner]], ez dibêjim karê Modul:quote zêde wext bistîne, bila em dest bi bikaranîna van amûran bikin dûre kêmasiyan em ê temam bikin înşela. Dikarî vana li cihên xwe yên rast kopî paste bikî?
# [[Special:PermanentLink/6291574|Bikarhêner:Wikihez/skrîpt/js/Gadget-citoid-helper.js]] --> [[Mediawiki:Gadget-citoid-helper.js]]
# Ya li jêr kopî bike qismê herî dawî ya AmûrênVeşartî li [[MediaWiki:Gadgets-definition]]:
## <code><nowiki>* citoid-helper[ResourceLoader|hidden|default|dependencies=mediawiki.util]|citoid-helper.js</nowiki></code>
--[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:58, 26 tîrmeh 2026 (UTC)
== [[MediaWiki:Gadget-start.js]] ==
Rojanekirin hewce ye. Min gelek tişt lê zêde kir lê ez niha test dikime. Piştre em bar bikin:
* [[Bikarhêner:Wikihez/Gadget-start.js]] --> [[MediaWiki:Gadget-start.js]]
* [[Bikarhêner:Wikihez/Gadget-start.css]] --> [[MediaWiki:Gadget-start.css]]
--[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 22:08, 17 tîrmeh 2026 (UTC)
:Min [[MediaWiki:Gadget-start/data.json|data.json]] çêkir ji bo ku bi hêsanî malûmatên heyî werin guhartin bêyî guhartina Javascriptê. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 19:49, 18 tîrmeh 2026 (UTC)
:Xeletiyên ku ji bîr nekim rast bikim:
:* Wextê min çavkanî "kitêb" hilbijart û bi destî tije kir xeletiyeke [https://ku.wiktionary.org/w/index.php?title=xezete&diff=prev&oldid=6265392 wisa] derket her kelîme hate lînkkirin.
:* <code>html("⠿")</code> ev ne lazim e.
:* textarea ji bo çavkaniyên jêgirtinan xaseten yên sernav hîn jî ne draggable e.
:* pêşdîtina zindî checkbox wextê tê rakirin, pêşdîtin winda nabe.
:* Butona mobîlê ya vekirina formê di moda tarî de belî nabe, tenê wekî qutiyeke tarî xuya dibe.
:* Metna hişyarkirinê di guhartina rûpelên heyî de lazim e baştir bikim.
:[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 23:51, 18 tîrmeh 2026 (UTC)
::Ev problem çêbûn, ez ê binêrim ka çi problemên din hene. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 14:15, 19 tîrmeh 2026 (UTC)
:::Çêke: Ji bo qismê çavkaniyê yek dikare API call û Kategorî:Çavkanî bi kar bîne ji bo ku şablon zêde bikî ji yên heyî. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 21:21, 19 tîrmeh 2026 (UTC)
::::Ev jî çêbû, min beşa çavkanî jî çêkir. Eger xeletî dernekeve û problema valahiya piştî etîketê ji bîr nekim, piştî rojanekirina amûrên linkify, û citoid em dikarin bar bikin. Ez ê ti tiştê nû îlawe nekim, zêde dirêj bû. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:14, 21 tîrmeh 2026 (UTC)
:::::Merheba @[[Bikarhêner:Bikarhêner|Bikarhêner]]. Dikarî wana bar bikî?
:::::* [[Bikarhêner:Wikihez/Gadget-start.js]] --> [[MediaWiki:Gadget-start.js]]
:::::* [[Bikarhêner:Wikihez/Gadget-start.css]] --> [[MediaWiki:Gadget-start.css]]
:::::* [[MediaWiki:Gadgets-definition]] wisa rojane bike:
:::::* start[ResourceLoader|default|package|dependencies=mediawiki.util,ext.gadget.StorageUtils,ext.gadget.citoid-helper]|start.js|start.css|start.js/data.json
:::::[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 09:39, 5 tebax 2026 (UTC)
{{şirove}} Dewama ''[[Special:PermanentLink/6333688|Gotûbêja bikarhêner:Rewiye tine#WF:Nû]]'' bila gotûbêja wî em spam nekin. :D
{{r|Ghybu}} dikarî [[Special:PermanentLink/6333689|vê htmlê]] binêrî claude rast fêm kiriye yan na? Daxîne û wek html qeyd bike. --[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 18:43, 14 tebax 2026 (UTC)
:Min seh wîkîyên din jî kir, li wîkiya fransî tiştekî wekî daxwaza min çêkirine (tiştên ku ne hewce ne wekî "tab" çêkirine an jî hatine vêşartin): [//fr.wiktionary.org/w/index.php?title=fdsdfdsf&action=edit&redlink=1]. Formata me yê berî jî bi vê lojîkê hatibû çêkirin, wekî de.wiktionary ([//de.wiktionary.org/w/index.php?title=sdfdsfsdfs&action=edit&preload=Vorlage:Formatvorlage_(Substantiv_vereinfacht)]) [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 19:01, 14 tebax 2026 (UTC)
::PS: Dîsa jî Claude min rind fêm kiriye :)) Feqet min got ku beşên Mane", "Bilêvkirin" û "Beşên din" cem hev (wekî "tab") ". Û dema ku tu terî di nav "Besên din" Hevmane, Jê, ... li wira werin dayîn. Wêne/Resim û Nimûne jî di nav beşa ("tab") "Mane" [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 19:17, 14 tebax 2026 (UTC)
::Erê ya fr.wikt min jî dîtibû jixwe fikrê tab min ji wan girtibû :D (feqat min li cem wan tenê tab-a maneyê dît yên din nedît çawa tê vekirin nizanim) Berê hemû beş piştî maneyê bibûn, dûre min sê Tab çêkir, Bingehîn+Lînkkirin+Bikaranîn. Niha lazim e Tabeke din çêkim. Ya ku claude çêkiriye bnr. [[Special:PermanentLink/6333698#L-7]] ne baş e bnr. [[Special:PermanentLink/6333703|qiyaskirinê li ser vê htmlê]] Êdî ez Claude abuse dikime ji ber ku Pro ye :D [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 19:26, 14 tebax 2026 (UTC)
:::Claude dibêje:
:::Good clarification — that's a real simplification, not just a relabel. Updated STEP_GROUPS from 5 tabs down to 3:
:::Mane — the definitions themselves, plus Wêne (image), now grouped in with it instead of sitting in a separate misc tab. Nimûne needed no change since it was already rendering inside each Mane sense block, not as its own step.
:::Bilêvkirin — unchanged, still just pronunciation.
:::Beşên din — everything else in one flat bucket: hevmane, jê, têkildar, herwiha binêre, formên alternatîv, dijmane, jornav, jêrnav, notên bikaranînê, bi alfabeyên din, dûnde, çavkanî, bêhtir bixwîne, tewandin, etîmolojî, zaravayên din, werger, and bnr-h — instead of being split across the old Bingehîn/Lînkkirin/Bikaranîn/Din tabs.
:::No DOM-order changes were needed this time — the fix from the blank-tab bug looks up the tab bar's position dynamically now, so it didn't matter that I regrouped which steps go where. Same two files, saved to your Wiki folder — worth another pass through all three tabs once you've pasted this in, same as last time. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 19:34, 14 tebax 2026 (UTC)
::::Mînak:
Ziman
---------------------------------------------
Cureyê rêzimanî (Navdêr)
Navdêr (hilbijêre) ┆ Cîns (hilbijêre) ┆ Jimar (hilbijêre)
- lêker -mê -yekjimar
- rengdêr -nêr -pirjimar
- ... -... -...
---------------------------------------------
Mane || Bilêvkirin || Beşên din
hilbijêre:
- mane - IPA - Hevmane
- nimûne - kîte - Dijmane
- wêne
Dema ku tu "Cureyê rêzimanî" dikî "Lêker" :
Cureyê rêzimanî (Lêker)
Lêker (hilbijêre) ┆ Cure (hilbijêre)
- navdêr -rehê niha
- rengdêr -rehê borî
- ... -...
---------------------------------------------
┆ : select/option ("tab" nîne, tê dîtin)<br>
|| : "tab"
-- [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 19:45, 14 tebax 2026 (UTC)
'''Sê-stûnî ("┆" = ne tab), li gorî Cureyê rêzimanî:'''
{| class="wikitable"
! Cureyê rêzimanî !! Stûna 2 !! Stûna 3 !! Têbînî
|-
| Navdêr / Serenav
| Cîns (hilbijêre ▾: mê / nêr / ... — tenê heke ziman zayendê rêzimanî hebe)
| '''Jimar''' (?) — pirs li jêr
| Qadên "Forma mê/nêr/pirjimar/yekjimar" niha jî li vir hene — ma ev di "Jimar"-ê de tên tevlihev kirin, an cuda dimînin?
|-
| Rengdêr
| (heman m/n/p/y forman ku Navdêr distîne)
| Sûperlatîv (sûp) / Komparatîv (komp)
| Ne li ser her du nîgaran hatiye behs kirin — ma sê-stûnî li vir jî tê bikaranîn?
|-
| Lêker
| '''Cure''' = Cureyê lêkerê (hilbijêre ▾: gerguhêz / negerguhêz / xwerû-... / pêkhatî-... / hevedudanî-... / biwêjî-... — 10 vebijêrk)
| Di heman stûnê de: Rehê dema niha / Rehê dema borî / Rehê dema bilanî (her sê qadên nivîsandinê ne, ne hilbijêrk in)
| Ma "Cure" her sê rehan di xwe de digire wek yek stûn, an her yek stûneke cuda ye?
|-
| Tîp (herf/sembol)
| Girdêk (gir) / Hûrek (hûr)
| —
| Ne behs kiriye
|-
| Her cureyek, li gorî zimên
| Transliterasyon (tr) / Transkrîpsiyon (ts)
| —
| Bi zimên ve girêdayî ye, ne bi cureyê rêzimanî ve
|-
| Her cureyek, tenê ziman=japonî
| Hanja / Translit. hanja
| —
| Ne bi cureyê rêzimanî ve girêdayî ye
|-
| Her cureyek
| '''Tercîhên pêşketî''' (kolapsî): form, formaalt, nekatcure, nekatcins, nekatçendterm, serlînkneke, nekatpalîndrom, neformtr
| —
| Vebijarkî, ji bo hemû cureyan
|}
'''Tabên jêrîn — Mane ‖ Bilêvkirin ‖ Beşên din ("||" = tab):'''
{| class="wikitable"
! Mane !! Bilêvkirin !! Beşên din (hemû 18 hêman)
|-
| mane, nimûne, wêne
| şablonên bilêvkirinê (mînak: IPA, kîte)
| tewandin, etîmolojî, bi zaravayên din, werger, jê, têkildar, herwiha binêre, formên alternatîv, hevmane, dijmane, jornav, jêrnav, notên bikaranînê, bi alfabeyên din, dûnde, çavkanî, bêhtir bixwîne, bnr-h
|}
'''Pirsên vekirî:'''
# "Jimar" (yekjimar/pirjimar) — qadeke ku nîşan dide têketî bi xwe yekjimar e an pirjimar e. Ev cuda ye ji "Forma yekjimar (y)"/"Forma pirjimar (p)" ya heyî (ku forma DÎN a kelîmeyê tomar dike). Herdu bimînin, an werin yek kirin?
# Ma sê-stûnî tenê ji bo Navdêr/Lêker e, an ji bo Rengdêr/Tîp jî heman mantiq derbas dibe?
# Di "Beşên din" de: dixwazî pêşî navnîşek/hilbijartinek nîşan bide (17 hêmanên din jî tê de), û qad tenê piştî hilbijartinê xuya bibin?
:Tu dikarî start.js ji Tercîh/ Amûran rakî û bi test.js li Amûran herî taliyê ye biceribînî. Claude ya li jor hazir kir, Jimar ez dikarim îzah bikim. Feqat bi min di tab-a maneyê de lazim e Bi zaravayên din (heta wek werger her car bila li rûpelan were zêdekirin) û werger jî hebe.--[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 20:18, 14 tebax 2026 (UTC)
:;Navdêr: Tenê "cîns" û "jimar" bes e. "Forma mê", "Forma nêr", ... nayê fêm kirin. Bi min wekî "Tercîhên pêşketî" bi navkî din veşartî çêke.
:;Lêker: "Cureyê lêkerê" nayê fêm kirin, bi min pêşta "geguhez/negerguhêz" were hilbijartin, paşê jî form "hevdudanî/pêkatî/..." ji ber ku her kes vana nizanî... Dîsa jî tu dizanî.
:Bi min beşên "Hevmane" û dijmane jî bike de nav beşa Mane ("tab") ji ber ku pirr tên xwestin.
:Şûnda Wêne jî Nimûne/jêgirtin...
:Herwiha hemû bi rengê şîn hatine çêkirin, nizanim beşên din (===) bi rengê gewr an reş çito dibe? [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 21:35, 14 tebax 2026 (UTC)
::Nimûne/jêgirtin, hevmane, Dijmane li binê her maneyê hene. ji ber ku wana bi maneyê ve girêdayî ne lazim e wisa bimîne feqat belkî şiklekî baştir bibînin. Hînbûna bikaranîna formeke nû bi qasî hînbûna koda wîkiyê zor e heqîqeten... [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 21:45, 14 tebax 2026 (UTC)
:::Min şaş fêm meke feqet te amûrek ji bo Wikihez çêkiriye :) Tu dixwazî ku hemû tiştên ku te çêkiriye tevlî vê Gadgetê bikî û bikarhênerên din jî bi kar bînin... Tu jî dizanî ku kesên ku tên vira çito peyv çêdikin: Ziman > Mane > Mînak > Hevmane > Dijmane ! Du Gadget çêke yek ji bo bikarhênerên ku hertim li vira ne, yekeke din jî ji bo bikarhênerên din (yên ku pirr nên vira).
:::Herwiha kesên ku hertim li vira ne bi Gadgetê gotar çênekin, ''copy/paste'' dikin. [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 22:12, 14 tebax 2026 (UTC)
::::Min xwest her tişt li ser rêza xwe be ji bo ku hîn bibin çi diçe kû derê feqat bi vî şiklî jî zêde dirêj û tevlihev dibe. Loma ez ê wekî tu dibêjî bikim her tiştê din bila collapsed pêşketî be. Ê ku dixwaze pê lê ke û binêre çi dikare were zêdekirin. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 22:26, 14 tebax 2026 (UTC)
:::::Niha baştir tê fêm kirin {{=)}} [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 23:01, 14 tebax 2026 (UTC)
::::::Min ji Opus 5 û Design Tool îstifade kiriye hema bêje milyonek token çûn :D pêşî dîzayn kir dûre dest pê kir wekî dîna bişuxile. Pereyê xwe %100 heq dike welleh :D feqat moda tarî ji bîr kiriye :D [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 23:12, 14 tebax 2026 (UTC)
:::::::Spas! Etîmolojî jî wekî "Bilêvkirin", di beşekê din de,cem wê, were çêkirin? [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 23:20, 14 tebax 2026 (UTC)
== [[Mediawiki:Gadget-QQ.js]] ==
Ev amûr di şikle Minerva de. Her daîm vê xeletiyê dide:
<syntaxhighlight lang="js">
TypeError: Cannot read properties of null (reading 'addEventListener') at css () at runScript () at Array.<anonymous> () at flushCssBuffer ()
</syntaxhighlight> [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 19:29, 18 tîrmeh 2026 (UTC)
:* [[Bikarhêner:Wikihez/skrîpt/js/Gadget-QQ.js]] --> [[Mediawiki:Gadget-QQ.js]]
:* [[Bikarhêner:Wikihez/Gadget-QQ.css]] --> [[Mediawiki:Gadget-QQ.css]]
:Ez dibêjim çêbû lê ka çend roj biceribînim. Tiştên ku hatin sererastkirin:
:# Google Books API Key dikarî zêde bikî, dixe cookies û di gerokê de dimîne. Berê bê API Key dixebitiya lê êdî mecbûr e ku API Key-a te hebe, bidestxistina wê ne zêde zor e lê dîsa jî tevlihev e.
:# Êdî di mobîlê de dixebite, heta di mobîlê de xweştir xuya dike.
:# Moda tarî
:# OOUI dewsa jquery.ui
:# Li qutiyê çi dixwazî zêde bikî, dikare li gorî îsm, sifet, fiîl bitewîne. Lê ji bo fiîl tenê dikare çend heb inflection bîne.
:# Butona paqij bike lê zêde kir.
:# Çend paqijiyên jêgirtinên Google Kitêbê niha hene.
:[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 23:38, 18 tîrmeh 2026 (UTC)
::Tewandina fiîlan û xeletiya modulê lazim e were rastkirin. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 14:40, 21 tîrmeh 2026 (UTC)
== [[MediaWiki:Gadget-wikt.add-examples.js]] ==
Min ev amûr hinek rojane kir feqat çend problem hene berî ku bar bikin.
Tiştên ku min guhart:
# Êdî li sayfeyên bi {{ş|maneid}} jî dixebite,
# Cihê di wîkîtekstê de yê ku jêgirtin were îlawekirin baştir bû,
# [[Mediawiki:Gadget-citoid-helper.js|citoid helper]] zêde kir ji bo ku bi hêsanî çavkanî bi riya doi, isbn an urlyê werin tijîkirin.
* [[Bikarhêner:Wikihez/Gadget-wikt.add-examples.css]] --> [[MediaWiki:Gadget-wikt.add-examples.css]]
* [[Bikarhêner:Wikihez/Gadget-wikt.add-examples.js]] --> [[MediaWiki:Gadget-wikt.add-examples.js]]
- --[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 00:50, 19 tîrmeh 2026 (UTC)
:Min "wikt." qismên cache kirinê ya wîkiya fransî bi [[MediaWiki:Gadget-StorageUtils.js]] guhartiye. loma ji bîr nekin wê amûrê li [[MediaWiki:Gadgets-definition]] zêde bikin. û navê amûrê jî biguhêrînin. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 09:15, 23 tîrmeh 2026 (UTC)
::Berê li ser WF:ceribandin dixebitî. niha naxebite. Divê were rastkirin. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 22:10, 7 tebax 2026 (UTC)
== Gadget-translation editor ==
* [[MediaWiki:Gadget-translation editor.js]]: divê formata en.wîktê were bikaranîn ji ber ku me gelek tercime ji en.wîktê kopî kir û ev js hîn nikare formata wekî li jêr bi kar bîne.
<syntaxhighlight lang="wikitext">
* {{Z|sh}}:
*: Kirîlî:
*: Latînî
</syntaxhighlight>
—[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:17, 16 tîrmeh 2026 (UTC)
== [[Mediawiki:Gadget-linkify.js]] ==
* ''rûpeleke'' wekî<syntaxhighlight lang="wikitext">[[rûpeleke]]</syntaxhighlight> lînk dike, bi regexê belkî dikare wisa bike <syntaxhighlight lang="wikitext">[[rûpel]]eke</syntaxhighlight>
—[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:17, 16 tîrmeh 2026 (UTC)
* Amûreke din wekî [[User:Wikihez/Gadget-linkify.js|linkify]] lazim e ku herfên mezin biçûk bike ji bo kurmancî.—[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:17, 16 tîrmeh 2026 (UTC)
:{{r|Bikarhêner}} Merheba bira, dikarî viya jî bar bikî?:
* [[Special:PermanentLink/6291974|linkify]] --> [[Mediawiki:Gadget-linkify.js]]
Spas--[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 11:42, 29 tîrmeh 2026 (UTC)
:Dûre [https://ku.wiktionary.org/wiki/MediaWiki:Gadget-start.js#L-283 li vir] wiktviLinkify bike kuLinkify xêra xwe [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 11:51, 29 tîrmeh 2026 (UTC)
::Min ji bîr kir lê zêde bikim niha nikare "Dİ" bike "di", xeletiyeke berbelav a di nivîsên kurdî de, herfên din ên wekî ll yan rr jî hewce ne werin zêdekirin. Dûre em zêde bikin. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 21:42, 29 tîrmeh 2026 (UTC)
:::Min nû ferq kir, sayfeyên ku hîn nehatine çêkirin wîkîlînk nake. Problemeke mezin e divê were rastkirin. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 18:15, 30 tîrmeh 2026 (UTC)
::::Na, lînk dike, tiştekî din heye... [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 10:49, 31 tîrmeh 2026 (UTC)
== Amûra manayê ==
Amûreke din ji bo nivîsina maneyê wekî Nimûne zêde bike lazim e [https://ku.wiktionary.org/w/index.php?title=Bikarh%C3%AAner:Wikihez/test.js&oldid=6276876 js] [https://ku.wiktionary.org/w/index.php?title=%C5%9Eablon:ceribandin2&oldid=6265629 şablon] [https://ku.wiktionary.org/w/index.php?title=Bikarh%C3%AAner:Wikihez/common.css&oldid=6265642 css] --[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 09:12, 23 tîrmeh 2026 (UTC)
== [[MediaWiki:Gadget-jeder.js]] ==
@[[Bikarhêner:Ghybu|Ghybu]] Çavkaniyên jêderê di moda pêşdîtinê de jêderê vedişêre, ew jî min gelek eciz dike wextê çavkanî zêde dikim. Min ji Claude pirsî û kodan nîşanî wê da, wisa cewab da:
Yes — and this file actually explains the whole thing precisely, better than my earlier guess about extract-stripping.
What's happening: the CSS rule
<syntaxhighlight lang="css">
.jeder{
display:none;
}
</syntaxhighlight>
hides every citation by default, *unconditionally*. The only thing that ever makes it visible again is the gadget's JS: it finds each `.jeder`, builds the short "`— (year, author, +)`" summary from the `.j-pewist` fields, and either reveals the short version or — for citations with no `.j-pewist` fields — explicitly sets `display:inline` on the original.
So visibility of citations depends entirely on this JS running. In the normal article view (Image 1) it runs, so you see the collapsed "`(1918, E. Rehmî Ji Mala Hekariyan, Amadekar: M. E. Bozarslan, +)`" form. In whatever generated Image 2 — a hover-preview/extract/API render — gadget JS doesn't execute, so nothing ever removes the `display:none`, and the citation vanishes completely rather than degrading to "still visible, just not collapsed."
<b>The fix:</b> flip the default so the *un-collapsed* state is the safe fallback, and let JS do the hiding only after it successfully builds the short version. That way, any context without JS shows the full citation instead of nothing.
CSS — remove the blanket hide:
<syntaxhighlight lang="css">
.jeder {
/* intentionally no display:none here — see Gadget-... .js */
}
</syntaxhighlight>
JS — do the hiding from script, after the short form exists:
{{veşêre-ser}}
<syntaxhighlight lang="js">
// Ji bo şablonên [[Şablon:jêder]] hatiye nivîsandin.
// Parametreyên ku di navbera "<span class="j-pewist">...</span>" an "{{j-pêwîst|...}}" de ne venaşêre.
$(function() {
function nivisaKurtTevliBike(sund, nivisKurt) {
var zede = $('<a>+</a>')
.addClass('click')
.attr('href', '#')
.attr('title', 'zêdetir')
.css('font-weight', 'bold');
var kurt = $(' <a>↩</a>')
.addClass('click-kurt')
.attr('href', '#')
.attr('title', 'veşêre')
.css('font-weight', 'bold');
$('<span>' + nivisKurt + '</span>')
.append(zede).append(')')
.addClass('jeder-kurt')
.css('font-size', '0.85em')
.insertAfter(sund);
sund.append(' ').append(kurt);
// Only hide the full citation once the short summary actually exists.
// If this script never runs (no-JS clients, hover-preview extracts,
// action=render, etc.), the full citation stays visible instead of
// silently disappearing.
sund.css('display', 'none');
}
function vesere() {
$('.jeder').each(function() {
var elmTab = $(this).find('.j-pewist').clone();
if (elmTab.length) {
var elm = '';
for (var i = elmTab.length - 1; i >= 0; i--) {
elm = elmTab.eq(i).html() + ', ' + elm;
}
var nivisKurt = ' — (' + elm;
nivisaKurtTevliBike($(this), nivisKurt);
}
// else: no j-pewist fields to shorten — leave the full citation
// as it already renders (visible), nothing to do.
});
}
vesere();
$(".click").click(function(e) {
e.preventDefault();
$(this).parent('.jeder-kurt').css('display', 'none');
$(this).parent('.jeder-kurt').prev().css('display', 'inline');
});
$(".click-kurt").click(function(e) {
e.preventDefault();
$(this).parent('.jeder').css('display', 'none');
$(this).parent('.jeder').next().css('display', 'inline');
});
});
</syntaxhighlight>
Net effect:
- JS-enabled readers (normal article view): identical experience to today — collapsed short form with `+`/`↩` toggle.
- No-JS contexts (previews, extracts, screen readers before JS loads, print, etc.): full citation is shown instead of nothing — a real regression fix rather than a cosmetic one.
One caveat worth being upfront about: this fixes it *if* the preview context renders the gadget's HTML/CSS but doesn't execute gadget JS (which is the far more common case, and what this code strongly suggests is happening). If Image 2 instead comes from a pipeline that strips the `.jeder`/`.jegirtin-text` elements out of the HTML entirely before this CSS/JS even gets a chance to apply, no on-wiki CSS/JS change can help — that'd need the extract-generation config changed instead. Given what this gadget file shows, though, I'd bet on the CSS-hide explanation.
{{veşêre-bin}}
Em dûre biceribînin eger xeletî tinebe, vî tiştî jî rast bikin. --[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 20:00, 23 tîrmeh 2026 (UTC)
:Ez APIya MediaWiki rind nizanim belkî Claude dizane:) Em nikarin bibêjin dema ku moda "''action=edit''" e fonksiyona <code>function vesere()</code> bi kar meyîne. [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 15:57, 24 tîrmeh 2026 (UTC)
::Na, di moda "edît"-ê de <code>var elmTab = null</code>... [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 16:13, 24 tîrmeh 2026 (UTC)
?:
<syntaxhighlight lang="js">
if (
mw.config.get('wgAction') === 'edit' ||
mw.config.get('wgAction') === 'submit'
){
var elmTab = [];
} else {
var elmTab = $(this).find('.j-pewist').clone();
}
</syntaxhighlight>
--[[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 16:31, 24 tîrmeh 2026 (UTC)
:Ez jî nizanim Claude çiqas ji mediawiki fêm dike lê heta niha ti tişt nîne ku min jê pirs kir û nikaribû çêke, bila wekî reklam nebe feqat Claude mikemmel e, dibêjim "li vir çima xeletiyeke wisa derdikeve" di dosyeya 2000 rêzî de diçe tiştê xelet tenê rast dike tiştekî din naguherîne. Chatgpt û aistudio qet wisa nakin, eynî dosyeyê deh cara dinivîsin, deh netîceyên cuda derdikevin :D
:Em dikarin vê amûrê wextê edit û submitê neaktîv bikin wekî <syntaxhighlight lang="js">if (!(action === "edit" || action === "submit")) {
:return;</syntaxhighlight> lê wê demê display:none wê çibe nizanim. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 18:23, 24 tîrmeh 2026 (UTC)
::display:none ne hewce ye ma jixwe di nav kodê [https://ku.wiktionary.org/w/index.php?title=MediaWiki:Gadget-jeder.js&oldid=6069025#L-49 L-49] de inline/none heye? [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 18:53, 24 tîrmeh 2026 (UTC)
:Min bi vî şiklî [https://ku.wiktionary.org/w/index.php?title=Bikarh%C3%AAner:Wikihez/vector-2022.js&diff=prev&oldid=6290816#L-28] ceriband feqat nexebitî. "display:none" di pêşdîtinê de dixebite feqat js naşixule. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 14:43, 25 tîrmeh 2026 (UTC)
::Kodên JSê pir hez nakim (pêşta hukurina APIya MWyê hewce bû) dîsa jî ez ê seh bikim :) [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 16:49, 27 tîrmeh 2026 (UTC)
:::Ez niha bi vî şiklî [https://ku.wiktionary.org/w/index.php?title=Bikarh%C3%AAner:Wikihez/test.js&oldid=6290820] [https://ku.wiktionary.org/w/index.php?title=Bikarh%C3%AAner:Wikihez/common.css&oldid=6290821#L-8] bi kar tînim ti problem nîne. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 17:09, 27 tîrmeh 2026 (UTC)
== [[MediaWiki:Gadget-PagePreviews.js]] ==
Ez dibêjim em vê amûrê jî çêkin [[:en:MediaWiki:Gadget-PagePreviews.js]] --[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 10:56, 3 tebax 2026 (UTC)
= Moda tarî =
== [[Şablon:wîkîpediya]] ==
Rengê tarî de xirab e.--[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 19:36, 4 tebax 2026 (UTC)
= Bot =
Karên ku bi botê werin çêkirin ji kerema xwe li vir binivîsin.
== Kategorî:Biwêj ==
[[:Kategorî:Biwêj]] divê were paqijkirin, lîsteya madeyên {{ş|biwêj}} çêke, yên ku tê de bûn, kirin, man hene filtre bike yên din bi destî tê çêkirin.—[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:17, 16 tîrmeh 2026 (UTC)
== Jêgirtin ==
Xistina jêgirtinên beşa [https://ku.wiktionary.org/w/index.php?search=insource%3A%2F%3D+*Ji+%5BWw%5D%C3%AAjey%C3%AA+*%3D%2F&title=Taybet%3AL%C3%AAger%C3%AEn&profile=advanced&fulltext=1&ns0=1&searchToken=8rh0bmw8dccsi7aynl6zli8uf ji wêjeyê] li beşa maneyê. —[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:17, 16 tîrmeh 2026 (UTC)
== Bota Toolforgeê ==
Botekî Toolforgeê lazim e ji bo ku xeletiyên biçûk wekî şablonên bi navên îngilîzî werin kurdîkirin yan jî valahiya beşan rast bike û hwd.—[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:17, 16 tîrmeh 2026 (UTC)
:Min [[Bikarhêner:Wikihez/skrîpt/py/kuwiktkozmetik.py|paqijiyen kozmetîk]] hazir kir feqat hîn navên şablonan naguhêre. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 20:05, 4 tebax 2026 (UTC)
== Updatew ==
Bota [[Bikarhêner:Wikihez/skrîpt/py/updateW.py|updateW]] divê were rojanekirin. Yan jî yekî nû were çêkirin. Şablonên {{ş|W}} di beşa tercimeyan de sererast dike û zimanan rêz dike. Ya niha xeletiya navê zimanî dide.—[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:17, 16 tîrmeh 2026 (UTC)
== sihir --> sêhr ==
Tercimeyên ''[[sêhr]]'' hemû dibêje ''sihir'' loma bi botê lazim e kirin ''sêhr''. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 17:43, 18 tîrmeh 2026 (UTC)
:Sihirbaz --> sêhrbaz [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 18:07, 18 tîrmeh 2026 (UTC)
== Tercimeyên dîroknas ==
Li tercimeyên [[dîroknas]], hevmaneyên wê hewce ye were îlawekirin. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 18:44, 18 tîrmeh 2026 (UTC)
== Mewlûd ==
Sererastkirina jêgirtinên mewlûdê [https://ku.wiktionary.org/w/index.php?search=insource%3A%2Fw%5C%3AMela+His%C3%AAn%C3%AA+Batey%C3%AE%2F&title=Taybet%3AL%C3%AAger%C3%AEn&ns0=1&searchToken=8m0tguy3sqt7edr4sg0u8hedo] wekî [https://ku.wiktionary.org/w/index.php?title=dax%C3%AEdar&curid=284303&diff=6265851&oldid=6142285] [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 09:43, 20 tîrmeh 2026 (UTC)
0mg5ega4jgak2k3yizu5er1qapu6dfj
6333757
6333756
2026-08-14T23:21:27Z
Ghybu
1393
/* MediaWiki:Gadget-start.js */
6333757
wikitext
text/x-wiki
{{/ser}}
= Karên ferhengî =
== Mane ==
* [[:Kategorî:Madeyên bê beşa mane]]
** [[:Kategorî:Madeyên bê beşa mane bi kurmancî]]
Li ser van rûpelan ev made hene ku maneyan wan nehatine nivîsin û divê werin nivîsin. —[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:17, 16 tîrmeh 2026 (UTC)
== Etîmolojî ==
*[[:Kategorî:Daxwazên etîmolojiyê]]
**[[:Kategorî:Daxwazên etîmolojiyê bi kurmancî]]
Li ser van rûpelan ev made hene ku etîmolojiya wan hîn nehatine nivîsin. Ji bo alîkariyê binêre [[WF:Etîmolojî]] —[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:17, 16 tîrmeh 2026 (UTC)
== Cureyê rêzimanî ==
* [[:Kategorî:Gotarên bê kategoriya rêzimanî]]
* [[:Kategorî:Gotarên bê kategoriya rêzimanî bi kurmancî]]
Li ser van rûpelan ev made hene ku cureyên wan yên rêzimanî hîn nehatine nivîsin. Ji bo alîkariyê binêre [[Alîkarî:Cureyên peyvan]] —[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:17, 16 tîrmeh 2026 (UTC)
== Kontrol ==
* [[:Kategorî:Kontrol]]
** [[:Kategorî:Kontrola maneyê]]
Ev madde bi botê hatine çêkirin, yek bi yek divê werin kontrolkirin. —[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:17, 16 tîrmeh 2026 (UTC)
= Şablon =
== IPA ==
* {{ş|IPA}} divê [[Modul:IPA]] bi kar bîne. —[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:17, 16 tîrmeh 2026 (UTC)
== Deng ==
Kurdîkirina belgekirina {{ş|deng}} lazim e.--[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 00:06, 19 tîrmeh 2026 (UTC)
= Modul =
== Modul:form of/templates ==
* [[Modul:form of/templates]]: Divê ev modul were rojanekirin û xeletiyên berê wekî ([[hevalê]]) werin rastkirin. —[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:17, 16 tîrmeh 2026 (UTC)
*:Merheba @[[Bikarhêner:Ghybu|Ghybu]] Te gotibû di vê modulê de xeletî hene, jkx tu dikarî li vir binivîsî çi kêmasî hene, daku wextê rojane dikim ez ji bîr nekim? [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:16, 21 tîrmeh 2026 (UTC)
*::Silav. Nizanim ji bîra min çûye... Herwiha ji bo çêkirina formên navdêran zanînên cîns û tîpa dawî bes e:
*::* (-ê, mê) => çemandî, bangkirin
*::* (-ê, nêr) => îzafe
*::* (-ê, mê û nêr) => îzafe (nêr), bangkirin (mê), çemandî (mê)
*::* (-a) => îzafe (mê)
*::* (-ekî) => îzafe û çemandî (nêr, nebinavkirî)
*::* (-eke) = > îzafe (mê, nebinavkirî)
*::* ...
*:: <code>if find(mw.title.getCurrentTitle().subpageText, 'ekî$') then ... end</code>
*::<code><nowiki>{{ku-tewîn-navForm|<navdêr>|<zayend>}</nowiki></code>
*::Tablo û nivîs di yekcarî de tên çêkirin...
*::Feqet problem lêzêdekirina mînakan e. [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 17:34, 21 tîrmeh 2026 (UTC)
*:::Lêzêdekirina kîjan nimûneyan? Ev koda js ji bo çi ye? Qisûrê nenêre min fêm nekir :/ [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 18:13, 21 tîrmeh 2026 (UTC)
*::::Li vira ([[hevalê#Formeke navdêrê]]) di bin maneyên 1. û 2. mînak nayên tevlî kirin :) [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 18:18, 21 tîrmeh 2026 (UTC)
*:::::Ev tercîh e, ne mecbûrî ye, em dikarin [https://ku.wiktionary.org/w/index.php?title=heval%C3%AA&diff=prev&oldid=6276350 wisa] bikin. Wekî din? [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 18:29, 21 tîrmeh 2026 (UTC)
*::::::Min li jor tênê got ku tenê parametreyên "navdêr" û "zayend" hewce nee. Bi '''[//ku.wiktionary.org/w/index.php?title=heval%C3%AA&curid=969734&diff=6276353&oldid=6276350 vî]''' awayî jî tê çêkirin. Parametreyên din ne hewce ne. [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 18:38, 21 tîrmeh 2026 (UTC)
*:::::::Ji bo wê şabloneke din lazim e, bila ev şablon wekî îngilîzî bimîne em ji bo kurmancî yekî din çêkin. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 18:42, 21 tîrmeh 2026 (UTC)
*::::::::[https://ku.wiktionary.org/w/index.php?title=heval%C3%AA&oldid=6276885 wisa] çawa ye? Bi min nivîsîna nimûneyan zêde ne lazim e ji ber ku ti kes serê xwe pê naêşîne. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 09:46, 23 tîrmeh 2026 (UTC)
*:::::::::@[[Bikarhêner:Ghybu|Ghybu]] Vê şablonê bi kar bînin an na? Navê şablonê kê çi be? [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 19:07, 24 tîrmeh 2026 (UTC)
== Modul:columns ==
* [[Modul:columns]] were rojanekirin û {{ş|kol3}} bila lînka ''nîşan bide'' deyne beriya sernavê, kolê di qutiya rengî de bila nebe. —[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:17, 16 tîrmeh 2026 (UTC)
== Modul:etymon ==
* [[Modul:etymon kevn]]: Rojanekirin hewce ye. —[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:17, 16 tîrmeh 2026 (UTC)
== [[Modul:ziman/code to canonical name]] ==
Belgekirina skrîptê û js divê were rastkirin. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 09:31, 22 tîrmeh 2026 (UTC)
:* [[MediaWiki:UpdateLanguageNameAndCode.js]]
:[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 09:50, 22 tîrmeh 2026 (UTC)
::* [[Modul:ziman/print]]
::[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 09:52, 22 tîrmeh 2026 (UTC)
:::*[[Modul:ziman/şablon]]
:::[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 09:56, 22 tîrmeh 2026 (UTC)
::::* [[MediaWiki:Gadget-translation editor.js/ziman.json]]
::::[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 11:06, 22 tîrmeh 2026 (UTC)
== [[Modul:quote]] ==
Piştî ev modul hate hazirkirin, lazim e navên jegirtinan werin rastkirin û li hemûyan {{param|jêgirtin}} were zêdekirin. Bnr. [[Gotûbêja şablonê:Jêgirtin/Ehmedê Xanî/Mem û Zîn]] [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 22:27, 5 tebax 2026 (UTC)
::Ev modul hema bêje hazir e. Hûn li ser van madeyan çi difikirin:
# {{para|tarîx}} lazim e full date be eger na, lazim e {{para|sal}} were bikaranîn. Feqat "'''2021''' kanûna pêşîn 23" bi vî şiklî bi min ne problem e çnkî derdê en.wikt "attestation" e delîla herî pêşî jî sal e.
#: {{demo|sep=wisa xuya dibe<br>|<nowiki>{{jêder-kitêb/ceribandin|en
|tarîx=23 December 2021|nivîskar=Harry Hobbs; George Williams|sernav=Micronations and the Search for Sovereignty|url=https://www.cambridge.org/core/books/micronations-and-the-search-for-sovereignty/B0414A3A322695D9EE71E4CDDFDA06DE|weşanxane=Cambridge University Press|rûpel=155|isbn=978-1-009-15012-5|jêgirtin=jêgirtin.|t=-}}</nowiki>}}
#{{para|amadekar}}/{{para|edîtor}}/{{para|terciman}} bi şiklê edîtoriya, amadekariya, tercimekirina
#: {{demo|sep=dide<br>|<nowiki>{{jêder-kitêb/ceribandin|en
|sernav=Medical Surgical Nursing|serî=Juta's Manual of Nursing|cildê-seriyê=volume 4|edîtor=Sophie Mataniele Mogotlane; Joyce Mokoena; Motshedisi Eunice Chauke; Anne Young|sal=2005|weşanxane=Juta Academic|isbn=978-0702171840|rûpel=!12-29|jêgirtin=jêgirtin|t=-}}</nowiki>}}
--[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 13:09, 10 tebax 2026 (UTC)
:@[[Bikarhêner:Bikarhêner|Bikarhêner]] û @[[Bikarhêner:Ghybu|Ghybu]] Hîn gelek tişt hene divê îzah bikin û fikrê we pirs bikim, feqat îzahkirin pir zor e, em dest bi bikaranînê bikin û dûre tiştên ku hûn naxwazin em dikarin biguherînîn, dibe? [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 13:11, 10 tebax 2026 (UTC)
::Dibe, piştî çêbû, em di praktîkê de bibînin ku çawa ye. -- [[Bikarhêner:Bikarhêner|Bikarhêner]] ([[Gotûbêja bikarhêner:Bikarhêner|gotûbêj]]) 18:05, 10 tebax 2026 (UTC)
= Javascript =
== [[Mediawiki:Gadget-citoid-helper.js]] ==
Ji bo bi citoidê kopîkirina malûmatên çavkaniyan amûreke wisa lazim e. Xisûsen ji ber ku bi çend amûrên din dikare were bikaranîn.
Feqat çend problem hene, şablonên me de kêmasiya parametreyan gelek in û xerîteyên citoidê hîn nehatine çêkirin. Wana sererast bikin dûre vê amûrê çêkin, piştre [[MediaWiki:Gadget-start.js|start.js]] û [[MediaWiki:Gadget-wikt.add-examples.js|add examples.js]] were rojanekirin.
- --[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 00:04, 19 tîrmeh 2026 (UTC)
:Merheba @[[Bikarhêner:Bikarhêner|Bikarhêner]], ez dibêjim karê Modul:quote zêde wext bistîne, bila em dest bi bikaranîna van amûran bikin dûre kêmasiyan em ê temam bikin înşela. Dikarî vana li cihên xwe yên rast kopî paste bikî?
# [[Special:PermanentLink/6291574|Bikarhêner:Wikihez/skrîpt/js/Gadget-citoid-helper.js]] --> [[Mediawiki:Gadget-citoid-helper.js]]
# Ya li jêr kopî bike qismê herî dawî ya AmûrênVeşartî li [[MediaWiki:Gadgets-definition]]:
## <code><nowiki>* citoid-helper[ResourceLoader|hidden|default|dependencies=mediawiki.util]|citoid-helper.js</nowiki></code>
--[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:58, 26 tîrmeh 2026 (UTC)
== [[MediaWiki:Gadget-start.js]] ==
Rojanekirin hewce ye. Min gelek tişt lê zêde kir lê ez niha test dikime. Piştre em bar bikin:
* [[Bikarhêner:Wikihez/Gadget-start.js]] --> [[MediaWiki:Gadget-start.js]]
* [[Bikarhêner:Wikihez/Gadget-start.css]] --> [[MediaWiki:Gadget-start.css]]
--[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 22:08, 17 tîrmeh 2026 (UTC)
:Min [[MediaWiki:Gadget-start/data.json|data.json]] çêkir ji bo ku bi hêsanî malûmatên heyî werin guhartin bêyî guhartina Javascriptê. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 19:49, 18 tîrmeh 2026 (UTC)
:Xeletiyên ku ji bîr nekim rast bikim:
:* Wextê min çavkanî "kitêb" hilbijart û bi destî tije kir xeletiyeke [https://ku.wiktionary.org/w/index.php?title=xezete&diff=prev&oldid=6265392 wisa] derket her kelîme hate lînkkirin.
:* <code>html("⠿")</code> ev ne lazim e.
:* textarea ji bo çavkaniyên jêgirtinan xaseten yên sernav hîn jî ne draggable e.
:* pêşdîtina zindî checkbox wextê tê rakirin, pêşdîtin winda nabe.
:* Butona mobîlê ya vekirina formê di moda tarî de belî nabe, tenê wekî qutiyeke tarî xuya dibe.
:* Metna hişyarkirinê di guhartina rûpelên heyî de lazim e baştir bikim.
:[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 23:51, 18 tîrmeh 2026 (UTC)
::Ev problem çêbûn, ez ê binêrim ka çi problemên din hene. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 14:15, 19 tîrmeh 2026 (UTC)
:::Çêke: Ji bo qismê çavkaniyê yek dikare API call û Kategorî:Çavkanî bi kar bîne ji bo ku şablon zêde bikî ji yên heyî. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 21:21, 19 tîrmeh 2026 (UTC)
::::Ev jî çêbû, min beşa çavkanî jî çêkir. Eger xeletî dernekeve û problema valahiya piştî etîketê ji bîr nekim, piştî rojanekirina amûrên linkify, û citoid em dikarin bar bikin. Ez ê ti tiştê nû îlawe nekim, zêde dirêj bû. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:14, 21 tîrmeh 2026 (UTC)
:::::Merheba @[[Bikarhêner:Bikarhêner|Bikarhêner]]. Dikarî wana bar bikî?
:::::* [[Bikarhêner:Wikihez/Gadget-start.js]] --> [[MediaWiki:Gadget-start.js]]
:::::* [[Bikarhêner:Wikihez/Gadget-start.css]] --> [[MediaWiki:Gadget-start.css]]
:::::* [[MediaWiki:Gadgets-definition]] wisa rojane bike:
:::::* start[ResourceLoader|default|package|dependencies=mediawiki.util,ext.gadget.StorageUtils,ext.gadget.citoid-helper]|start.js|start.css|start.js/data.json
:::::[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 09:39, 5 tebax 2026 (UTC)
{{şirove}} Dewama ''[[Special:PermanentLink/6333688|Gotûbêja bikarhêner:Rewiye tine#WF:Nû]]'' bila gotûbêja wî em spam nekin. :D
{{r|Ghybu}} dikarî [[Special:PermanentLink/6333689|vê htmlê]] binêrî claude rast fêm kiriye yan na? Daxîne û wek html qeyd bike. --[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 18:43, 14 tebax 2026 (UTC)
:Min seh wîkîyên din jî kir, li wîkiya fransî tiştekî wekî daxwaza min çêkirine (tiştên ku ne hewce ne wekî "tab" çêkirine an jî hatine vêşartin): [//fr.wiktionary.org/w/index.php?title=fdsdfdsf&action=edit&redlink=1]. Formata me yê berî jî bi vê lojîkê hatibû çêkirin, wekî de.wiktionary ([//de.wiktionary.org/w/index.php?title=sdfdsfsdfs&action=edit&preload=Vorlage:Formatvorlage_(Substantiv_vereinfacht)]) [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 19:01, 14 tebax 2026 (UTC)
::PS: Dîsa jî Claude min rind fêm kiriye :)) Feqet min got ku beşên Mane", "Bilêvkirin" û "Beşên din" cem hev (wekî "tab") ". Û dema ku tu terî di nav "Besên din" Hevmane, Jê, ... li wira werin dayîn. Wêne/Resim û Nimûne jî di nav beşa ("tab") "Mane" [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 19:17, 14 tebax 2026 (UTC)
::Erê ya fr.wikt min jî dîtibû jixwe fikrê tab min ji wan girtibû :D (feqat min li cem wan tenê tab-a maneyê dît yên din nedît çawa tê vekirin nizanim) Berê hemû beş piştî maneyê bibûn, dûre min sê Tab çêkir, Bingehîn+Lînkkirin+Bikaranîn. Niha lazim e Tabeke din çêkim. Ya ku claude çêkiriye bnr. [[Special:PermanentLink/6333698#L-7]] ne baş e bnr. [[Special:PermanentLink/6333703|qiyaskirinê li ser vê htmlê]] Êdî ez Claude abuse dikime ji ber ku Pro ye :D [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 19:26, 14 tebax 2026 (UTC)
:::Claude dibêje:
:::Good clarification — that's a real simplification, not just a relabel. Updated STEP_GROUPS from 5 tabs down to 3:
:::Mane — the definitions themselves, plus Wêne (image), now grouped in with it instead of sitting in a separate misc tab. Nimûne needed no change since it was already rendering inside each Mane sense block, not as its own step.
:::Bilêvkirin — unchanged, still just pronunciation.
:::Beşên din — everything else in one flat bucket: hevmane, jê, têkildar, herwiha binêre, formên alternatîv, dijmane, jornav, jêrnav, notên bikaranînê, bi alfabeyên din, dûnde, çavkanî, bêhtir bixwîne, tewandin, etîmolojî, zaravayên din, werger, and bnr-h — instead of being split across the old Bingehîn/Lînkkirin/Bikaranîn/Din tabs.
:::No DOM-order changes were needed this time — the fix from the blank-tab bug looks up the tab bar's position dynamically now, so it didn't matter that I regrouped which steps go where. Same two files, saved to your Wiki folder — worth another pass through all three tabs once you've pasted this in, same as last time. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 19:34, 14 tebax 2026 (UTC)
::::Mînak:
Ziman
---------------------------------------------
Cureyê rêzimanî (Navdêr)
Navdêr (hilbijêre) ┆ Cîns (hilbijêre) ┆ Jimar (hilbijêre)
- lêker -mê -yekjimar
- rengdêr -nêr -pirjimar
- ... -... -...
---------------------------------------------
Mane || Bilêvkirin || Beşên din
hilbijêre:
- mane - IPA - Hevmane
- nimûne - kîte - Dijmane
- wêne
Dema ku tu "Cureyê rêzimanî" dikî "Lêker" :
Cureyê rêzimanî (Lêker)
Lêker (hilbijêre) ┆ Cure (hilbijêre)
- navdêr -rehê niha
- rengdêr -rehê borî
- ... -...
---------------------------------------------
┆ : select/option ("tab" nîne, tê dîtin)<br>
|| : "tab"
-- [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 19:45, 14 tebax 2026 (UTC)
'''Sê-stûnî ("┆" = ne tab), li gorî Cureyê rêzimanî:'''
{| class="wikitable"
! Cureyê rêzimanî !! Stûna 2 !! Stûna 3 !! Têbînî
|-
| Navdêr / Serenav
| Cîns (hilbijêre ▾: mê / nêr / ... — tenê heke ziman zayendê rêzimanî hebe)
| '''Jimar''' (?) — pirs li jêr
| Qadên "Forma mê/nêr/pirjimar/yekjimar" niha jî li vir hene — ma ev di "Jimar"-ê de tên tevlihev kirin, an cuda dimînin?
|-
| Rengdêr
| (heman m/n/p/y forman ku Navdêr distîne)
| Sûperlatîv (sûp) / Komparatîv (komp)
| Ne li ser her du nîgaran hatiye behs kirin — ma sê-stûnî li vir jî tê bikaranîn?
|-
| Lêker
| '''Cure''' = Cureyê lêkerê (hilbijêre ▾: gerguhêz / negerguhêz / xwerû-... / pêkhatî-... / hevedudanî-... / biwêjî-... — 10 vebijêrk)
| Di heman stûnê de: Rehê dema niha / Rehê dema borî / Rehê dema bilanî (her sê qadên nivîsandinê ne, ne hilbijêrk in)
| Ma "Cure" her sê rehan di xwe de digire wek yek stûn, an her yek stûneke cuda ye?
|-
| Tîp (herf/sembol)
| Girdêk (gir) / Hûrek (hûr)
| —
| Ne behs kiriye
|-
| Her cureyek, li gorî zimên
| Transliterasyon (tr) / Transkrîpsiyon (ts)
| —
| Bi zimên ve girêdayî ye, ne bi cureyê rêzimanî ve
|-
| Her cureyek, tenê ziman=japonî
| Hanja / Translit. hanja
| —
| Ne bi cureyê rêzimanî ve girêdayî ye
|-
| Her cureyek
| '''Tercîhên pêşketî''' (kolapsî): form, formaalt, nekatcure, nekatcins, nekatçendterm, serlînkneke, nekatpalîndrom, neformtr
| —
| Vebijarkî, ji bo hemû cureyan
|}
'''Tabên jêrîn — Mane ‖ Bilêvkirin ‖ Beşên din ("||" = tab):'''
{| class="wikitable"
! Mane !! Bilêvkirin !! Beşên din (hemû 18 hêman)
|-
| mane, nimûne, wêne
| şablonên bilêvkirinê (mînak: IPA, kîte)
| tewandin, etîmolojî, bi zaravayên din, werger, jê, têkildar, herwiha binêre, formên alternatîv, hevmane, dijmane, jornav, jêrnav, notên bikaranînê, bi alfabeyên din, dûnde, çavkanî, bêhtir bixwîne, bnr-h
|}
'''Pirsên vekirî:'''
# "Jimar" (yekjimar/pirjimar) — qadeke ku nîşan dide têketî bi xwe yekjimar e an pirjimar e. Ev cuda ye ji "Forma yekjimar (y)"/"Forma pirjimar (p)" ya heyî (ku forma DÎN a kelîmeyê tomar dike). Herdu bimînin, an werin yek kirin?
# Ma sê-stûnî tenê ji bo Navdêr/Lêker e, an ji bo Rengdêr/Tîp jî heman mantiq derbas dibe?
# Di "Beşên din" de: dixwazî pêşî navnîşek/hilbijartinek nîşan bide (17 hêmanên din jî tê de), û qad tenê piştî hilbijartinê xuya bibin?
:Tu dikarî start.js ji Tercîh/ Amûran rakî û bi test.js li Amûran herî taliyê ye biceribînî. Claude ya li jor hazir kir, Jimar ez dikarim îzah bikim. Feqat bi min di tab-a maneyê de lazim e Bi zaravayên din (heta wek werger her car bila li rûpelan were zêdekirin) û werger jî hebe.--[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 20:18, 14 tebax 2026 (UTC)
:;Navdêr: Tenê "cîns" û "jimar" bes e. "Forma mê", "Forma nêr", ... nayê fêm kirin. Bi min wekî "Tercîhên pêşketî" bi navkî din veşartî çêke.
:;Lêker: "Cureyê lêkerê" nayê fêm kirin, bi min pêşta "geguhez/negerguhêz" were hilbijartin, paşê jî form "hevdudanî/pêkatî/..." ji ber ku her kes vana nizanî... Dîsa jî tu dizanî.
:Bi min beşên "Hevmane" û dijmane jî bike de nav beşa Mane ("tab") ji ber ku pirr tên xwestin.
:Şûnda Wêne jî Nimûne/jêgirtin...
:Herwiha hemû bi rengê şîn hatine çêkirin, nizanim beşên din (===) bi rengê gewr an reş çito dibe? [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 21:35, 14 tebax 2026 (UTC)
::Nimûne/jêgirtin, hevmane, Dijmane li binê her maneyê hene. ji ber ku wana bi maneyê ve girêdayî ne lazim e wisa bimîne feqat belkî şiklekî baştir bibînin. Hînbûna bikaranîna formeke nû bi qasî hînbûna koda wîkiyê zor e heqîqeten... [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 21:45, 14 tebax 2026 (UTC)
:::Min şaş fêm meke feqet te amûrek ji bo Wikihez çêkiriye :) Tu dixwazî ku hemû tiştên ku te çêkiriye tevlî vê Gadgetê bikî û bikarhênerên din jî bi kar bînin... Tu jî dizanî ku kesên ku tên vira çito peyv çêdikin: Ziman > Mane > Mînak > Hevmane > Dijmane ! Du Gadget çêke yek ji bo bikarhênerên ku hertim li vira ne, yekeke din jî ji bo bikarhênerên din (yên ku pirr nên vira).
:::Herwiha kesên ku hertim li vira ne bi Gadgetê gotar çênekin, ''copy/paste'' dikin. [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 22:12, 14 tebax 2026 (UTC)
::::Min xwest her tişt li ser rêza xwe be ji bo ku hîn bibin çi diçe kû derê feqat bi vî şiklî jî zêde dirêj û tevlihev dibe. Loma ez ê wekî tu dibêjî bikim her tiştê din bila collapsed pêşketî be. Ê ku dixwaze pê lê ke û binêre çi dikare were zêdekirin. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 22:26, 14 tebax 2026 (UTC)
:::::Niha baştir tê fêm kirin {{=)}} [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 23:01, 14 tebax 2026 (UTC)
::::::Min ji Opus 5 û Design Tool îstifade kiriye hema bêje milyonek token çûn :D pêşî dîzayn kir dûre dest pê kir wekî dîna bişuxile. Pereyê xwe %100 heq dike welleh :D feqat moda tarî ji bîr kiriye :D [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 23:12, 14 tebax 2026 (UTC)
:::::::Spas! Etîmolojî jî wekî "Bilêvkirin", di beşekê din de cem wê, were çêkirin? [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 23:20, 14 tebax 2026 (UTC)
== [[Mediawiki:Gadget-QQ.js]] ==
Ev amûr di şikle Minerva de. Her daîm vê xeletiyê dide:
<syntaxhighlight lang="js">
TypeError: Cannot read properties of null (reading 'addEventListener') at css () at runScript () at Array.<anonymous> () at flushCssBuffer ()
</syntaxhighlight> [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 19:29, 18 tîrmeh 2026 (UTC)
:* [[Bikarhêner:Wikihez/skrîpt/js/Gadget-QQ.js]] --> [[Mediawiki:Gadget-QQ.js]]
:* [[Bikarhêner:Wikihez/Gadget-QQ.css]] --> [[Mediawiki:Gadget-QQ.css]]
:Ez dibêjim çêbû lê ka çend roj biceribînim. Tiştên ku hatin sererastkirin:
:# Google Books API Key dikarî zêde bikî, dixe cookies û di gerokê de dimîne. Berê bê API Key dixebitiya lê êdî mecbûr e ku API Key-a te hebe, bidestxistina wê ne zêde zor e lê dîsa jî tevlihev e.
:# Êdî di mobîlê de dixebite, heta di mobîlê de xweştir xuya dike.
:# Moda tarî
:# OOUI dewsa jquery.ui
:# Li qutiyê çi dixwazî zêde bikî, dikare li gorî îsm, sifet, fiîl bitewîne. Lê ji bo fiîl tenê dikare çend heb inflection bîne.
:# Butona paqij bike lê zêde kir.
:# Çend paqijiyên jêgirtinên Google Kitêbê niha hene.
:[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 23:38, 18 tîrmeh 2026 (UTC)
::Tewandina fiîlan û xeletiya modulê lazim e were rastkirin. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 14:40, 21 tîrmeh 2026 (UTC)
== [[MediaWiki:Gadget-wikt.add-examples.js]] ==
Min ev amûr hinek rojane kir feqat çend problem hene berî ku bar bikin.
Tiştên ku min guhart:
# Êdî li sayfeyên bi {{ş|maneid}} jî dixebite,
# Cihê di wîkîtekstê de yê ku jêgirtin were îlawekirin baştir bû,
# [[Mediawiki:Gadget-citoid-helper.js|citoid helper]] zêde kir ji bo ku bi hêsanî çavkanî bi riya doi, isbn an urlyê werin tijîkirin.
* [[Bikarhêner:Wikihez/Gadget-wikt.add-examples.css]] --> [[MediaWiki:Gadget-wikt.add-examples.css]]
* [[Bikarhêner:Wikihez/Gadget-wikt.add-examples.js]] --> [[MediaWiki:Gadget-wikt.add-examples.js]]
- --[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 00:50, 19 tîrmeh 2026 (UTC)
:Min "wikt." qismên cache kirinê ya wîkiya fransî bi [[MediaWiki:Gadget-StorageUtils.js]] guhartiye. loma ji bîr nekin wê amûrê li [[MediaWiki:Gadgets-definition]] zêde bikin. û navê amûrê jî biguhêrînin. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 09:15, 23 tîrmeh 2026 (UTC)
::Berê li ser WF:ceribandin dixebitî. niha naxebite. Divê were rastkirin. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 22:10, 7 tebax 2026 (UTC)
== Gadget-translation editor ==
* [[MediaWiki:Gadget-translation editor.js]]: divê formata en.wîktê were bikaranîn ji ber ku me gelek tercime ji en.wîktê kopî kir û ev js hîn nikare formata wekî li jêr bi kar bîne.
<syntaxhighlight lang="wikitext">
* {{Z|sh}}:
*: Kirîlî:
*: Latînî
</syntaxhighlight>
—[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:17, 16 tîrmeh 2026 (UTC)
== [[Mediawiki:Gadget-linkify.js]] ==
* ''rûpeleke'' wekî<syntaxhighlight lang="wikitext">[[rûpeleke]]</syntaxhighlight> lînk dike, bi regexê belkî dikare wisa bike <syntaxhighlight lang="wikitext">[[rûpel]]eke</syntaxhighlight>
—[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:17, 16 tîrmeh 2026 (UTC)
* Amûreke din wekî [[User:Wikihez/Gadget-linkify.js|linkify]] lazim e ku herfên mezin biçûk bike ji bo kurmancî.—[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:17, 16 tîrmeh 2026 (UTC)
:{{r|Bikarhêner}} Merheba bira, dikarî viya jî bar bikî?:
* [[Special:PermanentLink/6291974|linkify]] --> [[Mediawiki:Gadget-linkify.js]]
Spas--[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 11:42, 29 tîrmeh 2026 (UTC)
:Dûre [https://ku.wiktionary.org/wiki/MediaWiki:Gadget-start.js#L-283 li vir] wiktviLinkify bike kuLinkify xêra xwe [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 11:51, 29 tîrmeh 2026 (UTC)
::Min ji bîr kir lê zêde bikim niha nikare "Dİ" bike "di", xeletiyeke berbelav a di nivîsên kurdî de, herfên din ên wekî ll yan rr jî hewce ne werin zêdekirin. Dûre em zêde bikin. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 21:42, 29 tîrmeh 2026 (UTC)
:::Min nû ferq kir, sayfeyên ku hîn nehatine çêkirin wîkîlînk nake. Problemeke mezin e divê were rastkirin. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 18:15, 30 tîrmeh 2026 (UTC)
::::Na, lînk dike, tiştekî din heye... [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 10:49, 31 tîrmeh 2026 (UTC)
== Amûra manayê ==
Amûreke din ji bo nivîsina maneyê wekî Nimûne zêde bike lazim e [https://ku.wiktionary.org/w/index.php?title=Bikarh%C3%AAner:Wikihez/test.js&oldid=6276876 js] [https://ku.wiktionary.org/w/index.php?title=%C5%9Eablon:ceribandin2&oldid=6265629 şablon] [https://ku.wiktionary.org/w/index.php?title=Bikarh%C3%AAner:Wikihez/common.css&oldid=6265642 css] --[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 09:12, 23 tîrmeh 2026 (UTC)
== [[MediaWiki:Gadget-jeder.js]] ==
@[[Bikarhêner:Ghybu|Ghybu]] Çavkaniyên jêderê di moda pêşdîtinê de jêderê vedişêre, ew jî min gelek eciz dike wextê çavkanî zêde dikim. Min ji Claude pirsî û kodan nîşanî wê da, wisa cewab da:
Yes — and this file actually explains the whole thing precisely, better than my earlier guess about extract-stripping.
What's happening: the CSS rule
<syntaxhighlight lang="css">
.jeder{
display:none;
}
</syntaxhighlight>
hides every citation by default, *unconditionally*. The only thing that ever makes it visible again is the gadget's JS: it finds each `.jeder`, builds the short "`— (year, author, +)`" summary from the `.j-pewist` fields, and either reveals the short version or — for citations with no `.j-pewist` fields — explicitly sets `display:inline` on the original.
So visibility of citations depends entirely on this JS running. In the normal article view (Image 1) it runs, so you see the collapsed "`(1918, E. Rehmî Ji Mala Hekariyan, Amadekar: M. E. Bozarslan, +)`" form. In whatever generated Image 2 — a hover-preview/extract/API render — gadget JS doesn't execute, so nothing ever removes the `display:none`, and the citation vanishes completely rather than degrading to "still visible, just not collapsed."
<b>The fix:</b> flip the default so the *un-collapsed* state is the safe fallback, and let JS do the hiding only after it successfully builds the short version. That way, any context without JS shows the full citation instead of nothing.
CSS — remove the blanket hide:
<syntaxhighlight lang="css">
.jeder {
/* intentionally no display:none here — see Gadget-... .js */
}
</syntaxhighlight>
JS — do the hiding from script, after the short form exists:
{{veşêre-ser}}
<syntaxhighlight lang="js">
// Ji bo şablonên [[Şablon:jêder]] hatiye nivîsandin.
// Parametreyên ku di navbera "<span class="j-pewist">...</span>" an "{{j-pêwîst|...}}" de ne venaşêre.
$(function() {
function nivisaKurtTevliBike(sund, nivisKurt) {
var zede = $('<a>+</a>')
.addClass('click')
.attr('href', '#')
.attr('title', 'zêdetir')
.css('font-weight', 'bold');
var kurt = $(' <a>↩</a>')
.addClass('click-kurt')
.attr('href', '#')
.attr('title', 'veşêre')
.css('font-weight', 'bold');
$('<span>' + nivisKurt + '</span>')
.append(zede).append(')')
.addClass('jeder-kurt')
.css('font-size', '0.85em')
.insertAfter(sund);
sund.append(' ').append(kurt);
// Only hide the full citation once the short summary actually exists.
// If this script never runs (no-JS clients, hover-preview extracts,
// action=render, etc.), the full citation stays visible instead of
// silently disappearing.
sund.css('display', 'none');
}
function vesere() {
$('.jeder').each(function() {
var elmTab = $(this).find('.j-pewist').clone();
if (elmTab.length) {
var elm = '';
for (var i = elmTab.length - 1; i >= 0; i--) {
elm = elmTab.eq(i).html() + ', ' + elm;
}
var nivisKurt = ' — (' + elm;
nivisaKurtTevliBike($(this), nivisKurt);
}
// else: no j-pewist fields to shorten — leave the full citation
// as it already renders (visible), nothing to do.
});
}
vesere();
$(".click").click(function(e) {
e.preventDefault();
$(this).parent('.jeder-kurt').css('display', 'none');
$(this).parent('.jeder-kurt').prev().css('display', 'inline');
});
$(".click-kurt").click(function(e) {
e.preventDefault();
$(this).parent('.jeder').css('display', 'none');
$(this).parent('.jeder').next().css('display', 'inline');
});
});
</syntaxhighlight>
Net effect:
- JS-enabled readers (normal article view): identical experience to today — collapsed short form with `+`/`↩` toggle.
- No-JS contexts (previews, extracts, screen readers before JS loads, print, etc.): full citation is shown instead of nothing — a real regression fix rather than a cosmetic one.
One caveat worth being upfront about: this fixes it *if* the preview context renders the gadget's HTML/CSS but doesn't execute gadget JS (which is the far more common case, and what this code strongly suggests is happening). If Image 2 instead comes from a pipeline that strips the `.jeder`/`.jegirtin-text` elements out of the HTML entirely before this CSS/JS even gets a chance to apply, no on-wiki CSS/JS change can help — that'd need the extract-generation config changed instead. Given what this gadget file shows, though, I'd bet on the CSS-hide explanation.
{{veşêre-bin}}
Em dûre biceribînin eger xeletî tinebe, vî tiştî jî rast bikin. --[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 20:00, 23 tîrmeh 2026 (UTC)
:Ez APIya MediaWiki rind nizanim belkî Claude dizane:) Em nikarin bibêjin dema ku moda "''action=edit''" e fonksiyona <code>function vesere()</code> bi kar meyîne. [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 15:57, 24 tîrmeh 2026 (UTC)
::Na, di moda "edît"-ê de <code>var elmTab = null</code>... [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 16:13, 24 tîrmeh 2026 (UTC)
?:
<syntaxhighlight lang="js">
if (
mw.config.get('wgAction') === 'edit' ||
mw.config.get('wgAction') === 'submit'
){
var elmTab = [];
} else {
var elmTab = $(this).find('.j-pewist').clone();
}
</syntaxhighlight>
--[[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 16:31, 24 tîrmeh 2026 (UTC)
:Ez jî nizanim Claude çiqas ji mediawiki fêm dike lê heta niha ti tişt nîne ku min jê pirs kir û nikaribû çêke, bila wekî reklam nebe feqat Claude mikemmel e, dibêjim "li vir çima xeletiyeke wisa derdikeve" di dosyeya 2000 rêzî de diçe tiştê xelet tenê rast dike tiştekî din naguherîne. Chatgpt û aistudio qet wisa nakin, eynî dosyeyê deh cara dinivîsin, deh netîceyên cuda derdikevin :D
:Em dikarin vê amûrê wextê edit û submitê neaktîv bikin wekî <syntaxhighlight lang="js">if (!(action === "edit" || action === "submit")) {
:return;</syntaxhighlight> lê wê demê display:none wê çibe nizanim. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 18:23, 24 tîrmeh 2026 (UTC)
::display:none ne hewce ye ma jixwe di nav kodê [https://ku.wiktionary.org/w/index.php?title=MediaWiki:Gadget-jeder.js&oldid=6069025#L-49 L-49] de inline/none heye? [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 18:53, 24 tîrmeh 2026 (UTC)
:Min bi vî şiklî [https://ku.wiktionary.org/w/index.php?title=Bikarh%C3%AAner:Wikihez/vector-2022.js&diff=prev&oldid=6290816#L-28] ceriband feqat nexebitî. "display:none" di pêşdîtinê de dixebite feqat js naşixule. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 14:43, 25 tîrmeh 2026 (UTC)
::Kodên JSê pir hez nakim (pêşta hukurina APIya MWyê hewce bû) dîsa jî ez ê seh bikim :) [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 16:49, 27 tîrmeh 2026 (UTC)
:::Ez niha bi vî şiklî [https://ku.wiktionary.org/w/index.php?title=Bikarh%C3%AAner:Wikihez/test.js&oldid=6290820] [https://ku.wiktionary.org/w/index.php?title=Bikarh%C3%AAner:Wikihez/common.css&oldid=6290821#L-8] bi kar tînim ti problem nîne. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 17:09, 27 tîrmeh 2026 (UTC)
== [[MediaWiki:Gadget-PagePreviews.js]] ==
Ez dibêjim em vê amûrê jî çêkin [[:en:MediaWiki:Gadget-PagePreviews.js]] --[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 10:56, 3 tebax 2026 (UTC)
= Moda tarî =
== [[Şablon:wîkîpediya]] ==
Rengê tarî de xirab e.--[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 19:36, 4 tebax 2026 (UTC)
= Bot =
Karên ku bi botê werin çêkirin ji kerema xwe li vir binivîsin.
== Kategorî:Biwêj ==
[[:Kategorî:Biwêj]] divê were paqijkirin, lîsteya madeyên {{ş|biwêj}} çêke, yên ku tê de bûn, kirin, man hene filtre bike yên din bi destî tê çêkirin.—[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:17, 16 tîrmeh 2026 (UTC)
== Jêgirtin ==
Xistina jêgirtinên beşa [https://ku.wiktionary.org/w/index.php?search=insource%3A%2F%3D+*Ji+%5BWw%5D%C3%AAjey%C3%AA+*%3D%2F&title=Taybet%3AL%C3%AAger%C3%AEn&profile=advanced&fulltext=1&ns0=1&searchToken=8rh0bmw8dccsi7aynl6zli8uf ji wêjeyê] li beşa maneyê. —[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:17, 16 tîrmeh 2026 (UTC)
== Bota Toolforgeê ==
Botekî Toolforgeê lazim e ji bo ku xeletiyên biçûk wekî şablonên bi navên îngilîzî werin kurdîkirin yan jî valahiya beşan rast bike û hwd.—[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:17, 16 tîrmeh 2026 (UTC)
:Min [[Bikarhêner:Wikihez/skrîpt/py/kuwiktkozmetik.py|paqijiyen kozmetîk]] hazir kir feqat hîn navên şablonan naguhêre. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 20:05, 4 tebax 2026 (UTC)
== Updatew ==
Bota [[Bikarhêner:Wikihez/skrîpt/py/updateW.py|updateW]] divê were rojanekirin. Yan jî yekî nû were çêkirin. Şablonên {{ş|W}} di beşa tercimeyan de sererast dike û zimanan rêz dike. Ya niha xeletiya navê zimanî dide.—[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:17, 16 tîrmeh 2026 (UTC)
== sihir --> sêhr ==
Tercimeyên ''[[sêhr]]'' hemû dibêje ''sihir'' loma bi botê lazim e kirin ''sêhr''. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 17:43, 18 tîrmeh 2026 (UTC)
:Sihirbaz --> sêhrbaz [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 18:07, 18 tîrmeh 2026 (UTC)
== Tercimeyên dîroknas ==
Li tercimeyên [[dîroknas]], hevmaneyên wê hewce ye were îlawekirin. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 18:44, 18 tîrmeh 2026 (UTC)
== Mewlûd ==
Sererastkirina jêgirtinên mewlûdê [https://ku.wiktionary.org/w/index.php?search=insource%3A%2Fw%5C%3AMela+His%C3%AAn%C3%AA+Batey%C3%AE%2F&title=Taybet%3AL%C3%AAger%C3%AEn&ns0=1&searchToken=8m0tguy3sqt7edr4sg0u8hedo] wekî [https://ku.wiktionary.org/w/index.php?title=dax%C3%AEdar&curid=284303&diff=6265851&oldid=6142285] [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 09:43, 20 tîrmeh 2026 (UTC)
grl8r8c68jry9htc0jtzipvedgxxwmr
6333758
6333757
2026-08-14T23:23:23Z
Ghybu
1393
/* MediaWiki:Gadget-start.js */
6333758
wikitext
text/x-wiki
{{/ser}}
= Karên ferhengî =
== Mane ==
* [[:Kategorî:Madeyên bê beşa mane]]
** [[:Kategorî:Madeyên bê beşa mane bi kurmancî]]
Li ser van rûpelan ev made hene ku maneyan wan nehatine nivîsin û divê werin nivîsin. —[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:17, 16 tîrmeh 2026 (UTC)
== Etîmolojî ==
*[[:Kategorî:Daxwazên etîmolojiyê]]
**[[:Kategorî:Daxwazên etîmolojiyê bi kurmancî]]
Li ser van rûpelan ev made hene ku etîmolojiya wan hîn nehatine nivîsin. Ji bo alîkariyê binêre [[WF:Etîmolojî]] —[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:17, 16 tîrmeh 2026 (UTC)
== Cureyê rêzimanî ==
* [[:Kategorî:Gotarên bê kategoriya rêzimanî]]
* [[:Kategorî:Gotarên bê kategoriya rêzimanî bi kurmancî]]
Li ser van rûpelan ev made hene ku cureyên wan yên rêzimanî hîn nehatine nivîsin. Ji bo alîkariyê binêre [[Alîkarî:Cureyên peyvan]] —[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:17, 16 tîrmeh 2026 (UTC)
== Kontrol ==
* [[:Kategorî:Kontrol]]
** [[:Kategorî:Kontrola maneyê]]
Ev madde bi botê hatine çêkirin, yek bi yek divê werin kontrolkirin. —[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:17, 16 tîrmeh 2026 (UTC)
= Şablon =
== IPA ==
* {{ş|IPA}} divê [[Modul:IPA]] bi kar bîne. —[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:17, 16 tîrmeh 2026 (UTC)
== Deng ==
Kurdîkirina belgekirina {{ş|deng}} lazim e.--[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 00:06, 19 tîrmeh 2026 (UTC)
= Modul =
== Modul:form of/templates ==
* [[Modul:form of/templates]]: Divê ev modul were rojanekirin û xeletiyên berê wekî ([[hevalê]]) werin rastkirin. —[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:17, 16 tîrmeh 2026 (UTC)
*:Merheba @[[Bikarhêner:Ghybu|Ghybu]] Te gotibû di vê modulê de xeletî hene, jkx tu dikarî li vir binivîsî çi kêmasî hene, daku wextê rojane dikim ez ji bîr nekim? [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:16, 21 tîrmeh 2026 (UTC)
*::Silav. Nizanim ji bîra min çûye... Herwiha ji bo çêkirina formên navdêran zanînên cîns û tîpa dawî bes e:
*::* (-ê, mê) => çemandî, bangkirin
*::* (-ê, nêr) => îzafe
*::* (-ê, mê û nêr) => îzafe (nêr), bangkirin (mê), çemandî (mê)
*::* (-a) => îzafe (mê)
*::* (-ekî) => îzafe û çemandî (nêr, nebinavkirî)
*::* (-eke) = > îzafe (mê, nebinavkirî)
*::* ...
*:: <code>if find(mw.title.getCurrentTitle().subpageText, 'ekî$') then ... end</code>
*::<code><nowiki>{{ku-tewîn-navForm|<navdêr>|<zayend>}</nowiki></code>
*::Tablo û nivîs di yekcarî de tên çêkirin...
*::Feqet problem lêzêdekirina mînakan e. [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 17:34, 21 tîrmeh 2026 (UTC)
*:::Lêzêdekirina kîjan nimûneyan? Ev koda js ji bo çi ye? Qisûrê nenêre min fêm nekir :/ [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 18:13, 21 tîrmeh 2026 (UTC)
*::::Li vira ([[hevalê#Formeke navdêrê]]) di bin maneyên 1. û 2. mînak nayên tevlî kirin :) [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 18:18, 21 tîrmeh 2026 (UTC)
*:::::Ev tercîh e, ne mecbûrî ye, em dikarin [https://ku.wiktionary.org/w/index.php?title=heval%C3%AA&diff=prev&oldid=6276350 wisa] bikin. Wekî din? [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 18:29, 21 tîrmeh 2026 (UTC)
*::::::Min li jor tênê got ku tenê parametreyên "navdêr" û "zayend" hewce nee. Bi '''[//ku.wiktionary.org/w/index.php?title=heval%C3%AA&curid=969734&diff=6276353&oldid=6276350 vî]''' awayî jî tê çêkirin. Parametreyên din ne hewce ne. [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 18:38, 21 tîrmeh 2026 (UTC)
*:::::::Ji bo wê şabloneke din lazim e, bila ev şablon wekî îngilîzî bimîne em ji bo kurmancî yekî din çêkin. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 18:42, 21 tîrmeh 2026 (UTC)
*::::::::[https://ku.wiktionary.org/w/index.php?title=heval%C3%AA&oldid=6276885 wisa] çawa ye? Bi min nivîsîna nimûneyan zêde ne lazim e ji ber ku ti kes serê xwe pê naêşîne. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 09:46, 23 tîrmeh 2026 (UTC)
*:::::::::@[[Bikarhêner:Ghybu|Ghybu]] Vê şablonê bi kar bînin an na? Navê şablonê kê çi be? [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 19:07, 24 tîrmeh 2026 (UTC)
== Modul:columns ==
* [[Modul:columns]] were rojanekirin û {{ş|kol3}} bila lînka ''nîşan bide'' deyne beriya sernavê, kolê di qutiya rengî de bila nebe. —[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:17, 16 tîrmeh 2026 (UTC)
== Modul:etymon ==
* [[Modul:etymon kevn]]: Rojanekirin hewce ye. —[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:17, 16 tîrmeh 2026 (UTC)
== [[Modul:ziman/code to canonical name]] ==
Belgekirina skrîptê û js divê were rastkirin. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 09:31, 22 tîrmeh 2026 (UTC)
:* [[MediaWiki:UpdateLanguageNameAndCode.js]]
:[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 09:50, 22 tîrmeh 2026 (UTC)
::* [[Modul:ziman/print]]
::[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 09:52, 22 tîrmeh 2026 (UTC)
:::*[[Modul:ziman/şablon]]
:::[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 09:56, 22 tîrmeh 2026 (UTC)
::::* [[MediaWiki:Gadget-translation editor.js/ziman.json]]
::::[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 11:06, 22 tîrmeh 2026 (UTC)
== [[Modul:quote]] ==
Piştî ev modul hate hazirkirin, lazim e navên jegirtinan werin rastkirin û li hemûyan {{param|jêgirtin}} were zêdekirin. Bnr. [[Gotûbêja şablonê:Jêgirtin/Ehmedê Xanî/Mem û Zîn]] [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 22:27, 5 tebax 2026 (UTC)
::Ev modul hema bêje hazir e. Hûn li ser van madeyan çi difikirin:
# {{para|tarîx}} lazim e full date be eger na, lazim e {{para|sal}} were bikaranîn. Feqat "'''2021''' kanûna pêşîn 23" bi vî şiklî bi min ne problem e çnkî derdê en.wikt "attestation" e delîla herî pêşî jî sal e.
#: {{demo|sep=wisa xuya dibe<br>|<nowiki>{{jêder-kitêb/ceribandin|en
|tarîx=23 December 2021|nivîskar=Harry Hobbs; George Williams|sernav=Micronations and the Search for Sovereignty|url=https://www.cambridge.org/core/books/micronations-and-the-search-for-sovereignty/B0414A3A322695D9EE71E4CDDFDA06DE|weşanxane=Cambridge University Press|rûpel=155|isbn=978-1-009-15012-5|jêgirtin=jêgirtin.|t=-}}</nowiki>}}
#{{para|amadekar}}/{{para|edîtor}}/{{para|terciman}} bi şiklê edîtoriya, amadekariya, tercimekirina
#: {{demo|sep=dide<br>|<nowiki>{{jêder-kitêb/ceribandin|en
|sernav=Medical Surgical Nursing|serî=Juta's Manual of Nursing|cildê-seriyê=volume 4|edîtor=Sophie Mataniele Mogotlane; Joyce Mokoena; Motshedisi Eunice Chauke; Anne Young|sal=2005|weşanxane=Juta Academic|isbn=978-0702171840|rûpel=!12-29|jêgirtin=jêgirtin|t=-}}</nowiki>}}
--[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 13:09, 10 tebax 2026 (UTC)
:@[[Bikarhêner:Bikarhêner|Bikarhêner]] û @[[Bikarhêner:Ghybu|Ghybu]] Hîn gelek tişt hene divê îzah bikin û fikrê we pirs bikim, feqat îzahkirin pir zor e, em dest bi bikaranînê bikin û dûre tiştên ku hûn naxwazin em dikarin biguherînîn, dibe? [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 13:11, 10 tebax 2026 (UTC)
::Dibe, piştî çêbû, em di praktîkê de bibînin ku çawa ye. -- [[Bikarhêner:Bikarhêner|Bikarhêner]] ([[Gotûbêja bikarhêner:Bikarhêner|gotûbêj]]) 18:05, 10 tebax 2026 (UTC)
= Javascript =
== [[Mediawiki:Gadget-citoid-helper.js]] ==
Ji bo bi citoidê kopîkirina malûmatên çavkaniyan amûreke wisa lazim e. Xisûsen ji ber ku bi çend amûrên din dikare were bikaranîn.
Feqat çend problem hene, şablonên me de kêmasiya parametreyan gelek in û xerîteyên citoidê hîn nehatine çêkirin. Wana sererast bikin dûre vê amûrê çêkin, piştre [[MediaWiki:Gadget-start.js|start.js]] û [[MediaWiki:Gadget-wikt.add-examples.js|add examples.js]] were rojanekirin.
- --[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 00:04, 19 tîrmeh 2026 (UTC)
:Merheba @[[Bikarhêner:Bikarhêner|Bikarhêner]], ez dibêjim karê Modul:quote zêde wext bistîne, bila em dest bi bikaranîna van amûran bikin dûre kêmasiyan em ê temam bikin înşela. Dikarî vana li cihên xwe yên rast kopî paste bikî?
# [[Special:PermanentLink/6291574|Bikarhêner:Wikihez/skrîpt/js/Gadget-citoid-helper.js]] --> [[Mediawiki:Gadget-citoid-helper.js]]
# Ya li jêr kopî bike qismê herî dawî ya AmûrênVeşartî li [[MediaWiki:Gadgets-definition]]:
## <code><nowiki>* citoid-helper[ResourceLoader|hidden|default|dependencies=mediawiki.util]|citoid-helper.js</nowiki></code>
--[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:58, 26 tîrmeh 2026 (UTC)
== [[MediaWiki:Gadget-start.js]] ==
Rojanekirin hewce ye. Min gelek tişt lê zêde kir lê ez niha test dikime. Piştre em bar bikin:
* [[Bikarhêner:Wikihez/Gadget-start.js]] --> [[MediaWiki:Gadget-start.js]]
* [[Bikarhêner:Wikihez/Gadget-start.css]] --> [[MediaWiki:Gadget-start.css]]
--[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 22:08, 17 tîrmeh 2026 (UTC)
:Min [[MediaWiki:Gadget-start/data.json|data.json]] çêkir ji bo ku bi hêsanî malûmatên heyî werin guhartin bêyî guhartina Javascriptê. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 19:49, 18 tîrmeh 2026 (UTC)
:Xeletiyên ku ji bîr nekim rast bikim:
:* Wextê min çavkanî "kitêb" hilbijart û bi destî tije kir xeletiyeke [https://ku.wiktionary.org/w/index.php?title=xezete&diff=prev&oldid=6265392 wisa] derket her kelîme hate lînkkirin.
:* <code>html("⠿")</code> ev ne lazim e.
:* textarea ji bo çavkaniyên jêgirtinan xaseten yên sernav hîn jî ne draggable e.
:* pêşdîtina zindî checkbox wextê tê rakirin, pêşdîtin winda nabe.
:* Butona mobîlê ya vekirina formê di moda tarî de belî nabe, tenê wekî qutiyeke tarî xuya dibe.
:* Metna hişyarkirinê di guhartina rûpelên heyî de lazim e baştir bikim.
:[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 23:51, 18 tîrmeh 2026 (UTC)
::Ev problem çêbûn, ez ê binêrim ka çi problemên din hene. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 14:15, 19 tîrmeh 2026 (UTC)
:::Çêke: Ji bo qismê çavkaniyê yek dikare API call û Kategorî:Çavkanî bi kar bîne ji bo ku şablon zêde bikî ji yên heyî. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 21:21, 19 tîrmeh 2026 (UTC)
::::Ev jî çêbû, min beşa çavkanî jî çêkir. Eger xeletî dernekeve û problema valahiya piştî etîketê ji bîr nekim, piştî rojanekirina amûrên linkify, û citoid em dikarin bar bikin. Ez ê ti tiştê nû îlawe nekim, zêde dirêj bû. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:14, 21 tîrmeh 2026 (UTC)
:::::Merheba @[[Bikarhêner:Bikarhêner|Bikarhêner]]. Dikarî wana bar bikî?
:::::* [[Bikarhêner:Wikihez/Gadget-start.js]] --> [[MediaWiki:Gadget-start.js]]
:::::* [[Bikarhêner:Wikihez/Gadget-start.css]] --> [[MediaWiki:Gadget-start.css]]
:::::* [[MediaWiki:Gadgets-definition]] wisa rojane bike:
:::::* start[ResourceLoader|default|package|dependencies=mediawiki.util,ext.gadget.StorageUtils,ext.gadget.citoid-helper]|start.js|start.css|start.js/data.json
:::::[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 09:39, 5 tebax 2026 (UTC)
{{şirove}} Dewama ''[[Special:PermanentLink/6333688|Gotûbêja bikarhêner:Rewiye tine#WF:Nû]]'' bila gotûbêja wî em spam nekin. :D
{{r|Ghybu}} dikarî [[Special:PermanentLink/6333689|vê htmlê]] binêrî claude rast fêm kiriye yan na? Daxîne û wek html qeyd bike. --[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 18:43, 14 tebax 2026 (UTC)
:Min seh wîkîyên din jî kir, li wîkiya fransî tiştekî wekî daxwaza min çêkirine (tiştên ku ne hewce ne wekî "tab" çêkirine an jî hatine vêşartin): [//fr.wiktionary.org/w/index.php?title=fdsdfdsf&action=edit&redlink=1]. Formata me yê berî jî bi vê lojîkê hatibû çêkirin, wekî de.wiktionary ([//de.wiktionary.org/w/index.php?title=sdfdsfsdfs&action=edit&preload=Vorlage:Formatvorlage_(Substantiv_vereinfacht)]) [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 19:01, 14 tebax 2026 (UTC)
::PS: Dîsa jî Claude min rind fêm kiriye :)) Feqet min got ku beşên Mane", "Bilêvkirin" û "Beşên din" cem hev (wekî "tab") ". Û dema ku tu terî di nav "Besên din" Hevmane, Jê, ... li wira werin dayîn. Wêne/Resim û Nimûne jî di nav beşa ("tab") "Mane" [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 19:17, 14 tebax 2026 (UTC)
::Erê ya fr.wikt min jî dîtibû jixwe fikrê tab min ji wan girtibû :D (feqat min li cem wan tenê tab-a maneyê dît yên din nedît çawa tê vekirin nizanim) Berê hemû beş piştî maneyê bibûn, dûre min sê Tab çêkir, Bingehîn+Lînkkirin+Bikaranîn. Niha lazim e Tabeke din çêkim. Ya ku claude çêkiriye bnr. [[Special:PermanentLink/6333698#L-7]] ne baş e bnr. [[Special:PermanentLink/6333703|qiyaskirinê li ser vê htmlê]] Êdî ez Claude abuse dikime ji ber ku Pro ye :D [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 19:26, 14 tebax 2026 (UTC)
:::Claude dibêje:
:::Good clarification — that's a real simplification, not just a relabel. Updated STEP_GROUPS from 5 tabs down to 3:
:::Mane — the definitions themselves, plus Wêne (image), now grouped in with it instead of sitting in a separate misc tab. Nimûne needed no change since it was already rendering inside each Mane sense block, not as its own step.
:::Bilêvkirin — unchanged, still just pronunciation.
:::Beşên din — everything else in one flat bucket: hevmane, jê, têkildar, herwiha binêre, formên alternatîv, dijmane, jornav, jêrnav, notên bikaranînê, bi alfabeyên din, dûnde, çavkanî, bêhtir bixwîne, tewandin, etîmolojî, zaravayên din, werger, and bnr-h — instead of being split across the old Bingehîn/Lînkkirin/Bikaranîn/Din tabs.
:::No DOM-order changes were needed this time — the fix from the blank-tab bug looks up the tab bar's position dynamically now, so it didn't matter that I regrouped which steps go where. Same two files, saved to your Wiki folder — worth another pass through all three tabs once you've pasted this in, same as last time. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 19:34, 14 tebax 2026 (UTC)
::::Mînak:
Ziman
---------------------------------------------
Cureyê rêzimanî (Navdêr)
Navdêr (hilbijêre) ┆ Cîns (hilbijêre) ┆ Jimar (hilbijêre)
- lêker -mê -yekjimar
- rengdêr -nêr -pirjimar
- ... -... -...
---------------------------------------------
Mane || Bilêvkirin || Beşên din
hilbijêre:
- mane - IPA - Hevmane
- nimûne - kîte - Dijmane
- wêne
Dema ku tu "Cureyê rêzimanî" dikî "Lêker" :
Cureyê rêzimanî (Lêker)
Lêker (hilbijêre) ┆ Cure (hilbijêre)
- navdêr -rehê niha
- rengdêr -rehê borî
- ... -...
---------------------------------------------
┆ : select/option ("tab" nîne, tê dîtin)<br>
|| : "tab"
-- [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 19:45, 14 tebax 2026 (UTC)
'''Sê-stûnî ("┆" = ne tab), li gorî Cureyê rêzimanî:'''
{| class="wikitable"
! Cureyê rêzimanî !! Stûna 2 !! Stûna 3 !! Têbînî
|-
| Navdêr / Serenav
| Cîns (hilbijêre ▾: mê / nêr / ... — tenê heke ziman zayendê rêzimanî hebe)
| '''Jimar''' (?) — pirs li jêr
| Qadên "Forma mê/nêr/pirjimar/yekjimar" niha jî li vir hene — ma ev di "Jimar"-ê de tên tevlihev kirin, an cuda dimînin?
|-
| Rengdêr
| (heman m/n/p/y forman ku Navdêr distîne)
| Sûperlatîv (sûp) / Komparatîv (komp)
| Ne li ser her du nîgaran hatiye behs kirin — ma sê-stûnî li vir jî tê bikaranîn?
|-
| Lêker
| '''Cure''' = Cureyê lêkerê (hilbijêre ▾: gerguhêz / negerguhêz / xwerû-... / pêkhatî-... / hevedudanî-... / biwêjî-... — 10 vebijêrk)
| Di heman stûnê de: Rehê dema niha / Rehê dema borî / Rehê dema bilanî (her sê qadên nivîsandinê ne, ne hilbijêrk in)
| Ma "Cure" her sê rehan di xwe de digire wek yek stûn, an her yek stûneke cuda ye?
|-
| Tîp (herf/sembol)
| Girdêk (gir) / Hûrek (hûr)
| —
| Ne behs kiriye
|-
| Her cureyek, li gorî zimên
| Transliterasyon (tr) / Transkrîpsiyon (ts)
| —
| Bi zimên ve girêdayî ye, ne bi cureyê rêzimanî ve
|-
| Her cureyek, tenê ziman=japonî
| Hanja / Translit. hanja
| —
| Ne bi cureyê rêzimanî ve girêdayî ye
|-
| Her cureyek
| '''Tercîhên pêşketî''' (kolapsî): form, formaalt, nekatcure, nekatcins, nekatçendterm, serlînkneke, nekatpalîndrom, neformtr
| —
| Vebijarkî, ji bo hemû cureyan
|}
'''Tabên jêrîn — Mane ‖ Bilêvkirin ‖ Beşên din ("||" = tab):'''
{| class="wikitable"
! Mane !! Bilêvkirin !! Beşên din (hemû 18 hêman)
|-
| mane, nimûne, wêne
| şablonên bilêvkirinê (mînak: IPA, kîte)
| tewandin, etîmolojî, bi zaravayên din, werger, jê, têkildar, herwiha binêre, formên alternatîv, hevmane, dijmane, jornav, jêrnav, notên bikaranînê, bi alfabeyên din, dûnde, çavkanî, bêhtir bixwîne, bnr-h
|}
'''Pirsên vekirî:'''
# "Jimar" (yekjimar/pirjimar) — qadeke ku nîşan dide têketî bi xwe yekjimar e an pirjimar e. Ev cuda ye ji "Forma yekjimar (y)"/"Forma pirjimar (p)" ya heyî (ku forma DÎN a kelîmeyê tomar dike). Herdu bimînin, an werin yek kirin?
# Ma sê-stûnî tenê ji bo Navdêr/Lêker e, an ji bo Rengdêr/Tîp jî heman mantiq derbas dibe?
# Di "Beşên din" de: dixwazî pêşî navnîşek/hilbijartinek nîşan bide (17 hêmanên din jî tê de), û qad tenê piştî hilbijartinê xuya bibin?
:Tu dikarî start.js ji Tercîh/ Amûran rakî û bi test.js li Amûran herî taliyê ye biceribînî. Claude ya li jor hazir kir, Jimar ez dikarim îzah bikim. Feqat bi min di tab-a maneyê de lazim e Bi zaravayên din (heta wek werger her car bila li rûpelan were zêdekirin) û werger jî hebe.--[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 20:18, 14 tebax 2026 (UTC)
:;Navdêr: Tenê "cîns" û "jimar" bes e. "Forma mê", "Forma nêr", ... nayê fêm kirin. Bi min wekî "Tercîhên pêşketî" bi navkî din veşartî çêke.
:;Lêker: "Cureyê lêkerê" nayê fêm kirin, bi min pêşta "geguhez/negerguhêz" were hilbijartin, paşê jî form "hevdudanî/pêkatî/..." ji ber ku her kes vana nizanî... Dîsa jî tu dizanî.
:Bi min beşên "Hevmane" û dijmane jî bike de nav beşa Mane ("tab") ji ber ku pirr tên xwestin.
:Şûnda Wêne jî Nimûne/jêgirtin...
:Herwiha hemû bi rengê şîn hatine çêkirin, nizanim beşên din (===) bi rengê gewr an reş çito dibe? [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 21:35, 14 tebax 2026 (UTC)
::Nimûne/jêgirtin, hevmane, Dijmane li binê her maneyê hene. ji ber ku wana bi maneyê ve girêdayî ne lazim e wisa bimîne feqat belkî şiklekî baştir bibînin. Hînbûna bikaranîna formeke nû bi qasî hînbûna koda wîkiyê zor e heqîqeten... [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 21:45, 14 tebax 2026 (UTC)
:::Min şaş fêm meke feqet te amûrek ji bo Wikihez çêkiriye :) Tu dixwazî ku hemû tiştên ku te çêkiriye tevlî vê Gadgetê bikî û bikarhênerên din jî bi kar bînin... Tu jî dizanî ku kesên ku tên vira çito peyv çêdikin: Ziman > Mane > Mînak > Hevmane > Dijmane ! Du Gadget çêke yek ji bo bikarhênerên ku hertim li vira ne, yekeke din jî ji bo bikarhênerên din (yên ku pirr nên vira).
:::Herwiha kesên ku hertim li vira ne bi Gadgetê gotar çênekin, ''copy/paste'' dikin. [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 22:12, 14 tebax 2026 (UTC)
::::Min xwest her tişt li ser rêza xwe be ji bo ku hîn bibin çi diçe kû derê feqat bi vî şiklî jî zêde dirêj û tevlihev dibe. Loma ez ê wekî tu dibêjî bikim her tiştê din bila collapsed pêşketî be. Ê ku dixwaze pê lê ke û binêre çi dikare were zêdekirin. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 22:26, 14 tebax 2026 (UTC)
:::::Niha baştir tê fêm kirin {{=)}} [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 23:01, 14 tebax 2026 (UTC)
::::::Min ji Opus 5 û Design Tool îstifade kiriye hema bêje milyonek token çûn :D pêşî dîzayn kir dûre dest pê kir wekî dîna bişuxile. Pereyê xwe %100 heq dike welleh :D feqat moda tarî ji bîr kiriye :D [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 23:12, 14 tebax 2026 (UTC)
:::::::Spas! Etîmolojî jî wekî "Bilêvkirin", di beşekê din de cem wê, were çêkirin (Mane|Etîmolojî|Bilêvkirin|Beşên din)? [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 23:20, 14 tebax 2026 (UTC)
== [[Mediawiki:Gadget-QQ.js]] ==
Ev amûr di şikle Minerva de. Her daîm vê xeletiyê dide:
<syntaxhighlight lang="js">
TypeError: Cannot read properties of null (reading 'addEventListener') at css () at runScript () at Array.<anonymous> () at flushCssBuffer ()
</syntaxhighlight> [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 19:29, 18 tîrmeh 2026 (UTC)
:* [[Bikarhêner:Wikihez/skrîpt/js/Gadget-QQ.js]] --> [[Mediawiki:Gadget-QQ.js]]
:* [[Bikarhêner:Wikihez/Gadget-QQ.css]] --> [[Mediawiki:Gadget-QQ.css]]
:Ez dibêjim çêbû lê ka çend roj biceribînim. Tiştên ku hatin sererastkirin:
:# Google Books API Key dikarî zêde bikî, dixe cookies û di gerokê de dimîne. Berê bê API Key dixebitiya lê êdî mecbûr e ku API Key-a te hebe, bidestxistina wê ne zêde zor e lê dîsa jî tevlihev e.
:# Êdî di mobîlê de dixebite, heta di mobîlê de xweştir xuya dike.
:# Moda tarî
:# OOUI dewsa jquery.ui
:# Li qutiyê çi dixwazî zêde bikî, dikare li gorî îsm, sifet, fiîl bitewîne. Lê ji bo fiîl tenê dikare çend heb inflection bîne.
:# Butona paqij bike lê zêde kir.
:# Çend paqijiyên jêgirtinên Google Kitêbê niha hene.
:[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 23:38, 18 tîrmeh 2026 (UTC)
::Tewandina fiîlan û xeletiya modulê lazim e were rastkirin. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 14:40, 21 tîrmeh 2026 (UTC)
== [[MediaWiki:Gadget-wikt.add-examples.js]] ==
Min ev amûr hinek rojane kir feqat çend problem hene berî ku bar bikin.
Tiştên ku min guhart:
# Êdî li sayfeyên bi {{ş|maneid}} jî dixebite,
# Cihê di wîkîtekstê de yê ku jêgirtin were îlawekirin baştir bû,
# [[Mediawiki:Gadget-citoid-helper.js|citoid helper]] zêde kir ji bo ku bi hêsanî çavkanî bi riya doi, isbn an urlyê werin tijîkirin.
* [[Bikarhêner:Wikihez/Gadget-wikt.add-examples.css]] --> [[MediaWiki:Gadget-wikt.add-examples.css]]
* [[Bikarhêner:Wikihez/Gadget-wikt.add-examples.js]] --> [[MediaWiki:Gadget-wikt.add-examples.js]]
- --[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 00:50, 19 tîrmeh 2026 (UTC)
:Min "wikt." qismên cache kirinê ya wîkiya fransî bi [[MediaWiki:Gadget-StorageUtils.js]] guhartiye. loma ji bîr nekin wê amûrê li [[MediaWiki:Gadgets-definition]] zêde bikin. û navê amûrê jî biguhêrînin. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 09:15, 23 tîrmeh 2026 (UTC)
::Berê li ser WF:ceribandin dixebitî. niha naxebite. Divê were rastkirin. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 22:10, 7 tebax 2026 (UTC)
== Gadget-translation editor ==
* [[MediaWiki:Gadget-translation editor.js]]: divê formata en.wîktê were bikaranîn ji ber ku me gelek tercime ji en.wîktê kopî kir û ev js hîn nikare formata wekî li jêr bi kar bîne.
<syntaxhighlight lang="wikitext">
* {{Z|sh}}:
*: Kirîlî:
*: Latînî
</syntaxhighlight>
—[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:17, 16 tîrmeh 2026 (UTC)
== [[Mediawiki:Gadget-linkify.js]] ==
* ''rûpeleke'' wekî<syntaxhighlight lang="wikitext">[[rûpeleke]]</syntaxhighlight> lînk dike, bi regexê belkî dikare wisa bike <syntaxhighlight lang="wikitext">[[rûpel]]eke</syntaxhighlight>
—[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:17, 16 tîrmeh 2026 (UTC)
* Amûreke din wekî [[User:Wikihez/Gadget-linkify.js|linkify]] lazim e ku herfên mezin biçûk bike ji bo kurmancî.—[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:17, 16 tîrmeh 2026 (UTC)
:{{r|Bikarhêner}} Merheba bira, dikarî viya jî bar bikî?:
* [[Special:PermanentLink/6291974|linkify]] --> [[Mediawiki:Gadget-linkify.js]]
Spas--[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 11:42, 29 tîrmeh 2026 (UTC)
:Dûre [https://ku.wiktionary.org/wiki/MediaWiki:Gadget-start.js#L-283 li vir] wiktviLinkify bike kuLinkify xêra xwe [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 11:51, 29 tîrmeh 2026 (UTC)
::Min ji bîr kir lê zêde bikim niha nikare "Dİ" bike "di", xeletiyeke berbelav a di nivîsên kurdî de, herfên din ên wekî ll yan rr jî hewce ne werin zêdekirin. Dûre em zêde bikin. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 21:42, 29 tîrmeh 2026 (UTC)
:::Min nû ferq kir, sayfeyên ku hîn nehatine çêkirin wîkîlînk nake. Problemeke mezin e divê were rastkirin. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 18:15, 30 tîrmeh 2026 (UTC)
::::Na, lînk dike, tiştekî din heye... [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 10:49, 31 tîrmeh 2026 (UTC)
== Amûra manayê ==
Amûreke din ji bo nivîsina maneyê wekî Nimûne zêde bike lazim e [https://ku.wiktionary.org/w/index.php?title=Bikarh%C3%AAner:Wikihez/test.js&oldid=6276876 js] [https://ku.wiktionary.org/w/index.php?title=%C5%9Eablon:ceribandin2&oldid=6265629 şablon] [https://ku.wiktionary.org/w/index.php?title=Bikarh%C3%AAner:Wikihez/common.css&oldid=6265642 css] --[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 09:12, 23 tîrmeh 2026 (UTC)
== [[MediaWiki:Gadget-jeder.js]] ==
@[[Bikarhêner:Ghybu|Ghybu]] Çavkaniyên jêderê di moda pêşdîtinê de jêderê vedişêre, ew jî min gelek eciz dike wextê çavkanî zêde dikim. Min ji Claude pirsî û kodan nîşanî wê da, wisa cewab da:
Yes — and this file actually explains the whole thing precisely, better than my earlier guess about extract-stripping.
What's happening: the CSS rule
<syntaxhighlight lang="css">
.jeder{
display:none;
}
</syntaxhighlight>
hides every citation by default, *unconditionally*. The only thing that ever makes it visible again is the gadget's JS: it finds each `.jeder`, builds the short "`— (year, author, +)`" summary from the `.j-pewist` fields, and either reveals the short version or — for citations with no `.j-pewist` fields — explicitly sets `display:inline` on the original.
So visibility of citations depends entirely on this JS running. In the normal article view (Image 1) it runs, so you see the collapsed "`(1918, E. Rehmî Ji Mala Hekariyan, Amadekar: M. E. Bozarslan, +)`" form. In whatever generated Image 2 — a hover-preview/extract/API render — gadget JS doesn't execute, so nothing ever removes the `display:none`, and the citation vanishes completely rather than degrading to "still visible, just not collapsed."
<b>The fix:</b> flip the default so the *un-collapsed* state is the safe fallback, and let JS do the hiding only after it successfully builds the short version. That way, any context without JS shows the full citation instead of nothing.
CSS — remove the blanket hide:
<syntaxhighlight lang="css">
.jeder {
/* intentionally no display:none here — see Gadget-... .js */
}
</syntaxhighlight>
JS — do the hiding from script, after the short form exists:
{{veşêre-ser}}
<syntaxhighlight lang="js">
// Ji bo şablonên [[Şablon:jêder]] hatiye nivîsandin.
// Parametreyên ku di navbera "<span class="j-pewist">...</span>" an "{{j-pêwîst|...}}" de ne venaşêre.
$(function() {
function nivisaKurtTevliBike(sund, nivisKurt) {
var zede = $('<a>+</a>')
.addClass('click')
.attr('href', '#')
.attr('title', 'zêdetir')
.css('font-weight', 'bold');
var kurt = $(' <a>↩</a>')
.addClass('click-kurt')
.attr('href', '#')
.attr('title', 'veşêre')
.css('font-weight', 'bold');
$('<span>' + nivisKurt + '</span>')
.append(zede).append(')')
.addClass('jeder-kurt')
.css('font-size', '0.85em')
.insertAfter(sund);
sund.append(' ').append(kurt);
// Only hide the full citation once the short summary actually exists.
// If this script never runs (no-JS clients, hover-preview extracts,
// action=render, etc.), the full citation stays visible instead of
// silently disappearing.
sund.css('display', 'none');
}
function vesere() {
$('.jeder').each(function() {
var elmTab = $(this).find('.j-pewist').clone();
if (elmTab.length) {
var elm = '';
for (var i = elmTab.length - 1; i >= 0; i--) {
elm = elmTab.eq(i).html() + ', ' + elm;
}
var nivisKurt = ' — (' + elm;
nivisaKurtTevliBike($(this), nivisKurt);
}
// else: no j-pewist fields to shorten — leave the full citation
// as it already renders (visible), nothing to do.
});
}
vesere();
$(".click").click(function(e) {
e.preventDefault();
$(this).parent('.jeder-kurt').css('display', 'none');
$(this).parent('.jeder-kurt').prev().css('display', 'inline');
});
$(".click-kurt").click(function(e) {
e.preventDefault();
$(this).parent('.jeder').css('display', 'none');
$(this).parent('.jeder').next().css('display', 'inline');
});
});
</syntaxhighlight>
Net effect:
- JS-enabled readers (normal article view): identical experience to today — collapsed short form with `+`/`↩` toggle.
- No-JS contexts (previews, extracts, screen readers before JS loads, print, etc.): full citation is shown instead of nothing — a real regression fix rather than a cosmetic one.
One caveat worth being upfront about: this fixes it *if* the preview context renders the gadget's HTML/CSS but doesn't execute gadget JS (which is the far more common case, and what this code strongly suggests is happening). If Image 2 instead comes from a pipeline that strips the `.jeder`/`.jegirtin-text` elements out of the HTML entirely before this CSS/JS even gets a chance to apply, no on-wiki CSS/JS change can help — that'd need the extract-generation config changed instead. Given what this gadget file shows, though, I'd bet on the CSS-hide explanation.
{{veşêre-bin}}
Em dûre biceribînin eger xeletî tinebe, vî tiştî jî rast bikin. --[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 20:00, 23 tîrmeh 2026 (UTC)
:Ez APIya MediaWiki rind nizanim belkî Claude dizane:) Em nikarin bibêjin dema ku moda "''action=edit''" e fonksiyona <code>function vesere()</code> bi kar meyîne. [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 15:57, 24 tîrmeh 2026 (UTC)
::Na, di moda "edît"-ê de <code>var elmTab = null</code>... [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 16:13, 24 tîrmeh 2026 (UTC)
?:
<syntaxhighlight lang="js">
if (
mw.config.get('wgAction') === 'edit' ||
mw.config.get('wgAction') === 'submit'
){
var elmTab = [];
} else {
var elmTab = $(this).find('.j-pewist').clone();
}
</syntaxhighlight>
--[[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 16:31, 24 tîrmeh 2026 (UTC)
:Ez jî nizanim Claude çiqas ji mediawiki fêm dike lê heta niha ti tişt nîne ku min jê pirs kir û nikaribû çêke, bila wekî reklam nebe feqat Claude mikemmel e, dibêjim "li vir çima xeletiyeke wisa derdikeve" di dosyeya 2000 rêzî de diçe tiştê xelet tenê rast dike tiştekî din naguherîne. Chatgpt û aistudio qet wisa nakin, eynî dosyeyê deh cara dinivîsin, deh netîceyên cuda derdikevin :D
:Em dikarin vê amûrê wextê edit û submitê neaktîv bikin wekî <syntaxhighlight lang="js">if (!(action === "edit" || action === "submit")) {
:return;</syntaxhighlight> lê wê demê display:none wê çibe nizanim. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 18:23, 24 tîrmeh 2026 (UTC)
::display:none ne hewce ye ma jixwe di nav kodê [https://ku.wiktionary.org/w/index.php?title=MediaWiki:Gadget-jeder.js&oldid=6069025#L-49 L-49] de inline/none heye? [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 18:53, 24 tîrmeh 2026 (UTC)
:Min bi vî şiklî [https://ku.wiktionary.org/w/index.php?title=Bikarh%C3%AAner:Wikihez/vector-2022.js&diff=prev&oldid=6290816#L-28] ceriband feqat nexebitî. "display:none" di pêşdîtinê de dixebite feqat js naşixule. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 14:43, 25 tîrmeh 2026 (UTC)
::Kodên JSê pir hez nakim (pêşta hukurina APIya MWyê hewce bû) dîsa jî ez ê seh bikim :) [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 16:49, 27 tîrmeh 2026 (UTC)
:::Ez niha bi vî şiklî [https://ku.wiktionary.org/w/index.php?title=Bikarh%C3%AAner:Wikihez/test.js&oldid=6290820] [https://ku.wiktionary.org/w/index.php?title=Bikarh%C3%AAner:Wikihez/common.css&oldid=6290821#L-8] bi kar tînim ti problem nîne. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 17:09, 27 tîrmeh 2026 (UTC)
== [[MediaWiki:Gadget-PagePreviews.js]] ==
Ez dibêjim em vê amûrê jî çêkin [[:en:MediaWiki:Gadget-PagePreviews.js]] --[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 10:56, 3 tebax 2026 (UTC)
= Moda tarî =
== [[Şablon:wîkîpediya]] ==
Rengê tarî de xirab e.--[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 19:36, 4 tebax 2026 (UTC)
= Bot =
Karên ku bi botê werin çêkirin ji kerema xwe li vir binivîsin.
== Kategorî:Biwêj ==
[[:Kategorî:Biwêj]] divê were paqijkirin, lîsteya madeyên {{ş|biwêj}} çêke, yên ku tê de bûn, kirin, man hene filtre bike yên din bi destî tê çêkirin.—[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:17, 16 tîrmeh 2026 (UTC)
== Jêgirtin ==
Xistina jêgirtinên beşa [https://ku.wiktionary.org/w/index.php?search=insource%3A%2F%3D+*Ji+%5BWw%5D%C3%AAjey%C3%AA+*%3D%2F&title=Taybet%3AL%C3%AAger%C3%AEn&profile=advanced&fulltext=1&ns0=1&searchToken=8rh0bmw8dccsi7aynl6zli8uf ji wêjeyê] li beşa maneyê. —[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:17, 16 tîrmeh 2026 (UTC)
== Bota Toolforgeê ==
Botekî Toolforgeê lazim e ji bo ku xeletiyên biçûk wekî şablonên bi navên îngilîzî werin kurdîkirin yan jî valahiya beşan rast bike û hwd.—[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:17, 16 tîrmeh 2026 (UTC)
:Min [[Bikarhêner:Wikihez/skrîpt/py/kuwiktkozmetik.py|paqijiyen kozmetîk]] hazir kir feqat hîn navên şablonan naguhêre. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 20:05, 4 tebax 2026 (UTC)
== Updatew ==
Bota [[Bikarhêner:Wikihez/skrîpt/py/updateW.py|updateW]] divê were rojanekirin. Yan jî yekî nû were çêkirin. Şablonên {{ş|W}} di beşa tercimeyan de sererast dike û zimanan rêz dike. Ya niha xeletiya navê zimanî dide.—[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:17, 16 tîrmeh 2026 (UTC)
== sihir --> sêhr ==
Tercimeyên ''[[sêhr]]'' hemû dibêje ''sihir'' loma bi botê lazim e kirin ''sêhr''. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 17:43, 18 tîrmeh 2026 (UTC)
:Sihirbaz --> sêhrbaz [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 18:07, 18 tîrmeh 2026 (UTC)
== Tercimeyên dîroknas ==
Li tercimeyên [[dîroknas]], hevmaneyên wê hewce ye were îlawekirin. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 18:44, 18 tîrmeh 2026 (UTC)
== Mewlûd ==
Sererastkirina jêgirtinên mewlûdê [https://ku.wiktionary.org/w/index.php?search=insource%3A%2Fw%5C%3AMela+His%C3%AAn%C3%AA+Batey%C3%AE%2F&title=Taybet%3AL%C3%AAger%C3%AEn&ns0=1&searchToken=8m0tguy3sqt7edr4sg0u8hedo] wekî [https://ku.wiktionary.org/w/index.php?title=dax%C3%AEdar&curid=284303&diff=6265851&oldid=6142285] [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 09:43, 20 tîrmeh 2026 (UTC)
5pcw7r62x5lbc1cdgx4l15kl131srv5
6333759
6333758
2026-08-14T23:29:34Z
Wikihez
7344
/* MediaWiki:Gadget-start.js */ Bersiv
6333759
wikitext
text/x-wiki
{{/ser}}
= Karên ferhengî =
== Mane ==
* [[:Kategorî:Madeyên bê beşa mane]]
** [[:Kategorî:Madeyên bê beşa mane bi kurmancî]]
Li ser van rûpelan ev made hene ku maneyan wan nehatine nivîsin û divê werin nivîsin. —[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:17, 16 tîrmeh 2026 (UTC)
== Etîmolojî ==
*[[:Kategorî:Daxwazên etîmolojiyê]]
**[[:Kategorî:Daxwazên etîmolojiyê bi kurmancî]]
Li ser van rûpelan ev made hene ku etîmolojiya wan hîn nehatine nivîsin. Ji bo alîkariyê binêre [[WF:Etîmolojî]] —[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:17, 16 tîrmeh 2026 (UTC)
== Cureyê rêzimanî ==
* [[:Kategorî:Gotarên bê kategoriya rêzimanî]]
* [[:Kategorî:Gotarên bê kategoriya rêzimanî bi kurmancî]]
Li ser van rûpelan ev made hene ku cureyên wan yên rêzimanî hîn nehatine nivîsin. Ji bo alîkariyê binêre [[Alîkarî:Cureyên peyvan]] —[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:17, 16 tîrmeh 2026 (UTC)
== Kontrol ==
* [[:Kategorî:Kontrol]]
** [[:Kategorî:Kontrola maneyê]]
Ev madde bi botê hatine çêkirin, yek bi yek divê werin kontrolkirin. —[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:17, 16 tîrmeh 2026 (UTC)
= Şablon =
== IPA ==
* {{ş|IPA}} divê [[Modul:IPA]] bi kar bîne. —[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:17, 16 tîrmeh 2026 (UTC)
== Deng ==
Kurdîkirina belgekirina {{ş|deng}} lazim e.--[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 00:06, 19 tîrmeh 2026 (UTC)
= Modul =
== Modul:form of/templates ==
* [[Modul:form of/templates]]: Divê ev modul were rojanekirin û xeletiyên berê wekî ([[hevalê]]) werin rastkirin. —[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:17, 16 tîrmeh 2026 (UTC)
*:Merheba @[[Bikarhêner:Ghybu|Ghybu]] Te gotibû di vê modulê de xeletî hene, jkx tu dikarî li vir binivîsî çi kêmasî hene, daku wextê rojane dikim ez ji bîr nekim? [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:16, 21 tîrmeh 2026 (UTC)
*::Silav. Nizanim ji bîra min çûye... Herwiha ji bo çêkirina formên navdêran zanînên cîns û tîpa dawî bes e:
*::* (-ê, mê) => çemandî, bangkirin
*::* (-ê, nêr) => îzafe
*::* (-ê, mê û nêr) => îzafe (nêr), bangkirin (mê), çemandî (mê)
*::* (-a) => îzafe (mê)
*::* (-ekî) => îzafe û çemandî (nêr, nebinavkirî)
*::* (-eke) = > îzafe (mê, nebinavkirî)
*::* ...
*:: <code>if find(mw.title.getCurrentTitle().subpageText, 'ekî$') then ... end</code>
*::<code><nowiki>{{ku-tewîn-navForm|<navdêr>|<zayend>}</nowiki></code>
*::Tablo û nivîs di yekcarî de tên çêkirin...
*::Feqet problem lêzêdekirina mînakan e. [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 17:34, 21 tîrmeh 2026 (UTC)
*:::Lêzêdekirina kîjan nimûneyan? Ev koda js ji bo çi ye? Qisûrê nenêre min fêm nekir :/ [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 18:13, 21 tîrmeh 2026 (UTC)
*::::Li vira ([[hevalê#Formeke navdêrê]]) di bin maneyên 1. û 2. mînak nayên tevlî kirin :) [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 18:18, 21 tîrmeh 2026 (UTC)
*:::::Ev tercîh e, ne mecbûrî ye, em dikarin [https://ku.wiktionary.org/w/index.php?title=heval%C3%AA&diff=prev&oldid=6276350 wisa] bikin. Wekî din? [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 18:29, 21 tîrmeh 2026 (UTC)
*::::::Min li jor tênê got ku tenê parametreyên "navdêr" û "zayend" hewce nee. Bi '''[//ku.wiktionary.org/w/index.php?title=heval%C3%AA&curid=969734&diff=6276353&oldid=6276350 vî]''' awayî jî tê çêkirin. Parametreyên din ne hewce ne. [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 18:38, 21 tîrmeh 2026 (UTC)
*:::::::Ji bo wê şabloneke din lazim e, bila ev şablon wekî îngilîzî bimîne em ji bo kurmancî yekî din çêkin. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 18:42, 21 tîrmeh 2026 (UTC)
*::::::::[https://ku.wiktionary.org/w/index.php?title=heval%C3%AA&oldid=6276885 wisa] çawa ye? Bi min nivîsîna nimûneyan zêde ne lazim e ji ber ku ti kes serê xwe pê naêşîne. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 09:46, 23 tîrmeh 2026 (UTC)
*:::::::::@[[Bikarhêner:Ghybu|Ghybu]] Vê şablonê bi kar bînin an na? Navê şablonê kê çi be? [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 19:07, 24 tîrmeh 2026 (UTC)
== Modul:columns ==
* [[Modul:columns]] were rojanekirin û {{ş|kol3}} bila lînka ''nîşan bide'' deyne beriya sernavê, kolê di qutiya rengî de bila nebe. —[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:17, 16 tîrmeh 2026 (UTC)
== Modul:etymon ==
* [[Modul:etymon kevn]]: Rojanekirin hewce ye. —[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:17, 16 tîrmeh 2026 (UTC)
== [[Modul:ziman/code to canonical name]] ==
Belgekirina skrîptê û js divê were rastkirin. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 09:31, 22 tîrmeh 2026 (UTC)
:* [[MediaWiki:UpdateLanguageNameAndCode.js]]
:[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 09:50, 22 tîrmeh 2026 (UTC)
::* [[Modul:ziman/print]]
::[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 09:52, 22 tîrmeh 2026 (UTC)
:::*[[Modul:ziman/şablon]]
:::[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 09:56, 22 tîrmeh 2026 (UTC)
::::* [[MediaWiki:Gadget-translation editor.js/ziman.json]]
::::[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 11:06, 22 tîrmeh 2026 (UTC)
== [[Modul:quote]] ==
Piştî ev modul hate hazirkirin, lazim e navên jegirtinan werin rastkirin û li hemûyan {{param|jêgirtin}} were zêdekirin. Bnr. [[Gotûbêja şablonê:Jêgirtin/Ehmedê Xanî/Mem û Zîn]] [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 22:27, 5 tebax 2026 (UTC)
::Ev modul hema bêje hazir e. Hûn li ser van madeyan çi difikirin:
# {{para|tarîx}} lazim e full date be eger na, lazim e {{para|sal}} were bikaranîn. Feqat "'''2021''' kanûna pêşîn 23" bi vî şiklî bi min ne problem e çnkî derdê en.wikt "attestation" e delîla herî pêşî jî sal e.
#: {{demo|sep=wisa xuya dibe<br>|<nowiki>{{jêder-kitêb/ceribandin|en
|tarîx=23 December 2021|nivîskar=Harry Hobbs; George Williams|sernav=Micronations and the Search for Sovereignty|url=https://www.cambridge.org/core/books/micronations-and-the-search-for-sovereignty/B0414A3A322695D9EE71E4CDDFDA06DE|weşanxane=Cambridge University Press|rûpel=155|isbn=978-1-009-15012-5|jêgirtin=jêgirtin.|t=-}}</nowiki>}}
#{{para|amadekar}}/{{para|edîtor}}/{{para|terciman}} bi şiklê edîtoriya, amadekariya, tercimekirina
#: {{demo|sep=dide<br>|<nowiki>{{jêder-kitêb/ceribandin|en
|sernav=Medical Surgical Nursing|serî=Juta's Manual of Nursing|cildê-seriyê=volume 4|edîtor=Sophie Mataniele Mogotlane; Joyce Mokoena; Motshedisi Eunice Chauke; Anne Young|sal=2005|weşanxane=Juta Academic|isbn=978-0702171840|rûpel=!12-29|jêgirtin=jêgirtin|t=-}}</nowiki>}}
--[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 13:09, 10 tebax 2026 (UTC)
:@[[Bikarhêner:Bikarhêner|Bikarhêner]] û @[[Bikarhêner:Ghybu|Ghybu]] Hîn gelek tişt hene divê îzah bikin û fikrê we pirs bikim, feqat îzahkirin pir zor e, em dest bi bikaranînê bikin û dûre tiştên ku hûn naxwazin em dikarin biguherînîn, dibe? [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 13:11, 10 tebax 2026 (UTC)
::Dibe, piştî çêbû, em di praktîkê de bibînin ku çawa ye. -- [[Bikarhêner:Bikarhêner|Bikarhêner]] ([[Gotûbêja bikarhêner:Bikarhêner|gotûbêj]]) 18:05, 10 tebax 2026 (UTC)
= Javascript =
== [[Mediawiki:Gadget-citoid-helper.js]] ==
Ji bo bi citoidê kopîkirina malûmatên çavkaniyan amûreke wisa lazim e. Xisûsen ji ber ku bi çend amûrên din dikare were bikaranîn.
Feqat çend problem hene, şablonên me de kêmasiya parametreyan gelek in û xerîteyên citoidê hîn nehatine çêkirin. Wana sererast bikin dûre vê amûrê çêkin, piştre [[MediaWiki:Gadget-start.js|start.js]] û [[MediaWiki:Gadget-wikt.add-examples.js|add examples.js]] were rojanekirin.
- --[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 00:04, 19 tîrmeh 2026 (UTC)
:Merheba @[[Bikarhêner:Bikarhêner|Bikarhêner]], ez dibêjim karê Modul:quote zêde wext bistîne, bila em dest bi bikaranîna van amûran bikin dûre kêmasiyan em ê temam bikin înşela. Dikarî vana li cihên xwe yên rast kopî paste bikî?
# [[Special:PermanentLink/6291574|Bikarhêner:Wikihez/skrîpt/js/Gadget-citoid-helper.js]] --> [[Mediawiki:Gadget-citoid-helper.js]]
# Ya li jêr kopî bike qismê herî dawî ya AmûrênVeşartî li [[MediaWiki:Gadgets-definition]]:
## <code><nowiki>* citoid-helper[ResourceLoader|hidden|default|dependencies=mediawiki.util]|citoid-helper.js</nowiki></code>
--[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:58, 26 tîrmeh 2026 (UTC)
== [[MediaWiki:Gadget-start.js]] ==
Rojanekirin hewce ye. Min gelek tişt lê zêde kir lê ez niha test dikime. Piştre em bar bikin:
* [[Bikarhêner:Wikihez/Gadget-start.js]] --> [[MediaWiki:Gadget-start.js]]
* [[Bikarhêner:Wikihez/Gadget-start.css]] --> [[MediaWiki:Gadget-start.css]]
--[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 22:08, 17 tîrmeh 2026 (UTC)
:Min [[MediaWiki:Gadget-start/data.json|data.json]] çêkir ji bo ku bi hêsanî malûmatên heyî werin guhartin bêyî guhartina Javascriptê. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 19:49, 18 tîrmeh 2026 (UTC)
:Xeletiyên ku ji bîr nekim rast bikim:
:* Wextê min çavkanî "kitêb" hilbijart û bi destî tije kir xeletiyeke [https://ku.wiktionary.org/w/index.php?title=xezete&diff=prev&oldid=6265392 wisa] derket her kelîme hate lînkkirin.
:* <code>html("⠿")</code> ev ne lazim e.
:* textarea ji bo çavkaniyên jêgirtinan xaseten yên sernav hîn jî ne draggable e.
:* pêşdîtina zindî checkbox wextê tê rakirin, pêşdîtin winda nabe.
:* Butona mobîlê ya vekirina formê di moda tarî de belî nabe, tenê wekî qutiyeke tarî xuya dibe.
:* Metna hişyarkirinê di guhartina rûpelên heyî de lazim e baştir bikim.
:[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 23:51, 18 tîrmeh 2026 (UTC)
::Ev problem çêbûn, ez ê binêrim ka çi problemên din hene. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 14:15, 19 tîrmeh 2026 (UTC)
:::Çêke: Ji bo qismê çavkaniyê yek dikare API call û Kategorî:Çavkanî bi kar bîne ji bo ku şablon zêde bikî ji yên heyî. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 21:21, 19 tîrmeh 2026 (UTC)
::::Ev jî çêbû, min beşa çavkanî jî çêkir. Eger xeletî dernekeve û problema valahiya piştî etîketê ji bîr nekim, piştî rojanekirina amûrên linkify, û citoid em dikarin bar bikin. Ez ê ti tiştê nû îlawe nekim, zêde dirêj bû. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:14, 21 tîrmeh 2026 (UTC)
:::::Merheba @[[Bikarhêner:Bikarhêner|Bikarhêner]]. Dikarî wana bar bikî?
:::::* [[Bikarhêner:Wikihez/Gadget-start.js]] --> [[MediaWiki:Gadget-start.js]]
:::::* [[Bikarhêner:Wikihez/Gadget-start.css]] --> [[MediaWiki:Gadget-start.css]]
:::::* [[MediaWiki:Gadgets-definition]] wisa rojane bike:
:::::* start[ResourceLoader|default|package|dependencies=mediawiki.util,ext.gadget.StorageUtils,ext.gadget.citoid-helper]|start.js|start.css|start.js/data.json
:::::[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 09:39, 5 tebax 2026 (UTC)
{{şirove}} Dewama ''[[Special:PermanentLink/6333688|Gotûbêja bikarhêner:Rewiye tine#WF:Nû]]'' bila gotûbêja wî em spam nekin. :D
{{r|Ghybu}} dikarî [[Special:PermanentLink/6333689|vê htmlê]] binêrî claude rast fêm kiriye yan na? Daxîne û wek html qeyd bike. --[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 18:43, 14 tebax 2026 (UTC)
:Min seh wîkîyên din jî kir, li wîkiya fransî tiştekî wekî daxwaza min çêkirine (tiştên ku ne hewce ne wekî "tab" çêkirine an jî hatine vêşartin): [//fr.wiktionary.org/w/index.php?title=fdsdfdsf&action=edit&redlink=1]. Formata me yê berî jî bi vê lojîkê hatibû çêkirin, wekî de.wiktionary ([//de.wiktionary.org/w/index.php?title=sdfdsfsdfs&action=edit&preload=Vorlage:Formatvorlage_(Substantiv_vereinfacht)]) [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 19:01, 14 tebax 2026 (UTC)
::PS: Dîsa jî Claude min rind fêm kiriye :)) Feqet min got ku beşên Mane", "Bilêvkirin" û "Beşên din" cem hev (wekî "tab") ". Û dema ku tu terî di nav "Besên din" Hevmane, Jê, ... li wira werin dayîn. Wêne/Resim û Nimûne jî di nav beşa ("tab") "Mane" [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 19:17, 14 tebax 2026 (UTC)
::Erê ya fr.wikt min jî dîtibû jixwe fikrê tab min ji wan girtibû :D (feqat min li cem wan tenê tab-a maneyê dît yên din nedît çawa tê vekirin nizanim) Berê hemû beş piştî maneyê bibûn, dûre min sê Tab çêkir, Bingehîn+Lînkkirin+Bikaranîn. Niha lazim e Tabeke din çêkim. Ya ku claude çêkiriye bnr. [[Special:PermanentLink/6333698#L-7]] ne baş e bnr. [[Special:PermanentLink/6333703|qiyaskirinê li ser vê htmlê]] Êdî ez Claude abuse dikime ji ber ku Pro ye :D [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 19:26, 14 tebax 2026 (UTC)
:::Claude dibêje:
:::Good clarification — that's a real simplification, not just a relabel. Updated STEP_GROUPS from 5 tabs down to 3:
:::Mane — the definitions themselves, plus Wêne (image), now grouped in with it instead of sitting in a separate misc tab. Nimûne needed no change since it was already rendering inside each Mane sense block, not as its own step.
:::Bilêvkirin — unchanged, still just pronunciation.
:::Beşên din — everything else in one flat bucket: hevmane, jê, têkildar, herwiha binêre, formên alternatîv, dijmane, jornav, jêrnav, notên bikaranînê, bi alfabeyên din, dûnde, çavkanî, bêhtir bixwîne, tewandin, etîmolojî, zaravayên din, werger, and bnr-h — instead of being split across the old Bingehîn/Lînkkirin/Bikaranîn/Din tabs.
:::No DOM-order changes were needed this time — the fix from the blank-tab bug looks up the tab bar's position dynamically now, so it didn't matter that I regrouped which steps go where. Same two files, saved to your Wiki folder — worth another pass through all three tabs once you've pasted this in, same as last time. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 19:34, 14 tebax 2026 (UTC)
::::Mînak:
Ziman
---------------------------------------------
Cureyê rêzimanî (Navdêr)
Navdêr (hilbijêre) ┆ Cîns (hilbijêre) ┆ Jimar (hilbijêre)
- lêker -mê -yekjimar
- rengdêr -nêr -pirjimar
- ... -... -...
---------------------------------------------
Mane || Bilêvkirin || Beşên din
hilbijêre:
- mane - IPA - Hevmane
- nimûne - kîte - Dijmane
- wêne
Dema ku tu "Cureyê rêzimanî" dikî "Lêker" :
Cureyê rêzimanî (Lêker)
Lêker (hilbijêre) ┆ Cure (hilbijêre)
- navdêr -rehê niha
- rengdêr -rehê borî
- ... -...
---------------------------------------------
┆ : select/option ("tab" nîne, tê dîtin)<br>
|| : "tab"
-- [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 19:45, 14 tebax 2026 (UTC)
'''Sê-stûnî ("┆" = ne tab), li gorî Cureyê rêzimanî:'''
{| class="wikitable"
! Cureyê rêzimanî !! Stûna 2 !! Stûna 3 !! Têbînî
|-
| Navdêr / Serenav
| Cîns (hilbijêre ▾: mê / nêr / ... — tenê heke ziman zayendê rêzimanî hebe)
| '''Jimar''' (?) — pirs li jêr
| Qadên "Forma mê/nêr/pirjimar/yekjimar" niha jî li vir hene — ma ev di "Jimar"-ê de tên tevlihev kirin, an cuda dimînin?
|-
| Rengdêr
| (heman m/n/p/y forman ku Navdêr distîne)
| Sûperlatîv (sûp) / Komparatîv (komp)
| Ne li ser her du nîgaran hatiye behs kirin — ma sê-stûnî li vir jî tê bikaranîn?
|-
| Lêker
| '''Cure''' = Cureyê lêkerê (hilbijêre ▾: gerguhêz / negerguhêz / xwerû-... / pêkhatî-... / hevedudanî-... / biwêjî-... — 10 vebijêrk)
| Di heman stûnê de: Rehê dema niha / Rehê dema borî / Rehê dema bilanî (her sê qadên nivîsandinê ne, ne hilbijêrk in)
| Ma "Cure" her sê rehan di xwe de digire wek yek stûn, an her yek stûneke cuda ye?
|-
| Tîp (herf/sembol)
| Girdêk (gir) / Hûrek (hûr)
| —
| Ne behs kiriye
|-
| Her cureyek, li gorî zimên
| Transliterasyon (tr) / Transkrîpsiyon (ts)
| —
| Bi zimên ve girêdayî ye, ne bi cureyê rêzimanî ve
|-
| Her cureyek, tenê ziman=japonî
| Hanja / Translit. hanja
| —
| Ne bi cureyê rêzimanî ve girêdayî ye
|-
| Her cureyek
| '''Tercîhên pêşketî''' (kolapsî): form, formaalt, nekatcure, nekatcins, nekatçendterm, serlînkneke, nekatpalîndrom, neformtr
| —
| Vebijarkî, ji bo hemû cureyan
|}
'''Tabên jêrîn — Mane ‖ Bilêvkirin ‖ Beşên din ("||" = tab):'''
{| class="wikitable"
! Mane !! Bilêvkirin !! Beşên din (hemû 18 hêman)
|-
| mane, nimûne, wêne
| şablonên bilêvkirinê (mînak: IPA, kîte)
| tewandin, etîmolojî, bi zaravayên din, werger, jê, têkildar, herwiha binêre, formên alternatîv, hevmane, dijmane, jornav, jêrnav, notên bikaranînê, bi alfabeyên din, dûnde, çavkanî, bêhtir bixwîne, bnr-h
|}
'''Pirsên vekirî:'''
# "Jimar" (yekjimar/pirjimar) — qadeke ku nîşan dide têketî bi xwe yekjimar e an pirjimar e. Ev cuda ye ji "Forma yekjimar (y)"/"Forma pirjimar (p)" ya heyî (ku forma DÎN a kelîmeyê tomar dike). Herdu bimînin, an werin yek kirin?
# Ma sê-stûnî tenê ji bo Navdêr/Lêker e, an ji bo Rengdêr/Tîp jî heman mantiq derbas dibe?
# Di "Beşên din" de: dixwazî pêşî navnîşek/hilbijartinek nîşan bide (17 hêmanên din jî tê de), û qad tenê piştî hilbijartinê xuya bibin?
:Tu dikarî start.js ji Tercîh/ Amûran rakî û bi test.js li Amûran herî taliyê ye biceribînî. Claude ya li jor hazir kir, Jimar ez dikarim îzah bikim. Feqat bi min di tab-a maneyê de lazim e Bi zaravayên din (heta wek werger her car bila li rûpelan were zêdekirin) û werger jî hebe.--[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 20:18, 14 tebax 2026 (UTC)
:;Navdêr: Tenê "cîns" û "jimar" bes e. "Forma mê", "Forma nêr", ... nayê fêm kirin. Bi min wekî "Tercîhên pêşketî" bi navkî din veşartî çêke.
:;Lêker: "Cureyê lêkerê" nayê fêm kirin, bi min pêşta "geguhez/negerguhêz" were hilbijartin, paşê jî form "hevdudanî/pêkatî/..." ji ber ku her kes vana nizanî... Dîsa jî tu dizanî.
:Bi min beşên "Hevmane" û dijmane jî bike de nav beşa Mane ("tab") ji ber ku pirr tên xwestin.
:Şûnda Wêne jî Nimûne/jêgirtin...
:Herwiha hemû bi rengê şîn hatine çêkirin, nizanim beşên din (===) bi rengê gewr an reş çito dibe? [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 21:35, 14 tebax 2026 (UTC)
::Nimûne/jêgirtin, hevmane, Dijmane li binê her maneyê hene. ji ber ku wana bi maneyê ve girêdayî ne lazim e wisa bimîne feqat belkî şiklekî baştir bibînin. Hînbûna bikaranîna formeke nû bi qasî hînbûna koda wîkiyê zor e heqîqeten... [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 21:45, 14 tebax 2026 (UTC)
:::Min şaş fêm meke feqet te amûrek ji bo Wikihez çêkiriye :) Tu dixwazî ku hemû tiştên ku te çêkiriye tevlî vê Gadgetê bikî û bikarhênerên din jî bi kar bînin... Tu jî dizanî ku kesên ku tên vira çito peyv çêdikin: Ziman > Mane > Mînak > Hevmane > Dijmane ! Du Gadget çêke yek ji bo bikarhênerên ku hertim li vira ne, yekeke din jî ji bo bikarhênerên din (yên ku pirr nên vira).
:::Herwiha kesên ku hertim li vira ne bi Gadgetê gotar çênekin, ''copy/paste'' dikin. [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 22:12, 14 tebax 2026 (UTC)
::::Min xwest her tişt li ser rêza xwe be ji bo ku hîn bibin çi diçe kû derê feqat bi vî şiklî jî zêde dirêj û tevlihev dibe. Loma ez ê wekî tu dibêjî bikim her tiştê din bila collapsed pêşketî be. Ê ku dixwaze pê lê ke û binêre çi dikare were zêdekirin. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 22:26, 14 tebax 2026 (UTC)
:::::Niha baştir tê fêm kirin {{=)}} [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 23:01, 14 tebax 2026 (UTC)
::::::Min ji Opus 5 û Design Tool îstifade kiriye hema bêje milyonek token çûn :D pêşî dîzayn kir dûre dest pê kir wekî dîna bişuxile. Pereyê xwe %100 heq dike welleh :D feqat moda tarî ji bîr kiriye :D [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 23:12, 14 tebax 2026 (UTC)
:::::::Spas! Etîmolojî jî wekî "Bilêvkirin", di beşekê din de cem wê, were çêkirin (Mane|Etîmolojî|Bilêvkirin|Beşên din)? [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 23:20, 14 tebax 2026 (UTC)
::::::::(Mane>Tewandin>Werger|Etîmolojî>Dûnde>|Bilêvkirin(formatek çawa?)>Resim|Eleqedar>Jê>Têkildar>Herwiha binêre|Beşên din)? [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 23:29, 14 tebax 2026 (UTC)
== [[Mediawiki:Gadget-QQ.js]] ==
Ev amûr di şikle Minerva de. Her daîm vê xeletiyê dide:
<syntaxhighlight lang="js">
TypeError: Cannot read properties of null (reading 'addEventListener') at css () at runScript () at Array.<anonymous> () at flushCssBuffer ()
</syntaxhighlight> [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 19:29, 18 tîrmeh 2026 (UTC)
:* [[Bikarhêner:Wikihez/skrîpt/js/Gadget-QQ.js]] --> [[Mediawiki:Gadget-QQ.js]]
:* [[Bikarhêner:Wikihez/Gadget-QQ.css]] --> [[Mediawiki:Gadget-QQ.css]]
:Ez dibêjim çêbû lê ka çend roj biceribînim. Tiştên ku hatin sererastkirin:
:# Google Books API Key dikarî zêde bikî, dixe cookies û di gerokê de dimîne. Berê bê API Key dixebitiya lê êdî mecbûr e ku API Key-a te hebe, bidestxistina wê ne zêde zor e lê dîsa jî tevlihev e.
:# Êdî di mobîlê de dixebite, heta di mobîlê de xweştir xuya dike.
:# Moda tarî
:# OOUI dewsa jquery.ui
:# Li qutiyê çi dixwazî zêde bikî, dikare li gorî îsm, sifet, fiîl bitewîne. Lê ji bo fiîl tenê dikare çend heb inflection bîne.
:# Butona paqij bike lê zêde kir.
:# Çend paqijiyên jêgirtinên Google Kitêbê niha hene.
:[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 23:38, 18 tîrmeh 2026 (UTC)
::Tewandina fiîlan û xeletiya modulê lazim e were rastkirin. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 14:40, 21 tîrmeh 2026 (UTC)
== [[MediaWiki:Gadget-wikt.add-examples.js]] ==
Min ev amûr hinek rojane kir feqat çend problem hene berî ku bar bikin.
Tiştên ku min guhart:
# Êdî li sayfeyên bi {{ş|maneid}} jî dixebite,
# Cihê di wîkîtekstê de yê ku jêgirtin were îlawekirin baştir bû,
# [[Mediawiki:Gadget-citoid-helper.js|citoid helper]] zêde kir ji bo ku bi hêsanî çavkanî bi riya doi, isbn an urlyê werin tijîkirin.
* [[Bikarhêner:Wikihez/Gadget-wikt.add-examples.css]] --> [[MediaWiki:Gadget-wikt.add-examples.css]]
* [[Bikarhêner:Wikihez/Gadget-wikt.add-examples.js]] --> [[MediaWiki:Gadget-wikt.add-examples.js]]
- --[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 00:50, 19 tîrmeh 2026 (UTC)
:Min "wikt." qismên cache kirinê ya wîkiya fransî bi [[MediaWiki:Gadget-StorageUtils.js]] guhartiye. loma ji bîr nekin wê amûrê li [[MediaWiki:Gadgets-definition]] zêde bikin. û navê amûrê jî biguhêrînin. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 09:15, 23 tîrmeh 2026 (UTC)
::Berê li ser WF:ceribandin dixebitî. niha naxebite. Divê were rastkirin. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 22:10, 7 tebax 2026 (UTC)
== Gadget-translation editor ==
* [[MediaWiki:Gadget-translation editor.js]]: divê formata en.wîktê were bikaranîn ji ber ku me gelek tercime ji en.wîktê kopî kir û ev js hîn nikare formata wekî li jêr bi kar bîne.
<syntaxhighlight lang="wikitext">
* {{Z|sh}}:
*: Kirîlî:
*: Latînî
</syntaxhighlight>
—[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:17, 16 tîrmeh 2026 (UTC)
== [[Mediawiki:Gadget-linkify.js]] ==
* ''rûpeleke'' wekî<syntaxhighlight lang="wikitext">[[rûpeleke]]</syntaxhighlight> lînk dike, bi regexê belkî dikare wisa bike <syntaxhighlight lang="wikitext">[[rûpel]]eke</syntaxhighlight>
—[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:17, 16 tîrmeh 2026 (UTC)
* Amûreke din wekî [[User:Wikihez/Gadget-linkify.js|linkify]] lazim e ku herfên mezin biçûk bike ji bo kurmancî.—[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:17, 16 tîrmeh 2026 (UTC)
:{{r|Bikarhêner}} Merheba bira, dikarî viya jî bar bikî?:
* [[Special:PermanentLink/6291974|linkify]] --> [[Mediawiki:Gadget-linkify.js]]
Spas--[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 11:42, 29 tîrmeh 2026 (UTC)
:Dûre [https://ku.wiktionary.org/wiki/MediaWiki:Gadget-start.js#L-283 li vir] wiktviLinkify bike kuLinkify xêra xwe [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 11:51, 29 tîrmeh 2026 (UTC)
::Min ji bîr kir lê zêde bikim niha nikare "Dİ" bike "di", xeletiyeke berbelav a di nivîsên kurdî de, herfên din ên wekî ll yan rr jî hewce ne werin zêdekirin. Dûre em zêde bikin. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 21:42, 29 tîrmeh 2026 (UTC)
:::Min nû ferq kir, sayfeyên ku hîn nehatine çêkirin wîkîlînk nake. Problemeke mezin e divê were rastkirin. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 18:15, 30 tîrmeh 2026 (UTC)
::::Na, lînk dike, tiştekî din heye... [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 10:49, 31 tîrmeh 2026 (UTC)
== Amûra manayê ==
Amûreke din ji bo nivîsina maneyê wekî Nimûne zêde bike lazim e [https://ku.wiktionary.org/w/index.php?title=Bikarh%C3%AAner:Wikihez/test.js&oldid=6276876 js] [https://ku.wiktionary.org/w/index.php?title=%C5%9Eablon:ceribandin2&oldid=6265629 şablon] [https://ku.wiktionary.org/w/index.php?title=Bikarh%C3%AAner:Wikihez/common.css&oldid=6265642 css] --[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 09:12, 23 tîrmeh 2026 (UTC)
== [[MediaWiki:Gadget-jeder.js]] ==
@[[Bikarhêner:Ghybu|Ghybu]] Çavkaniyên jêderê di moda pêşdîtinê de jêderê vedişêre, ew jî min gelek eciz dike wextê çavkanî zêde dikim. Min ji Claude pirsî û kodan nîşanî wê da, wisa cewab da:
Yes — and this file actually explains the whole thing precisely, better than my earlier guess about extract-stripping.
What's happening: the CSS rule
<syntaxhighlight lang="css">
.jeder{
display:none;
}
</syntaxhighlight>
hides every citation by default, *unconditionally*. The only thing that ever makes it visible again is the gadget's JS: it finds each `.jeder`, builds the short "`— (year, author, +)`" summary from the `.j-pewist` fields, and either reveals the short version or — for citations with no `.j-pewist` fields — explicitly sets `display:inline` on the original.
So visibility of citations depends entirely on this JS running. In the normal article view (Image 1) it runs, so you see the collapsed "`(1918, E. Rehmî Ji Mala Hekariyan, Amadekar: M. E. Bozarslan, +)`" form. In whatever generated Image 2 — a hover-preview/extract/API render — gadget JS doesn't execute, so nothing ever removes the `display:none`, and the citation vanishes completely rather than degrading to "still visible, just not collapsed."
<b>The fix:</b> flip the default so the *un-collapsed* state is the safe fallback, and let JS do the hiding only after it successfully builds the short version. That way, any context without JS shows the full citation instead of nothing.
CSS — remove the blanket hide:
<syntaxhighlight lang="css">
.jeder {
/* intentionally no display:none here — see Gadget-... .js */
}
</syntaxhighlight>
JS — do the hiding from script, after the short form exists:
{{veşêre-ser}}
<syntaxhighlight lang="js">
// Ji bo şablonên [[Şablon:jêder]] hatiye nivîsandin.
// Parametreyên ku di navbera "<span class="j-pewist">...</span>" an "{{j-pêwîst|...}}" de ne venaşêre.
$(function() {
function nivisaKurtTevliBike(sund, nivisKurt) {
var zede = $('<a>+</a>')
.addClass('click')
.attr('href', '#')
.attr('title', 'zêdetir')
.css('font-weight', 'bold');
var kurt = $(' <a>↩</a>')
.addClass('click-kurt')
.attr('href', '#')
.attr('title', 'veşêre')
.css('font-weight', 'bold');
$('<span>' + nivisKurt + '</span>')
.append(zede).append(')')
.addClass('jeder-kurt')
.css('font-size', '0.85em')
.insertAfter(sund);
sund.append(' ').append(kurt);
// Only hide the full citation once the short summary actually exists.
// If this script never runs (no-JS clients, hover-preview extracts,
// action=render, etc.), the full citation stays visible instead of
// silently disappearing.
sund.css('display', 'none');
}
function vesere() {
$('.jeder').each(function() {
var elmTab = $(this).find('.j-pewist').clone();
if (elmTab.length) {
var elm = '';
for (var i = elmTab.length - 1; i >= 0; i--) {
elm = elmTab.eq(i).html() + ', ' + elm;
}
var nivisKurt = ' — (' + elm;
nivisaKurtTevliBike($(this), nivisKurt);
}
// else: no j-pewist fields to shorten — leave the full citation
// as it already renders (visible), nothing to do.
});
}
vesere();
$(".click").click(function(e) {
e.preventDefault();
$(this).parent('.jeder-kurt').css('display', 'none');
$(this).parent('.jeder-kurt').prev().css('display', 'inline');
});
$(".click-kurt").click(function(e) {
e.preventDefault();
$(this).parent('.jeder').css('display', 'none');
$(this).parent('.jeder').next().css('display', 'inline');
});
});
</syntaxhighlight>
Net effect:
- JS-enabled readers (normal article view): identical experience to today — collapsed short form with `+`/`↩` toggle.
- No-JS contexts (previews, extracts, screen readers before JS loads, print, etc.): full citation is shown instead of nothing — a real regression fix rather than a cosmetic one.
One caveat worth being upfront about: this fixes it *if* the preview context renders the gadget's HTML/CSS but doesn't execute gadget JS (which is the far more common case, and what this code strongly suggests is happening). If Image 2 instead comes from a pipeline that strips the `.jeder`/`.jegirtin-text` elements out of the HTML entirely before this CSS/JS even gets a chance to apply, no on-wiki CSS/JS change can help — that'd need the extract-generation config changed instead. Given what this gadget file shows, though, I'd bet on the CSS-hide explanation.
{{veşêre-bin}}
Em dûre biceribînin eger xeletî tinebe, vî tiştî jî rast bikin. --[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 20:00, 23 tîrmeh 2026 (UTC)
:Ez APIya MediaWiki rind nizanim belkî Claude dizane:) Em nikarin bibêjin dema ku moda "''action=edit''" e fonksiyona <code>function vesere()</code> bi kar meyîne. [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 15:57, 24 tîrmeh 2026 (UTC)
::Na, di moda "edît"-ê de <code>var elmTab = null</code>... [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 16:13, 24 tîrmeh 2026 (UTC)
?:
<syntaxhighlight lang="js">
if (
mw.config.get('wgAction') === 'edit' ||
mw.config.get('wgAction') === 'submit'
){
var elmTab = [];
} else {
var elmTab = $(this).find('.j-pewist').clone();
}
</syntaxhighlight>
--[[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 16:31, 24 tîrmeh 2026 (UTC)
:Ez jî nizanim Claude çiqas ji mediawiki fêm dike lê heta niha ti tişt nîne ku min jê pirs kir û nikaribû çêke, bila wekî reklam nebe feqat Claude mikemmel e, dibêjim "li vir çima xeletiyeke wisa derdikeve" di dosyeya 2000 rêzî de diçe tiştê xelet tenê rast dike tiştekî din naguherîne. Chatgpt û aistudio qet wisa nakin, eynî dosyeyê deh cara dinivîsin, deh netîceyên cuda derdikevin :D
:Em dikarin vê amûrê wextê edit û submitê neaktîv bikin wekî <syntaxhighlight lang="js">if (!(action === "edit" || action === "submit")) {
:return;</syntaxhighlight> lê wê demê display:none wê çibe nizanim. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 18:23, 24 tîrmeh 2026 (UTC)
::display:none ne hewce ye ma jixwe di nav kodê [https://ku.wiktionary.org/w/index.php?title=MediaWiki:Gadget-jeder.js&oldid=6069025#L-49 L-49] de inline/none heye? [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 18:53, 24 tîrmeh 2026 (UTC)
:Min bi vî şiklî [https://ku.wiktionary.org/w/index.php?title=Bikarh%C3%AAner:Wikihez/vector-2022.js&diff=prev&oldid=6290816#L-28] ceriband feqat nexebitî. "display:none" di pêşdîtinê de dixebite feqat js naşixule. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 14:43, 25 tîrmeh 2026 (UTC)
::Kodên JSê pir hez nakim (pêşta hukurina APIya MWyê hewce bû) dîsa jî ez ê seh bikim :) [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 16:49, 27 tîrmeh 2026 (UTC)
:::Ez niha bi vî şiklî [https://ku.wiktionary.org/w/index.php?title=Bikarh%C3%AAner:Wikihez/test.js&oldid=6290820] [https://ku.wiktionary.org/w/index.php?title=Bikarh%C3%AAner:Wikihez/common.css&oldid=6290821#L-8] bi kar tînim ti problem nîne. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 17:09, 27 tîrmeh 2026 (UTC)
== [[MediaWiki:Gadget-PagePreviews.js]] ==
Ez dibêjim em vê amûrê jî çêkin [[:en:MediaWiki:Gadget-PagePreviews.js]] --[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 10:56, 3 tebax 2026 (UTC)
= Moda tarî =
== [[Şablon:wîkîpediya]] ==
Rengê tarî de xirab e.--[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 19:36, 4 tebax 2026 (UTC)
= Bot =
Karên ku bi botê werin çêkirin ji kerema xwe li vir binivîsin.
== Kategorî:Biwêj ==
[[:Kategorî:Biwêj]] divê were paqijkirin, lîsteya madeyên {{ş|biwêj}} çêke, yên ku tê de bûn, kirin, man hene filtre bike yên din bi destî tê çêkirin.—[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:17, 16 tîrmeh 2026 (UTC)
== Jêgirtin ==
Xistina jêgirtinên beşa [https://ku.wiktionary.org/w/index.php?search=insource%3A%2F%3D+*Ji+%5BWw%5D%C3%AAjey%C3%AA+*%3D%2F&title=Taybet%3AL%C3%AAger%C3%AEn&profile=advanced&fulltext=1&ns0=1&searchToken=8rh0bmw8dccsi7aynl6zli8uf ji wêjeyê] li beşa maneyê. —[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:17, 16 tîrmeh 2026 (UTC)
== Bota Toolforgeê ==
Botekî Toolforgeê lazim e ji bo ku xeletiyên biçûk wekî şablonên bi navên îngilîzî werin kurdîkirin yan jî valahiya beşan rast bike û hwd.—[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:17, 16 tîrmeh 2026 (UTC)
:Min [[Bikarhêner:Wikihez/skrîpt/py/kuwiktkozmetik.py|paqijiyen kozmetîk]] hazir kir feqat hîn navên şablonan naguhêre. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 20:05, 4 tebax 2026 (UTC)
== Updatew ==
Bota [[Bikarhêner:Wikihez/skrîpt/py/updateW.py|updateW]] divê were rojanekirin. Yan jî yekî nû were çêkirin. Şablonên {{ş|W}} di beşa tercimeyan de sererast dike û zimanan rêz dike. Ya niha xeletiya navê zimanî dide.—[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:17, 16 tîrmeh 2026 (UTC)
== sihir --> sêhr ==
Tercimeyên ''[[sêhr]]'' hemû dibêje ''sihir'' loma bi botê lazim e kirin ''sêhr''. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 17:43, 18 tîrmeh 2026 (UTC)
:Sihirbaz --> sêhrbaz [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 18:07, 18 tîrmeh 2026 (UTC)
== Tercimeyên dîroknas ==
Li tercimeyên [[dîroknas]], hevmaneyên wê hewce ye were îlawekirin. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 18:44, 18 tîrmeh 2026 (UTC)
== Mewlûd ==
Sererastkirina jêgirtinên mewlûdê [https://ku.wiktionary.org/w/index.php?search=insource%3A%2Fw%5C%3AMela+His%C3%AAn%C3%AA+Batey%C3%AE%2F&title=Taybet%3AL%C3%AAger%C3%AEn&ns0=1&searchToken=8m0tguy3sqt7edr4sg0u8hedo] wekî [https://ku.wiktionary.org/w/index.php?title=dax%C3%AEdar&curid=284303&diff=6265851&oldid=6142285] [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 09:43, 20 tîrmeh 2026 (UTC)
hujbqccy1k1u2yxuou004wqx5c82feg
6333763
6333759
2026-08-14T23:43:08Z
Ghybu
1393
/* MediaWiki:Gadget-start.js */ Bersiv
6333763
wikitext
text/x-wiki
{{/ser}}
= Karên ferhengî =
== Mane ==
* [[:Kategorî:Madeyên bê beşa mane]]
** [[:Kategorî:Madeyên bê beşa mane bi kurmancî]]
Li ser van rûpelan ev made hene ku maneyan wan nehatine nivîsin û divê werin nivîsin. —[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:17, 16 tîrmeh 2026 (UTC)
== Etîmolojî ==
*[[:Kategorî:Daxwazên etîmolojiyê]]
**[[:Kategorî:Daxwazên etîmolojiyê bi kurmancî]]
Li ser van rûpelan ev made hene ku etîmolojiya wan hîn nehatine nivîsin. Ji bo alîkariyê binêre [[WF:Etîmolojî]] —[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:17, 16 tîrmeh 2026 (UTC)
== Cureyê rêzimanî ==
* [[:Kategorî:Gotarên bê kategoriya rêzimanî]]
* [[:Kategorî:Gotarên bê kategoriya rêzimanî bi kurmancî]]
Li ser van rûpelan ev made hene ku cureyên wan yên rêzimanî hîn nehatine nivîsin. Ji bo alîkariyê binêre [[Alîkarî:Cureyên peyvan]] —[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:17, 16 tîrmeh 2026 (UTC)
== Kontrol ==
* [[:Kategorî:Kontrol]]
** [[:Kategorî:Kontrola maneyê]]
Ev madde bi botê hatine çêkirin, yek bi yek divê werin kontrolkirin. —[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:17, 16 tîrmeh 2026 (UTC)
= Şablon =
== IPA ==
* {{ş|IPA}} divê [[Modul:IPA]] bi kar bîne. —[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:17, 16 tîrmeh 2026 (UTC)
== Deng ==
Kurdîkirina belgekirina {{ş|deng}} lazim e.--[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 00:06, 19 tîrmeh 2026 (UTC)
= Modul =
== Modul:form of/templates ==
* [[Modul:form of/templates]]: Divê ev modul were rojanekirin û xeletiyên berê wekî ([[hevalê]]) werin rastkirin. —[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:17, 16 tîrmeh 2026 (UTC)
*:Merheba @[[Bikarhêner:Ghybu|Ghybu]] Te gotibû di vê modulê de xeletî hene, jkx tu dikarî li vir binivîsî çi kêmasî hene, daku wextê rojane dikim ez ji bîr nekim? [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:16, 21 tîrmeh 2026 (UTC)
*::Silav. Nizanim ji bîra min çûye... Herwiha ji bo çêkirina formên navdêran zanînên cîns û tîpa dawî bes e:
*::* (-ê, mê) => çemandî, bangkirin
*::* (-ê, nêr) => îzafe
*::* (-ê, mê û nêr) => îzafe (nêr), bangkirin (mê), çemandî (mê)
*::* (-a) => îzafe (mê)
*::* (-ekî) => îzafe û çemandî (nêr, nebinavkirî)
*::* (-eke) = > îzafe (mê, nebinavkirî)
*::* ...
*:: <code>if find(mw.title.getCurrentTitle().subpageText, 'ekî$') then ... end</code>
*::<code><nowiki>{{ku-tewîn-navForm|<navdêr>|<zayend>}</nowiki></code>
*::Tablo û nivîs di yekcarî de tên çêkirin...
*::Feqet problem lêzêdekirina mînakan e. [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 17:34, 21 tîrmeh 2026 (UTC)
*:::Lêzêdekirina kîjan nimûneyan? Ev koda js ji bo çi ye? Qisûrê nenêre min fêm nekir :/ [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 18:13, 21 tîrmeh 2026 (UTC)
*::::Li vira ([[hevalê#Formeke navdêrê]]) di bin maneyên 1. û 2. mînak nayên tevlî kirin :) [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 18:18, 21 tîrmeh 2026 (UTC)
*:::::Ev tercîh e, ne mecbûrî ye, em dikarin [https://ku.wiktionary.org/w/index.php?title=heval%C3%AA&diff=prev&oldid=6276350 wisa] bikin. Wekî din? [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 18:29, 21 tîrmeh 2026 (UTC)
*::::::Min li jor tênê got ku tenê parametreyên "navdêr" û "zayend" hewce nee. Bi '''[//ku.wiktionary.org/w/index.php?title=heval%C3%AA&curid=969734&diff=6276353&oldid=6276350 vî]''' awayî jî tê çêkirin. Parametreyên din ne hewce ne. [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 18:38, 21 tîrmeh 2026 (UTC)
*:::::::Ji bo wê şabloneke din lazim e, bila ev şablon wekî îngilîzî bimîne em ji bo kurmancî yekî din çêkin. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 18:42, 21 tîrmeh 2026 (UTC)
*::::::::[https://ku.wiktionary.org/w/index.php?title=heval%C3%AA&oldid=6276885 wisa] çawa ye? Bi min nivîsîna nimûneyan zêde ne lazim e ji ber ku ti kes serê xwe pê naêşîne. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 09:46, 23 tîrmeh 2026 (UTC)
*:::::::::@[[Bikarhêner:Ghybu|Ghybu]] Vê şablonê bi kar bînin an na? Navê şablonê kê çi be? [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 19:07, 24 tîrmeh 2026 (UTC)
== Modul:columns ==
* [[Modul:columns]] were rojanekirin û {{ş|kol3}} bila lînka ''nîşan bide'' deyne beriya sernavê, kolê di qutiya rengî de bila nebe. —[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:17, 16 tîrmeh 2026 (UTC)
== Modul:etymon ==
* [[Modul:etymon kevn]]: Rojanekirin hewce ye. —[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:17, 16 tîrmeh 2026 (UTC)
== [[Modul:ziman/code to canonical name]] ==
Belgekirina skrîptê û js divê were rastkirin. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 09:31, 22 tîrmeh 2026 (UTC)
:* [[MediaWiki:UpdateLanguageNameAndCode.js]]
:[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 09:50, 22 tîrmeh 2026 (UTC)
::* [[Modul:ziman/print]]
::[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 09:52, 22 tîrmeh 2026 (UTC)
:::*[[Modul:ziman/şablon]]
:::[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 09:56, 22 tîrmeh 2026 (UTC)
::::* [[MediaWiki:Gadget-translation editor.js/ziman.json]]
::::[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 11:06, 22 tîrmeh 2026 (UTC)
== [[Modul:quote]] ==
Piştî ev modul hate hazirkirin, lazim e navên jegirtinan werin rastkirin û li hemûyan {{param|jêgirtin}} were zêdekirin. Bnr. [[Gotûbêja şablonê:Jêgirtin/Ehmedê Xanî/Mem û Zîn]] [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 22:27, 5 tebax 2026 (UTC)
::Ev modul hema bêje hazir e. Hûn li ser van madeyan çi difikirin:
# {{para|tarîx}} lazim e full date be eger na, lazim e {{para|sal}} were bikaranîn. Feqat "'''2021''' kanûna pêşîn 23" bi vî şiklî bi min ne problem e çnkî derdê en.wikt "attestation" e delîla herî pêşî jî sal e.
#: {{demo|sep=wisa xuya dibe<br>|<nowiki>{{jêder-kitêb/ceribandin|en
|tarîx=23 December 2021|nivîskar=Harry Hobbs; George Williams|sernav=Micronations and the Search for Sovereignty|url=https://www.cambridge.org/core/books/micronations-and-the-search-for-sovereignty/B0414A3A322695D9EE71E4CDDFDA06DE|weşanxane=Cambridge University Press|rûpel=155|isbn=978-1-009-15012-5|jêgirtin=jêgirtin.|t=-}}</nowiki>}}
#{{para|amadekar}}/{{para|edîtor}}/{{para|terciman}} bi şiklê edîtoriya, amadekariya, tercimekirina
#: {{demo|sep=dide<br>|<nowiki>{{jêder-kitêb/ceribandin|en
|sernav=Medical Surgical Nursing|serî=Juta's Manual of Nursing|cildê-seriyê=volume 4|edîtor=Sophie Mataniele Mogotlane; Joyce Mokoena; Motshedisi Eunice Chauke; Anne Young|sal=2005|weşanxane=Juta Academic|isbn=978-0702171840|rûpel=!12-29|jêgirtin=jêgirtin|t=-}}</nowiki>}}
--[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 13:09, 10 tebax 2026 (UTC)
:@[[Bikarhêner:Bikarhêner|Bikarhêner]] û @[[Bikarhêner:Ghybu|Ghybu]] Hîn gelek tişt hene divê îzah bikin û fikrê we pirs bikim, feqat îzahkirin pir zor e, em dest bi bikaranînê bikin û dûre tiştên ku hûn naxwazin em dikarin biguherînîn, dibe? [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 13:11, 10 tebax 2026 (UTC)
::Dibe, piştî çêbû, em di praktîkê de bibînin ku çawa ye. -- [[Bikarhêner:Bikarhêner|Bikarhêner]] ([[Gotûbêja bikarhêner:Bikarhêner|gotûbêj]]) 18:05, 10 tebax 2026 (UTC)
= Javascript =
== [[Mediawiki:Gadget-citoid-helper.js]] ==
Ji bo bi citoidê kopîkirina malûmatên çavkaniyan amûreke wisa lazim e. Xisûsen ji ber ku bi çend amûrên din dikare were bikaranîn.
Feqat çend problem hene, şablonên me de kêmasiya parametreyan gelek in û xerîteyên citoidê hîn nehatine çêkirin. Wana sererast bikin dûre vê amûrê çêkin, piştre [[MediaWiki:Gadget-start.js|start.js]] û [[MediaWiki:Gadget-wikt.add-examples.js|add examples.js]] were rojanekirin.
- --[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 00:04, 19 tîrmeh 2026 (UTC)
:Merheba @[[Bikarhêner:Bikarhêner|Bikarhêner]], ez dibêjim karê Modul:quote zêde wext bistîne, bila em dest bi bikaranîna van amûran bikin dûre kêmasiyan em ê temam bikin înşela. Dikarî vana li cihên xwe yên rast kopî paste bikî?
# [[Special:PermanentLink/6291574|Bikarhêner:Wikihez/skrîpt/js/Gadget-citoid-helper.js]] --> [[Mediawiki:Gadget-citoid-helper.js]]
# Ya li jêr kopî bike qismê herî dawî ya AmûrênVeşartî li [[MediaWiki:Gadgets-definition]]:
## <code><nowiki>* citoid-helper[ResourceLoader|hidden|default|dependencies=mediawiki.util]|citoid-helper.js</nowiki></code>
--[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:58, 26 tîrmeh 2026 (UTC)
== [[MediaWiki:Gadget-start.js]] ==
Rojanekirin hewce ye. Min gelek tişt lê zêde kir lê ez niha test dikime. Piştre em bar bikin:
* [[Bikarhêner:Wikihez/Gadget-start.js]] --> [[MediaWiki:Gadget-start.js]]
* [[Bikarhêner:Wikihez/Gadget-start.css]] --> [[MediaWiki:Gadget-start.css]]
--[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 22:08, 17 tîrmeh 2026 (UTC)
:Min [[MediaWiki:Gadget-start/data.json|data.json]] çêkir ji bo ku bi hêsanî malûmatên heyî werin guhartin bêyî guhartina Javascriptê. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 19:49, 18 tîrmeh 2026 (UTC)
:Xeletiyên ku ji bîr nekim rast bikim:
:* Wextê min çavkanî "kitêb" hilbijart û bi destî tije kir xeletiyeke [https://ku.wiktionary.org/w/index.php?title=xezete&diff=prev&oldid=6265392 wisa] derket her kelîme hate lînkkirin.
:* <code>html("⠿")</code> ev ne lazim e.
:* textarea ji bo çavkaniyên jêgirtinan xaseten yên sernav hîn jî ne draggable e.
:* pêşdîtina zindî checkbox wextê tê rakirin, pêşdîtin winda nabe.
:* Butona mobîlê ya vekirina formê di moda tarî de belî nabe, tenê wekî qutiyeke tarî xuya dibe.
:* Metna hişyarkirinê di guhartina rûpelên heyî de lazim e baştir bikim.
:[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 23:51, 18 tîrmeh 2026 (UTC)
::Ev problem çêbûn, ez ê binêrim ka çi problemên din hene. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 14:15, 19 tîrmeh 2026 (UTC)
:::Çêke: Ji bo qismê çavkaniyê yek dikare API call û Kategorî:Çavkanî bi kar bîne ji bo ku şablon zêde bikî ji yên heyî. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 21:21, 19 tîrmeh 2026 (UTC)
::::Ev jî çêbû, min beşa çavkanî jî çêkir. Eger xeletî dernekeve û problema valahiya piştî etîketê ji bîr nekim, piştî rojanekirina amûrên linkify, û citoid em dikarin bar bikin. Ez ê ti tiştê nû îlawe nekim, zêde dirêj bû. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:14, 21 tîrmeh 2026 (UTC)
:::::Merheba @[[Bikarhêner:Bikarhêner|Bikarhêner]]. Dikarî wana bar bikî?
:::::* [[Bikarhêner:Wikihez/Gadget-start.js]] --> [[MediaWiki:Gadget-start.js]]
:::::* [[Bikarhêner:Wikihez/Gadget-start.css]] --> [[MediaWiki:Gadget-start.css]]
:::::* [[MediaWiki:Gadgets-definition]] wisa rojane bike:
:::::* start[ResourceLoader|default|package|dependencies=mediawiki.util,ext.gadget.StorageUtils,ext.gadget.citoid-helper]|start.js|start.css|start.js/data.json
:::::[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 09:39, 5 tebax 2026 (UTC)
{{şirove}} Dewama ''[[Special:PermanentLink/6333688|Gotûbêja bikarhêner:Rewiye tine#WF:Nû]]'' bila gotûbêja wî em spam nekin. :D
{{r|Ghybu}} dikarî [[Special:PermanentLink/6333689|vê htmlê]] binêrî claude rast fêm kiriye yan na? Daxîne û wek html qeyd bike. --[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 18:43, 14 tebax 2026 (UTC)
:Min seh wîkîyên din jî kir, li wîkiya fransî tiştekî wekî daxwaza min çêkirine (tiştên ku ne hewce ne wekî "tab" çêkirine an jî hatine vêşartin): [//fr.wiktionary.org/w/index.php?title=fdsdfdsf&action=edit&redlink=1]. Formata me yê berî jî bi vê lojîkê hatibû çêkirin, wekî de.wiktionary ([//de.wiktionary.org/w/index.php?title=sdfdsfsdfs&action=edit&preload=Vorlage:Formatvorlage_(Substantiv_vereinfacht)]) [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 19:01, 14 tebax 2026 (UTC)
::PS: Dîsa jî Claude min rind fêm kiriye :)) Feqet min got ku beşên Mane", "Bilêvkirin" û "Beşên din" cem hev (wekî "tab") ". Û dema ku tu terî di nav "Besên din" Hevmane, Jê, ... li wira werin dayîn. Wêne/Resim û Nimûne jî di nav beşa ("tab") "Mane" [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 19:17, 14 tebax 2026 (UTC)
::Erê ya fr.wikt min jî dîtibû jixwe fikrê tab min ji wan girtibû :D (feqat min li cem wan tenê tab-a maneyê dît yên din nedît çawa tê vekirin nizanim) Berê hemû beş piştî maneyê bibûn, dûre min sê Tab çêkir, Bingehîn+Lînkkirin+Bikaranîn. Niha lazim e Tabeke din çêkim. Ya ku claude çêkiriye bnr. [[Special:PermanentLink/6333698#L-7]] ne baş e bnr. [[Special:PermanentLink/6333703|qiyaskirinê li ser vê htmlê]] Êdî ez Claude abuse dikime ji ber ku Pro ye :D [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 19:26, 14 tebax 2026 (UTC)
:::Claude dibêje:
:::Good clarification — that's a real simplification, not just a relabel. Updated STEP_GROUPS from 5 tabs down to 3:
:::Mane — the definitions themselves, plus Wêne (image), now grouped in with it instead of sitting in a separate misc tab. Nimûne needed no change since it was already rendering inside each Mane sense block, not as its own step.
:::Bilêvkirin — unchanged, still just pronunciation.
:::Beşên din — everything else in one flat bucket: hevmane, jê, têkildar, herwiha binêre, formên alternatîv, dijmane, jornav, jêrnav, notên bikaranînê, bi alfabeyên din, dûnde, çavkanî, bêhtir bixwîne, tewandin, etîmolojî, zaravayên din, werger, and bnr-h — instead of being split across the old Bingehîn/Lînkkirin/Bikaranîn/Din tabs.
:::No DOM-order changes were needed this time — the fix from the blank-tab bug looks up the tab bar's position dynamically now, so it didn't matter that I regrouped which steps go where. Same two files, saved to your Wiki folder — worth another pass through all three tabs once you've pasted this in, same as last time. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 19:34, 14 tebax 2026 (UTC)
::::Mînak:
Ziman
---------------------------------------------
Cureyê rêzimanî (Navdêr)
Navdêr (hilbijêre) ┆ Cîns (hilbijêre) ┆ Jimar (hilbijêre)
- lêker -mê -yekjimar
- rengdêr -nêr -pirjimar
- ... -... -...
---------------------------------------------
Mane || Bilêvkirin || Beşên din
hilbijêre:
- mane - IPA - Hevmane
- nimûne - kîte - Dijmane
- wêne
Dema ku tu "Cureyê rêzimanî" dikî "Lêker" :
Cureyê rêzimanî (Lêker)
Lêker (hilbijêre) ┆ Cure (hilbijêre)
- navdêr -rehê niha
- rengdêr -rehê borî
- ... -...
---------------------------------------------
┆ : select/option ("tab" nîne, tê dîtin)<br>
|| : "tab"
-- [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 19:45, 14 tebax 2026 (UTC)
'''Sê-stûnî ("┆" = ne tab), li gorî Cureyê rêzimanî:'''
{| class="wikitable"
! Cureyê rêzimanî !! Stûna 2 !! Stûna 3 !! Têbînî
|-
| Navdêr / Serenav
| Cîns (hilbijêre ▾: mê / nêr / ... — tenê heke ziman zayendê rêzimanî hebe)
| '''Jimar''' (?) — pirs li jêr
| Qadên "Forma mê/nêr/pirjimar/yekjimar" niha jî li vir hene — ma ev di "Jimar"-ê de tên tevlihev kirin, an cuda dimînin?
|-
| Rengdêr
| (heman m/n/p/y forman ku Navdêr distîne)
| Sûperlatîv (sûp) / Komparatîv (komp)
| Ne li ser her du nîgaran hatiye behs kirin — ma sê-stûnî li vir jî tê bikaranîn?
|-
| Lêker
| '''Cure''' = Cureyê lêkerê (hilbijêre ▾: gerguhêz / negerguhêz / xwerû-... / pêkhatî-... / hevedudanî-... / biwêjî-... — 10 vebijêrk)
| Di heman stûnê de: Rehê dema niha / Rehê dema borî / Rehê dema bilanî (her sê qadên nivîsandinê ne, ne hilbijêrk in)
| Ma "Cure" her sê rehan di xwe de digire wek yek stûn, an her yek stûneke cuda ye?
|-
| Tîp (herf/sembol)
| Girdêk (gir) / Hûrek (hûr)
| —
| Ne behs kiriye
|-
| Her cureyek, li gorî zimên
| Transliterasyon (tr) / Transkrîpsiyon (ts)
| —
| Bi zimên ve girêdayî ye, ne bi cureyê rêzimanî ve
|-
| Her cureyek, tenê ziman=japonî
| Hanja / Translit. hanja
| —
| Ne bi cureyê rêzimanî ve girêdayî ye
|-
| Her cureyek
| '''Tercîhên pêşketî''' (kolapsî): form, formaalt, nekatcure, nekatcins, nekatçendterm, serlînkneke, nekatpalîndrom, neformtr
| —
| Vebijarkî, ji bo hemû cureyan
|}
'''Tabên jêrîn — Mane ‖ Bilêvkirin ‖ Beşên din ("||" = tab):'''
{| class="wikitable"
! Mane !! Bilêvkirin !! Beşên din (hemû 18 hêman)
|-
| mane, nimûne, wêne
| şablonên bilêvkirinê (mînak: IPA, kîte)
| tewandin, etîmolojî, bi zaravayên din, werger, jê, têkildar, herwiha binêre, formên alternatîv, hevmane, dijmane, jornav, jêrnav, notên bikaranînê, bi alfabeyên din, dûnde, çavkanî, bêhtir bixwîne, bnr-h
|}
'''Pirsên vekirî:'''
# "Jimar" (yekjimar/pirjimar) — qadeke ku nîşan dide têketî bi xwe yekjimar e an pirjimar e. Ev cuda ye ji "Forma yekjimar (y)"/"Forma pirjimar (p)" ya heyî (ku forma DÎN a kelîmeyê tomar dike). Herdu bimînin, an werin yek kirin?
# Ma sê-stûnî tenê ji bo Navdêr/Lêker e, an ji bo Rengdêr/Tîp jî heman mantiq derbas dibe?
# Di "Beşên din" de: dixwazî pêşî navnîşek/hilbijartinek nîşan bide (17 hêmanên din jî tê de), û qad tenê piştî hilbijartinê xuya bibin?
:Tu dikarî start.js ji Tercîh/ Amûran rakî û bi test.js li Amûran herî taliyê ye biceribînî. Claude ya li jor hazir kir, Jimar ez dikarim îzah bikim. Feqat bi min di tab-a maneyê de lazim e Bi zaravayên din (heta wek werger her car bila li rûpelan were zêdekirin) û werger jî hebe.--[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 20:18, 14 tebax 2026 (UTC)
:;Navdêr: Tenê "cîns" û "jimar" bes e. "Forma mê", "Forma nêr", ... nayê fêm kirin. Bi min wekî "Tercîhên pêşketî" bi navkî din veşartî çêke.
:;Lêker: "Cureyê lêkerê" nayê fêm kirin, bi min pêşta "geguhez/negerguhêz" were hilbijartin, paşê jî form "hevdudanî/pêkatî/..." ji ber ku her kes vana nizanî... Dîsa jî tu dizanî.
:Bi min beşên "Hevmane" û dijmane jî bike de nav beşa Mane ("tab") ji ber ku pirr tên xwestin.
:Şûnda Wêne jî Nimûne/jêgirtin...
:Herwiha hemû bi rengê şîn hatine çêkirin, nizanim beşên din (===) bi rengê gewr an reş çito dibe? [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 21:35, 14 tebax 2026 (UTC)
::Nimûne/jêgirtin, hevmane, Dijmane li binê her maneyê hene. ji ber ku wana bi maneyê ve girêdayî ne lazim e wisa bimîne feqat belkî şiklekî baştir bibînin. Hînbûna bikaranîna formeke nû bi qasî hînbûna koda wîkiyê zor e heqîqeten... [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 21:45, 14 tebax 2026 (UTC)
:::Min şaş fêm meke feqet te amûrek ji bo Wikihez çêkiriye :) Tu dixwazî ku hemû tiştên ku te çêkiriye tevlî vê Gadgetê bikî û bikarhênerên din jî bi kar bînin... Tu jî dizanî ku kesên ku tên vira çito peyv çêdikin: Ziman > Mane > Mînak > Hevmane > Dijmane ! Du Gadget çêke yek ji bo bikarhênerên ku hertim li vira ne, yekeke din jî ji bo bikarhênerên din (yên ku pirr nên vira).
:::Herwiha kesên ku hertim li vira ne bi Gadgetê gotar çênekin, ''copy/paste'' dikin. [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 22:12, 14 tebax 2026 (UTC)
::::Min xwest her tişt li ser rêza xwe be ji bo ku hîn bibin çi diçe kû derê feqat bi vî şiklî jî zêde dirêj û tevlihev dibe. Loma ez ê wekî tu dibêjî bikim her tiştê din bila collapsed pêşketî be. Ê ku dixwaze pê lê ke û binêre çi dikare were zêdekirin. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 22:26, 14 tebax 2026 (UTC)
:::::Niha baştir tê fêm kirin {{=)}} [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 23:01, 14 tebax 2026 (UTC)
::::::Min ji Opus 5 û Design Tool îstifade kiriye hema bêje milyonek token çûn :D pêşî dîzayn kir dûre dest pê kir wekî dîna bişuxile. Pereyê xwe %100 heq dike welleh :D feqat moda tarî ji bîr kiriye :D [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 23:12, 14 tebax 2026 (UTC)
:::::::Spas! Etîmolojî jî wekî "Bilêvkirin", di beşekê din de cem wê, were çêkirin (Mane|Etîmolojî|Bilêvkirin|Beşên din)? [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 23:20, 14 tebax 2026 (UTC)
::::::::(Mane>Tewandin>Werger|Etîmolojî>Dûnde>|Bilêvkirin(formatek çawa?)>Resim|Eleqedar>Jê>Têkildar>Herwiha binêre|Beşên din)? [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 23:29, 14 tebax 2026 (UTC)
:::::::::Nizanim, biceribîne... [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 23:43, 14 tebax 2026 (UTC)
== [[Mediawiki:Gadget-QQ.js]] ==
Ev amûr di şikle Minerva de. Her daîm vê xeletiyê dide:
<syntaxhighlight lang="js">
TypeError: Cannot read properties of null (reading 'addEventListener') at css () at runScript () at Array.<anonymous> () at flushCssBuffer ()
</syntaxhighlight> [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 19:29, 18 tîrmeh 2026 (UTC)
:* [[Bikarhêner:Wikihez/skrîpt/js/Gadget-QQ.js]] --> [[Mediawiki:Gadget-QQ.js]]
:* [[Bikarhêner:Wikihez/Gadget-QQ.css]] --> [[Mediawiki:Gadget-QQ.css]]
:Ez dibêjim çêbû lê ka çend roj biceribînim. Tiştên ku hatin sererastkirin:
:# Google Books API Key dikarî zêde bikî, dixe cookies û di gerokê de dimîne. Berê bê API Key dixebitiya lê êdî mecbûr e ku API Key-a te hebe, bidestxistina wê ne zêde zor e lê dîsa jî tevlihev e.
:# Êdî di mobîlê de dixebite, heta di mobîlê de xweştir xuya dike.
:# Moda tarî
:# OOUI dewsa jquery.ui
:# Li qutiyê çi dixwazî zêde bikî, dikare li gorî îsm, sifet, fiîl bitewîne. Lê ji bo fiîl tenê dikare çend heb inflection bîne.
:# Butona paqij bike lê zêde kir.
:# Çend paqijiyên jêgirtinên Google Kitêbê niha hene.
:[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 23:38, 18 tîrmeh 2026 (UTC)
::Tewandina fiîlan û xeletiya modulê lazim e were rastkirin. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 14:40, 21 tîrmeh 2026 (UTC)
== [[MediaWiki:Gadget-wikt.add-examples.js]] ==
Min ev amûr hinek rojane kir feqat çend problem hene berî ku bar bikin.
Tiştên ku min guhart:
# Êdî li sayfeyên bi {{ş|maneid}} jî dixebite,
# Cihê di wîkîtekstê de yê ku jêgirtin were îlawekirin baştir bû,
# [[Mediawiki:Gadget-citoid-helper.js|citoid helper]] zêde kir ji bo ku bi hêsanî çavkanî bi riya doi, isbn an urlyê werin tijîkirin.
* [[Bikarhêner:Wikihez/Gadget-wikt.add-examples.css]] --> [[MediaWiki:Gadget-wikt.add-examples.css]]
* [[Bikarhêner:Wikihez/Gadget-wikt.add-examples.js]] --> [[MediaWiki:Gadget-wikt.add-examples.js]]
- --[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 00:50, 19 tîrmeh 2026 (UTC)
:Min "wikt." qismên cache kirinê ya wîkiya fransî bi [[MediaWiki:Gadget-StorageUtils.js]] guhartiye. loma ji bîr nekin wê amûrê li [[MediaWiki:Gadgets-definition]] zêde bikin. û navê amûrê jî biguhêrînin. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 09:15, 23 tîrmeh 2026 (UTC)
::Berê li ser WF:ceribandin dixebitî. niha naxebite. Divê were rastkirin. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 22:10, 7 tebax 2026 (UTC)
== Gadget-translation editor ==
* [[MediaWiki:Gadget-translation editor.js]]: divê formata en.wîktê were bikaranîn ji ber ku me gelek tercime ji en.wîktê kopî kir û ev js hîn nikare formata wekî li jêr bi kar bîne.
<syntaxhighlight lang="wikitext">
* {{Z|sh}}:
*: Kirîlî:
*: Latînî
</syntaxhighlight>
—[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:17, 16 tîrmeh 2026 (UTC)
== [[Mediawiki:Gadget-linkify.js]] ==
* ''rûpeleke'' wekî<syntaxhighlight lang="wikitext">[[rûpeleke]]</syntaxhighlight> lînk dike, bi regexê belkî dikare wisa bike <syntaxhighlight lang="wikitext">[[rûpel]]eke</syntaxhighlight>
—[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:17, 16 tîrmeh 2026 (UTC)
* Amûreke din wekî [[User:Wikihez/Gadget-linkify.js|linkify]] lazim e ku herfên mezin biçûk bike ji bo kurmancî.—[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:17, 16 tîrmeh 2026 (UTC)
:{{r|Bikarhêner}} Merheba bira, dikarî viya jî bar bikî?:
* [[Special:PermanentLink/6291974|linkify]] --> [[Mediawiki:Gadget-linkify.js]]
Spas--[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 11:42, 29 tîrmeh 2026 (UTC)
:Dûre [https://ku.wiktionary.org/wiki/MediaWiki:Gadget-start.js#L-283 li vir] wiktviLinkify bike kuLinkify xêra xwe [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 11:51, 29 tîrmeh 2026 (UTC)
::Min ji bîr kir lê zêde bikim niha nikare "Dİ" bike "di", xeletiyeke berbelav a di nivîsên kurdî de, herfên din ên wekî ll yan rr jî hewce ne werin zêdekirin. Dûre em zêde bikin. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 21:42, 29 tîrmeh 2026 (UTC)
:::Min nû ferq kir, sayfeyên ku hîn nehatine çêkirin wîkîlînk nake. Problemeke mezin e divê were rastkirin. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 18:15, 30 tîrmeh 2026 (UTC)
::::Na, lînk dike, tiştekî din heye... [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 10:49, 31 tîrmeh 2026 (UTC)
== Amûra manayê ==
Amûreke din ji bo nivîsina maneyê wekî Nimûne zêde bike lazim e [https://ku.wiktionary.org/w/index.php?title=Bikarh%C3%AAner:Wikihez/test.js&oldid=6276876 js] [https://ku.wiktionary.org/w/index.php?title=%C5%9Eablon:ceribandin2&oldid=6265629 şablon] [https://ku.wiktionary.org/w/index.php?title=Bikarh%C3%AAner:Wikihez/common.css&oldid=6265642 css] --[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 09:12, 23 tîrmeh 2026 (UTC)
== [[MediaWiki:Gadget-jeder.js]] ==
@[[Bikarhêner:Ghybu|Ghybu]] Çavkaniyên jêderê di moda pêşdîtinê de jêderê vedişêre, ew jî min gelek eciz dike wextê çavkanî zêde dikim. Min ji Claude pirsî û kodan nîşanî wê da, wisa cewab da:
Yes — and this file actually explains the whole thing precisely, better than my earlier guess about extract-stripping.
What's happening: the CSS rule
<syntaxhighlight lang="css">
.jeder{
display:none;
}
</syntaxhighlight>
hides every citation by default, *unconditionally*. The only thing that ever makes it visible again is the gadget's JS: it finds each `.jeder`, builds the short "`— (year, author, +)`" summary from the `.j-pewist` fields, and either reveals the short version or — for citations with no `.j-pewist` fields — explicitly sets `display:inline` on the original.
So visibility of citations depends entirely on this JS running. In the normal article view (Image 1) it runs, so you see the collapsed "`(1918, E. Rehmî Ji Mala Hekariyan, Amadekar: M. E. Bozarslan, +)`" form. In whatever generated Image 2 — a hover-preview/extract/API render — gadget JS doesn't execute, so nothing ever removes the `display:none`, and the citation vanishes completely rather than degrading to "still visible, just not collapsed."
<b>The fix:</b> flip the default so the *un-collapsed* state is the safe fallback, and let JS do the hiding only after it successfully builds the short version. That way, any context without JS shows the full citation instead of nothing.
CSS — remove the blanket hide:
<syntaxhighlight lang="css">
.jeder {
/* intentionally no display:none here — see Gadget-... .js */
}
</syntaxhighlight>
JS — do the hiding from script, after the short form exists:
{{veşêre-ser}}
<syntaxhighlight lang="js">
// Ji bo şablonên [[Şablon:jêder]] hatiye nivîsandin.
// Parametreyên ku di navbera "<span class="j-pewist">...</span>" an "{{j-pêwîst|...}}" de ne venaşêre.
$(function() {
function nivisaKurtTevliBike(sund, nivisKurt) {
var zede = $('<a>+</a>')
.addClass('click')
.attr('href', '#')
.attr('title', 'zêdetir')
.css('font-weight', 'bold');
var kurt = $(' <a>↩</a>')
.addClass('click-kurt')
.attr('href', '#')
.attr('title', 'veşêre')
.css('font-weight', 'bold');
$('<span>' + nivisKurt + '</span>')
.append(zede).append(')')
.addClass('jeder-kurt')
.css('font-size', '0.85em')
.insertAfter(sund);
sund.append(' ').append(kurt);
// Only hide the full citation once the short summary actually exists.
// If this script never runs (no-JS clients, hover-preview extracts,
// action=render, etc.), the full citation stays visible instead of
// silently disappearing.
sund.css('display', 'none');
}
function vesere() {
$('.jeder').each(function() {
var elmTab = $(this).find('.j-pewist').clone();
if (elmTab.length) {
var elm = '';
for (var i = elmTab.length - 1; i >= 0; i--) {
elm = elmTab.eq(i).html() + ', ' + elm;
}
var nivisKurt = ' — (' + elm;
nivisaKurtTevliBike($(this), nivisKurt);
}
// else: no j-pewist fields to shorten — leave the full citation
// as it already renders (visible), nothing to do.
});
}
vesere();
$(".click").click(function(e) {
e.preventDefault();
$(this).parent('.jeder-kurt').css('display', 'none');
$(this).parent('.jeder-kurt').prev().css('display', 'inline');
});
$(".click-kurt").click(function(e) {
e.preventDefault();
$(this).parent('.jeder').css('display', 'none');
$(this).parent('.jeder').next().css('display', 'inline');
});
});
</syntaxhighlight>
Net effect:
- JS-enabled readers (normal article view): identical experience to today — collapsed short form with `+`/`↩` toggle.
- No-JS contexts (previews, extracts, screen readers before JS loads, print, etc.): full citation is shown instead of nothing — a real regression fix rather than a cosmetic one.
One caveat worth being upfront about: this fixes it *if* the preview context renders the gadget's HTML/CSS but doesn't execute gadget JS (which is the far more common case, and what this code strongly suggests is happening). If Image 2 instead comes from a pipeline that strips the `.jeder`/`.jegirtin-text` elements out of the HTML entirely before this CSS/JS even gets a chance to apply, no on-wiki CSS/JS change can help — that'd need the extract-generation config changed instead. Given what this gadget file shows, though, I'd bet on the CSS-hide explanation.
{{veşêre-bin}}
Em dûre biceribînin eger xeletî tinebe, vî tiştî jî rast bikin. --[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 20:00, 23 tîrmeh 2026 (UTC)
:Ez APIya MediaWiki rind nizanim belkî Claude dizane:) Em nikarin bibêjin dema ku moda "''action=edit''" e fonksiyona <code>function vesere()</code> bi kar meyîne. [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 15:57, 24 tîrmeh 2026 (UTC)
::Na, di moda "edît"-ê de <code>var elmTab = null</code>... [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 16:13, 24 tîrmeh 2026 (UTC)
?:
<syntaxhighlight lang="js">
if (
mw.config.get('wgAction') === 'edit' ||
mw.config.get('wgAction') === 'submit'
){
var elmTab = [];
} else {
var elmTab = $(this).find('.j-pewist').clone();
}
</syntaxhighlight>
--[[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 16:31, 24 tîrmeh 2026 (UTC)
:Ez jî nizanim Claude çiqas ji mediawiki fêm dike lê heta niha ti tişt nîne ku min jê pirs kir û nikaribû çêke, bila wekî reklam nebe feqat Claude mikemmel e, dibêjim "li vir çima xeletiyeke wisa derdikeve" di dosyeya 2000 rêzî de diçe tiştê xelet tenê rast dike tiştekî din naguherîne. Chatgpt û aistudio qet wisa nakin, eynî dosyeyê deh cara dinivîsin, deh netîceyên cuda derdikevin :D
:Em dikarin vê amûrê wextê edit û submitê neaktîv bikin wekî <syntaxhighlight lang="js">if (!(action === "edit" || action === "submit")) {
:return;</syntaxhighlight> lê wê demê display:none wê çibe nizanim. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 18:23, 24 tîrmeh 2026 (UTC)
::display:none ne hewce ye ma jixwe di nav kodê [https://ku.wiktionary.org/w/index.php?title=MediaWiki:Gadget-jeder.js&oldid=6069025#L-49 L-49] de inline/none heye? [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 18:53, 24 tîrmeh 2026 (UTC)
:Min bi vî şiklî [https://ku.wiktionary.org/w/index.php?title=Bikarh%C3%AAner:Wikihez/vector-2022.js&diff=prev&oldid=6290816#L-28] ceriband feqat nexebitî. "display:none" di pêşdîtinê de dixebite feqat js naşixule. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 14:43, 25 tîrmeh 2026 (UTC)
::Kodên JSê pir hez nakim (pêşta hukurina APIya MWyê hewce bû) dîsa jî ez ê seh bikim :) [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 16:49, 27 tîrmeh 2026 (UTC)
:::Ez niha bi vî şiklî [https://ku.wiktionary.org/w/index.php?title=Bikarh%C3%AAner:Wikihez/test.js&oldid=6290820] [https://ku.wiktionary.org/w/index.php?title=Bikarh%C3%AAner:Wikihez/common.css&oldid=6290821#L-8] bi kar tînim ti problem nîne. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 17:09, 27 tîrmeh 2026 (UTC)
== [[MediaWiki:Gadget-PagePreviews.js]] ==
Ez dibêjim em vê amûrê jî çêkin [[:en:MediaWiki:Gadget-PagePreviews.js]] --[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 10:56, 3 tebax 2026 (UTC)
= Moda tarî =
== [[Şablon:wîkîpediya]] ==
Rengê tarî de xirab e.--[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 19:36, 4 tebax 2026 (UTC)
= Bot =
Karên ku bi botê werin çêkirin ji kerema xwe li vir binivîsin.
== Kategorî:Biwêj ==
[[:Kategorî:Biwêj]] divê were paqijkirin, lîsteya madeyên {{ş|biwêj}} çêke, yên ku tê de bûn, kirin, man hene filtre bike yên din bi destî tê çêkirin.—[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:17, 16 tîrmeh 2026 (UTC)
== Jêgirtin ==
Xistina jêgirtinên beşa [https://ku.wiktionary.org/w/index.php?search=insource%3A%2F%3D+*Ji+%5BWw%5D%C3%AAjey%C3%AA+*%3D%2F&title=Taybet%3AL%C3%AAger%C3%AEn&profile=advanced&fulltext=1&ns0=1&searchToken=8rh0bmw8dccsi7aynl6zli8uf ji wêjeyê] li beşa maneyê. —[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:17, 16 tîrmeh 2026 (UTC)
== Bota Toolforgeê ==
Botekî Toolforgeê lazim e ji bo ku xeletiyên biçûk wekî şablonên bi navên îngilîzî werin kurdîkirin yan jî valahiya beşan rast bike û hwd.—[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:17, 16 tîrmeh 2026 (UTC)
:Min [[Bikarhêner:Wikihez/skrîpt/py/kuwiktkozmetik.py|paqijiyen kozmetîk]] hazir kir feqat hîn navên şablonan naguhêre. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 20:05, 4 tebax 2026 (UTC)
== Updatew ==
Bota [[Bikarhêner:Wikihez/skrîpt/py/updateW.py|updateW]] divê were rojanekirin. Yan jî yekî nû were çêkirin. Şablonên {{ş|W}} di beşa tercimeyan de sererast dike û zimanan rêz dike. Ya niha xeletiya navê zimanî dide.—[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:17, 16 tîrmeh 2026 (UTC)
== sihir --> sêhr ==
Tercimeyên ''[[sêhr]]'' hemû dibêje ''sihir'' loma bi botê lazim e kirin ''sêhr''. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 17:43, 18 tîrmeh 2026 (UTC)
:Sihirbaz --> sêhrbaz [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 18:07, 18 tîrmeh 2026 (UTC)
== Tercimeyên dîroknas ==
Li tercimeyên [[dîroknas]], hevmaneyên wê hewce ye were îlawekirin. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 18:44, 18 tîrmeh 2026 (UTC)
== Mewlûd ==
Sererastkirina jêgirtinên mewlûdê [https://ku.wiktionary.org/w/index.php?search=insource%3A%2Fw%5C%3AMela+His%C3%AAn%C3%AA+Batey%C3%AE%2F&title=Taybet%3AL%C3%AAger%C3%AEn&ns0=1&searchToken=8m0tguy3sqt7edr4sg0u8hedo] wekî [https://ku.wiktionary.org/w/index.php?title=dax%C3%AEdar&curid=284303&diff=6265851&oldid=6142285] [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 09:43, 20 tîrmeh 2026 (UTC)
hedklb9jru7adc0m74lxqr9bk0c47r4
6333764
6333763
2026-08-15T00:02:47Z
Ghybu
1393
/* MediaWiki:Gadget-start.js */ Bersiv
6333764
wikitext
text/x-wiki
{{/ser}}
= Karên ferhengî =
== Mane ==
* [[:Kategorî:Madeyên bê beşa mane]]
** [[:Kategorî:Madeyên bê beşa mane bi kurmancî]]
Li ser van rûpelan ev made hene ku maneyan wan nehatine nivîsin û divê werin nivîsin. —[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:17, 16 tîrmeh 2026 (UTC)
== Etîmolojî ==
*[[:Kategorî:Daxwazên etîmolojiyê]]
**[[:Kategorî:Daxwazên etîmolojiyê bi kurmancî]]
Li ser van rûpelan ev made hene ku etîmolojiya wan hîn nehatine nivîsin. Ji bo alîkariyê binêre [[WF:Etîmolojî]] —[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:17, 16 tîrmeh 2026 (UTC)
== Cureyê rêzimanî ==
* [[:Kategorî:Gotarên bê kategoriya rêzimanî]]
* [[:Kategorî:Gotarên bê kategoriya rêzimanî bi kurmancî]]
Li ser van rûpelan ev made hene ku cureyên wan yên rêzimanî hîn nehatine nivîsin. Ji bo alîkariyê binêre [[Alîkarî:Cureyên peyvan]] —[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:17, 16 tîrmeh 2026 (UTC)
== Kontrol ==
* [[:Kategorî:Kontrol]]
** [[:Kategorî:Kontrola maneyê]]
Ev madde bi botê hatine çêkirin, yek bi yek divê werin kontrolkirin. —[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:17, 16 tîrmeh 2026 (UTC)
= Şablon =
== IPA ==
* {{ş|IPA}} divê [[Modul:IPA]] bi kar bîne. —[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:17, 16 tîrmeh 2026 (UTC)
== Deng ==
Kurdîkirina belgekirina {{ş|deng}} lazim e.--[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 00:06, 19 tîrmeh 2026 (UTC)
= Modul =
== Modul:form of/templates ==
* [[Modul:form of/templates]]: Divê ev modul were rojanekirin û xeletiyên berê wekî ([[hevalê]]) werin rastkirin. —[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:17, 16 tîrmeh 2026 (UTC)
*:Merheba @[[Bikarhêner:Ghybu|Ghybu]] Te gotibû di vê modulê de xeletî hene, jkx tu dikarî li vir binivîsî çi kêmasî hene, daku wextê rojane dikim ez ji bîr nekim? [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:16, 21 tîrmeh 2026 (UTC)
*::Silav. Nizanim ji bîra min çûye... Herwiha ji bo çêkirina formên navdêran zanînên cîns û tîpa dawî bes e:
*::* (-ê, mê) => çemandî, bangkirin
*::* (-ê, nêr) => îzafe
*::* (-ê, mê û nêr) => îzafe (nêr), bangkirin (mê), çemandî (mê)
*::* (-a) => îzafe (mê)
*::* (-ekî) => îzafe û çemandî (nêr, nebinavkirî)
*::* (-eke) = > îzafe (mê, nebinavkirî)
*::* ...
*:: <code>if find(mw.title.getCurrentTitle().subpageText, 'ekî$') then ... end</code>
*::<code><nowiki>{{ku-tewîn-navForm|<navdêr>|<zayend>}</nowiki></code>
*::Tablo û nivîs di yekcarî de tên çêkirin...
*::Feqet problem lêzêdekirina mînakan e. [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 17:34, 21 tîrmeh 2026 (UTC)
*:::Lêzêdekirina kîjan nimûneyan? Ev koda js ji bo çi ye? Qisûrê nenêre min fêm nekir :/ [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 18:13, 21 tîrmeh 2026 (UTC)
*::::Li vira ([[hevalê#Formeke navdêrê]]) di bin maneyên 1. û 2. mînak nayên tevlî kirin :) [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 18:18, 21 tîrmeh 2026 (UTC)
*:::::Ev tercîh e, ne mecbûrî ye, em dikarin [https://ku.wiktionary.org/w/index.php?title=heval%C3%AA&diff=prev&oldid=6276350 wisa] bikin. Wekî din? [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 18:29, 21 tîrmeh 2026 (UTC)
*::::::Min li jor tênê got ku tenê parametreyên "navdêr" û "zayend" hewce nee. Bi '''[//ku.wiktionary.org/w/index.php?title=heval%C3%AA&curid=969734&diff=6276353&oldid=6276350 vî]''' awayî jî tê çêkirin. Parametreyên din ne hewce ne. [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 18:38, 21 tîrmeh 2026 (UTC)
*:::::::Ji bo wê şabloneke din lazim e, bila ev şablon wekî îngilîzî bimîne em ji bo kurmancî yekî din çêkin. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 18:42, 21 tîrmeh 2026 (UTC)
*::::::::[https://ku.wiktionary.org/w/index.php?title=heval%C3%AA&oldid=6276885 wisa] çawa ye? Bi min nivîsîna nimûneyan zêde ne lazim e ji ber ku ti kes serê xwe pê naêşîne. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 09:46, 23 tîrmeh 2026 (UTC)
*:::::::::@[[Bikarhêner:Ghybu|Ghybu]] Vê şablonê bi kar bînin an na? Navê şablonê kê çi be? [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 19:07, 24 tîrmeh 2026 (UTC)
== Modul:columns ==
* [[Modul:columns]] were rojanekirin û {{ş|kol3}} bila lînka ''nîşan bide'' deyne beriya sernavê, kolê di qutiya rengî de bila nebe. —[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:17, 16 tîrmeh 2026 (UTC)
== Modul:etymon ==
* [[Modul:etymon kevn]]: Rojanekirin hewce ye. —[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:17, 16 tîrmeh 2026 (UTC)
== [[Modul:ziman/code to canonical name]] ==
Belgekirina skrîptê û js divê were rastkirin. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 09:31, 22 tîrmeh 2026 (UTC)
:* [[MediaWiki:UpdateLanguageNameAndCode.js]]
:[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 09:50, 22 tîrmeh 2026 (UTC)
::* [[Modul:ziman/print]]
::[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 09:52, 22 tîrmeh 2026 (UTC)
:::*[[Modul:ziman/şablon]]
:::[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 09:56, 22 tîrmeh 2026 (UTC)
::::* [[MediaWiki:Gadget-translation editor.js/ziman.json]]
::::[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 11:06, 22 tîrmeh 2026 (UTC)
== [[Modul:quote]] ==
Piştî ev modul hate hazirkirin, lazim e navên jegirtinan werin rastkirin û li hemûyan {{param|jêgirtin}} were zêdekirin. Bnr. [[Gotûbêja şablonê:Jêgirtin/Ehmedê Xanî/Mem û Zîn]] [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 22:27, 5 tebax 2026 (UTC)
::Ev modul hema bêje hazir e. Hûn li ser van madeyan çi difikirin:
# {{para|tarîx}} lazim e full date be eger na, lazim e {{para|sal}} were bikaranîn. Feqat "'''2021''' kanûna pêşîn 23" bi vî şiklî bi min ne problem e çnkî derdê en.wikt "attestation" e delîla herî pêşî jî sal e.
#: {{demo|sep=wisa xuya dibe<br>|<nowiki>{{jêder-kitêb/ceribandin|en
|tarîx=23 December 2021|nivîskar=Harry Hobbs; George Williams|sernav=Micronations and the Search for Sovereignty|url=https://www.cambridge.org/core/books/micronations-and-the-search-for-sovereignty/B0414A3A322695D9EE71E4CDDFDA06DE|weşanxane=Cambridge University Press|rûpel=155|isbn=978-1-009-15012-5|jêgirtin=jêgirtin.|t=-}}</nowiki>}}
#{{para|amadekar}}/{{para|edîtor}}/{{para|terciman}} bi şiklê edîtoriya, amadekariya, tercimekirina
#: {{demo|sep=dide<br>|<nowiki>{{jêder-kitêb/ceribandin|en
|sernav=Medical Surgical Nursing|serî=Juta's Manual of Nursing|cildê-seriyê=volume 4|edîtor=Sophie Mataniele Mogotlane; Joyce Mokoena; Motshedisi Eunice Chauke; Anne Young|sal=2005|weşanxane=Juta Academic|isbn=978-0702171840|rûpel=!12-29|jêgirtin=jêgirtin|t=-}}</nowiki>}}
--[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 13:09, 10 tebax 2026 (UTC)
:@[[Bikarhêner:Bikarhêner|Bikarhêner]] û @[[Bikarhêner:Ghybu|Ghybu]] Hîn gelek tişt hene divê îzah bikin û fikrê we pirs bikim, feqat îzahkirin pir zor e, em dest bi bikaranînê bikin û dûre tiştên ku hûn naxwazin em dikarin biguherînîn, dibe? [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 13:11, 10 tebax 2026 (UTC)
::Dibe, piştî çêbû, em di praktîkê de bibînin ku çawa ye. -- [[Bikarhêner:Bikarhêner|Bikarhêner]] ([[Gotûbêja bikarhêner:Bikarhêner|gotûbêj]]) 18:05, 10 tebax 2026 (UTC)
= Javascript =
== [[Mediawiki:Gadget-citoid-helper.js]] ==
Ji bo bi citoidê kopîkirina malûmatên çavkaniyan amûreke wisa lazim e. Xisûsen ji ber ku bi çend amûrên din dikare were bikaranîn.
Feqat çend problem hene, şablonên me de kêmasiya parametreyan gelek in û xerîteyên citoidê hîn nehatine çêkirin. Wana sererast bikin dûre vê amûrê çêkin, piştre [[MediaWiki:Gadget-start.js|start.js]] û [[MediaWiki:Gadget-wikt.add-examples.js|add examples.js]] were rojanekirin.
- --[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 00:04, 19 tîrmeh 2026 (UTC)
:Merheba @[[Bikarhêner:Bikarhêner|Bikarhêner]], ez dibêjim karê Modul:quote zêde wext bistîne, bila em dest bi bikaranîna van amûran bikin dûre kêmasiyan em ê temam bikin înşela. Dikarî vana li cihên xwe yên rast kopî paste bikî?
# [[Special:PermanentLink/6291574|Bikarhêner:Wikihez/skrîpt/js/Gadget-citoid-helper.js]] --> [[Mediawiki:Gadget-citoid-helper.js]]
# Ya li jêr kopî bike qismê herî dawî ya AmûrênVeşartî li [[MediaWiki:Gadgets-definition]]:
## <code><nowiki>* citoid-helper[ResourceLoader|hidden|default|dependencies=mediawiki.util]|citoid-helper.js</nowiki></code>
--[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:58, 26 tîrmeh 2026 (UTC)
== [[MediaWiki:Gadget-start.js]] ==
Rojanekirin hewce ye. Min gelek tişt lê zêde kir lê ez niha test dikime. Piştre em bar bikin:
* [[Bikarhêner:Wikihez/Gadget-start.js]] --> [[MediaWiki:Gadget-start.js]]
* [[Bikarhêner:Wikihez/Gadget-start.css]] --> [[MediaWiki:Gadget-start.css]]
--[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 22:08, 17 tîrmeh 2026 (UTC)
:Min [[MediaWiki:Gadget-start/data.json|data.json]] çêkir ji bo ku bi hêsanî malûmatên heyî werin guhartin bêyî guhartina Javascriptê. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 19:49, 18 tîrmeh 2026 (UTC)
:Xeletiyên ku ji bîr nekim rast bikim:
:* Wextê min çavkanî "kitêb" hilbijart û bi destî tije kir xeletiyeke [https://ku.wiktionary.org/w/index.php?title=xezete&diff=prev&oldid=6265392 wisa] derket her kelîme hate lînkkirin.
:* <code>html("⠿")</code> ev ne lazim e.
:* textarea ji bo çavkaniyên jêgirtinan xaseten yên sernav hîn jî ne draggable e.
:* pêşdîtina zindî checkbox wextê tê rakirin, pêşdîtin winda nabe.
:* Butona mobîlê ya vekirina formê di moda tarî de belî nabe, tenê wekî qutiyeke tarî xuya dibe.
:* Metna hişyarkirinê di guhartina rûpelên heyî de lazim e baştir bikim.
:[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 23:51, 18 tîrmeh 2026 (UTC)
::Ev problem çêbûn, ez ê binêrim ka çi problemên din hene. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 14:15, 19 tîrmeh 2026 (UTC)
:::Çêke: Ji bo qismê çavkaniyê yek dikare API call û Kategorî:Çavkanî bi kar bîne ji bo ku şablon zêde bikî ji yên heyî. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 21:21, 19 tîrmeh 2026 (UTC)
::::Ev jî çêbû, min beşa çavkanî jî çêkir. Eger xeletî dernekeve û problema valahiya piştî etîketê ji bîr nekim, piştî rojanekirina amûrên linkify, û citoid em dikarin bar bikin. Ez ê ti tiştê nû îlawe nekim, zêde dirêj bû. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:14, 21 tîrmeh 2026 (UTC)
:::::Merheba @[[Bikarhêner:Bikarhêner|Bikarhêner]]. Dikarî wana bar bikî?
:::::* [[Bikarhêner:Wikihez/Gadget-start.js]] --> [[MediaWiki:Gadget-start.js]]
:::::* [[Bikarhêner:Wikihez/Gadget-start.css]] --> [[MediaWiki:Gadget-start.css]]
:::::* [[MediaWiki:Gadgets-definition]] wisa rojane bike:
:::::* start[ResourceLoader|default|package|dependencies=mediawiki.util,ext.gadget.StorageUtils,ext.gadget.citoid-helper]|start.js|start.css|start.js/data.json
:::::[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 09:39, 5 tebax 2026 (UTC)
{{şirove}} Dewama ''[[Special:PermanentLink/6333688|Gotûbêja bikarhêner:Rewiye tine#WF:Nû]]'' bila gotûbêja wî em spam nekin. :D
{{r|Ghybu}} dikarî [[Special:PermanentLink/6333689|vê htmlê]] binêrî claude rast fêm kiriye yan na? Daxîne û wek html qeyd bike. --[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 18:43, 14 tebax 2026 (UTC)
:Min seh wîkîyên din jî kir, li wîkiya fransî tiştekî wekî daxwaza min çêkirine (tiştên ku ne hewce ne wekî "tab" çêkirine an jî hatine vêşartin): [//fr.wiktionary.org/w/index.php?title=fdsdfdsf&action=edit&redlink=1]. Formata me yê berî jî bi vê lojîkê hatibû çêkirin, wekî de.wiktionary ([//de.wiktionary.org/w/index.php?title=sdfdsfsdfs&action=edit&preload=Vorlage:Formatvorlage_(Substantiv_vereinfacht)]) [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 19:01, 14 tebax 2026 (UTC)
::PS: Dîsa jî Claude min rind fêm kiriye :)) Feqet min got ku beşên Mane", "Bilêvkirin" û "Beşên din" cem hev (wekî "tab") ". Û dema ku tu terî di nav "Besên din" Hevmane, Jê, ... li wira werin dayîn. Wêne/Resim û Nimûne jî di nav beşa ("tab") "Mane" [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 19:17, 14 tebax 2026 (UTC)
::Erê ya fr.wikt min jî dîtibû jixwe fikrê tab min ji wan girtibû :D (feqat min li cem wan tenê tab-a maneyê dît yên din nedît çawa tê vekirin nizanim) Berê hemû beş piştî maneyê bibûn, dûre min sê Tab çêkir, Bingehîn+Lînkkirin+Bikaranîn. Niha lazim e Tabeke din çêkim. Ya ku claude çêkiriye bnr. [[Special:PermanentLink/6333698#L-7]] ne baş e bnr. [[Special:PermanentLink/6333703|qiyaskirinê li ser vê htmlê]] Êdî ez Claude abuse dikime ji ber ku Pro ye :D [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 19:26, 14 tebax 2026 (UTC)
:::Claude dibêje:
:::Good clarification — that's a real simplification, not just a relabel. Updated STEP_GROUPS from 5 tabs down to 3:
:::Mane — the definitions themselves, plus Wêne (image), now grouped in with it instead of sitting in a separate misc tab. Nimûne needed no change since it was already rendering inside each Mane sense block, not as its own step.
:::Bilêvkirin — unchanged, still just pronunciation.
:::Beşên din — everything else in one flat bucket: hevmane, jê, têkildar, herwiha binêre, formên alternatîv, dijmane, jornav, jêrnav, notên bikaranînê, bi alfabeyên din, dûnde, çavkanî, bêhtir bixwîne, tewandin, etîmolojî, zaravayên din, werger, and bnr-h — instead of being split across the old Bingehîn/Lînkkirin/Bikaranîn/Din tabs.
:::No DOM-order changes were needed this time — the fix from the blank-tab bug looks up the tab bar's position dynamically now, so it didn't matter that I regrouped which steps go where. Same two files, saved to your Wiki folder — worth another pass through all three tabs once you've pasted this in, same as last time. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 19:34, 14 tebax 2026 (UTC)
::::Mînak:
Ziman
---------------------------------------------
Cureyê rêzimanî (Navdêr)
Navdêr (hilbijêre) ┆ Cîns (hilbijêre) ┆ Jimar (hilbijêre)
- lêker -mê -yekjimar
- rengdêr -nêr -pirjimar
- ... -... -...
---------------------------------------------
Mane || Bilêvkirin || Beşên din
hilbijêre:
- mane - IPA - Hevmane
- nimûne - kîte - Dijmane
- wêne
Dema ku tu "Cureyê rêzimanî" dikî "Lêker" :
Cureyê rêzimanî (Lêker)
Lêker (hilbijêre) ┆ Cure (hilbijêre)
- navdêr -rehê niha
- rengdêr -rehê borî
- ... -...
---------------------------------------------
┆ : select/option ("tab" nîne, tê dîtin)<br>
|| : "tab"
-- [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 19:45, 14 tebax 2026 (UTC)
'''Sê-stûnî ("┆" = ne tab), li gorî Cureyê rêzimanî:'''
{| class="wikitable"
! Cureyê rêzimanî !! Stûna 2 !! Stûna 3 !! Têbînî
|-
| Navdêr / Serenav
| Cîns (hilbijêre ▾: mê / nêr / ... — tenê heke ziman zayendê rêzimanî hebe)
| '''Jimar''' (?) — pirs li jêr
| Qadên "Forma mê/nêr/pirjimar/yekjimar" niha jî li vir hene — ma ev di "Jimar"-ê de tên tevlihev kirin, an cuda dimînin?
|-
| Rengdêr
| (heman m/n/p/y forman ku Navdêr distîne)
| Sûperlatîv (sûp) / Komparatîv (komp)
| Ne li ser her du nîgaran hatiye behs kirin — ma sê-stûnî li vir jî tê bikaranîn?
|-
| Lêker
| '''Cure''' = Cureyê lêkerê (hilbijêre ▾: gerguhêz / negerguhêz / xwerû-... / pêkhatî-... / hevedudanî-... / biwêjî-... — 10 vebijêrk)
| Di heman stûnê de: Rehê dema niha / Rehê dema borî / Rehê dema bilanî (her sê qadên nivîsandinê ne, ne hilbijêrk in)
| Ma "Cure" her sê rehan di xwe de digire wek yek stûn, an her yek stûneke cuda ye?
|-
| Tîp (herf/sembol)
| Girdêk (gir) / Hûrek (hûr)
| —
| Ne behs kiriye
|-
| Her cureyek, li gorî zimên
| Transliterasyon (tr) / Transkrîpsiyon (ts)
| —
| Bi zimên ve girêdayî ye, ne bi cureyê rêzimanî ve
|-
| Her cureyek, tenê ziman=japonî
| Hanja / Translit. hanja
| —
| Ne bi cureyê rêzimanî ve girêdayî ye
|-
| Her cureyek
| '''Tercîhên pêşketî''' (kolapsî): form, formaalt, nekatcure, nekatcins, nekatçendterm, serlînkneke, nekatpalîndrom, neformtr
| —
| Vebijarkî, ji bo hemû cureyan
|}
'''Tabên jêrîn — Mane ‖ Bilêvkirin ‖ Beşên din ("||" = tab):'''
{| class="wikitable"
! Mane !! Bilêvkirin !! Beşên din (hemû 18 hêman)
|-
| mane, nimûne, wêne
| şablonên bilêvkirinê (mînak: IPA, kîte)
| tewandin, etîmolojî, bi zaravayên din, werger, jê, têkildar, herwiha binêre, formên alternatîv, hevmane, dijmane, jornav, jêrnav, notên bikaranînê, bi alfabeyên din, dûnde, çavkanî, bêhtir bixwîne, bnr-h
|}
'''Pirsên vekirî:'''
# "Jimar" (yekjimar/pirjimar) — qadeke ku nîşan dide têketî bi xwe yekjimar e an pirjimar e. Ev cuda ye ji "Forma yekjimar (y)"/"Forma pirjimar (p)" ya heyî (ku forma DÎN a kelîmeyê tomar dike). Herdu bimînin, an werin yek kirin?
# Ma sê-stûnî tenê ji bo Navdêr/Lêker e, an ji bo Rengdêr/Tîp jî heman mantiq derbas dibe?
# Di "Beşên din" de: dixwazî pêşî navnîşek/hilbijartinek nîşan bide (17 hêmanên din jî tê de), û qad tenê piştî hilbijartinê xuya bibin?
:Tu dikarî start.js ji Tercîh/ Amûran rakî û bi test.js li Amûran herî taliyê ye biceribînî. Claude ya li jor hazir kir, Jimar ez dikarim îzah bikim. Feqat bi min di tab-a maneyê de lazim e Bi zaravayên din (heta wek werger her car bila li rûpelan were zêdekirin) û werger jî hebe.--[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 20:18, 14 tebax 2026 (UTC)
:;Navdêr: Tenê "cîns" û "jimar" bes e. "Forma mê", "Forma nêr", ... nayê fêm kirin. Bi min wekî "Tercîhên pêşketî" bi navkî din veşartî çêke.
:;Lêker: "Cureyê lêkerê" nayê fêm kirin, bi min pêşta "geguhez/negerguhêz" were hilbijartin, paşê jî form "hevdudanî/pêkatî/..." ji ber ku her kes vana nizanî... Dîsa jî tu dizanî.
:Bi min beşên "Hevmane" û dijmane jî bike de nav beşa Mane ("tab") ji ber ku pirr tên xwestin.
:Şûnda Wêne jî Nimûne/jêgirtin...
:Herwiha hemû bi rengê şîn hatine çêkirin, nizanim beşên din (===) bi rengê gewr an reş çito dibe? [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 21:35, 14 tebax 2026 (UTC)
::Nimûne/jêgirtin, hevmane, Dijmane li binê her maneyê hene. ji ber ku wana bi maneyê ve girêdayî ne lazim e wisa bimîne feqat belkî şiklekî baştir bibînin. Hînbûna bikaranîna formeke nû bi qasî hînbûna koda wîkiyê zor e heqîqeten... [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 21:45, 14 tebax 2026 (UTC)
:::Min şaş fêm meke feqet te amûrek ji bo Wikihez çêkiriye :) Tu dixwazî ku hemû tiştên ku te çêkiriye tevlî vê Gadgetê bikî û bikarhênerên din jî bi kar bînin... Tu jî dizanî ku kesên ku tên vira çito peyv çêdikin: Ziman > Mane > Mînak > Hevmane > Dijmane ! Du Gadget çêke yek ji bo bikarhênerên ku hertim li vira ne, yekeke din jî ji bo bikarhênerên din (yên ku pirr nên vira).
:::Herwiha kesên ku hertim li vira ne bi Gadgetê gotar çênekin, ''copy/paste'' dikin. [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 22:12, 14 tebax 2026 (UTC)
::::Min xwest her tişt li ser rêza xwe be ji bo ku hîn bibin çi diçe kû derê feqat bi vî şiklî jî zêde dirêj û tevlihev dibe. Loma ez ê wekî tu dibêjî bikim her tiştê din bila collapsed pêşketî be. Ê ku dixwaze pê lê ke û binêre çi dikare were zêdekirin. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 22:26, 14 tebax 2026 (UTC)
:::::Niha baştir tê fêm kirin {{=)}} [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 23:01, 14 tebax 2026 (UTC)
::::::Min ji Opus 5 û Design Tool îstifade kiriye hema bêje milyonek token çûn :D pêşî dîzayn kir dûre dest pê kir wekî dîna bişuxile. Pereyê xwe %100 heq dike welleh :D feqat moda tarî ji bîr kiriye :D [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 23:12, 14 tebax 2026 (UTC)
:::::::Spas! Etîmolojî jî wekî "Bilêvkirin", di beşekê din de cem wê, were çêkirin (Mane|Etîmolojî|Bilêvkirin|Beşên din)? [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 23:20, 14 tebax 2026 (UTC)
::::::::(Mane>Tewandin>Werger|Etîmolojî>Dûnde>|Bilêvkirin(formatek çawa?)>Resim|Eleqedar>Jê>Têkildar>Herwiha binêre|Beşên din)? [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 23:29, 14 tebax 2026 (UTC)
:::::::::Nizanim, biceribîne... [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 23:43, 14 tebax 2026 (UTC)
::::::::::"Li şablonekê bigere" ser Maneyê hatiye nivîsandin, nizanim rind tê fêm kirin an na? Min paşê fêm nekir :)) Naskirina Wîkîferhengê hewce ye... Li bin were nivîsandin û "notek" hewce ye. [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 00:02, 15 tebax 2026 (UTC)
== [[Mediawiki:Gadget-QQ.js]] ==
Ev amûr di şikle Minerva de. Her daîm vê xeletiyê dide:
<syntaxhighlight lang="js">
TypeError: Cannot read properties of null (reading 'addEventListener') at css () at runScript () at Array.<anonymous> () at flushCssBuffer ()
</syntaxhighlight> [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 19:29, 18 tîrmeh 2026 (UTC)
:* [[Bikarhêner:Wikihez/skrîpt/js/Gadget-QQ.js]] --> [[Mediawiki:Gadget-QQ.js]]
:* [[Bikarhêner:Wikihez/Gadget-QQ.css]] --> [[Mediawiki:Gadget-QQ.css]]
:Ez dibêjim çêbû lê ka çend roj biceribînim. Tiştên ku hatin sererastkirin:
:# Google Books API Key dikarî zêde bikî, dixe cookies û di gerokê de dimîne. Berê bê API Key dixebitiya lê êdî mecbûr e ku API Key-a te hebe, bidestxistina wê ne zêde zor e lê dîsa jî tevlihev e.
:# Êdî di mobîlê de dixebite, heta di mobîlê de xweştir xuya dike.
:# Moda tarî
:# OOUI dewsa jquery.ui
:# Li qutiyê çi dixwazî zêde bikî, dikare li gorî îsm, sifet, fiîl bitewîne. Lê ji bo fiîl tenê dikare çend heb inflection bîne.
:# Butona paqij bike lê zêde kir.
:# Çend paqijiyên jêgirtinên Google Kitêbê niha hene.
:[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 23:38, 18 tîrmeh 2026 (UTC)
::Tewandina fiîlan û xeletiya modulê lazim e were rastkirin. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 14:40, 21 tîrmeh 2026 (UTC)
== [[MediaWiki:Gadget-wikt.add-examples.js]] ==
Min ev amûr hinek rojane kir feqat çend problem hene berî ku bar bikin.
Tiştên ku min guhart:
# Êdî li sayfeyên bi {{ş|maneid}} jî dixebite,
# Cihê di wîkîtekstê de yê ku jêgirtin were îlawekirin baştir bû,
# [[Mediawiki:Gadget-citoid-helper.js|citoid helper]] zêde kir ji bo ku bi hêsanî çavkanî bi riya doi, isbn an urlyê werin tijîkirin.
* [[Bikarhêner:Wikihez/Gadget-wikt.add-examples.css]] --> [[MediaWiki:Gadget-wikt.add-examples.css]]
* [[Bikarhêner:Wikihez/Gadget-wikt.add-examples.js]] --> [[MediaWiki:Gadget-wikt.add-examples.js]]
- --[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 00:50, 19 tîrmeh 2026 (UTC)
:Min "wikt." qismên cache kirinê ya wîkiya fransî bi [[MediaWiki:Gadget-StorageUtils.js]] guhartiye. loma ji bîr nekin wê amûrê li [[MediaWiki:Gadgets-definition]] zêde bikin. û navê amûrê jî biguhêrînin. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 09:15, 23 tîrmeh 2026 (UTC)
::Berê li ser WF:ceribandin dixebitî. niha naxebite. Divê were rastkirin. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 22:10, 7 tebax 2026 (UTC)
== Gadget-translation editor ==
* [[MediaWiki:Gadget-translation editor.js]]: divê formata en.wîktê were bikaranîn ji ber ku me gelek tercime ji en.wîktê kopî kir û ev js hîn nikare formata wekî li jêr bi kar bîne.
<syntaxhighlight lang="wikitext">
* {{Z|sh}}:
*: Kirîlî:
*: Latînî
</syntaxhighlight>
—[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:17, 16 tîrmeh 2026 (UTC)
== [[Mediawiki:Gadget-linkify.js]] ==
* ''rûpeleke'' wekî<syntaxhighlight lang="wikitext">[[rûpeleke]]</syntaxhighlight> lînk dike, bi regexê belkî dikare wisa bike <syntaxhighlight lang="wikitext">[[rûpel]]eke</syntaxhighlight>
—[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:17, 16 tîrmeh 2026 (UTC)
* Amûreke din wekî [[User:Wikihez/Gadget-linkify.js|linkify]] lazim e ku herfên mezin biçûk bike ji bo kurmancî.—[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:17, 16 tîrmeh 2026 (UTC)
:{{r|Bikarhêner}} Merheba bira, dikarî viya jî bar bikî?:
* [[Special:PermanentLink/6291974|linkify]] --> [[Mediawiki:Gadget-linkify.js]]
Spas--[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 11:42, 29 tîrmeh 2026 (UTC)
:Dûre [https://ku.wiktionary.org/wiki/MediaWiki:Gadget-start.js#L-283 li vir] wiktviLinkify bike kuLinkify xêra xwe [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 11:51, 29 tîrmeh 2026 (UTC)
::Min ji bîr kir lê zêde bikim niha nikare "Dİ" bike "di", xeletiyeke berbelav a di nivîsên kurdî de, herfên din ên wekî ll yan rr jî hewce ne werin zêdekirin. Dûre em zêde bikin. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 21:42, 29 tîrmeh 2026 (UTC)
:::Min nû ferq kir, sayfeyên ku hîn nehatine çêkirin wîkîlînk nake. Problemeke mezin e divê were rastkirin. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 18:15, 30 tîrmeh 2026 (UTC)
::::Na, lînk dike, tiştekî din heye... [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 10:49, 31 tîrmeh 2026 (UTC)
== Amûra manayê ==
Amûreke din ji bo nivîsina maneyê wekî Nimûne zêde bike lazim e [https://ku.wiktionary.org/w/index.php?title=Bikarh%C3%AAner:Wikihez/test.js&oldid=6276876 js] [https://ku.wiktionary.org/w/index.php?title=%C5%9Eablon:ceribandin2&oldid=6265629 şablon] [https://ku.wiktionary.org/w/index.php?title=Bikarh%C3%AAner:Wikihez/common.css&oldid=6265642 css] --[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 09:12, 23 tîrmeh 2026 (UTC)
== [[MediaWiki:Gadget-jeder.js]] ==
@[[Bikarhêner:Ghybu|Ghybu]] Çavkaniyên jêderê di moda pêşdîtinê de jêderê vedişêre, ew jî min gelek eciz dike wextê çavkanî zêde dikim. Min ji Claude pirsî û kodan nîşanî wê da, wisa cewab da:
Yes — and this file actually explains the whole thing precisely, better than my earlier guess about extract-stripping.
What's happening: the CSS rule
<syntaxhighlight lang="css">
.jeder{
display:none;
}
</syntaxhighlight>
hides every citation by default, *unconditionally*. The only thing that ever makes it visible again is the gadget's JS: it finds each `.jeder`, builds the short "`— (year, author, +)`" summary from the `.j-pewist` fields, and either reveals the short version or — for citations with no `.j-pewist` fields — explicitly sets `display:inline` on the original.
So visibility of citations depends entirely on this JS running. In the normal article view (Image 1) it runs, so you see the collapsed "`(1918, E. Rehmî Ji Mala Hekariyan, Amadekar: M. E. Bozarslan, +)`" form. In whatever generated Image 2 — a hover-preview/extract/API render — gadget JS doesn't execute, so nothing ever removes the `display:none`, and the citation vanishes completely rather than degrading to "still visible, just not collapsed."
<b>The fix:</b> flip the default so the *un-collapsed* state is the safe fallback, and let JS do the hiding only after it successfully builds the short version. That way, any context without JS shows the full citation instead of nothing.
CSS — remove the blanket hide:
<syntaxhighlight lang="css">
.jeder {
/* intentionally no display:none here — see Gadget-... .js */
}
</syntaxhighlight>
JS — do the hiding from script, after the short form exists:
{{veşêre-ser}}
<syntaxhighlight lang="js">
// Ji bo şablonên [[Şablon:jêder]] hatiye nivîsandin.
// Parametreyên ku di navbera "<span class="j-pewist">...</span>" an "{{j-pêwîst|...}}" de ne venaşêre.
$(function() {
function nivisaKurtTevliBike(sund, nivisKurt) {
var zede = $('<a>+</a>')
.addClass('click')
.attr('href', '#')
.attr('title', 'zêdetir')
.css('font-weight', 'bold');
var kurt = $(' <a>↩</a>')
.addClass('click-kurt')
.attr('href', '#')
.attr('title', 'veşêre')
.css('font-weight', 'bold');
$('<span>' + nivisKurt + '</span>')
.append(zede).append(')')
.addClass('jeder-kurt')
.css('font-size', '0.85em')
.insertAfter(sund);
sund.append(' ').append(kurt);
// Only hide the full citation once the short summary actually exists.
// If this script never runs (no-JS clients, hover-preview extracts,
// action=render, etc.), the full citation stays visible instead of
// silently disappearing.
sund.css('display', 'none');
}
function vesere() {
$('.jeder').each(function() {
var elmTab = $(this).find('.j-pewist').clone();
if (elmTab.length) {
var elm = '';
for (var i = elmTab.length - 1; i >= 0; i--) {
elm = elmTab.eq(i).html() + ', ' + elm;
}
var nivisKurt = ' — (' + elm;
nivisaKurtTevliBike($(this), nivisKurt);
}
// else: no j-pewist fields to shorten — leave the full citation
// as it already renders (visible), nothing to do.
});
}
vesere();
$(".click").click(function(e) {
e.preventDefault();
$(this).parent('.jeder-kurt').css('display', 'none');
$(this).parent('.jeder-kurt').prev().css('display', 'inline');
});
$(".click-kurt").click(function(e) {
e.preventDefault();
$(this).parent('.jeder').css('display', 'none');
$(this).parent('.jeder').next().css('display', 'inline');
});
});
</syntaxhighlight>
Net effect:
- JS-enabled readers (normal article view): identical experience to today — collapsed short form with `+`/`↩` toggle.
- No-JS contexts (previews, extracts, screen readers before JS loads, print, etc.): full citation is shown instead of nothing — a real regression fix rather than a cosmetic one.
One caveat worth being upfront about: this fixes it *if* the preview context renders the gadget's HTML/CSS but doesn't execute gadget JS (which is the far more common case, and what this code strongly suggests is happening). If Image 2 instead comes from a pipeline that strips the `.jeder`/`.jegirtin-text` elements out of the HTML entirely before this CSS/JS even gets a chance to apply, no on-wiki CSS/JS change can help — that'd need the extract-generation config changed instead. Given what this gadget file shows, though, I'd bet on the CSS-hide explanation.
{{veşêre-bin}}
Em dûre biceribînin eger xeletî tinebe, vî tiştî jî rast bikin. --[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 20:00, 23 tîrmeh 2026 (UTC)
:Ez APIya MediaWiki rind nizanim belkî Claude dizane:) Em nikarin bibêjin dema ku moda "''action=edit''" e fonksiyona <code>function vesere()</code> bi kar meyîne. [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 15:57, 24 tîrmeh 2026 (UTC)
::Na, di moda "edît"-ê de <code>var elmTab = null</code>... [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 16:13, 24 tîrmeh 2026 (UTC)
?:
<syntaxhighlight lang="js">
if (
mw.config.get('wgAction') === 'edit' ||
mw.config.get('wgAction') === 'submit'
){
var elmTab = [];
} else {
var elmTab = $(this).find('.j-pewist').clone();
}
</syntaxhighlight>
--[[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 16:31, 24 tîrmeh 2026 (UTC)
:Ez jî nizanim Claude çiqas ji mediawiki fêm dike lê heta niha ti tişt nîne ku min jê pirs kir û nikaribû çêke, bila wekî reklam nebe feqat Claude mikemmel e, dibêjim "li vir çima xeletiyeke wisa derdikeve" di dosyeya 2000 rêzî de diçe tiştê xelet tenê rast dike tiştekî din naguherîne. Chatgpt û aistudio qet wisa nakin, eynî dosyeyê deh cara dinivîsin, deh netîceyên cuda derdikevin :D
:Em dikarin vê amûrê wextê edit û submitê neaktîv bikin wekî <syntaxhighlight lang="js">if (!(action === "edit" || action === "submit")) {
:return;</syntaxhighlight> lê wê demê display:none wê çibe nizanim. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 18:23, 24 tîrmeh 2026 (UTC)
::display:none ne hewce ye ma jixwe di nav kodê [https://ku.wiktionary.org/w/index.php?title=MediaWiki:Gadget-jeder.js&oldid=6069025#L-49 L-49] de inline/none heye? [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 18:53, 24 tîrmeh 2026 (UTC)
:Min bi vî şiklî [https://ku.wiktionary.org/w/index.php?title=Bikarh%C3%AAner:Wikihez/vector-2022.js&diff=prev&oldid=6290816#L-28] ceriband feqat nexebitî. "display:none" di pêşdîtinê de dixebite feqat js naşixule. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 14:43, 25 tîrmeh 2026 (UTC)
::Kodên JSê pir hez nakim (pêşta hukurina APIya MWyê hewce bû) dîsa jî ez ê seh bikim :) [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 16:49, 27 tîrmeh 2026 (UTC)
:::Ez niha bi vî şiklî [https://ku.wiktionary.org/w/index.php?title=Bikarh%C3%AAner:Wikihez/test.js&oldid=6290820] [https://ku.wiktionary.org/w/index.php?title=Bikarh%C3%AAner:Wikihez/common.css&oldid=6290821#L-8] bi kar tînim ti problem nîne. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 17:09, 27 tîrmeh 2026 (UTC)
== [[MediaWiki:Gadget-PagePreviews.js]] ==
Ez dibêjim em vê amûrê jî çêkin [[:en:MediaWiki:Gadget-PagePreviews.js]] --[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 10:56, 3 tebax 2026 (UTC)
= Moda tarî =
== [[Şablon:wîkîpediya]] ==
Rengê tarî de xirab e.--[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 19:36, 4 tebax 2026 (UTC)
= Bot =
Karên ku bi botê werin çêkirin ji kerema xwe li vir binivîsin.
== Kategorî:Biwêj ==
[[:Kategorî:Biwêj]] divê were paqijkirin, lîsteya madeyên {{ş|biwêj}} çêke, yên ku tê de bûn, kirin, man hene filtre bike yên din bi destî tê çêkirin.—[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:17, 16 tîrmeh 2026 (UTC)
== Jêgirtin ==
Xistina jêgirtinên beşa [https://ku.wiktionary.org/w/index.php?search=insource%3A%2F%3D+*Ji+%5BWw%5D%C3%AAjey%C3%AA+*%3D%2F&title=Taybet%3AL%C3%AAger%C3%AEn&profile=advanced&fulltext=1&ns0=1&searchToken=8rh0bmw8dccsi7aynl6zli8uf ji wêjeyê] li beşa maneyê. —[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:17, 16 tîrmeh 2026 (UTC)
== Bota Toolforgeê ==
Botekî Toolforgeê lazim e ji bo ku xeletiyên biçûk wekî şablonên bi navên îngilîzî werin kurdîkirin yan jî valahiya beşan rast bike û hwd.—[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:17, 16 tîrmeh 2026 (UTC)
:Min [[Bikarhêner:Wikihez/skrîpt/py/kuwiktkozmetik.py|paqijiyen kozmetîk]] hazir kir feqat hîn navên şablonan naguhêre. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 20:05, 4 tebax 2026 (UTC)
== Updatew ==
Bota [[Bikarhêner:Wikihez/skrîpt/py/updateW.py|updateW]] divê were rojanekirin. Yan jî yekî nû were çêkirin. Şablonên {{ş|W}} di beşa tercimeyan de sererast dike û zimanan rêz dike. Ya niha xeletiya navê zimanî dide.—[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:17, 16 tîrmeh 2026 (UTC)
== sihir --> sêhr ==
Tercimeyên ''[[sêhr]]'' hemû dibêje ''sihir'' loma bi botê lazim e kirin ''sêhr''. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 17:43, 18 tîrmeh 2026 (UTC)
:Sihirbaz --> sêhrbaz [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 18:07, 18 tîrmeh 2026 (UTC)
== Tercimeyên dîroknas ==
Li tercimeyên [[dîroknas]], hevmaneyên wê hewce ye were îlawekirin. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 18:44, 18 tîrmeh 2026 (UTC)
== Mewlûd ==
Sererastkirina jêgirtinên mewlûdê [https://ku.wiktionary.org/w/index.php?search=insource%3A%2Fw%5C%3AMela+His%C3%AAn%C3%AA+Batey%C3%AE%2F&title=Taybet%3AL%C3%AAger%C3%AEn&ns0=1&searchToken=8m0tguy3sqt7edr4sg0u8hedo] wekî [https://ku.wiktionary.org/w/index.php?title=dax%C3%AEdar&curid=284303&diff=6265851&oldid=6142285] [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 09:43, 20 tîrmeh 2026 (UTC)
5fcmz3nnwcpfb3ozl0uflw5bmsd6k7v
6333765
6333764
2026-08-15T00:09:46Z
Ghybu
1393
/* MediaWiki:Gadget-start.js */ Bersiv
6333765
wikitext
text/x-wiki
{{/ser}}
= Karên ferhengî =
== Mane ==
* [[:Kategorî:Madeyên bê beşa mane]]
** [[:Kategorî:Madeyên bê beşa mane bi kurmancî]]
Li ser van rûpelan ev made hene ku maneyan wan nehatine nivîsin û divê werin nivîsin. —[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:17, 16 tîrmeh 2026 (UTC)
== Etîmolojî ==
*[[:Kategorî:Daxwazên etîmolojiyê]]
**[[:Kategorî:Daxwazên etîmolojiyê bi kurmancî]]
Li ser van rûpelan ev made hene ku etîmolojiya wan hîn nehatine nivîsin. Ji bo alîkariyê binêre [[WF:Etîmolojî]] —[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:17, 16 tîrmeh 2026 (UTC)
== Cureyê rêzimanî ==
* [[:Kategorî:Gotarên bê kategoriya rêzimanî]]
* [[:Kategorî:Gotarên bê kategoriya rêzimanî bi kurmancî]]
Li ser van rûpelan ev made hene ku cureyên wan yên rêzimanî hîn nehatine nivîsin. Ji bo alîkariyê binêre [[Alîkarî:Cureyên peyvan]] —[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:17, 16 tîrmeh 2026 (UTC)
== Kontrol ==
* [[:Kategorî:Kontrol]]
** [[:Kategorî:Kontrola maneyê]]
Ev madde bi botê hatine çêkirin, yek bi yek divê werin kontrolkirin. —[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:17, 16 tîrmeh 2026 (UTC)
= Şablon =
== IPA ==
* {{ş|IPA}} divê [[Modul:IPA]] bi kar bîne. —[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:17, 16 tîrmeh 2026 (UTC)
== Deng ==
Kurdîkirina belgekirina {{ş|deng}} lazim e.--[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 00:06, 19 tîrmeh 2026 (UTC)
= Modul =
== Modul:form of/templates ==
* [[Modul:form of/templates]]: Divê ev modul were rojanekirin û xeletiyên berê wekî ([[hevalê]]) werin rastkirin. —[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:17, 16 tîrmeh 2026 (UTC)
*:Merheba @[[Bikarhêner:Ghybu|Ghybu]] Te gotibû di vê modulê de xeletî hene, jkx tu dikarî li vir binivîsî çi kêmasî hene, daku wextê rojane dikim ez ji bîr nekim? [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:16, 21 tîrmeh 2026 (UTC)
*::Silav. Nizanim ji bîra min çûye... Herwiha ji bo çêkirina formên navdêran zanînên cîns û tîpa dawî bes e:
*::* (-ê, mê) => çemandî, bangkirin
*::* (-ê, nêr) => îzafe
*::* (-ê, mê û nêr) => îzafe (nêr), bangkirin (mê), çemandî (mê)
*::* (-a) => îzafe (mê)
*::* (-ekî) => îzafe û çemandî (nêr, nebinavkirî)
*::* (-eke) = > îzafe (mê, nebinavkirî)
*::* ...
*:: <code>if find(mw.title.getCurrentTitle().subpageText, 'ekî$') then ... end</code>
*::<code><nowiki>{{ku-tewîn-navForm|<navdêr>|<zayend>}</nowiki></code>
*::Tablo û nivîs di yekcarî de tên çêkirin...
*::Feqet problem lêzêdekirina mînakan e. [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 17:34, 21 tîrmeh 2026 (UTC)
*:::Lêzêdekirina kîjan nimûneyan? Ev koda js ji bo çi ye? Qisûrê nenêre min fêm nekir :/ [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 18:13, 21 tîrmeh 2026 (UTC)
*::::Li vira ([[hevalê#Formeke navdêrê]]) di bin maneyên 1. û 2. mînak nayên tevlî kirin :) [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 18:18, 21 tîrmeh 2026 (UTC)
*:::::Ev tercîh e, ne mecbûrî ye, em dikarin [https://ku.wiktionary.org/w/index.php?title=heval%C3%AA&diff=prev&oldid=6276350 wisa] bikin. Wekî din? [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 18:29, 21 tîrmeh 2026 (UTC)
*::::::Min li jor tênê got ku tenê parametreyên "navdêr" û "zayend" hewce nee. Bi '''[//ku.wiktionary.org/w/index.php?title=heval%C3%AA&curid=969734&diff=6276353&oldid=6276350 vî]''' awayî jî tê çêkirin. Parametreyên din ne hewce ne. [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 18:38, 21 tîrmeh 2026 (UTC)
*:::::::Ji bo wê şabloneke din lazim e, bila ev şablon wekî îngilîzî bimîne em ji bo kurmancî yekî din çêkin. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 18:42, 21 tîrmeh 2026 (UTC)
*::::::::[https://ku.wiktionary.org/w/index.php?title=heval%C3%AA&oldid=6276885 wisa] çawa ye? Bi min nivîsîna nimûneyan zêde ne lazim e ji ber ku ti kes serê xwe pê naêşîne. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 09:46, 23 tîrmeh 2026 (UTC)
*:::::::::@[[Bikarhêner:Ghybu|Ghybu]] Vê şablonê bi kar bînin an na? Navê şablonê kê çi be? [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 19:07, 24 tîrmeh 2026 (UTC)
== Modul:columns ==
* [[Modul:columns]] were rojanekirin û {{ş|kol3}} bila lînka ''nîşan bide'' deyne beriya sernavê, kolê di qutiya rengî de bila nebe. —[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:17, 16 tîrmeh 2026 (UTC)
== Modul:etymon ==
* [[Modul:etymon kevn]]: Rojanekirin hewce ye. —[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:17, 16 tîrmeh 2026 (UTC)
== [[Modul:ziman/code to canonical name]] ==
Belgekirina skrîptê û js divê were rastkirin. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 09:31, 22 tîrmeh 2026 (UTC)
:* [[MediaWiki:UpdateLanguageNameAndCode.js]]
:[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 09:50, 22 tîrmeh 2026 (UTC)
::* [[Modul:ziman/print]]
::[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 09:52, 22 tîrmeh 2026 (UTC)
:::*[[Modul:ziman/şablon]]
:::[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 09:56, 22 tîrmeh 2026 (UTC)
::::* [[MediaWiki:Gadget-translation editor.js/ziman.json]]
::::[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 11:06, 22 tîrmeh 2026 (UTC)
== [[Modul:quote]] ==
Piştî ev modul hate hazirkirin, lazim e navên jegirtinan werin rastkirin û li hemûyan {{param|jêgirtin}} were zêdekirin. Bnr. [[Gotûbêja şablonê:Jêgirtin/Ehmedê Xanî/Mem û Zîn]] [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 22:27, 5 tebax 2026 (UTC)
::Ev modul hema bêje hazir e. Hûn li ser van madeyan çi difikirin:
# {{para|tarîx}} lazim e full date be eger na, lazim e {{para|sal}} were bikaranîn. Feqat "'''2021''' kanûna pêşîn 23" bi vî şiklî bi min ne problem e çnkî derdê en.wikt "attestation" e delîla herî pêşî jî sal e.
#: {{demo|sep=wisa xuya dibe<br>|<nowiki>{{jêder-kitêb/ceribandin|en
|tarîx=23 December 2021|nivîskar=Harry Hobbs; George Williams|sernav=Micronations and the Search for Sovereignty|url=https://www.cambridge.org/core/books/micronations-and-the-search-for-sovereignty/B0414A3A322695D9EE71E4CDDFDA06DE|weşanxane=Cambridge University Press|rûpel=155|isbn=978-1-009-15012-5|jêgirtin=jêgirtin.|t=-}}</nowiki>}}
#{{para|amadekar}}/{{para|edîtor}}/{{para|terciman}} bi şiklê edîtoriya, amadekariya, tercimekirina
#: {{demo|sep=dide<br>|<nowiki>{{jêder-kitêb/ceribandin|en
|sernav=Medical Surgical Nursing|serî=Juta's Manual of Nursing|cildê-seriyê=volume 4|edîtor=Sophie Mataniele Mogotlane; Joyce Mokoena; Motshedisi Eunice Chauke; Anne Young|sal=2005|weşanxane=Juta Academic|isbn=978-0702171840|rûpel=!12-29|jêgirtin=jêgirtin|t=-}}</nowiki>}}
--[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 13:09, 10 tebax 2026 (UTC)
:@[[Bikarhêner:Bikarhêner|Bikarhêner]] û @[[Bikarhêner:Ghybu|Ghybu]] Hîn gelek tişt hene divê îzah bikin û fikrê we pirs bikim, feqat îzahkirin pir zor e, em dest bi bikaranînê bikin û dûre tiştên ku hûn naxwazin em dikarin biguherînîn, dibe? [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 13:11, 10 tebax 2026 (UTC)
::Dibe, piştî çêbû, em di praktîkê de bibînin ku çawa ye. -- [[Bikarhêner:Bikarhêner|Bikarhêner]] ([[Gotûbêja bikarhêner:Bikarhêner|gotûbêj]]) 18:05, 10 tebax 2026 (UTC)
= Javascript =
== [[Mediawiki:Gadget-citoid-helper.js]] ==
Ji bo bi citoidê kopîkirina malûmatên çavkaniyan amûreke wisa lazim e. Xisûsen ji ber ku bi çend amûrên din dikare were bikaranîn.
Feqat çend problem hene, şablonên me de kêmasiya parametreyan gelek in û xerîteyên citoidê hîn nehatine çêkirin. Wana sererast bikin dûre vê amûrê çêkin, piştre [[MediaWiki:Gadget-start.js|start.js]] û [[MediaWiki:Gadget-wikt.add-examples.js|add examples.js]] were rojanekirin.
- --[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 00:04, 19 tîrmeh 2026 (UTC)
:Merheba @[[Bikarhêner:Bikarhêner|Bikarhêner]], ez dibêjim karê Modul:quote zêde wext bistîne, bila em dest bi bikaranîna van amûran bikin dûre kêmasiyan em ê temam bikin înşela. Dikarî vana li cihên xwe yên rast kopî paste bikî?
# [[Special:PermanentLink/6291574|Bikarhêner:Wikihez/skrîpt/js/Gadget-citoid-helper.js]] --> [[Mediawiki:Gadget-citoid-helper.js]]
# Ya li jêr kopî bike qismê herî dawî ya AmûrênVeşartî li [[MediaWiki:Gadgets-definition]]:
## <code><nowiki>* citoid-helper[ResourceLoader|hidden|default|dependencies=mediawiki.util]|citoid-helper.js</nowiki></code>
--[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:58, 26 tîrmeh 2026 (UTC)
== [[MediaWiki:Gadget-start.js]] ==
Rojanekirin hewce ye. Min gelek tişt lê zêde kir lê ez niha test dikime. Piştre em bar bikin:
* [[Bikarhêner:Wikihez/Gadget-start.js]] --> [[MediaWiki:Gadget-start.js]]
* [[Bikarhêner:Wikihez/Gadget-start.css]] --> [[MediaWiki:Gadget-start.css]]
--[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 22:08, 17 tîrmeh 2026 (UTC)
:Min [[MediaWiki:Gadget-start/data.json|data.json]] çêkir ji bo ku bi hêsanî malûmatên heyî werin guhartin bêyî guhartina Javascriptê. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 19:49, 18 tîrmeh 2026 (UTC)
:Xeletiyên ku ji bîr nekim rast bikim:
:* Wextê min çavkanî "kitêb" hilbijart û bi destî tije kir xeletiyeke [https://ku.wiktionary.org/w/index.php?title=xezete&diff=prev&oldid=6265392 wisa] derket her kelîme hate lînkkirin.
:* <code>html("⠿")</code> ev ne lazim e.
:* textarea ji bo çavkaniyên jêgirtinan xaseten yên sernav hîn jî ne draggable e.
:* pêşdîtina zindî checkbox wextê tê rakirin, pêşdîtin winda nabe.
:* Butona mobîlê ya vekirina formê di moda tarî de belî nabe, tenê wekî qutiyeke tarî xuya dibe.
:* Metna hişyarkirinê di guhartina rûpelên heyî de lazim e baştir bikim.
:[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 23:51, 18 tîrmeh 2026 (UTC)
::Ev problem çêbûn, ez ê binêrim ka çi problemên din hene. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 14:15, 19 tîrmeh 2026 (UTC)
:::Çêke: Ji bo qismê çavkaniyê yek dikare API call û Kategorî:Çavkanî bi kar bîne ji bo ku şablon zêde bikî ji yên heyî. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 21:21, 19 tîrmeh 2026 (UTC)
::::Ev jî çêbû, min beşa çavkanî jî çêkir. Eger xeletî dernekeve û problema valahiya piştî etîketê ji bîr nekim, piştî rojanekirina amûrên linkify, û citoid em dikarin bar bikin. Ez ê ti tiştê nû îlawe nekim, zêde dirêj bû. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:14, 21 tîrmeh 2026 (UTC)
:::::Merheba @[[Bikarhêner:Bikarhêner|Bikarhêner]]. Dikarî wana bar bikî?
:::::* [[Bikarhêner:Wikihez/Gadget-start.js]] --> [[MediaWiki:Gadget-start.js]]
:::::* [[Bikarhêner:Wikihez/Gadget-start.css]] --> [[MediaWiki:Gadget-start.css]]
:::::* [[MediaWiki:Gadgets-definition]] wisa rojane bike:
:::::* start[ResourceLoader|default|package|dependencies=mediawiki.util,ext.gadget.StorageUtils,ext.gadget.citoid-helper]|start.js|start.css|start.js/data.json
:::::[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 09:39, 5 tebax 2026 (UTC)
{{şirove}} Dewama ''[[Special:PermanentLink/6333688|Gotûbêja bikarhêner:Rewiye tine#WF:Nû]]'' bila gotûbêja wî em spam nekin. :D
{{r|Ghybu}} dikarî [[Special:PermanentLink/6333689|vê htmlê]] binêrî claude rast fêm kiriye yan na? Daxîne û wek html qeyd bike. --[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 18:43, 14 tebax 2026 (UTC)
:Min seh wîkîyên din jî kir, li wîkiya fransî tiştekî wekî daxwaza min çêkirine (tiştên ku ne hewce ne wekî "tab" çêkirine an jî hatine vêşartin): [//fr.wiktionary.org/w/index.php?title=fdsdfdsf&action=edit&redlink=1]. Formata me yê berî jî bi vê lojîkê hatibû çêkirin, wekî de.wiktionary ([//de.wiktionary.org/w/index.php?title=sdfdsfsdfs&action=edit&preload=Vorlage:Formatvorlage_(Substantiv_vereinfacht)]) [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 19:01, 14 tebax 2026 (UTC)
::PS: Dîsa jî Claude min rind fêm kiriye :)) Feqet min got ku beşên Mane", "Bilêvkirin" û "Beşên din" cem hev (wekî "tab") ". Û dema ku tu terî di nav "Besên din" Hevmane, Jê, ... li wira werin dayîn. Wêne/Resim û Nimûne jî di nav beşa ("tab") "Mane" [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 19:17, 14 tebax 2026 (UTC)
::Erê ya fr.wikt min jî dîtibû jixwe fikrê tab min ji wan girtibû :D (feqat min li cem wan tenê tab-a maneyê dît yên din nedît çawa tê vekirin nizanim) Berê hemû beş piştî maneyê bibûn, dûre min sê Tab çêkir, Bingehîn+Lînkkirin+Bikaranîn. Niha lazim e Tabeke din çêkim. Ya ku claude çêkiriye bnr. [[Special:PermanentLink/6333698#L-7]] ne baş e bnr. [[Special:PermanentLink/6333703|qiyaskirinê li ser vê htmlê]] Êdî ez Claude abuse dikime ji ber ku Pro ye :D [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 19:26, 14 tebax 2026 (UTC)
:::Claude dibêje:
:::Good clarification — that's a real simplification, not just a relabel. Updated STEP_GROUPS from 5 tabs down to 3:
:::Mane — the definitions themselves, plus Wêne (image), now grouped in with it instead of sitting in a separate misc tab. Nimûne needed no change since it was already rendering inside each Mane sense block, not as its own step.
:::Bilêvkirin — unchanged, still just pronunciation.
:::Beşên din — everything else in one flat bucket: hevmane, jê, têkildar, herwiha binêre, formên alternatîv, dijmane, jornav, jêrnav, notên bikaranînê, bi alfabeyên din, dûnde, çavkanî, bêhtir bixwîne, tewandin, etîmolojî, zaravayên din, werger, and bnr-h — instead of being split across the old Bingehîn/Lînkkirin/Bikaranîn/Din tabs.
:::No DOM-order changes were needed this time — the fix from the blank-tab bug looks up the tab bar's position dynamically now, so it didn't matter that I regrouped which steps go where. Same two files, saved to your Wiki folder — worth another pass through all three tabs once you've pasted this in, same as last time. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 19:34, 14 tebax 2026 (UTC)
::::Mînak:
Ziman
---------------------------------------------
Cureyê rêzimanî (Navdêr)
Navdêr (hilbijêre) ┆ Cîns (hilbijêre) ┆ Jimar (hilbijêre)
- lêker -mê -yekjimar
- rengdêr -nêr -pirjimar
- ... -... -...
---------------------------------------------
Mane || Bilêvkirin || Beşên din
hilbijêre:
- mane - IPA - Hevmane
- nimûne - kîte - Dijmane
- wêne
Dema ku tu "Cureyê rêzimanî" dikî "Lêker" :
Cureyê rêzimanî (Lêker)
Lêker (hilbijêre) ┆ Cure (hilbijêre)
- navdêr -rehê niha
- rengdêr -rehê borî
- ... -...
---------------------------------------------
┆ : select/option ("tab" nîne, tê dîtin)<br>
|| : "tab"
-- [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 19:45, 14 tebax 2026 (UTC)
'''Sê-stûnî ("┆" = ne tab), li gorî Cureyê rêzimanî:'''
{| class="wikitable"
! Cureyê rêzimanî !! Stûna 2 !! Stûna 3 !! Têbînî
|-
| Navdêr / Serenav
| Cîns (hilbijêre ▾: mê / nêr / ... — tenê heke ziman zayendê rêzimanî hebe)
| '''Jimar''' (?) — pirs li jêr
| Qadên "Forma mê/nêr/pirjimar/yekjimar" niha jî li vir hene — ma ev di "Jimar"-ê de tên tevlihev kirin, an cuda dimînin?
|-
| Rengdêr
| (heman m/n/p/y forman ku Navdêr distîne)
| Sûperlatîv (sûp) / Komparatîv (komp)
| Ne li ser her du nîgaran hatiye behs kirin — ma sê-stûnî li vir jî tê bikaranîn?
|-
| Lêker
| '''Cure''' = Cureyê lêkerê (hilbijêre ▾: gerguhêz / negerguhêz / xwerû-... / pêkhatî-... / hevedudanî-... / biwêjî-... — 10 vebijêrk)
| Di heman stûnê de: Rehê dema niha / Rehê dema borî / Rehê dema bilanî (her sê qadên nivîsandinê ne, ne hilbijêrk in)
| Ma "Cure" her sê rehan di xwe de digire wek yek stûn, an her yek stûneke cuda ye?
|-
| Tîp (herf/sembol)
| Girdêk (gir) / Hûrek (hûr)
| —
| Ne behs kiriye
|-
| Her cureyek, li gorî zimên
| Transliterasyon (tr) / Transkrîpsiyon (ts)
| —
| Bi zimên ve girêdayî ye, ne bi cureyê rêzimanî ve
|-
| Her cureyek, tenê ziman=japonî
| Hanja / Translit. hanja
| —
| Ne bi cureyê rêzimanî ve girêdayî ye
|-
| Her cureyek
| '''Tercîhên pêşketî''' (kolapsî): form, formaalt, nekatcure, nekatcins, nekatçendterm, serlînkneke, nekatpalîndrom, neformtr
| —
| Vebijarkî, ji bo hemû cureyan
|}
'''Tabên jêrîn — Mane ‖ Bilêvkirin ‖ Beşên din ("||" = tab):'''
{| class="wikitable"
! Mane !! Bilêvkirin !! Beşên din (hemû 18 hêman)
|-
| mane, nimûne, wêne
| şablonên bilêvkirinê (mînak: IPA, kîte)
| tewandin, etîmolojî, bi zaravayên din, werger, jê, têkildar, herwiha binêre, formên alternatîv, hevmane, dijmane, jornav, jêrnav, notên bikaranînê, bi alfabeyên din, dûnde, çavkanî, bêhtir bixwîne, bnr-h
|}
'''Pirsên vekirî:'''
# "Jimar" (yekjimar/pirjimar) — qadeke ku nîşan dide têketî bi xwe yekjimar e an pirjimar e. Ev cuda ye ji "Forma yekjimar (y)"/"Forma pirjimar (p)" ya heyî (ku forma DÎN a kelîmeyê tomar dike). Herdu bimînin, an werin yek kirin?
# Ma sê-stûnî tenê ji bo Navdêr/Lêker e, an ji bo Rengdêr/Tîp jî heman mantiq derbas dibe?
# Di "Beşên din" de: dixwazî pêşî navnîşek/hilbijartinek nîşan bide (17 hêmanên din jî tê de), û qad tenê piştî hilbijartinê xuya bibin?
:Tu dikarî start.js ji Tercîh/ Amûran rakî û bi test.js li Amûran herî taliyê ye biceribînî. Claude ya li jor hazir kir, Jimar ez dikarim îzah bikim. Feqat bi min di tab-a maneyê de lazim e Bi zaravayên din (heta wek werger her car bila li rûpelan were zêdekirin) û werger jî hebe.--[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 20:18, 14 tebax 2026 (UTC)
:;Navdêr: Tenê "cîns" û "jimar" bes e. "Forma mê", "Forma nêr", ... nayê fêm kirin. Bi min wekî "Tercîhên pêşketî" bi navkî din veşartî çêke.
:;Lêker: "Cureyê lêkerê" nayê fêm kirin, bi min pêşta "geguhez/negerguhêz" were hilbijartin, paşê jî form "hevdudanî/pêkatî/..." ji ber ku her kes vana nizanî... Dîsa jî tu dizanî.
:Bi min beşên "Hevmane" û dijmane jî bike de nav beşa Mane ("tab") ji ber ku pirr tên xwestin.
:Şûnda Wêne jî Nimûne/jêgirtin...
:Herwiha hemû bi rengê şîn hatine çêkirin, nizanim beşên din (===) bi rengê gewr an reş çito dibe? [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 21:35, 14 tebax 2026 (UTC)
::Nimûne/jêgirtin, hevmane, Dijmane li binê her maneyê hene. ji ber ku wana bi maneyê ve girêdayî ne lazim e wisa bimîne feqat belkî şiklekî baştir bibînin. Hînbûna bikaranîna formeke nû bi qasî hînbûna koda wîkiyê zor e heqîqeten... [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 21:45, 14 tebax 2026 (UTC)
:::Min şaş fêm meke feqet te amûrek ji bo Wikihez çêkiriye :) Tu dixwazî ku hemû tiştên ku te çêkiriye tevlî vê Gadgetê bikî û bikarhênerên din jî bi kar bînin... Tu jî dizanî ku kesên ku tên vira çito peyv çêdikin: Ziman > Mane > Mînak > Hevmane > Dijmane ! Du Gadget çêke yek ji bo bikarhênerên ku hertim li vira ne, yekeke din jî ji bo bikarhênerên din (yên ku pirr nên vira).
:::Herwiha kesên ku hertim li vira ne bi Gadgetê gotar çênekin, ''copy/paste'' dikin. [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 22:12, 14 tebax 2026 (UTC)
::::Min xwest her tişt li ser rêza xwe be ji bo ku hîn bibin çi diçe kû derê feqat bi vî şiklî jî zêde dirêj û tevlihev dibe. Loma ez ê wekî tu dibêjî bikim her tiştê din bila collapsed pêşketî be. Ê ku dixwaze pê lê ke û binêre çi dikare were zêdekirin. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 22:26, 14 tebax 2026 (UTC)
:::::Niha baştir tê fêm kirin {{=)}} [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 23:01, 14 tebax 2026 (UTC)
::::::Min ji Opus 5 û Design Tool îstifade kiriye hema bêje milyonek token çûn :D pêşî dîzayn kir dûre dest pê kir wekî dîna bişuxile. Pereyê xwe %100 heq dike welleh :D feqat moda tarî ji bîr kiriye :D [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 23:12, 14 tebax 2026 (UTC)
:::::::Spas! Etîmolojî jî wekî "Bilêvkirin", di beşekê din de cem wê, were çêkirin (Mane|Etîmolojî|Bilêvkirin|Beşên din)? [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 23:20, 14 tebax 2026 (UTC)
::::::::(Mane>Tewandin>Werger|Etîmolojî>Dûnde>|Bilêvkirin(formatek çawa?)>Resim|Eleqedar>Jê>Têkildar>Herwiha binêre|Beşên din)? [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 23:29, 14 tebax 2026 (UTC)
:::::::::Nizanim, biceribîne... [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 23:43, 14 tebax 2026 (UTC)
::::::::::"Li şablonekê bigere" ser Maneyê hatiye nivîsandin, nizanim rind tê fêm kirin an na? Min paşê fêm nekir :)) Naskirina Wîkîferhengê hewce ye... Li bin were nivîsandin û "notek" hewce ye. [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 00:02, 15 tebax 2026 (UTC)
:::::::::::"Malûmatên pêşketî nîşan bide" jî bike ser "Hevman" ji ber ku pirr li jor e. Tu nizanî çi dike... [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 00:09, 15 tebax 2026 (UTC)
== [[Mediawiki:Gadget-QQ.js]] ==
Ev amûr di şikle Minerva de. Her daîm vê xeletiyê dide:
<syntaxhighlight lang="js">
TypeError: Cannot read properties of null (reading 'addEventListener') at css () at runScript () at Array.<anonymous> () at flushCssBuffer ()
</syntaxhighlight> [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 19:29, 18 tîrmeh 2026 (UTC)
:* [[Bikarhêner:Wikihez/skrîpt/js/Gadget-QQ.js]] --> [[Mediawiki:Gadget-QQ.js]]
:* [[Bikarhêner:Wikihez/Gadget-QQ.css]] --> [[Mediawiki:Gadget-QQ.css]]
:Ez dibêjim çêbû lê ka çend roj biceribînim. Tiştên ku hatin sererastkirin:
:# Google Books API Key dikarî zêde bikî, dixe cookies û di gerokê de dimîne. Berê bê API Key dixebitiya lê êdî mecbûr e ku API Key-a te hebe, bidestxistina wê ne zêde zor e lê dîsa jî tevlihev e.
:# Êdî di mobîlê de dixebite, heta di mobîlê de xweştir xuya dike.
:# Moda tarî
:# OOUI dewsa jquery.ui
:# Li qutiyê çi dixwazî zêde bikî, dikare li gorî îsm, sifet, fiîl bitewîne. Lê ji bo fiîl tenê dikare çend heb inflection bîne.
:# Butona paqij bike lê zêde kir.
:# Çend paqijiyên jêgirtinên Google Kitêbê niha hene.
:[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 23:38, 18 tîrmeh 2026 (UTC)
::Tewandina fiîlan û xeletiya modulê lazim e were rastkirin. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 14:40, 21 tîrmeh 2026 (UTC)
== [[MediaWiki:Gadget-wikt.add-examples.js]] ==
Min ev amûr hinek rojane kir feqat çend problem hene berî ku bar bikin.
Tiştên ku min guhart:
# Êdî li sayfeyên bi {{ş|maneid}} jî dixebite,
# Cihê di wîkîtekstê de yê ku jêgirtin were îlawekirin baştir bû,
# [[Mediawiki:Gadget-citoid-helper.js|citoid helper]] zêde kir ji bo ku bi hêsanî çavkanî bi riya doi, isbn an urlyê werin tijîkirin.
* [[Bikarhêner:Wikihez/Gadget-wikt.add-examples.css]] --> [[MediaWiki:Gadget-wikt.add-examples.css]]
* [[Bikarhêner:Wikihez/Gadget-wikt.add-examples.js]] --> [[MediaWiki:Gadget-wikt.add-examples.js]]
- --[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 00:50, 19 tîrmeh 2026 (UTC)
:Min "wikt." qismên cache kirinê ya wîkiya fransî bi [[MediaWiki:Gadget-StorageUtils.js]] guhartiye. loma ji bîr nekin wê amûrê li [[MediaWiki:Gadgets-definition]] zêde bikin. û navê amûrê jî biguhêrînin. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 09:15, 23 tîrmeh 2026 (UTC)
::Berê li ser WF:ceribandin dixebitî. niha naxebite. Divê were rastkirin. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 22:10, 7 tebax 2026 (UTC)
== Gadget-translation editor ==
* [[MediaWiki:Gadget-translation editor.js]]: divê formata en.wîktê were bikaranîn ji ber ku me gelek tercime ji en.wîktê kopî kir û ev js hîn nikare formata wekî li jêr bi kar bîne.
<syntaxhighlight lang="wikitext">
* {{Z|sh}}:
*: Kirîlî:
*: Latînî
</syntaxhighlight>
—[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:17, 16 tîrmeh 2026 (UTC)
== [[Mediawiki:Gadget-linkify.js]] ==
* ''rûpeleke'' wekî<syntaxhighlight lang="wikitext">[[rûpeleke]]</syntaxhighlight> lînk dike, bi regexê belkî dikare wisa bike <syntaxhighlight lang="wikitext">[[rûpel]]eke</syntaxhighlight>
—[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:17, 16 tîrmeh 2026 (UTC)
* Amûreke din wekî [[User:Wikihez/Gadget-linkify.js|linkify]] lazim e ku herfên mezin biçûk bike ji bo kurmancî.—[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:17, 16 tîrmeh 2026 (UTC)
:{{r|Bikarhêner}} Merheba bira, dikarî viya jî bar bikî?:
* [[Special:PermanentLink/6291974|linkify]] --> [[Mediawiki:Gadget-linkify.js]]
Spas--[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 11:42, 29 tîrmeh 2026 (UTC)
:Dûre [https://ku.wiktionary.org/wiki/MediaWiki:Gadget-start.js#L-283 li vir] wiktviLinkify bike kuLinkify xêra xwe [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 11:51, 29 tîrmeh 2026 (UTC)
::Min ji bîr kir lê zêde bikim niha nikare "Dİ" bike "di", xeletiyeke berbelav a di nivîsên kurdî de, herfên din ên wekî ll yan rr jî hewce ne werin zêdekirin. Dûre em zêde bikin. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 21:42, 29 tîrmeh 2026 (UTC)
:::Min nû ferq kir, sayfeyên ku hîn nehatine çêkirin wîkîlînk nake. Problemeke mezin e divê were rastkirin. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 18:15, 30 tîrmeh 2026 (UTC)
::::Na, lînk dike, tiştekî din heye... [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 10:49, 31 tîrmeh 2026 (UTC)
== Amûra manayê ==
Amûreke din ji bo nivîsina maneyê wekî Nimûne zêde bike lazim e [https://ku.wiktionary.org/w/index.php?title=Bikarh%C3%AAner:Wikihez/test.js&oldid=6276876 js] [https://ku.wiktionary.org/w/index.php?title=%C5%9Eablon:ceribandin2&oldid=6265629 şablon] [https://ku.wiktionary.org/w/index.php?title=Bikarh%C3%AAner:Wikihez/common.css&oldid=6265642 css] --[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 09:12, 23 tîrmeh 2026 (UTC)
== [[MediaWiki:Gadget-jeder.js]] ==
@[[Bikarhêner:Ghybu|Ghybu]] Çavkaniyên jêderê di moda pêşdîtinê de jêderê vedişêre, ew jî min gelek eciz dike wextê çavkanî zêde dikim. Min ji Claude pirsî û kodan nîşanî wê da, wisa cewab da:
Yes — and this file actually explains the whole thing precisely, better than my earlier guess about extract-stripping.
What's happening: the CSS rule
<syntaxhighlight lang="css">
.jeder{
display:none;
}
</syntaxhighlight>
hides every citation by default, *unconditionally*. The only thing that ever makes it visible again is the gadget's JS: it finds each `.jeder`, builds the short "`— (year, author, +)`" summary from the `.j-pewist` fields, and either reveals the short version or — for citations with no `.j-pewist` fields — explicitly sets `display:inline` on the original.
So visibility of citations depends entirely on this JS running. In the normal article view (Image 1) it runs, so you see the collapsed "`(1918, E. Rehmî Ji Mala Hekariyan, Amadekar: M. E. Bozarslan, +)`" form. In whatever generated Image 2 — a hover-preview/extract/API render — gadget JS doesn't execute, so nothing ever removes the `display:none`, and the citation vanishes completely rather than degrading to "still visible, just not collapsed."
<b>The fix:</b> flip the default so the *un-collapsed* state is the safe fallback, and let JS do the hiding only after it successfully builds the short version. That way, any context without JS shows the full citation instead of nothing.
CSS — remove the blanket hide:
<syntaxhighlight lang="css">
.jeder {
/* intentionally no display:none here — see Gadget-... .js */
}
</syntaxhighlight>
JS — do the hiding from script, after the short form exists:
{{veşêre-ser}}
<syntaxhighlight lang="js">
// Ji bo şablonên [[Şablon:jêder]] hatiye nivîsandin.
// Parametreyên ku di navbera "<span class="j-pewist">...</span>" an "{{j-pêwîst|...}}" de ne venaşêre.
$(function() {
function nivisaKurtTevliBike(sund, nivisKurt) {
var zede = $('<a>+</a>')
.addClass('click')
.attr('href', '#')
.attr('title', 'zêdetir')
.css('font-weight', 'bold');
var kurt = $(' <a>↩</a>')
.addClass('click-kurt')
.attr('href', '#')
.attr('title', 'veşêre')
.css('font-weight', 'bold');
$('<span>' + nivisKurt + '</span>')
.append(zede).append(')')
.addClass('jeder-kurt')
.css('font-size', '0.85em')
.insertAfter(sund);
sund.append(' ').append(kurt);
// Only hide the full citation once the short summary actually exists.
// If this script never runs (no-JS clients, hover-preview extracts,
// action=render, etc.), the full citation stays visible instead of
// silently disappearing.
sund.css('display', 'none');
}
function vesere() {
$('.jeder').each(function() {
var elmTab = $(this).find('.j-pewist').clone();
if (elmTab.length) {
var elm = '';
for (var i = elmTab.length - 1; i >= 0; i--) {
elm = elmTab.eq(i).html() + ', ' + elm;
}
var nivisKurt = ' — (' + elm;
nivisaKurtTevliBike($(this), nivisKurt);
}
// else: no j-pewist fields to shorten — leave the full citation
// as it already renders (visible), nothing to do.
});
}
vesere();
$(".click").click(function(e) {
e.preventDefault();
$(this).parent('.jeder-kurt').css('display', 'none');
$(this).parent('.jeder-kurt').prev().css('display', 'inline');
});
$(".click-kurt").click(function(e) {
e.preventDefault();
$(this).parent('.jeder').css('display', 'none');
$(this).parent('.jeder').next().css('display', 'inline');
});
});
</syntaxhighlight>
Net effect:
- JS-enabled readers (normal article view): identical experience to today — collapsed short form with `+`/`↩` toggle.
- No-JS contexts (previews, extracts, screen readers before JS loads, print, etc.): full citation is shown instead of nothing — a real regression fix rather than a cosmetic one.
One caveat worth being upfront about: this fixes it *if* the preview context renders the gadget's HTML/CSS but doesn't execute gadget JS (which is the far more common case, and what this code strongly suggests is happening). If Image 2 instead comes from a pipeline that strips the `.jeder`/`.jegirtin-text` elements out of the HTML entirely before this CSS/JS even gets a chance to apply, no on-wiki CSS/JS change can help — that'd need the extract-generation config changed instead. Given what this gadget file shows, though, I'd bet on the CSS-hide explanation.
{{veşêre-bin}}
Em dûre biceribînin eger xeletî tinebe, vî tiştî jî rast bikin. --[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 20:00, 23 tîrmeh 2026 (UTC)
:Ez APIya MediaWiki rind nizanim belkî Claude dizane:) Em nikarin bibêjin dema ku moda "''action=edit''" e fonksiyona <code>function vesere()</code> bi kar meyîne. [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 15:57, 24 tîrmeh 2026 (UTC)
::Na, di moda "edît"-ê de <code>var elmTab = null</code>... [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 16:13, 24 tîrmeh 2026 (UTC)
?:
<syntaxhighlight lang="js">
if (
mw.config.get('wgAction') === 'edit' ||
mw.config.get('wgAction') === 'submit'
){
var elmTab = [];
} else {
var elmTab = $(this).find('.j-pewist').clone();
}
</syntaxhighlight>
--[[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 16:31, 24 tîrmeh 2026 (UTC)
:Ez jî nizanim Claude çiqas ji mediawiki fêm dike lê heta niha ti tişt nîne ku min jê pirs kir û nikaribû çêke, bila wekî reklam nebe feqat Claude mikemmel e, dibêjim "li vir çima xeletiyeke wisa derdikeve" di dosyeya 2000 rêzî de diçe tiştê xelet tenê rast dike tiştekî din naguherîne. Chatgpt û aistudio qet wisa nakin, eynî dosyeyê deh cara dinivîsin, deh netîceyên cuda derdikevin :D
:Em dikarin vê amûrê wextê edit û submitê neaktîv bikin wekî <syntaxhighlight lang="js">if (!(action === "edit" || action === "submit")) {
:return;</syntaxhighlight> lê wê demê display:none wê çibe nizanim. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 18:23, 24 tîrmeh 2026 (UTC)
::display:none ne hewce ye ma jixwe di nav kodê [https://ku.wiktionary.org/w/index.php?title=MediaWiki:Gadget-jeder.js&oldid=6069025#L-49 L-49] de inline/none heye? [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 18:53, 24 tîrmeh 2026 (UTC)
:Min bi vî şiklî [https://ku.wiktionary.org/w/index.php?title=Bikarh%C3%AAner:Wikihez/vector-2022.js&diff=prev&oldid=6290816#L-28] ceriband feqat nexebitî. "display:none" di pêşdîtinê de dixebite feqat js naşixule. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 14:43, 25 tîrmeh 2026 (UTC)
::Kodên JSê pir hez nakim (pêşta hukurina APIya MWyê hewce bû) dîsa jî ez ê seh bikim :) [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 16:49, 27 tîrmeh 2026 (UTC)
:::Ez niha bi vî şiklî [https://ku.wiktionary.org/w/index.php?title=Bikarh%C3%AAner:Wikihez/test.js&oldid=6290820] [https://ku.wiktionary.org/w/index.php?title=Bikarh%C3%AAner:Wikihez/common.css&oldid=6290821#L-8] bi kar tînim ti problem nîne. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 17:09, 27 tîrmeh 2026 (UTC)
== [[MediaWiki:Gadget-PagePreviews.js]] ==
Ez dibêjim em vê amûrê jî çêkin [[:en:MediaWiki:Gadget-PagePreviews.js]] --[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 10:56, 3 tebax 2026 (UTC)
= Moda tarî =
== [[Şablon:wîkîpediya]] ==
Rengê tarî de xirab e.--[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 19:36, 4 tebax 2026 (UTC)
= Bot =
Karên ku bi botê werin çêkirin ji kerema xwe li vir binivîsin.
== Kategorî:Biwêj ==
[[:Kategorî:Biwêj]] divê were paqijkirin, lîsteya madeyên {{ş|biwêj}} çêke, yên ku tê de bûn, kirin, man hene filtre bike yên din bi destî tê çêkirin.—[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:17, 16 tîrmeh 2026 (UTC)
== Jêgirtin ==
Xistina jêgirtinên beşa [https://ku.wiktionary.org/w/index.php?search=insource%3A%2F%3D+*Ji+%5BWw%5D%C3%AAjey%C3%AA+*%3D%2F&title=Taybet%3AL%C3%AAger%C3%AEn&profile=advanced&fulltext=1&ns0=1&searchToken=8rh0bmw8dccsi7aynl6zli8uf ji wêjeyê] li beşa maneyê. —[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:17, 16 tîrmeh 2026 (UTC)
== Bota Toolforgeê ==
Botekî Toolforgeê lazim e ji bo ku xeletiyên biçûk wekî şablonên bi navên îngilîzî werin kurdîkirin yan jî valahiya beşan rast bike û hwd.—[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:17, 16 tîrmeh 2026 (UTC)
:Min [[Bikarhêner:Wikihez/skrîpt/py/kuwiktkozmetik.py|paqijiyen kozmetîk]] hazir kir feqat hîn navên şablonan naguhêre. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 20:05, 4 tebax 2026 (UTC)
== Updatew ==
Bota [[Bikarhêner:Wikihez/skrîpt/py/updateW.py|updateW]] divê were rojanekirin. Yan jî yekî nû were çêkirin. Şablonên {{ş|W}} di beşa tercimeyan de sererast dike û zimanan rêz dike. Ya niha xeletiya navê zimanî dide.—[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:17, 16 tîrmeh 2026 (UTC)
== sihir --> sêhr ==
Tercimeyên ''[[sêhr]]'' hemû dibêje ''sihir'' loma bi botê lazim e kirin ''sêhr''. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 17:43, 18 tîrmeh 2026 (UTC)
:Sihirbaz --> sêhrbaz [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 18:07, 18 tîrmeh 2026 (UTC)
== Tercimeyên dîroknas ==
Li tercimeyên [[dîroknas]], hevmaneyên wê hewce ye were îlawekirin. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 18:44, 18 tîrmeh 2026 (UTC)
== Mewlûd ==
Sererastkirina jêgirtinên mewlûdê [https://ku.wiktionary.org/w/index.php?search=insource%3A%2Fw%5C%3AMela+His%C3%AAn%C3%AA+Batey%C3%AE%2F&title=Taybet%3AL%C3%AAger%C3%AEn&ns0=1&searchToken=8m0tguy3sqt7edr4sg0u8hedo] wekî [https://ku.wiktionary.org/w/index.php?title=dax%C3%AEdar&curid=284303&diff=6265851&oldid=6142285] [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 09:43, 20 tîrmeh 2026 (UTC)
sxxs6afj1zpfn6q36zqfo1mudjjtsfy
6333766
6333765
2026-08-15T00:10:27Z
Ghybu
1393
/* MediaWiki:Gadget-start.js */
6333766
wikitext
text/x-wiki
{{/ser}}
= Karên ferhengî =
== Mane ==
* [[:Kategorî:Madeyên bê beşa mane]]
** [[:Kategorî:Madeyên bê beşa mane bi kurmancî]]
Li ser van rûpelan ev made hene ku maneyan wan nehatine nivîsin û divê werin nivîsin. —[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:17, 16 tîrmeh 2026 (UTC)
== Etîmolojî ==
*[[:Kategorî:Daxwazên etîmolojiyê]]
**[[:Kategorî:Daxwazên etîmolojiyê bi kurmancî]]
Li ser van rûpelan ev made hene ku etîmolojiya wan hîn nehatine nivîsin. Ji bo alîkariyê binêre [[WF:Etîmolojî]] —[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:17, 16 tîrmeh 2026 (UTC)
== Cureyê rêzimanî ==
* [[:Kategorî:Gotarên bê kategoriya rêzimanî]]
* [[:Kategorî:Gotarên bê kategoriya rêzimanî bi kurmancî]]
Li ser van rûpelan ev made hene ku cureyên wan yên rêzimanî hîn nehatine nivîsin. Ji bo alîkariyê binêre [[Alîkarî:Cureyên peyvan]] —[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:17, 16 tîrmeh 2026 (UTC)
== Kontrol ==
* [[:Kategorî:Kontrol]]
** [[:Kategorî:Kontrola maneyê]]
Ev madde bi botê hatine çêkirin, yek bi yek divê werin kontrolkirin. —[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:17, 16 tîrmeh 2026 (UTC)
= Şablon =
== IPA ==
* {{ş|IPA}} divê [[Modul:IPA]] bi kar bîne. —[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:17, 16 tîrmeh 2026 (UTC)
== Deng ==
Kurdîkirina belgekirina {{ş|deng}} lazim e.--[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 00:06, 19 tîrmeh 2026 (UTC)
= Modul =
== Modul:form of/templates ==
* [[Modul:form of/templates]]: Divê ev modul were rojanekirin û xeletiyên berê wekî ([[hevalê]]) werin rastkirin. —[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:17, 16 tîrmeh 2026 (UTC)
*:Merheba @[[Bikarhêner:Ghybu|Ghybu]] Te gotibû di vê modulê de xeletî hene, jkx tu dikarî li vir binivîsî çi kêmasî hene, daku wextê rojane dikim ez ji bîr nekim? [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:16, 21 tîrmeh 2026 (UTC)
*::Silav. Nizanim ji bîra min çûye... Herwiha ji bo çêkirina formên navdêran zanînên cîns û tîpa dawî bes e:
*::* (-ê, mê) => çemandî, bangkirin
*::* (-ê, nêr) => îzafe
*::* (-ê, mê û nêr) => îzafe (nêr), bangkirin (mê), çemandî (mê)
*::* (-a) => îzafe (mê)
*::* (-ekî) => îzafe û çemandî (nêr, nebinavkirî)
*::* (-eke) = > îzafe (mê, nebinavkirî)
*::* ...
*:: <code>if find(mw.title.getCurrentTitle().subpageText, 'ekî$') then ... end</code>
*::<code><nowiki>{{ku-tewîn-navForm|<navdêr>|<zayend>}</nowiki></code>
*::Tablo û nivîs di yekcarî de tên çêkirin...
*::Feqet problem lêzêdekirina mînakan e. [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 17:34, 21 tîrmeh 2026 (UTC)
*:::Lêzêdekirina kîjan nimûneyan? Ev koda js ji bo çi ye? Qisûrê nenêre min fêm nekir :/ [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 18:13, 21 tîrmeh 2026 (UTC)
*::::Li vira ([[hevalê#Formeke navdêrê]]) di bin maneyên 1. û 2. mînak nayên tevlî kirin :) [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 18:18, 21 tîrmeh 2026 (UTC)
*:::::Ev tercîh e, ne mecbûrî ye, em dikarin [https://ku.wiktionary.org/w/index.php?title=heval%C3%AA&diff=prev&oldid=6276350 wisa] bikin. Wekî din? [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 18:29, 21 tîrmeh 2026 (UTC)
*::::::Min li jor tênê got ku tenê parametreyên "navdêr" û "zayend" hewce nee. Bi '''[//ku.wiktionary.org/w/index.php?title=heval%C3%AA&curid=969734&diff=6276353&oldid=6276350 vî]''' awayî jî tê çêkirin. Parametreyên din ne hewce ne. [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 18:38, 21 tîrmeh 2026 (UTC)
*:::::::Ji bo wê şabloneke din lazim e, bila ev şablon wekî îngilîzî bimîne em ji bo kurmancî yekî din çêkin. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 18:42, 21 tîrmeh 2026 (UTC)
*::::::::[https://ku.wiktionary.org/w/index.php?title=heval%C3%AA&oldid=6276885 wisa] çawa ye? Bi min nivîsîna nimûneyan zêde ne lazim e ji ber ku ti kes serê xwe pê naêşîne. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 09:46, 23 tîrmeh 2026 (UTC)
*:::::::::@[[Bikarhêner:Ghybu|Ghybu]] Vê şablonê bi kar bînin an na? Navê şablonê kê çi be? [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 19:07, 24 tîrmeh 2026 (UTC)
== Modul:columns ==
* [[Modul:columns]] were rojanekirin û {{ş|kol3}} bila lînka ''nîşan bide'' deyne beriya sernavê, kolê di qutiya rengî de bila nebe. —[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:17, 16 tîrmeh 2026 (UTC)
== Modul:etymon ==
* [[Modul:etymon kevn]]: Rojanekirin hewce ye. —[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:17, 16 tîrmeh 2026 (UTC)
== [[Modul:ziman/code to canonical name]] ==
Belgekirina skrîptê û js divê were rastkirin. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 09:31, 22 tîrmeh 2026 (UTC)
:* [[MediaWiki:UpdateLanguageNameAndCode.js]]
:[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 09:50, 22 tîrmeh 2026 (UTC)
::* [[Modul:ziman/print]]
::[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 09:52, 22 tîrmeh 2026 (UTC)
:::*[[Modul:ziman/şablon]]
:::[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 09:56, 22 tîrmeh 2026 (UTC)
::::* [[MediaWiki:Gadget-translation editor.js/ziman.json]]
::::[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 11:06, 22 tîrmeh 2026 (UTC)
== [[Modul:quote]] ==
Piştî ev modul hate hazirkirin, lazim e navên jegirtinan werin rastkirin û li hemûyan {{param|jêgirtin}} were zêdekirin. Bnr. [[Gotûbêja şablonê:Jêgirtin/Ehmedê Xanî/Mem û Zîn]] [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 22:27, 5 tebax 2026 (UTC)
::Ev modul hema bêje hazir e. Hûn li ser van madeyan çi difikirin:
# {{para|tarîx}} lazim e full date be eger na, lazim e {{para|sal}} were bikaranîn. Feqat "'''2021''' kanûna pêşîn 23" bi vî şiklî bi min ne problem e çnkî derdê en.wikt "attestation" e delîla herî pêşî jî sal e.
#: {{demo|sep=wisa xuya dibe<br>|<nowiki>{{jêder-kitêb/ceribandin|en
|tarîx=23 December 2021|nivîskar=Harry Hobbs; George Williams|sernav=Micronations and the Search for Sovereignty|url=https://www.cambridge.org/core/books/micronations-and-the-search-for-sovereignty/B0414A3A322695D9EE71E4CDDFDA06DE|weşanxane=Cambridge University Press|rûpel=155|isbn=978-1-009-15012-5|jêgirtin=jêgirtin.|t=-}}</nowiki>}}
#{{para|amadekar}}/{{para|edîtor}}/{{para|terciman}} bi şiklê edîtoriya, amadekariya, tercimekirina
#: {{demo|sep=dide<br>|<nowiki>{{jêder-kitêb/ceribandin|en
|sernav=Medical Surgical Nursing|serî=Juta's Manual of Nursing|cildê-seriyê=volume 4|edîtor=Sophie Mataniele Mogotlane; Joyce Mokoena; Motshedisi Eunice Chauke; Anne Young|sal=2005|weşanxane=Juta Academic|isbn=978-0702171840|rûpel=!12-29|jêgirtin=jêgirtin|t=-}}</nowiki>}}
--[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 13:09, 10 tebax 2026 (UTC)
:@[[Bikarhêner:Bikarhêner|Bikarhêner]] û @[[Bikarhêner:Ghybu|Ghybu]] Hîn gelek tişt hene divê îzah bikin û fikrê we pirs bikim, feqat îzahkirin pir zor e, em dest bi bikaranînê bikin û dûre tiştên ku hûn naxwazin em dikarin biguherînîn, dibe? [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 13:11, 10 tebax 2026 (UTC)
::Dibe, piştî çêbû, em di praktîkê de bibînin ku çawa ye. -- [[Bikarhêner:Bikarhêner|Bikarhêner]] ([[Gotûbêja bikarhêner:Bikarhêner|gotûbêj]]) 18:05, 10 tebax 2026 (UTC)
= Javascript =
== [[Mediawiki:Gadget-citoid-helper.js]] ==
Ji bo bi citoidê kopîkirina malûmatên çavkaniyan amûreke wisa lazim e. Xisûsen ji ber ku bi çend amûrên din dikare were bikaranîn.
Feqat çend problem hene, şablonên me de kêmasiya parametreyan gelek in û xerîteyên citoidê hîn nehatine çêkirin. Wana sererast bikin dûre vê amûrê çêkin, piştre [[MediaWiki:Gadget-start.js|start.js]] û [[MediaWiki:Gadget-wikt.add-examples.js|add examples.js]] were rojanekirin.
- --[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 00:04, 19 tîrmeh 2026 (UTC)
:Merheba @[[Bikarhêner:Bikarhêner|Bikarhêner]], ez dibêjim karê Modul:quote zêde wext bistîne, bila em dest bi bikaranîna van amûran bikin dûre kêmasiyan em ê temam bikin înşela. Dikarî vana li cihên xwe yên rast kopî paste bikî?
# [[Special:PermanentLink/6291574|Bikarhêner:Wikihez/skrîpt/js/Gadget-citoid-helper.js]] --> [[Mediawiki:Gadget-citoid-helper.js]]
# Ya li jêr kopî bike qismê herî dawî ya AmûrênVeşartî li [[MediaWiki:Gadgets-definition]]:
## <code><nowiki>* citoid-helper[ResourceLoader|hidden|default|dependencies=mediawiki.util]|citoid-helper.js</nowiki></code>
--[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:58, 26 tîrmeh 2026 (UTC)
== [[MediaWiki:Gadget-start.js]] ==
Rojanekirin hewce ye. Min gelek tişt lê zêde kir lê ez niha test dikime. Piştre em bar bikin:
* [[Bikarhêner:Wikihez/Gadget-start.js]] --> [[MediaWiki:Gadget-start.js]]
* [[Bikarhêner:Wikihez/Gadget-start.css]] --> [[MediaWiki:Gadget-start.css]]
--[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 22:08, 17 tîrmeh 2026 (UTC)
:Min [[MediaWiki:Gadget-start/data.json|data.json]] çêkir ji bo ku bi hêsanî malûmatên heyî werin guhartin bêyî guhartina Javascriptê. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 19:49, 18 tîrmeh 2026 (UTC)
:Xeletiyên ku ji bîr nekim rast bikim:
:* Wextê min çavkanî "kitêb" hilbijart û bi destî tije kir xeletiyeke [https://ku.wiktionary.org/w/index.php?title=xezete&diff=prev&oldid=6265392 wisa] derket her kelîme hate lînkkirin.
:* <code>html("⠿")</code> ev ne lazim e.
:* textarea ji bo çavkaniyên jêgirtinan xaseten yên sernav hîn jî ne draggable e.
:* pêşdîtina zindî checkbox wextê tê rakirin, pêşdîtin winda nabe.
:* Butona mobîlê ya vekirina formê di moda tarî de belî nabe, tenê wekî qutiyeke tarî xuya dibe.
:* Metna hişyarkirinê di guhartina rûpelên heyî de lazim e baştir bikim.
:[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 23:51, 18 tîrmeh 2026 (UTC)
::Ev problem çêbûn, ez ê binêrim ka çi problemên din hene. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 14:15, 19 tîrmeh 2026 (UTC)
:::Çêke: Ji bo qismê çavkaniyê yek dikare API call û Kategorî:Çavkanî bi kar bîne ji bo ku şablon zêde bikî ji yên heyî. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 21:21, 19 tîrmeh 2026 (UTC)
::::Ev jî çêbû, min beşa çavkanî jî çêkir. Eger xeletî dernekeve û problema valahiya piştî etîketê ji bîr nekim, piştî rojanekirina amûrên linkify, û citoid em dikarin bar bikin. Ez ê ti tiştê nû îlawe nekim, zêde dirêj bû. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:14, 21 tîrmeh 2026 (UTC)
:::::Merheba @[[Bikarhêner:Bikarhêner|Bikarhêner]]. Dikarî wana bar bikî?
:::::* [[Bikarhêner:Wikihez/Gadget-start.js]] --> [[MediaWiki:Gadget-start.js]]
:::::* [[Bikarhêner:Wikihez/Gadget-start.css]] --> [[MediaWiki:Gadget-start.css]]
:::::* [[MediaWiki:Gadgets-definition]] wisa rojane bike:
:::::* start[ResourceLoader|default|package|dependencies=mediawiki.util,ext.gadget.StorageUtils,ext.gadget.citoid-helper]|start.js|start.css|start.js/data.json
:::::[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 09:39, 5 tebax 2026 (UTC)
{{şirove}} Dewama ''[[Special:PermanentLink/6333688|Gotûbêja bikarhêner:Rewiye tine#WF:Nû]]'' bila gotûbêja wî em spam nekin. :D
{{r|Ghybu}} dikarî [[Special:PermanentLink/6333689|vê htmlê]] binêrî claude rast fêm kiriye yan na? Daxîne û wek html qeyd bike. --[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 18:43, 14 tebax 2026 (UTC)
:Min seh wîkîyên din jî kir, li wîkiya fransî tiştekî wekî daxwaza min çêkirine (tiştên ku ne hewce ne wekî "tab" çêkirine an jî hatine vêşartin): [//fr.wiktionary.org/w/index.php?title=fdsdfdsf&action=edit&redlink=1]. Formata me yê berî jî bi vê lojîkê hatibû çêkirin, wekî de.wiktionary ([//de.wiktionary.org/w/index.php?title=sdfdsfsdfs&action=edit&preload=Vorlage:Formatvorlage_(Substantiv_vereinfacht)]) [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 19:01, 14 tebax 2026 (UTC)
::PS: Dîsa jî Claude min rind fêm kiriye :)) Feqet min got ku beşên Mane", "Bilêvkirin" û "Beşên din" cem hev (wekî "tab") ". Û dema ku tu terî di nav "Besên din" Hevmane, Jê, ... li wira werin dayîn. Wêne/Resim û Nimûne jî di nav beşa ("tab") "Mane" [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 19:17, 14 tebax 2026 (UTC)
::Erê ya fr.wikt min jî dîtibû jixwe fikrê tab min ji wan girtibû :D (feqat min li cem wan tenê tab-a maneyê dît yên din nedît çawa tê vekirin nizanim) Berê hemû beş piştî maneyê bibûn, dûre min sê Tab çêkir, Bingehîn+Lînkkirin+Bikaranîn. Niha lazim e Tabeke din çêkim. Ya ku claude çêkiriye bnr. [[Special:PermanentLink/6333698#L-7]] ne baş e bnr. [[Special:PermanentLink/6333703|qiyaskirinê li ser vê htmlê]] Êdî ez Claude abuse dikime ji ber ku Pro ye :D [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 19:26, 14 tebax 2026 (UTC)
:::Claude dibêje:
:::Good clarification — that's a real simplification, not just a relabel. Updated STEP_GROUPS from 5 tabs down to 3:
:::Mane — the definitions themselves, plus Wêne (image), now grouped in with it instead of sitting in a separate misc tab. Nimûne needed no change since it was already rendering inside each Mane sense block, not as its own step.
:::Bilêvkirin — unchanged, still just pronunciation.
:::Beşên din — everything else in one flat bucket: hevmane, jê, têkildar, herwiha binêre, formên alternatîv, dijmane, jornav, jêrnav, notên bikaranînê, bi alfabeyên din, dûnde, çavkanî, bêhtir bixwîne, tewandin, etîmolojî, zaravayên din, werger, and bnr-h — instead of being split across the old Bingehîn/Lînkkirin/Bikaranîn/Din tabs.
:::No DOM-order changes were needed this time — the fix from the blank-tab bug looks up the tab bar's position dynamically now, so it didn't matter that I regrouped which steps go where. Same two files, saved to your Wiki folder — worth another pass through all three tabs once you've pasted this in, same as last time. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 19:34, 14 tebax 2026 (UTC)
::::Mînak:
Ziman
---------------------------------------------
Cureyê rêzimanî (Navdêr)
Navdêr (hilbijêre) ┆ Cîns (hilbijêre) ┆ Jimar (hilbijêre)
- lêker -mê -yekjimar
- rengdêr -nêr -pirjimar
- ... -... -...
---------------------------------------------
Mane || Bilêvkirin || Beşên din
hilbijêre:
- mane - IPA - Hevmane
- nimûne - kîte - Dijmane
- wêne
Dema ku tu "Cureyê rêzimanî" dikî "Lêker" :
Cureyê rêzimanî (Lêker)
Lêker (hilbijêre) ┆ Cure (hilbijêre)
- navdêr -rehê niha
- rengdêr -rehê borî
- ... -...
---------------------------------------------
┆ : select/option ("tab" nîne, tê dîtin)<br>
|| : "tab"
-- [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 19:45, 14 tebax 2026 (UTC)
'''Sê-stûnî ("┆" = ne tab), li gorî Cureyê rêzimanî:'''
{| class="wikitable"
! Cureyê rêzimanî !! Stûna 2 !! Stûna 3 !! Têbînî
|-
| Navdêr / Serenav
| Cîns (hilbijêre ▾: mê / nêr / ... — tenê heke ziman zayendê rêzimanî hebe)
| '''Jimar''' (?) — pirs li jêr
| Qadên "Forma mê/nêr/pirjimar/yekjimar" niha jî li vir hene — ma ev di "Jimar"-ê de tên tevlihev kirin, an cuda dimînin?
|-
| Rengdêr
| (heman m/n/p/y forman ku Navdêr distîne)
| Sûperlatîv (sûp) / Komparatîv (komp)
| Ne li ser her du nîgaran hatiye behs kirin — ma sê-stûnî li vir jî tê bikaranîn?
|-
| Lêker
| '''Cure''' = Cureyê lêkerê (hilbijêre ▾: gerguhêz / negerguhêz / xwerû-... / pêkhatî-... / hevedudanî-... / biwêjî-... — 10 vebijêrk)
| Di heman stûnê de: Rehê dema niha / Rehê dema borî / Rehê dema bilanî (her sê qadên nivîsandinê ne, ne hilbijêrk in)
| Ma "Cure" her sê rehan di xwe de digire wek yek stûn, an her yek stûneke cuda ye?
|-
| Tîp (herf/sembol)
| Girdêk (gir) / Hûrek (hûr)
| —
| Ne behs kiriye
|-
| Her cureyek, li gorî zimên
| Transliterasyon (tr) / Transkrîpsiyon (ts)
| —
| Bi zimên ve girêdayî ye, ne bi cureyê rêzimanî ve
|-
| Her cureyek, tenê ziman=japonî
| Hanja / Translit. hanja
| —
| Ne bi cureyê rêzimanî ve girêdayî ye
|-
| Her cureyek
| '''Tercîhên pêşketî''' (kolapsî): form, formaalt, nekatcure, nekatcins, nekatçendterm, serlînkneke, nekatpalîndrom, neformtr
| —
| Vebijarkî, ji bo hemû cureyan
|}
'''Tabên jêrîn — Mane ‖ Bilêvkirin ‖ Beşên din ("||" = tab):'''
{| class="wikitable"
! Mane !! Bilêvkirin !! Beşên din (hemû 18 hêman)
|-
| mane, nimûne, wêne
| şablonên bilêvkirinê (mînak: IPA, kîte)
| tewandin, etîmolojî, bi zaravayên din, werger, jê, têkildar, herwiha binêre, formên alternatîv, hevmane, dijmane, jornav, jêrnav, notên bikaranînê, bi alfabeyên din, dûnde, çavkanî, bêhtir bixwîne, bnr-h
|}
'''Pirsên vekirî:'''
# "Jimar" (yekjimar/pirjimar) — qadeke ku nîşan dide têketî bi xwe yekjimar e an pirjimar e. Ev cuda ye ji "Forma yekjimar (y)"/"Forma pirjimar (p)" ya heyî (ku forma DÎN a kelîmeyê tomar dike). Herdu bimînin, an werin yek kirin?
# Ma sê-stûnî tenê ji bo Navdêr/Lêker e, an ji bo Rengdêr/Tîp jî heman mantiq derbas dibe?
# Di "Beşên din" de: dixwazî pêşî navnîşek/hilbijartinek nîşan bide (17 hêmanên din jî tê de), û qad tenê piştî hilbijartinê xuya bibin?
:Tu dikarî start.js ji Tercîh/ Amûran rakî û bi test.js li Amûran herî taliyê ye biceribînî. Claude ya li jor hazir kir, Jimar ez dikarim îzah bikim. Feqat bi min di tab-a maneyê de lazim e Bi zaravayên din (heta wek werger her car bila li rûpelan were zêdekirin) û werger jî hebe.--[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 20:18, 14 tebax 2026 (UTC)
:;Navdêr: Tenê "cîns" û "jimar" bes e. "Forma mê", "Forma nêr", ... nayê fêm kirin. Bi min wekî "Tercîhên pêşketî" bi navkî din veşartî çêke.
:;Lêker: "Cureyê lêkerê" nayê fêm kirin, bi min pêşta "geguhez/negerguhêz" were hilbijartin, paşê jî form "hevdudanî/pêkatî/..." ji ber ku her kes vana nizanî... Dîsa jî tu dizanî.
:Bi min beşên "Hevmane" û dijmane jî bike de nav beşa Mane ("tab") ji ber ku pirr tên xwestin.
:Şûnda Wêne jî Nimûne/jêgirtin...
:Herwiha hemû bi rengê şîn hatine çêkirin, nizanim beşên din (===) bi rengê gewr an reş çito dibe? [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 21:35, 14 tebax 2026 (UTC)
::Nimûne/jêgirtin, hevmane, Dijmane li binê her maneyê hene. ji ber ku wana bi maneyê ve girêdayî ne lazim e wisa bimîne feqat belkî şiklekî baştir bibînin. Hînbûna bikaranîna formeke nû bi qasî hînbûna koda wîkiyê zor e heqîqeten... [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 21:45, 14 tebax 2026 (UTC)
:::Min şaş fêm meke feqet te amûrek ji bo Wikihez çêkiriye :) Tu dixwazî ku hemû tiştên ku te çêkiriye tevlî vê Gadgetê bikî û bikarhênerên din jî bi kar bînin... Tu jî dizanî ku kesên ku tên vira çito peyv çêdikin: Ziman > Mane > Mînak > Hevmane > Dijmane ! Du Gadget çêke yek ji bo bikarhênerên ku hertim li vira ne, yekeke din jî ji bo bikarhênerên din (yên ku pirr nên vira).
:::Herwiha kesên ku hertim li vira ne bi Gadgetê gotar çênekin, ''copy/paste'' dikin. [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 22:12, 14 tebax 2026 (UTC)
::::Min xwest her tişt li ser rêza xwe be ji bo ku hîn bibin çi diçe kû derê feqat bi vî şiklî jî zêde dirêj û tevlihev dibe. Loma ez ê wekî tu dibêjî bikim her tiştê din bila collapsed pêşketî be. Ê ku dixwaze pê lê ke û binêre çi dikare were zêdekirin. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 22:26, 14 tebax 2026 (UTC)
:::::Niha baştir tê fêm kirin {{=)}} [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 23:01, 14 tebax 2026 (UTC)
::::::Min ji Opus 5 û Design Tool îstifade kiriye hema bêje milyonek token çûn :D pêşî dîzayn kir dûre dest pê kir wekî dîna bişuxile. Pereyê xwe %100 heq dike welleh :D feqat moda tarî ji bîr kiriye :D [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 23:12, 14 tebax 2026 (UTC)
:::::::Spas! Etîmolojî jî wekî "Bilêvkirin", di beşekê din de cem wê, were çêkirin (Mane|Etîmolojî|Bilêvkirin|Beşên din)? [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 23:20, 14 tebax 2026 (UTC)
::::::::(Mane>Tewandin>Werger|Etîmolojî>Dûnde>|Bilêvkirin(formatek çawa?)>Resim|Eleqedar>Jê>Têkildar>Herwiha binêre|Beşên din)? [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 23:29, 14 tebax 2026 (UTC)
:::::::::Nizanim, biceribîne... [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 23:43, 14 tebax 2026 (UTC)
::::::::::"Li şablonekê bigere" ser Maneyê hatiye nivîsandin, nizanim rind tê fêm kirin an na? Min paşê fêm kir :)) Naskirina Wîkîferhengê hewce ye... Li bin were nivîsandin û "notek" hewce ye. [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 00:02, 15 tebax 2026 (UTC)
:::::::::::"Malûmatên pêşketî nîşan bide" jî bike ser "Hevman" ji ber ku pirr li jor e. Tu nizanî çi dike... [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 00:09, 15 tebax 2026 (UTC)
== [[Mediawiki:Gadget-QQ.js]] ==
Ev amûr di şikle Minerva de. Her daîm vê xeletiyê dide:
<syntaxhighlight lang="js">
TypeError: Cannot read properties of null (reading 'addEventListener') at css () at runScript () at Array.<anonymous> () at flushCssBuffer ()
</syntaxhighlight> [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 19:29, 18 tîrmeh 2026 (UTC)
:* [[Bikarhêner:Wikihez/skrîpt/js/Gadget-QQ.js]] --> [[Mediawiki:Gadget-QQ.js]]
:* [[Bikarhêner:Wikihez/Gadget-QQ.css]] --> [[Mediawiki:Gadget-QQ.css]]
:Ez dibêjim çêbû lê ka çend roj biceribînim. Tiştên ku hatin sererastkirin:
:# Google Books API Key dikarî zêde bikî, dixe cookies û di gerokê de dimîne. Berê bê API Key dixebitiya lê êdî mecbûr e ku API Key-a te hebe, bidestxistina wê ne zêde zor e lê dîsa jî tevlihev e.
:# Êdî di mobîlê de dixebite, heta di mobîlê de xweştir xuya dike.
:# Moda tarî
:# OOUI dewsa jquery.ui
:# Li qutiyê çi dixwazî zêde bikî, dikare li gorî îsm, sifet, fiîl bitewîne. Lê ji bo fiîl tenê dikare çend heb inflection bîne.
:# Butona paqij bike lê zêde kir.
:# Çend paqijiyên jêgirtinên Google Kitêbê niha hene.
:[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 23:38, 18 tîrmeh 2026 (UTC)
::Tewandina fiîlan û xeletiya modulê lazim e were rastkirin. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 14:40, 21 tîrmeh 2026 (UTC)
== [[MediaWiki:Gadget-wikt.add-examples.js]] ==
Min ev amûr hinek rojane kir feqat çend problem hene berî ku bar bikin.
Tiştên ku min guhart:
# Êdî li sayfeyên bi {{ş|maneid}} jî dixebite,
# Cihê di wîkîtekstê de yê ku jêgirtin were îlawekirin baştir bû,
# [[Mediawiki:Gadget-citoid-helper.js|citoid helper]] zêde kir ji bo ku bi hêsanî çavkanî bi riya doi, isbn an urlyê werin tijîkirin.
* [[Bikarhêner:Wikihez/Gadget-wikt.add-examples.css]] --> [[MediaWiki:Gadget-wikt.add-examples.css]]
* [[Bikarhêner:Wikihez/Gadget-wikt.add-examples.js]] --> [[MediaWiki:Gadget-wikt.add-examples.js]]
- --[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 00:50, 19 tîrmeh 2026 (UTC)
:Min "wikt." qismên cache kirinê ya wîkiya fransî bi [[MediaWiki:Gadget-StorageUtils.js]] guhartiye. loma ji bîr nekin wê amûrê li [[MediaWiki:Gadgets-definition]] zêde bikin. û navê amûrê jî biguhêrînin. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 09:15, 23 tîrmeh 2026 (UTC)
::Berê li ser WF:ceribandin dixebitî. niha naxebite. Divê were rastkirin. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 22:10, 7 tebax 2026 (UTC)
== Gadget-translation editor ==
* [[MediaWiki:Gadget-translation editor.js]]: divê formata en.wîktê were bikaranîn ji ber ku me gelek tercime ji en.wîktê kopî kir û ev js hîn nikare formata wekî li jêr bi kar bîne.
<syntaxhighlight lang="wikitext">
* {{Z|sh}}:
*: Kirîlî:
*: Latînî
</syntaxhighlight>
—[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:17, 16 tîrmeh 2026 (UTC)
== [[Mediawiki:Gadget-linkify.js]] ==
* ''rûpeleke'' wekî<syntaxhighlight lang="wikitext">[[rûpeleke]]</syntaxhighlight> lînk dike, bi regexê belkî dikare wisa bike <syntaxhighlight lang="wikitext">[[rûpel]]eke</syntaxhighlight>
—[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:17, 16 tîrmeh 2026 (UTC)
* Amûreke din wekî [[User:Wikihez/Gadget-linkify.js|linkify]] lazim e ku herfên mezin biçûk bike ji bo kurmancî.—[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:17, 16 tîrmeh 2026 (UTC)
:{{r|Bikarhêner}} Merheba bira, dikarî viya jî bar bikî?:
* [[Special:PermanentLink/6291974|linkify]] --> [[Mediawiki:Gadget-linkify.js]]
Spas--[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 11:42, 29 tîrmeh 2026 (UTC)
:Dûre [https://ku.wiktionary.org/wiki/MediaWiki:Gadget-start.js#L-283 li vir] wiktviLinkify bike kuLinkify xêra xwe [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 11:51, 29 tîrmeh 2026 (UTC)
::Min ji bîr kir lê zêde bikim niha nikare "Dİ" bike "di", xeletiyeke berbelav a di nivîsên kurdî de, herfên din ên wekî ll yan rr jî hewce ne werin zêdekirin. Dûre em zêde bikin. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 21:42, 29 tîrmeh 2026 (UTC)
:::Min nû ferq kir, sayfeyên ku hîn nehatine çêkirin wîkîlînk nake. Problemeke mezin e divê were rastkirin. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 18:15, 30 tîrmeh 2026 (UTC)
::::Na, lînk dike, tiştekî din heye... [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 10:49, 31 tîrmeh 2026 (UTC)
== Amûra manayê ==
Amûreke din ji bo nivîsina maneyê wekî Nimûne zêde bike lazim e [https://ku.wiktionary.org/w/index.php?title=Bikarh%C3%AAner:Wikihez/test.js&oldid=6276876 js] [https://ku.wiktionary.org/w/index.php?title=%C5%9Eablon:ceribandin2&oldid=6265629 şablon] [https://ku.wiktionary.org/w/index.php?title=Bikarh%C3%AAner:Wikihez/common.css&oldid=6265642 css] --[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 09:12, 23 tîrmeh 2026 (UTC)
== [[MediaWiki:Gadget-jeder.js]] ==
@[[Bikarhêner:Ghybu|Ghybu]] Çavkaniyên jêderê di moda pêşdîtinê de jêderê vedişêre, ew jî min gelek eciz dike wextê çavkanî zêde dikim. Min ji Claude pirsî û kodan nîşanî wê da, wisa cewab da:
Yes — and this file actually explains the whole thing precisely, better than my earlier guess about extract-stripping.
What's happening: the CSS rule
<syntaxhighlight lang="css">
.jeder{
display:none;
}
</syntaxhighlight>
hides every citation by default, *unconditionally*. The only thing that ever makes it visible again is the gadget's JS: it finds each `.jeder`, builds the short "`— (year, author, +)`" summary from the `.j-pewist` fields, and either reveals the short version or — for citations with no `.j-pewist` fields — explicitly sets `display:inline` on the original.
So visibility of citations depends entirely on this JS running. In the normal article view (Image 1) it runs, so you see the collapsed "`(1918, E. Rehmî Ji Mala Hekariyan, Amadekar: M. E. Bozarslan, +)`" form. In whatever generated Image 2 — a hover-preview/extract/API render — gadget JS doesn't execute, so nothing ever removes the `display:none`, and the citation vanishes completely rather than degrading to "still visible, just not collapsed."
<b>The fix:</b> flip the default so the *un-collapsed* state is the safe fallback, and let JS do the hiding only after it successfully builds the short version. That way, any context without JS shows the full citation instead of nothing.
CSS — remove the blanket hide:
<syntaxhighlight lang="css">
.jeder {
/* intentionally no display:none here — see Gadget-... .js */
}
</syntaxhighlight>
JS — do the hiding from script, after the short form exists:
{{veşêre-ser}}
<syntaxhighlight lang="js">
// Ji bo şablonên [[Şablon:jêder]] hatiye nivîsandin.
// Parametreyên ku di navbera "<span class="j-pewist">...</span>" an "{{j-pêwîst|...}}" de ne venaşêre.
$(function() {
function nivisaKurtTevliBike(sund, nivisKurt) {
var zede = $('<a>+</a>')
.addClass('click')
.attr('href', '#')
.attr('title', 'zêdetir')
.css('font-weight', 'bold');
var kurt = $(' <a>↩</a>')
.addClass('click-kurt')
.attr('href', '#')
.attr('title', 'veşêre')
.css('font-weight', 'bold');
$('<span>' + nivisKurt + '</span>')
.append(zede).append(')')
.addClass('jeder-kurt')
.css('font-size', '0.85em')
.insertAfter(sund);
sund.append(' ').append(kurt);
// Only hide the full citation once the short summary actually exists.
// If this script never runs (no-JS clients, hover-preview extracts,
// action=render, etc.), the full citation stays visible instead of
// silently disappearing.
sund.css('display', 'none');
}
function vesere() {
$('.jeder').each(function() {
var elmTab = $(this).find('.j-pewist').clone();
if (elmTab.length) {
var elm = '';
for (var i = elmTab.length - 1; i >= 0; i--) {
elm = elmTab.eq(i).html() + ', ' + elm;
}
var nivisKurt = ' — (' + elm;
nivisaKurtTevliBike($(this), nivisKurt);
}
// else: no j-pewist fields to shorten — leave the full citation
// as it already renders (visible), nothing to do.
});
}
vesere();
$(".click").click(function(e) {
e.preventDefault();
$(this).parent('.jeder-kurt').css('display', 'none');
$(this).parent('.jeder-kurt').prev().css('display', 'inline');
});
$(".click-kurt").click(function(e) {
e.preventDefault();
$(this).parent('.jeder').css('display', 'none');
$(this).parent('.jeder').next().css('display', 'inline');
});
});
</syntaxhighlight>
Net effect:
- JS-enabled readers (normal article view): identical experience to today — collapsed short form with `+`/`↩` toggle.
- No-JS contexts (previews, extracts, screen readers before JS loads, print, etc.): full citation is shown instead of nothing — a real regression fix rather than a cosmetic one.
One caveat worth being upfront about: this fixes it *if* the preview context renders the gadget's HTML/CSS but doesn't execute gadget JS (which is the far more common case, and what this code strongly suggests is happening). If Image 2 instead comes from a pipeline that strips the `.jeder`/`.jegirtin-text` elements out of the HTML entirely before this CSS/JS even gets a chance to apply, no on-wiki CSS/JS change can help — that'd need the extract-generation config changed instead. Given what this gadget file shows, though, I'd bet on the CSS-hide explanation.
{{veşêre-bin}}
Em dûre biceribînin eger xeletî tinebe, vî tiştî jî rast bikin. --[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 20:00, 23 tîrmeh 2026 (UTC)
:Ez APIya MediaWiki rind nizanim belkî Claude dizane:) Em nikarin bibêjin dema ku moda "''action=edit''" e fonksiyona <code>function vesere()</code> bi kar meyîne. [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 15:57, 24 tîrmeh 2026 (UTC)
::Na, di moda "edît"-ê de <code>var elmTab = null</code>... [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 16:13, 24 tîrmeh 2026 (UTC)
?:
<syntaxhighlight lang="js">
if (
mw.config.get('wgAction') === 'edit' ||
mw.config.get('wgAction') === 'submit'
){
var elmTab = [];
} else {
var elmTab = $(this).find('.j-pewist').clone();
}
</syntaxhighlight>
--[[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 16:31, 24 tîrmeh 2026 (UTC)
:Ez jî nizanim Claude çiqas ji mediawiki fêm dike lê heta niha ti tişt nîne ku min jê pirs kir û nikaribû çêke, bila wekî reklam nebe feqat Claude mikemmel e, dibêjim "li vir çima xeletiyeke wisa derdikeve" di dosyeya 2000 rêzî de diçe tiştê xelet tenê rast dike tiştekî din naguherîne. Chatgpt û aistudio qet wisa nakin, eynî dosyeyê deh cara dinivîsin, deh netîceyên cuda derdikevin :D
:Em dikarin vê amûrê wextê edit û submitê neaktîv bikin wekî <syntaxhighlight lang="js">if (!(action === "edit" || action === "submit")) {
:return;</syntaxhighlight> lê wê demê display:none wê çibe nizanim. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 18:23, 24 tîrmeh 2026 (UTC)
::display:none ne hewce ye ma jixwe di nav kodê [https://ku.wiktionary.org/w/index.php?title=MediaWiki:Gadget-jeder.js&oldid=6069025#L-49 L-49] de inline/none heye? [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 18:53, 24 tîrmeh 2026 (UTC)
:Min bi vî şiklî [https://ku.wiktionary.org/w/index.php?title=Bikarh%C3%AAner:Wikihez/vector-2022.js&diff=prev&oldid=6290816#L-28] ceriband feqat nexebitî. "display:none" di pêşdîtinê de dixebite feqat js naşixule. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 14:43, 25 tîrmeh 2026 (UTC)
::Kodên JSê pir hez nakim (pêşta hukurina APIya MWyê hewce bû) dîsa jî ez ê seh bikim :) [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 16:49, 27 tîrmeh 2026 (UTC)
:::Ez niha bi vî şiklî [https://ku.wiktionary.org/w/index.php?title=Bikarh%C3%AAner:Wikihez/test.js&oldid=6290820] [https://ku.wiktionary.org/w/index.php?title=Bikarh%C3%AAner:Wikihez/common.css&oldid=6290821#L-8] bi kar tînim ti problem nîne. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 17:09, 27 tîrmeh 2026 (UTC)
== [[MediaWiki:Gadget-PagePreviews.js]] ==
Ez dibêjim em vê amûrê jî çêkin [[:en:MediaWiki:Gadget-PagePreviews.js]] --[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 10:56, 3 tebax 2026 (UTC)
= Moda tarî =
== [[Şablon:wîkîpediya]] ==
Rengê tarî de xirab e.--[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 19:36, 4 tebax 2026 (UTC)
= Bot =
Karên ku bi botê werin çêkirin ji kerema xwe li vir binivîsin.
== Kategorî:Biwêj ==
[[:Kategorî:Biwêj]] divê were paqijkirin, lîsteya madeyên {{ş|biwêj}} çêke, yên ku tê de bûn, kirin, man hene filtre bike yên din bi destî tê çêkirin.—[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:17, 16 tîrmeh 2026 (UTC)
== Jêgirtin ==
Xistina jêgirtinên beşa [https://ku.wiktionary.org/w/index.php?search=insource%3A%2F%3D+*Ji+%5BWw%5D%C3%AAjey%C3%AA+*%3D%2F&title=Taybet%3AL%C3%AAger%C3%AEn&profile=advanced&fulltext=1&ns0=1&searchToken=8rh0bmw8dccsi7aynl6zli8uf ji wêjeyê] li beşa maneyê. —[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:17, 16 tîrmeh 2026 (UTC)
== Bota Toolforgeê ==
Botekî Toolforgeê lazim e ji bo ku xeletiyên biçûk wekî şablonên bi navên îngilîzî werin kurdîkirin yan jî valahiya beşan rast bike û hwd.—[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:17, 16 tîrmeh 2026 (UTC)
:Min [[Bikarhêner:Wikihez/skrîpt/py/kuwiktkozmetik.py|paqijiyen kozmetîk]] hazir kir feqat hîn navên şablonan naguhêre. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 20:05, 4 tebax 2026 (UTC)
== Updatew ==
Bota [[Bikarhêner:Wikihez/skrîpt/py/updateW.py|updateW]] divê were rojanekirin. Yan jî yekî nû were çêkirin. Şablonên {{ş|W}} di beşa tercimeyan de sererast dike û zimanan rêz dike. Ya niha xeletiya navê zimanî dide.—[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:17, 16 tîrmeh 2026 (UTC)
== sihir --> sêhr ==
Tercimeyên ''[[sêhr]]'' hemû dibêje ''sihir'' loma bi botê lazim e kirin ''sêhr''. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 17:43, 18 tîrmeh 2026 (UTC)
:Sihirbaz --> sêhrbaz [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 18:07, 18 tîrmeh 2026 (UTC)
== Tercimeyên dîroknas ==
Li tercimeyên [[dîroknas]], hevmaneyên wê hewce ye were îlawekirin. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 18:44, 18 tîrmeh 2026 (UTC)
== Mewlûd ==
Sererastkirina jêgirtinên mewlûdê [https://ku.wiktionary.org/w/index.php?search=insource%3A%2Fw%5C%3AMela+His%C3%AAn%C3%AA+Batey%C3%AE%2F&title=Taybet%3AL%C3%AAger%C3%AEn&ns0=1&searchToken=8m0tguy3sqt7edr4sg0u8hedo] wekî [https://ku.wiktionary.org/w/index.php?title=dax%C3%AEdar&curid=284303&diff=6265851&oldid=6142285] [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 09:43, 20 tîrmeh 2026 (UTC)
onc4jp18mbneyown9zabt64tgp7rlzv
6333767
6333766
2026-08-15T00:11:36Z
Ghybu
1393
/* MediaWiki:Gadget-start.js */
6333767
wikitext
text/x-wiki
{{/ser}}
= Karên ferhengî =
== Mane ==
* [[:Kategorî:Madeyên bê beşa mane]]
** [[:Kategorî:Madeyên bê beşa mane bi kurmancî]]
Li ser van rûpelan ev made hene ku maneyan wan nehatine nivîsin û divê werin nivîsin. —[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:17, 16 tîrmeh 2026 (UTC)
== Etîmolojî ==
*[[:Kategorî:Daxwazên etîmolojiyê]]
**[[:Kategorî:Daxwazên etîmolojiyê bi kurmancî]]
Li ser van rûpelan ev made hene ku etîmolojiya wan hîn nehatine nivîsin. Ji bo alîkariyê binêre [[WF:Etîmolojî]] —[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:17, 16 tîrmeh 2026 (UTC)
== Cureyê rêzimanî ==
* [[:Kategorî:Gotarên bê kategoriya rêzimanî]]
* [[:Kategorî:Gotarên bê kategoriya rêzimanî bi kurmancî]]
Li ser van rûpelan ev made hene ku cureyên wan yên rêzimanî hîn nehatine nivîsin. Ji bo alîkariyê binêre [[Alîkarî:Cureyên peyvan]] —[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:17, 16 tîrmeh 2026 (UTC)
== Kontrol ==
* [[:Kategorî:Kontrol]]
** [[:Kategorî:Kontrola maneyê]]
Ev madde bi botê hatine çêkirin, yek bi yek divê werin kontrolkirin. —[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:17, 16 tîrmeh 2026 (UTC)
= Şablon =
== IPA ==
* {{ş|IPA}} divê [[Modul:IPA]] bi kar bîne. —[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:17, 16 tîrmeh 2026 (UTC)
== Deng ==
Kurdîkirina belgekirina {{ş|deng}} lazim e.--[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 00:06, 19 tîrmeh 2026 (UTC)
= Modul =
== Modul:form of/templates ==
* [[Modul:form of/templates]]: Divê ev modul were rojanekirin û xeletiyên berê wekî ([[hevalê]]) werin rastkirin. —[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:17, 16 tîrmeh 2026 (UTC)
*:Merheba @[[Bikarhêner:Ghybu|Ghybu]] Te gotibû di vê modulê de xeletî hene, jkx tu dikarî li vir binivîsî çi kêmasî hene, daku wextê rojane dikim ez ji bîr nekim? [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:16, 21 tîrmeh 2026 (UTC)
*::Silav. Nizanim ji bîra min çûye... Herwiha ji bo çêkirina formên navdêran zanînên cîns û tîpa dawî bes e:
*::* (-ê, mê) => çemandî, bangkirin
*::* (-ê, nêr) => îzafe
*::* (-ê, mê û nêr) => îzafe (nêr), bangkirin (mê), çemandî (mê)
*::* (-a) => îzafe (mê)
*::* (-ekî) => îzafe û çemandî (nêr, nebinavkirî)
*::* (-eke) = > îzafe (mê, nebinavkirî)
*::* ...
*:: <code>if find(mw.title.getCurrentTitle().subpageText, 'ekî$') then ... end</code>
*::<code><nowiki>{{ku-tewîn-navForm|<navdêr>|<zayend>}</nowiki></code>
*::Tablo û nivîs di yekcarî de tên çêkirin...
*::Feqet problem lêzêdekirina mînakan e. [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 17:34, 21 tîrmeh 2026 (UTC)
*:::Lêzêdekirina kîjan nimûneyan? Ev koda js ji bo çi ye? Qisûrê nenêre min fêm nekir :/ [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 18:13, 21 tîrmeh 2026 (UTC)
*::::Li vira ([[hevalê#Formeke navdêrê]]) di bin maneyên 1. û 2. mînak nayên tevlî kirin :) [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 18:18, 21 tîrmeh 2026 (UTC)
*:::::Ev tercîh e, ne mecbûrî ye, em dikarin [https://ku.wiktionary.org/w/index.php?title=heval%C3%AA&diff=prev&oldid=6276350 wisa] bikin. Wekî din? [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 18:29, 21 tîrmeh 2026 (UTC)
*::::::Min li jor tênê got ku tenê parametreyên "navdêr" û "zayend" hewce nee. Bi '''[//ku.wiktionary.org/w/index.php?title=heval%C3%AA&curid=969734&diff=6276353&oldid=6276350 vî]''' awayî jî tê çêkirin. Parametreyên din ne hewce ne. [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 18:38, 21 tîrmeh 2026 (UTC)
*:::::::Ji bo wê şabloneke din lazim e, bila ev şablon wekî îngilîzî bimîne em ji bo kurmancî yekî din çêkin. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 18:42, 21 tîrmeh 2026 (UTC)
*::::::::[https://ku.wiktionary.org/w/index.php?title=heval%C3%AA&oldid=6276885 wisa] çawa ye? Bi min nivîsîna nimûneyan zêde ne lazim e ji ber ku ti kes serê xwe pê naêşîne. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 09:46, 23 tîrmeh 2026 (UTC)
*:::::::::@[[Bikarhêner:Ghybu|Ghybu]] Vê şablonê bi kar bînin an na? Navê şablonê kê çi be? [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 19:07, 24 tîrmeh 2026 (UTC)
== Modul:columns ==
* [[Modul:columns]] were rojanekirin û {{ş|kol3}} bila lînka ''nîşan bide'' deyne beriya sernavê, kolê di qutiya rengî de bila nebe. —[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:17, 16 tîrmeh 2026 (UTC)
== Modul:etymon ==
* [[Modul:etymon kevn]]: Rojanekirin hewce ye. —[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:17, 16 tîrmeh 2026 (UTC)
== [[Modul:ziman/code to canonical name]] ==
Belgekirina skrîptê û js divê were rastkirin. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 09:31, 22 tîrmeh 2026 (UTC)
:* [[MediaWiki:UpdateLanguageNameAndCode.js]]
:[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 09:50, 22 tîrmeh 2026 (UTC)
::* [[Modul:ziman/print]]
::[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 09:52, 22 tîrmeh 2026 (UTC)
:::*[[Modul:ziman/şablon]]
:::[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 09:56, 22 tîrmeh 2026 (UTC)
::::* [[MediaWiki:Gadget-translation editor.js/ziman.json]]
::::[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 11:06, 22 tîrmeh 2026 (UTC)
== [[Modul:quote]] ==
Piştî ev modul hate hazirkirin, lazim e navên jegirtinan werin rastkirin û li hemûyan {{param|jêgirtin}} were zêdekirin. Bnr. [[Gotûbêja şablonê:Jêgirtin/Ehmedê Xanî/Mem û Zîn]] [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 22:27, 5 tebax 2026 (UTC)
::Ev modul hema bêje hazir e. Hûn li ser van madeyan çi difikirin:
# {{para|tarîx}} lazim e full date be eger na, lazim e {{para|sal}} were bikaranîn. Feqat "'''2021''' kanûna pêşîn 23" bi vî şiklî bi min ne problem e çnkî derdê en.wikt "attestation" e delîla herî pêşî jî sal e.
#: {{demo|sep=wisa xuya dibe<br>|<nowiki>{{jêder-kitêb/ceribandin|en
|tarîx=23 December 2021|nivîskar=Harry Hobbs; George Williams|sernav=Micronations and the Search for Sovereignty|url=https://www.cambridge.org/core/books/micronations-and-the-search-for-sovereignty/B0414A3A322695D9EE71E4CDDFDA06DE|weşanxane=Cambridge University Press|rûpel=155|isbn=978-1-009-15012-5|jêgirtin=jêgirtin.|t=-}}</nowiki>}}
#{{para|amadekar}}/{{para|edîtor}}/{{para|terciman}} bi şiklê edîtoriya, amadekariya, tercimekirina
#: {{demo|sep=dide<br>|<nowiki>{{jêder-kitêb/ceribandin|en
|sernav=Medical Surgical Nursing|serî=Juta's Manual of Nursing|cildê-seriyê=volume 4|edîtor=Sophie Mataniele Mogotlane; Joyce Mokoena; Motshedisi Eunice Chauke; Anne Young|sal=2005|weşanxane=Juta Academic|isbn=978-0702171840|rûpel=!12-29|jêgirtin=jêgirtin|t=-}}</nowiki>}}
--[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 13:09, 10 tebax 2026 (UTC)
:@[[Bikarhêner:Bikarhêner|Bikarhêner]] û @[[Bikarhêner:Ghybu|Ghybu]] Hîn gelek tişt hene divê îzah bikin û fikrê we pirs bikim, feqat îzahkirin pir zor e, em dest bi bikaranînê bikin û dûre tiştên ku hûn naxwazin em dikarin biguherînîn, dibe? [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 13:11, 10 tebax 2026 (UTC)
::Dibe, piştî çêbû, em di praktîkê de bibînin ku çawa ye. -- [[Bikarhêner:Bikarhêner|Bikarhêner]] ([[Gotûbêja bikarhêner:Bikarhêner|gotûbêj]]) 18:05, 10 tebax 2026 (UTC)
= Javascript =
== [[Mediawiki:Gadget-citoid-helper.js]] ==
Ji bo bi citoidê kopîkirina malûmatên çavkaniyan amûreke wisa lazim e. Xisûsen ji ber ku bi çend amûrên din dikare were bikaranîn.
Feqat çend problem hene, şablonên me de kêmasiya parametreyan gelek in û xerîteyên citoidê hîn nehatine çêkirin. Wana sererast bikin dûre vê amûrê çêkin, piştre [[MediaWiki:Gadget-start.js|start.js]] û [[MediaWiki:Gadget-wikt.add-examples.js|add examples.js]] were rojanekirin.
- --[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 00:04, 19 tîrmeh 2026 (UTC)
:Merheba @[[Bikarhêner:Bikarhêner|Bikarhêner]], ez dibêjim karê Modul:quote zêde wext bistîne, bila em dest bi bikaranîna van amûran bikin dûre kêmasiyan em ê temam bikin înşela. Dikarî vana li cihên xwe yên rast kopî paste bikî?
# [[Special:PermanentLink/6291574|Bikarhêner:Wikihez/skrîpt/js/Gadget-citoid-helper.js]] --> [[Mediawiki:Gadget-citoid-helper.js]]
# Ya li jêr kopî bike qismê herî dawî ya AmûrênVeşartî li [[MediaWiki:Gadgets-definition]]:
## <code><nowiki>* citoid-helper[ResourceLoader|hidden|default|dependencies=mediawiki.util]|citoid-helper.js</nowiki></code>
--[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:58, 26 tîrmeh 2026 (UTC)
== [[MediaWiki:Gadget-start.js]] ==
Rojanekirin hewce ye. Min gelek tişt lê zêde kir lê ez niha test dikime. Piştre em bar bikin:
* [[Bikarhêner:Wikihez/Gadget-start.js]] --> [[MediaWiki:Gadget-start.js]]
* [[Bikarhêner:Wikihez/Gadget-start.css]] --> [[MediaWiki:Gadget-start.css]]
--[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 22:08, 17 tîrmeh 2026 (UTC)
:Min [[MediaWiki:Gadget-start/data.json|data.json]] çêkir ji bo ku bi hêsanî malûmatên heyî werin guhartin bêyî guhartina Javascriptê. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 19:49, 18 tîrmeh 2026 (UTC)
:Xeletiyên ku ji bîr nekim rast bikim:
:* Wextê min çavkanî "kitêb" hilbijart û bi destî tije kir xeletiyeke [https://ku.wiktionary.org/w/index.php?title=xezete&diff=prev&oldid=6265392 wisa] derket her kelîme hate lînkkirin.
:* <code>html("⠿")</code> ev ne lazim e.
:* textarea ji bo çavkaniyên jêgirtinan xaseten yên sernav hîn jî ne draggable e.
:* pêşdîtina zindî checkbox wextê tê rakirin, pêşdîtin winda nabe.
:* Butona mobîlê ya vekirina formê di moda tarî de belî nabe, tenê wekî qutiyeke tarî xuya dibe.
:* Metna hişyarkirinê di guhartina rûpelên heyî de lazim e baştir bikim.
:[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 23:51, 18 tîrmeh 2026 (UTC)
::Ev problem çêbûn, ez ê binêrim ka çi problemên din hene. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 14:15, 19 tîrmeh 2026 (UTC)
:::Çêke: Ji bo qismê çavkaniyê yek dikare API call û Kategorî:Çavkanî bi kar bîne ji bo ku şablon zêde bikî ji yên heyî. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 21:21, 19 tîrmeh 2026 (UTC)
::::Ev jî çêbû, min beşa çavkanî jî çêkir. Eger xeletî dernekeve û problema valahiya piştî etîketê ji bîr nekim, piştî rojanekirina amûrên linkify, û citoid em dikarin bar bikin. Ez ê ti tiştê nû îlawe nekim, zêde dirêj bû. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:14, 21 tîrmeh 2026 (UTC)
:::::Merheba @[[Bikarhêner:Bikarhêner|Bikarhêner]]. Dikarî wana bar bikî?
:::::* [[Bikarhêner:Wikihez/Gadget-start.js]] --> [[MediaWiki:Gadget-start.js]]
:::::* [[Bikarhêner:Wikihez/Gadget-start.css]] --> [[MediaWiki:Gadget-start.css]]
:::::* [[MediaWiki:Gadgets-definition]] wisa rojane bike:
:::::* start[ResourceLoader|default|package|dependencies=mediawiki.util,ext.gadget.StorageUtils,ext.gadget.citoid-helper]|start.js|start.css|start.js/data.json
:::::[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 09:39, 5 tebax 2026 (UTC)
{{şirove}} Dewama ''[[Special:PermanentLink/6333688|Gotûbêja bikarhêner:Rewiye tine#WF:Nû]]'' bila gotûbêja wî em spam nekin. :D
{{r|Ghybu}} dikarî [[Special:PermanentLink/6333689|vê htmlê]] binêrî claude rast fêm kiriye yan na? Daxîne û wek html qeyd bike. --[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 18:43, 14 tebax 2026 (UTC)
:Min seh wîkîyên din jî kir, li wîkiya fransî tiştekî wekî daxwaza min çêkirine (tiştên ku ne hewce ne wekî "tab" çêkirine an jî hatine vêşartin): [//fr.wiktionary.org/w/index.php?title=fdsdfdsf&action=edit&redlink=1]. Formata me yê berî jî bi vê lojîkê hatibû çêkirin, wekî de.wiktionary ([//de.wiktionary.org/w/index.php?title=sdfdsfsdfs&action=edit&preload=Vorlage:Formatvorlage_(Substantiv_vereinfacht)]) [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 19:01, 14 tebax 2026 (UTC)
::PS: Dîsa jî Claude min rind fêm kiriye :)) Feqet min got ku beşên Mane", "Bilêvkirin" û "Beşên din" cem hev (wekî "tab") ". Û dema ku tu terî di nav "Besên din" Hevmane, Jê, ... li wira werin dayîn. Wêne/Resim û Nimûne jî di nav beşa ("tab") "Mane" [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 19:17, 14 tebax 2026 (UTC)
::Erê ya fr.wikt min jî dîtibû jixwe fikrê tab min ji wan girtibû :D (feqat min li cem wan tenê tab-a maneyê dît yên din nedît çawa tê vekirin nizanim) Berê hemû beş piştî maneyê bibûn, dûre min sê Tab çêkir, Bingehîn+Lînkkirin+Bikaranîn. Niha lazim e Tabeke din çêkim. Ya ku claude çêkiriye bnr. [[Special:PermanentLink/6333698#L-7]] ne baş e bnr. [[Special:PermanentLink/6333703|qiyaskirinê li ser vê htmlê]] Êdî ez Claude abuse dikime ji ber ku Pro ye :D [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 19:26, 14 tebax 2026 (UTC)
:::Claude dibêje:
:::Good clarification — that's a real simplification, not just a relabel. Updated STEP_GROUPS from 5 tabs down to 3:
:::Mane — the definitions themselves, plus Wêne (image), now grouped in with it instead of sitting in a separate misc tab. Nimûne needed no change since it was already rendering inside each Mane sense block, not as its own step.
:::Bilêvkirin — unchanged, still just pronunciation.
:::Beşên din — everything else in one flat bucket: hevmane, jê, têkildar, herwiha binêre, formên alternatîv, dijmane, jornav, jêrnav, notên bikaranînê, bi alfabeyên din, dûnde, çavkanî, bêhtir bixwîne, tewandin, etîmolojî, zaravayên din, werger, and bnr-h — instead of being split across the old Bingehîn/Lînkkirin/Bikaranîn/Din tabs.
:::No DOM-order changes were needed this time — the fix from the blank-tab bug looks up the tab bar's position dynamically now, so it didn't matter that I regrouped which steps go where. Same two files, saved to your Wiki folder — worth another pass through all three tabs once you've pasted this in, same as last time. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 19:34, 14 tebax 2026 (UTC)
::::Mînak:
Ziman
---------------------------------------------
Cureyê rêzimanî (Navdêr)
Navdêr (hilbijêre) ┆ Cîns (hilbijêre) ┆ Jimar (hilbijêre)
- lêker -mê -yekjimar
- rengdêr -nêr -pirjimar
- ... -... -...
---------------------------------------------
Mane || Bilêvkirin || Beşên din
hilbijêre:
- mane - IPA - Hevmane
- nimûne - kîte - Dijmane
- wêne
Dema ku tu "Cureyê rêzimanî" dikî "Lêker" :
Cureyê rêzimanî (Lêker)
Lêker (hilbijêre) ┆ Cure (hilbijêre)
- navdêr -rehê niha
- rengdêr -rehê borî
- ... -...
---------------------------------------------
┆ : select/option ("tab" nîne, tê dîtin)<br>
|| : "tab"
-- [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 19:45, 14 tebax 2026 (UTC)
'''Sê-stûnî ("┆" = ne tab), li gorî Cureyê rêzimanî:'''
{| class="wikitable"
! Cureyê rêzimanî !! Stûna 2 !! Stûna 3 !! Têbînî
|-
| Navdêr / Serenav
| Cîns (hilbijêre ▾: mê / nêr / ... — tenê heke ziman zayendê rêzimanî hebe)
| '''Jimar''' (?) — pirs li jêr
| Qadên "Forma mê/nêr/pirjimar/yekjimar" niha jî li vir hene — ma ev di "Jimar"-ê de tên tevlihev kirin, an cuda dimînin?
|-
| Rengdêr
| (heman m/n/p/y forman ku Navdêr distîne)
| Sûperlatîv (sûp) / Komparatîv (komp)
| Ne li ser her du nîgaran hatiye behs kirin — ma sê-stûnî li vir jî tê bikaranîn?
|-
| Lêker
| '''Cure''' = Cureyê lêkerê (hilbijêre ▾: gerguhêz / negerguhêz / xwerû-... / pêkhatî-... / hevedudanî-... / biwêjî-... — 10 vebijêrk)
| Di heman stûnê de: Rehê dema niha / Rehê dema borî / Rehê dema bilanî (her sê qadên nivîsandinê ne, ne hilbijêrk in)
| Ma "Cure" her sê rehan di xwe de digire wek yek stûn, an her yek stûneke cuda ye?
|-
| Tîp (herf/sembol)
| Girdêk (gir) / Hûrek (hûr)
| —
| Ne behs kiriye
|-
| Her cureyek, li gorî zimên
| Transliterasyon (tr) / Transkrîpsiyon (ts)
| —
| Bi zimên ve girêdayî ye, ne bi cureyê rêzimanî ve
|-
| Her cureyek, tenê ziman=japonî
| Hanja / Translit. hanja
| —
| Ne bi cureyê rêzimanî ve girêdayî ye
|-
| Her cureyek
| '''Tercîhên pêşketî''' (kolapsî): form, formaalt, nekatcure, nekatcins, nekatçendterm, serlînkneke, nekatpalîndrom, neformtr
| —
| Vebijarkî, ji bo hemû cureyan
|}
'''Tabên jêrîn — Mane ‖ Bilêvkirin ‖ Beşên din ("||" = tab):'''
{| class="wikitable"
! Mane !! Bilêvkirin !! Beşên din (hemû 18 hêman)
|-
| mane, nimûne, wêne
| şablonên bilêvkirinê (mînak: IPA, kîte)
| tewandin, etîmolojî, bi zaravayên din, werger, jê, têkildar, herwiha binêre, formên alternatîv, hevmane, dijmane, jornav, jêrnav, notên bikaranînê, bi alfabeyên din, dûnde, çavkanî, bêhtir bixwîne, bnr-h
|}
'''Pirsên vekirî:'''
# "Jimar" (yekjimar/pirjimar) — qadeke ku nîşan dide têketî bi xwe yekjimar e an pirjimar e. Ev cuda ye ji "Forma yekjimar (y)"/"Forma pirjimar (p)" ya heyî (ku forma DÎN a kelîmeyê tomar dike). Herdu bimînin, an werin yek kirin?
# Ma sê-stûnî tenê ji bo Navdêr/Lêker e, an ji bo Rengdêr/Tîp jî heman mantiq derbas dibe?
# Di "Beşên din" de: dixwazî pêşî navnîşek/hilbijartinek nîşan bide (17 hêmanên din jî tê de), û qad tenê piştî hilbijartinê xuya bibin?
:Tu dikarî start.js ji Tercîh/ Amûran rakî û bi test.js li Amûran herî taliyê ye biceribînî. Claude ya li jor hazir kir, Jimar ez dikarim îzah bikim. Feqat bi min di tab-a maneyê de lazim e Bi zaravayên din (heta wek werger her car bila li rûpelan were zêdekirin) û werger jî hebe.--[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 20:18, 14 tebax 2026 (UTC)
:;Navdêr: Tenê "cîns" û "jimar" bes e. "Forma mê", "Forma nêr", ... nayê fêm kirin. Bi min wekî "Tercîhên pêşketî" bi navkî din veşartî çêke.
:;Lêker: "Cureyê lêkerê" nayê fêm kirin, bi min pêşta "geguhez/negerguhêz" were hilbijartin, paşê jî form "hevdudanî/pêkatî/..." ji ber ku her kes vana nizanî... Dîsa jî tu dizanî.
:Bi min beşên "Hevmane" û dijmane jî bike de nav beşa Mane ("tab") ji ber ku pirr tên xwestin.
:Şûnda Wêne jî Nimûne/jêgirtin...
:Herwiha hemû bi rengê şîn hatine çêkirin, nizanim beşên din (===) bi rengê gewr an reş çito dibe? [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 21:35, 14 tebax 2026 (UTC)
::Nimûne/jêgirtin, hevmane, Dijmane li binê her maneyê hene. ji ber ku wana bi maneyê ve girêdayî ne lazim e wisa bimîne feqat belkî şiklekî baştir bibînin. Hînbûna bikaranîna formeke nû bi qasî hînbûna koda wîkiyê zor e heqîqeten... [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 21:45, 14 tebax 2026 (UTC)
:::Min şaş fêm meke feqet te amûrek ji bo Wikihez çêkiriye :) Tu dixwazî ku hemû tiştên ku te çêkiriye tevlî vê Gadgetê bikî û bikarhênerên din jî bi kar bînin... Tu jî dizanî ku kesên ku tên vira çito peyv çêdikin: Ziman > Mane > Mînak > Hevmane > Dijmane ! Du Gadget çêke yek ji bo bikarhênerên ku hertim li vira ne, yekeke din jî ji bo bikarhênerên din (yên ku pirr nên vira).
:::Herwiha kesên ku hertim li vira ne bi Gadgetê gotar çênekin, ''copy/paste'' dikin. [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 22:12, 14 tebax 2026 (UTC)
::::Min xwest her tişt li ser rêza xwe be ji bo ku hîn bibin çi diçe kû derê feqat bi vî şiklî jî zêde dirêj û tevlihev dibe. Loma ez ê wekî tu dibêjî bikim her tiştê din bila collapsed pêşketî be. Ê ku dixwaze pê lê ke û binêre çi dikare were zêdekirin. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 22:26, 14 tebax 2026 (UTC)
:::::Niha baştir tê fêm kirin {{=)}} [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 23:01, 14 tebax 2026 (UTC)
::::::Min ji Opus 5 û Design Tool îstifade kiriye hema bêje milyonek token çûn :D pêşî dîzayn kir dûre dest pê kir wekî dîna bişuxile. Pereyê xwe %100 heq dike welleh :D feqat moda tarî ji bîr kiriye :D [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 23:12, 14 tebax 2026 (UTC)
:::::::Spas! Etîmolojî jî wekî "Bilêvkirin", di beşekê din de cem wê, were çêkirin (Mane|Etîmolojî|Bilêvkirin|Beşên din)? [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 23:20, 14 tebax 2026 (UTC)
::::::::(Mane>Tewandin>Werger|Etîmolojî>Dûnde>|Bilêvkirin(formatek çawa?)>Resim|Eleqedar>Jê>Têkildar>Herwiha binêre|Beşên din)? [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 23:29, 14 tebax 2026 (UTC)
:::::::::Nizanim, biceribîne... [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 23:43, 14 tebax 2026 (UTC)
::::::::::"Li şablonekê bigere" ser Maneyê hatiye nivîsandin, nizanim rind tê fêm kirin an na? Min paşê fêm kir :)) Naskirina Wîkîferhengê hewce ye... Li bin were nivîsandin û "notek" hewce ye. [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 00:02, 15 tebax 2026 (UTC)
:::::::::::"Malûmatên pêşketî nîşan bide" jî bike ser "Hevman" ji ber ku pirr li jor e. Tu nizanî çi dike (nayê dîtin)... [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 00:09, 15 tebax 2026 (UTC)
== [[Mediawiki:Gadget-QQ.js]] ==
Ev amûr di şikle Minerva de. Her daîm vê xeletiyê dide:
<syntaxhighlight lang="js">
TypeError: Cannot read properties of null (reading 'addEventListener') at css () at runScript () at Array.<anonymous> () at flushCssBuffer ()
</syntaxhighlight> [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 19:29, 18 tîrmeh 2026 (UTC)
:* [[Bikarhêner:Wikihez/skrîpt/js/Gadget-QQ.js]] --> [[Mediawiki:Gadget-QQ.js]]
:* [[Bikarhêner:Wikihez/Gadget-QQ.css]] --> [[Mediawiki:Gadget-QQ.css]]
:Ez dibêjim çêbû lê ka çend roj biceribînim. Tiştên ku hatin sererastkirin:
:# Google Books API Key dikarî zêde bikî, dixe cookies û di gerokê de dimîne. Berê bê API Key dixebitiya lê êdî mecbûr e ku API Key-a te hebe, bidestxistina wê ne zêde zor e lê dîsa jî tevlihev e.
:# Êdî di mobîlê de dixebite, heta di mobîlê de xweştir xuya dike.
:# Moda tarî
:# OOUI dewsa jquery.ui
:# Li qutiyê çi dixwazî zêde bikî, dikare li gorî îsm, sifet, fiîl bitewîne. Lê ji bo fiîl tenê dikare çend heb inflection bîne.
:# Butona paqij bike lê zêde kir.
:# Çend paqijiyên jêgirtinên Google Kitêbê niha hene.
:[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 23:38, 18 tîrmeh 2026 (UTC)
::Tewandina fiîlan û xeletiya modulê lazim e were rastkirin. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 14:40, 21 tîrmeh 2026 (UTC)
== [[MediaWiki:Gadget-wikt.add-examples.js]] ==
Min ev amûr hinek rojane kir feqat çend problem hene berî ku bar bikin.
Tiştên ku min guhart:
# Êdî li sayfeyên bi {{ş|maneid}} jî dixebite,
# Cihê di wîkîtekstê de yê ku jêgirtin were îlawekirin baştir bû,
# [[Mediawiki:Gadget-citoid-helper.js|citoid helper]] zêde kir ji bo ku bi hêsanî çavkanî bi riya doi, isbn an urlyê werin tijîkirin.
* [[Bikarhêner:Wikihez/Gadget-wikt.add-examples.css]] --> [[MediaWiki:Gadget-wikt.add-examples.css]]
* [[Bikarhêner:Wikihez/Gadget-wikt.add-examples.js]] --> [[MediaWiki:Gadget-wikt.add-examples.js]]
- --[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 00:50, 19 tîrmeh 2026 (UTC)
:Min "wikt." qismên cache kirinê ya wîkiya fransî bi [[MediaWiki:Gadget-StorageUtils.js]] guhartiye. loma ji bîr nekin wê amûrê li [[MediaWiki:Gadgets-definition]] zêde bikin. û navê amûrê jî biguhêrînin. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 09:15, 23 tîrmeh 2026 (UTC)
::Berê li ser WF:ceribandin dixebitî. niha naxebite. Divê were rastkirin. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 22:10, 7 tebax 2026 (UTC)
== Gadget-translation editor ==
* [[MediaWiki:Gadget-translation editor.js]]: divê formata en.wîktê were bikaranîn ji ber ku me gelek tercime ji en.wîktê kopî kir û ev js hîn nikare formata wekî li jêr bi kar bîne.
<syntaxhighlight lang="wikitext">
* {{Z|sh}}:
*: Kirîlî:
*: Latînî
</syntaxhighlight>
—[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:17, 16 tîrmeh 2026 (UTC)
== [[Mediawiki:Gadget-linkify.js]] ==
* ''rûpeleke'' wekî<syntaxhighlight lang="wikitext">[[rûpeleke]]</syntaxhighlight> lînk dike, bi regexê belkî dikare wisa bike <syntaxhighlight lang="wikitext">[[rûpel]]eke</syntaxhighlight>
—[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:17, 16 tîrmeh 2026 (UTC)
* Amûreke din wekî [[User:Wikihez/Gadget-linkify.js|linkify]] lazim e ku herfên mezin biçûk bike ji bo kurmancî.—[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:17, 16 tîrmeh 2026 (UTC)
:{{r|Bikarhêner}} Merheba bira, dikarî viya jî bar bikî?:
* [[Special:PermanentLink/6291974|linkify]] --> [[Mediawiki:Gadget-linkify.js]]
Spas--[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 11:42, 29 tîrmeh 2026 (UTC)
:Dûre [https://ku.wiktionary.org/wiki/MediaWiki:Gadget-start.js#L-283 li vir] wiktviLinkify bike kuLinkify xêra xwe [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 11:51, 29 tîrmeh 2026 (UTC)
::Min ji bîr kir lê zêde bikim niha nikare "Dİ" bike "di", xeletiyeke berbelav a di nivîsên kurdî de, herfên din ên wekî ll yan rr jî hewce ne werin zêdekirin. Dûre em zêde bikin. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 21:42, 29 tîrmeh 2026 (UTC)
:::Min nû ferq kir, sayfeyên ku hîn nehatine çêkirin wîkîlînk nake. Problemeke mezin e divê were rastkirin. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 18:15, 30 tîrmeh 2026 (UTC)
::::Na, lînk dike, tiştekî din heye... [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 10:49, 31 tîrmeh 2026 (UTC)
== Amûra manayê ==
Amûreke din ji bo nivîsina maneyê wekî Nimûne zêde bike lazim e [https://ku.wiktionary.org/w/index.php?title=Bikarh%C3%AAner:Wikihez/test.js&oldid=6276876 js] [https://ku.wiktionary.org/w/index.php?title=%C5%9Eablon:ceribandin2&oldid=6265629 şablon] [https://ku.wiktionary.org/w/index.php?title=Bikarh%C3%AAner:Wikihez/common.css&oldid=6265642 css] --[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 09:12, 23 tîrmeh 2026 (UTC)
== [[MediaWiki:Gadget-jeder.js]] ==
@[[Bikarhêner:Ghybu|Ghybu]] Çavkaniyên jêderê di moda pêşdîtinê de jêderê vedişêre, ew jî min gelek eciz dike wextê çavkanî zêde dikim. Min ji Claude pirsî û kodan nîşanî wê da, wisa cewab da:
Yes — and this file actually explains the whole thing precisely, better than my earlier guess about extract-stripping.
What's happening: the CSS rule
<syntaxhighlight lang="css">
.jeder{
display:none;
}
</syntaxhighlight>
hides every citation by default, *unconditionally*. The only thing that ever makes it visible again is the gadget's JS: it finds each `.jeder`, builds the short "`— (year, author, +)`" summary from the `.j-pewist` fields, and either reveals the short version or — for citations with no `.j-pewist` fields — explicitly sets `display:inline` on the original.
So visibility of citations depends entirely on this JS running. In the normal article view (Image 1) it runs, so you see the collapsed "`(1918, E. Rehmî Ji Mala Hekariyan, Amadekar: M. E. Bozarslan, +)`" form. In whatever generated Image 2 — a hover-preview/extract/API render — gadget JS doesn't execute, so nothing ever removes the `display:none`, and the citation vanishes completely rather than degrading to "still visible, just not collapsed."
<b>The fix:</b> flip the default so the *un-collapsed* state is the safe fallback, and let JS do the hiding only after it successfully builds the short version. That way, any context without JS shows the full citation instead of nothing.
CSS — remove the blanket hide:
<syntaxhighlight lang="css">
.jeder {
/* intentionally no display:none here — see Gadget-... .js */
}
</syntaxhighlight>
JS — do the hiding from script, after the short form exists:
{{veşêre-ser}}
<syntaxhighlight lang="js">
// Ji bo şablonên [[Şablon:jêder]] hatiye nivîsandin.
// Parametreyên ku di navbera "<span class="j-pewist">...</span>" an "{{j-pêwîst|...}}" de ne venaşêre.
$(function() {
function nivisaKurtTevliBike(sund, nivisKurt) {
var zede = $('<a>+</a>')
.addClass('click')
.attr('href', '#')
.attr('title', 'zêdetir')
.css('font-weight', 'bold');
var kurt = $(' <a>↩</a>')
.addClass('click-kurt')
.attr('href', '#')
.attr('title', 'veşêre')
.css('font-weight', 'bold');
$('<span>' + nivisKurt + '</span>')
.append(zede).append(')')
.addClass('jeder-kurt')
.css('font-size', '0.85em')
.insertAfter(sund);
sund.append(' ').append(kurt);
// Only hide the full citation once the short summary actually exists.
// If this script never runs (no-JS clients, hover-preview extracts,
// action=render, etc.), the full citation stays visible instead of
// silently disappearing.
sund.css('display', 'none');
}
function vesere() {
$('.jeder').each(function() {
var elmTab = $(this).find('.j-pewist').clone();
if (elmTab.length) {
var elm = '';
for (var i = elmTab.length - 1; i >= 0; i--) {
elm = elmTab.eq(i).html() + ', ' + elm;
}
var nivisKurt = ' — (' + elm;
nivisaKurtTevliBike($(this), nivisKurt);
}
// else: no j-pewist fields to shorten — leave the full citation
// as it already renders (visible), nothing to do.
});
}
vesere();
$(".click").click(function(e) {
e.preventDefault();
$(this).parent('.jeder-kurt').css('display', 'none');
$(this).parent('.jeder-kurt').prev().css('display', 'inline');
});
$(".click-kurt").click(function(e) {
e.preventDefault();
$(this).parent('.jeder').css('display', 'none');
$(this).parent('.jeder').next().css('display', 'inline');
});
});
</syntaxhighlight>
Net effect:
- JS-enabled readers (normal article view): identical experience to today — collapsed short form with `+`/`↩` toggle.
- No-JS contexts (previews, extracts, screen readers before JS loads, print, etc.): full citation is shown instead of nothing — a real regression fix rather than a cosmetic one.
One caveat worth being upfront about: this fixes it *if* the preview context renders the gadget's HTML/CSS but doesn't execute gadget JS (which is the far more common case, and what this code strongly suggests is happening). If Image 2 instead comes from a pipeline that strips the `.jeder`/`.jegirtin-text` elements out of the HTML entirely before this CSS/JS even gets a chance to apply, no on-wiki CSS/JS change can help — that'd need the extract-generation config changed instead. Given what this gadget file shows, though, I'd bet on the CSS-hide explanation.
{{veşêre-bin}}
Em dûre biceribînin eger xeletî tinebe, vî tiştî jî rast bikin. --[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 20:00, 23 tîrmeh 2026 (UTC)
:Ez APIya MediaWiki rind nizanim belkî Claude dizane:) Em nikarin bibêjin dema ku moda "''action=edit''" e fonksiyona <code>function vesere()</code> bi kar meyîne. [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 15:57, 24 tîrmeh 2026 (UTC)
::Na, di moda "edît"-ê de <code>var elmTab = null</code>... [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 16:13, 24 tîrmeh 2026 (UTC)
?:
<syntaxhighlight lang="js">
if (
mw.config.get('wgAction') === 'edit' ||
mw.config.get('wgAction') === 'submit'
){
var elmTab = [];
} else {
var elmTab = $(this).find('.j-pewist').clone();
}
</syntaxhighlight>
--[[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 16:31, 24 tîrmeh 2026 (UTC)
:Ez jî nizanim Claude çiqas ji mediawiki fêm dike lê heta niha ti tişt nîne ku min jê pirs kir û nikaribû çêke, bila wekî reklam nebe feqat Claude mikemmel e, dibêjim "li vir çima xeletiyeke wisa derdikeve" di dosyeya 2000 rêzî de diçe tiştê xelet tenê rast dike tiştekî din naguherîne. Chatgpt û aistudio qet wisa nakin, eynî dosyeyê deh cara dinivîsin, deh netîceyên cuda derdikevin :D
:Em dikarin vê amûrê wextê edit û submitê neaktîv bikin wekî <syntaxhighlight lang="js">if (!(action === "edit" || action === "submit")) {
:return;</syntaxhighlight> lê wê demê display:none wê çibe nizanim. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 18:23, 24 tîrmeh 2026 (UTC)
::display:none ne hewce ye ma jixwe di nav kodê [https://ku.wiktionary.org/w/index.php?title=MediaWiki:Gadget-jeder.js&oldid=6069025#L-49 L-49] de inline/none heye? [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 18:53, 24 tîrmeh 2026 (UTC)
:Min bi vî şiklî [https://ku.wiktionary.org/w/index.php?title=Bikarh%C3%AAner:Wikihez/vector-2022.js&diff=prev&oldid=6290816#L-28] ceriband feqat nexebitî. "display:none" di pêşdîtinê de dixebite feqat js naşixule. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 14:43, 25 tîrmeh 2026 (UTC)
::Kodên JSê pir hez nakim (pêşta hukurina APIya MWyê hewce bû) dîsa jî ez ê seh bikim :) [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 16:49, 27 tîrmeh 2026 (UTC)
:::Ez niha bi vî şiklî [https://ku.wiktionary.org/w/index.php?title=Bikarh%C3%AAner:Wikihez/test.js&oldid=6290820] [https://ku.wiktionary.org/w/index.php?title=Bikarh%C3%AAner:Wikihez/common.css&oldid=6290821#L-8] bi kar tînim ti problem nîne. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 17:09, 27 tîrmeh 2026 (UTC)
== [[MediaWiki:Gadget-PagePreviews.js]] ==
Ez dibêjim em vê amûrê jî çêkin [[:en:MediaWiki:Gadget-PagePreviews.js]] --[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 10:56, 3 tebax 2026 (UTC)
= Moda tarî =
== [[Şablon:wîkîpediya]] ==
Rengê tarî de xirab e.--[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 19:36, 4 tebax 2026 (UTC)
= Bot =
Karên ku bi botê werin çêkirin ji kerema xwe li vir binivîsin.
== Kategorî:Biwêj ==
[[:Kategorî:Biwêj]] divê were paqijkirin, lîsteya madeyên {{ş|biwêj}} çêke, yên ku tê de bûn, kirin, man hene filtre bike yên din bi destî tê çêkirin.—[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:17, 16 tîrmeh 2026 (UTC)
== Jêgirtin ==
Xistina jêgirtinên beşa [https://ku.wiktionary.org/w/index.php?search=insource%3A%2F%3D+*Ji+%5BWw%5D%C3%AAjey%C3%AA+*%3D%2F&title=Taybet%3AL%C3%AAger%C3%AEn&profile=advanced&fulltext=1&ns0=1&searchToken=8rh0bmw8dccsi7aynl6zli8uf ji wêjeyê] li beşa maneyê. —[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:17, 16 tîrmeh 2026 (UTC)
== Bota Toolforgeê ==
Botekî Toolforgeê lazim e ji bo ku xeletiyên biçûk wekî şablonên bi navên îngilîzî werin kurdîkirin yan jî valahiya beşan rast bike û hwd.—[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:17, 16 tîrmeh 2026 (UTC)
:Min [[Bikarhêner:Wikihez/skrîpt/py/kuwiktkozmetik.py|paqijiyen kozmetîk]] hazir kir feqat hîn navên şablonan naguhêre. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 20:05, 4 tebax 2026 (UTC)
== Updatew ==
Bota [[Bikarhêner:Wikihez/skrîpt/py/updateW.py|updateW]] divê were rojanekirin. Yan jî yekî nû were çêkirin. Şablonên {{ş|W}} di beşa tercimeyan de sererast dike û zimanan rêz dike. Ya niha xeletiya navê zimanî dide.—[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:17, 16 tîrmeh 2026 (UTC)
== sihir --> sêhr ==
Tercimeyên ''[[sêhr]]'' hemû dibêje ''sihir'' loma bi botê lazim e kirin ''sêhr''. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 17:43, 18 tîrmeh 2026 (UTC)
:Sihirbaz --> sêhrbaz [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 18:07, 18 tîrmeh 2026 (UTC)
== Tercimeyên dîroknas ==
Li tercimeyên [[dîroknas]], hevmaneyên wê hewce ye were îlawekirin. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 18:44, 18 tîrmeh 2026 (UTC)
== Mewlûd ==
Sererastkirina jêgirtinên mewlûdê [https://ku.wiktionary.org/w/index.php?search=insource%3A%2Fw%5C%3AMela+His%C3%AAn%C3%AA+Batey%C3%AE%2F&title=Taybet%3AL%C3%AAger%C3%AEn&ns0=1&searchToken=8m0tguy3sqt7edr4sg0u8hedo] wekî [https://ku.wiktionary.org/w/index.php?title=dax%C3%AEdar&curid=284303&diff=6265851&oldid=6142285] [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 09:43, 20 tîrmeh 2026 (UTC)
jxjsp0l9rvcpt31xsd7nh0gwknlkhzy
6333768
6333767
2026-08-15T01:22:59Z
Ghybu
1393
/* MediaWiki:Gadget-start.js */ Bersiv
6333768
wikitext
text/x-wiki
{{/ser}}
= Karên ferhengî =
== Mane ==
* [[:Kategorî:Madeyên bê beşa mane]]
** [[:Kategorî:Madeyên bê beşa mane bi kurmancî]]
Li ser van rûpelan ev made hene ku maneyan wan nehatine nivîsin û divê werin nivîsin. —[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:17, 16 tîrmeh 2026 (UTC)
== Etîmolojî ==
*[[:Kategorî:Daxwazên etîmolojiyê]]
**[[:Kategorî:Daxwazên etîmolojiyê bi kurmancî]]
Li ser van rûpelan ev made hene ku etîmolojiya wan hîn nehatine nivîsin. Ji bo alîkariyê binêre [[WF:Etîmolojî]] —[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:17, 16 tîrmeh 2026 (UTC)
== Cureyê rêzimanî ==
* [[:Kategorî:Gotarên bê kategoriya rêzimanî]]
* [[:Kategorî:Gotarên bê kategoriya rêzimanî bi kurmancî]]
Li ser van rûpelan ev made hene ku cureyên wan yên rêzimanî hîn nehatine nivîsin. Ji bo alîkariyê binêre [[Alîkarî:Cureyên peyvan]] —[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:17, 16 tîrmeh 2026 (UTC)
== Kontrol ==
* [[:Kategorî:Kontrol]]
** [[:Kategorî:Kontrola maneyê]]
Ev madde bi botê hatine çêkirin, yek bi yek divê werin kontrolkirin. —[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:17, 16 tîrmeh 2026 (UTC)
= Şablon =
== IPA ==
* {{ş|IPA}} divê [[Modul:IPA]] bi kar bîne. —[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:17, 16 tîrmeh 2026 (UTC)
== Deng ==
Kurdîkirina belgekirina {{ş|deng}} lazim e.--[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 00:06, 19 tîrmeh 2026 (UTC)
= Modul =
== Modul:form of/templates ==
* [[Modul:form of/templates]]: Divê ev modul were rojanekirin û xeletiyên berê wekî ([[hevalê]]) werin rastkirin. —[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:17, 16 tîrmeh 2026 (UTC)
*:Merheba @[[Bikarhêner:Ghybu|Ghybu]] Te gotibû di vê modulê de xeletî hene, jkx tu dikarî li vir binivîsî çi kêmasî hene, daku wextê rojane dikim ez ji bîr nekim? [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:16, 21 tîrmeh 2026 (UTC)
*::Silav. Nizanim ji bîra min çûye... Herwiha ji bo çêkirina formên navdêran zanînên cîns û tîpa dawî bes e:
*::* (-ê, mê) => çemandî, bangkirin
*::* (-ê, nêr) => îzafe
*::* (-ê, mê û nêr) => îzafe (nêr), bangkirin (mê), çemandî (mê)
*::* (-a) => îzafe (mê)
*::* (-ekî) => îzafe û çemandî (nêr, nebinavkirî)
*::* (-eke) = > îzafe (mê, nebinavkirî)
*::* ...
*:: <code>if find(mw.title.getCurrentTitle().subpageText, 'ekî$') then ... end</code>
*::<code><nowiki>{{ku-tewîn-navForm|<navdêr>|<zayend>}</nowiki></code>
*::Tablo û nivîs di yekcarî de tên çêkirin...
*::Feqet problem lêzêdekirina mînakan e. [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 17:34, 21 tîrmeh 2026 (UTC)
*:::Lêzêdekirina kîjan nimûneyan? Ev koda js ji bo çi ye? Qisûrê nenêre min fêm nekir :/ [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 18:13, 21 tîrmeh 2026 (UTC)
*::::Li vira ([[hevalê#Formeke navdêrê]]) di bin maneyên 1. û 2. mînak nayên tevlî kirin :) [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 18:18, 21 tîrmeh 2026 (UTC)
*:::::Ev tercîh e, ne mecbûrî ye, em dikarin [https://ku.wiktionary.org/w/index.php?title=heval%C3%AA&diff=prev&oldid=6276350 wisa] bikin. Wekî din? [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 18:29, 21 tîrmeh 2026 (UTC)
*::::::Min li jor tênê got ku tenê parametreyên "navdêr" û "zayend" hewce nee. Bi '''[//ku.wiktionary.org/w/index.php?title=heval%C3%AA&curid=969734&diff=6276353&oldid=6276350 vî]''' awayî jî tê çêkirin. Parametreyên din ne hewce ne. [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 18:38, 21 tîrmeh 2026 (UTC)
*:::::::Ji bo wê şabloneke din lazim e, bila ev şablon wekî îngilîzî bimîne em ji bo kurmancî yekî din çêkin. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 18:42, 21 tîrmeh 2026 (UTC)
*::::::::[https://ku.wiktionary.org/w/index.php?title=heval%C3%AA&oldid=6276885 wisa] çawa ye? Bi min nivîsîna nimûneyan zêde ne lazim e ji ber ku ti kes serê xwe pê naêşîne. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 09:46, 23 tîrmeh 2026 (UTC)
*:::::::::@[[Bikarhêner:Ghybu|Ghybu]] Vê şablonê bi kar bînin an na? Navê şablonê kê çi be? [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 19:07, 24 tîrmeh 2026 (UTC)
== Modul:columns ==
* [[Modul:columns]] were rojanekirin û {{ş|kol3}} bila lînka ''nîşan bide'' deyne beriya sernavê, kolê di qutiya rengî de bila nebe. —[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:17, 16 tîrmeh 2026 (UTC)
== Modul:etymon ==
* [[Modul:etymon kevn]]: Rojanekirin hewce ye. —[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:17, 16 tîrmeh 2026 (UTC)
== [[Modul:ziman/code to canonical name]] ==
Belgekirina skrîptê û js divê were rastkirin. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 09:31, 22 tîrmeh 2026 (UTC)
:* [[MediaWiki:UpdateLanguageNameAndCode.js]]
:[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 09:50, 22 tîrmeh 2026 (UTC)
::* [[Modul:ziman/print]]
::[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 09:52, 22 tîrmeh 2026 (UTC)
:::*[[Modul:ziman/şablon]]
:::[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 09:56, 22 tîrmeh 2026 (UTC)
::::* [[MediaWiki:Gadget-translation editor.js/ziman.json]]
::::[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 11:06, 22 tîrmeh 2026 (UTC)
== [[Modul:quote]] ==
Piştî ev modul hate hazirkirin, lazim e navên jegirtinan werin rastkirin û li hemûyan {{param|jêgirtin}} were zêdekirin. Bnr. [[Gotûbêja şablonê:Jêgirtin/Ehmedê Xanî/Mem û Zîn]] [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 22:27, 5 tebax 2026 (UTC)
::Ev modul hema bêje hazir e. Hûn li ser van madeyan çi difikirin:
# {{para|tarîx}} lazim e full date be eger na, lazim e {{para|sal}} were bikaranîn. Feqat "'''2021''' kanûna pêşîn 23" bi vî şiklî bi min ne problem e çnkî derdê en.wikt "attestation" e delîla herî pêşî jî sal e.
#: {{demo|sep=wisa xuya dibe<br>|<nowiki>{{jêder-kitêb/ceribandin|en
|tarîx=23 December 2021|nivîskar=Harry Hobbs; George Williams|sernav=Micronations and the Search for Sovereignty|url=https://www.cambridge.org/core/books/micronations-and-the-search-for-sovereignty/B0414A3A322695D9EE71E4CDDFDA06DE|weşanxane=Cambridge University Press|rûpel=155|isbn=978-1-009-15012-5|jêgirtin=jêgirtin.|t=-}}</nowiki>}}
#{{para|amadekar}}/{{para|edîtor}}/{{para|terciman}} bi şiklê edîtoriya, amadekariya, tercimekirina
#: {{demo|sep=dide<br>|<nowiki>{{jêder-kitêb/ceribandin|en
|sernav=Medical Surgical Nursing|serî=Juta's Manual of Nursing|cildê-seriyê=volume 4|edîtor=Sophie Mataniele Mogotlane; Joyce Mokoena; Motshedisi Eunice Chauke; Anne Young|sal=2005|weşanxane=Juta Academic|isbn=978-0702171840|rûpel=!12-29|jêgirtin=jêgirtin|t=-}}</nowiki>}}
--[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 13:09, 10 tebax 2026 (UTC)
:@[[Bikarhêner:Bikarhêner|Bikarhêner]] û @[[Bikarhêner:Ghybu|Ghybu]] Hîn gelek tişt hene divê îzah bikin û fikrê we pirs bikim, feqat îzahkirin pir zor e, em dest bi bikaranînê bikin û dûre tiştên ku hûn naxwazin em dikarin biguherînîn, dibe? [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 13:11, 10 tebax 2026 (UTC)
::Dibe, piştî çêbû, em di praktîkê de bibînin ku çawa ye. -- [[Bikarhêner:Bikarhêner|Bikarhêner]] ([[Gotûbêja bikarhêner:Bikarhêner|gotûbêj]]) 18:05, 10 tebax 2026 (UTC)
= Javascript =
== [[Mediawiki:Gadget-citoid-helper.js]] ==
Ji bo bi citoidê kopîkirina malûmatên çavkaniyan amûreke wisa lazim e. Xisûsen ji ber ku bi çend amûrên din dikare were bikaranîn.
Feqat çend problem hene, şablonên me de kêmasiya parametreyan gelek in û xerîteyên citoidê hîn nehatine çêkirin. Wana sererast bikin dûre vê amûrê çêkin, piştre [[MediaWiki:Gadget-start.js|start.js]] û [[MediaWiki:Gadget-wikt.add-examples.js|add examples.js]] were rojanekirin.
- --[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 00:04, 19 tîrmeh 2026 (UTC)
:Merheba @[[Bikarhêner:Bikarhêner|Bikarhêner]], ez dibêjim karê Modul:quote zêde wext bistîne, bila em dest bi bikaranîna van amûran bikin dûre kêmasiyan em ê temam bikin înşela. Dikarî vana li cihên xwe yên rast kopî paste bikî?
# [[Special:PermanentLink/6291574|Bikarhêner:Wikihez/skrîpt/js/Gadget-citoid-helper.js]] --> [[Mediawiki:Gadget-citoid-helper.js]]
# Ya li jêr kopî bike qismê herî dawî ya AmûrênVeşartî li [[MediaWiki:Gadgets-definition]]:
## <code><nowiki>* citoid-helper[ResourceLoader|hidden|default|dependencies=mediawiki.util]|citoid-helper.js</nowiki></code>
--[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:58, 26 tîrmeh 2026 (UTC)
== [[MediaWiki:Gadget-start.js]] ==
Rojanekirin hewce ye. Min gelek tişt lê zêde kir lê ez niha test dikime. Piştre em bar bikin:
* [[Bikarhêner:Wikihez/Gadget-start.js]] --> [[MediaWiki:Gadget-start.js]]
* [[Bikarhêner:Wikihez/Gadget-start.css]] --> [[MediaWiki:Gadget-start.css]]
--[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 22:08, 17 tîrmeh 2026 (UTC)
:Min [[MediaWiki:Gadget-start/data.json|data.json]] çêkir ji bo ku bi hêsanî malûmatên heyî werin guhartin bêyî guhartina Javascriptê. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 19:49, 18 tîrmeh 2026 (UTC)
:Xeletiyên ku ji bîr nekim rast bikim:
:* Wextê min çavkanî "kitêb" hilbijart û bi destî tije kir xeletiyeke [https://ku.wiktionary.org/w/index.php?title=xezete&diff=prev&oldid=6265392 wisa] derket her kelîme hate lînkkirin.
:* <code>html("⠿")</code> ev ne lazim e.
:* textarea ji bo çavkaniyên jêgirtinan xaseten yên sernav hîn jî ne draggable e.
:* pêşdîtina zindî checkbox wextê tê rakirin, pêşdîtin winda nabe.
:* Butona mobîlê ya vekirina formê di moda tarî de belî nabe, tenê wekî qutiyeke tarî xuya dibe.
:* Metna hişyarkirinê di guhartina rûpelên heyî de lazim e baştir bikim.
:[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 23:51, 18 tîrmeh 2026 (UTC)
::Ev problem çêbûn, ez ê binêrim ka çi problemên din hene. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 14:15, 19 tîrmeh 2026 (UTC)
:::Çêke: Ji bo qismê çavkaniyê yek dikare API call û Kategorî:Çavkanî bi kar bîne ji bo ku şablon zêde bikî ji yên heyî. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 21:21, 19 tîrmeh 2026 (UTC)
::::Ev jî çêbû, min beşa çavkanî jî çêkir. Eger xeletî dernekeve û problema valahiya piştî etîketê ji bîr nekim, piştî rojanekirina amûrên linkify, û citoid em dikarin bar bikin. Ez ê ti tiştê nû îlawe nekim, zêde dirêj bû. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:14, 21 tîrmeh 2026 (UTC)
:::::Merheba @[[Bikarhêner:Bikarhêner|Bikarhêner]]. Dikarî wana bar bikî?
:::::* [[Bikarhêner:Wikihez/Gadget-start.js]] --> [[MediaWiki:Gadget-start.js]]
:::::* [[Bikarhêner:Wikihez/Gadget-start.css]] --> [[MediaWiki:Gadget-start.css]]
:::::* [[MediaWiki:Gadgets-definition]] wisa rojane bike:
:::::* start[ResourceLoader|default|package|dependencies=mediawiki.util,ext.gadget.StorageUtils,ext.gadget.citoid-helper]|start.js|start.css|start.js/data.json
:::::[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 09:39, 5 tebax 2026 (UTC)
{{şirove}} Dewama ''[[Special:PermanentLink/6333688|Gotûbêja bikarhêner:Rewiye tine#WF:Nû]]'' bila gotûbêja wî em spam nekin. :D
{{r|Ghybu}} dikarî [[Special:PermanentLink/6333689|vê htmlê]] binêrî claude rast fêm kiriye yan na? Daxîne û wek html qeyd bike. --[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 18:43, 14 tebax 2026 (UTC)
:Min seh wîkîyên din jî kir, li wîkiya fransî tiştekî wekî daxwaza min çêkirine (tiştên ku ne hewce ne wekî "tab" çêkirine an jî hatine vêşartin): [//fr.wiktionary.org/w/index.php?title=fdsdfdsf&action=edit&redlink=1]. Formata me yê berî jî bi vê lojîkê hatibû çêkirin, wekî de.wiktionary ([//de.wiktionary.org/w/index.php?title=sdfdsfsdfs&action=edit&preload=Vorlage:Formatvorlage_(Substantiv_vereinfacht)]) [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 19:01, 14 tebax 2026 (UTC)
::PS: Dîsa jî Claude min rind fêm kiriye :)) Feqet min got ku beşên Mane", "Bilêvkirin" û "Beşên din" cem hev (wekî "tab") ". Û dema ku tu terî di nav "Besên din" Hevmane, Jê, ... li wira werin dayîn. Wêne/Resim û Nimûne jî di nav beşa ("tab") "Mane" [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 19:17, 14 tebax 2026 (UTC)
::Erê ya fr.wikt min jî dîtibû jixwe fikrê tab min ji wan girtibû :D (feqat min li cem wan tenê tab-a maneyê dît yên din nedît çawa tê vekirin nizanim) Berê hemû beş piştî maneyê bibûn, dûre min sê Tab çêkir, Bingehîn+Lînkkirin+Bikaranîn. Niha lazim e Tabeke din çêkim. Ya ku claude çêkiriye bnr. [[Special:PermanentLink/6333698#L-7]] ne baş e bnr. [[Special:PermanentLink/6333703|qiyaskirinê li ser vê htmlê]] Êdî ez Claude abuse dikime ji ber ku Pro ye :D [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 19:26, 14 tebax 2026 (UTC)
:::Claude dibêje:
:::Good clarification — that's a real simplification, not just a relabel. Updated STEP_GROUPS from 5 tabs down to 3:
:::Mane — the definitions themselves, plus Wêne (image), now grouped in with it instead of sitting in a separate misc tab. Nimûne needed no change since it was already rendering inside each Mane sense block, not as its own step.
:::Bilêvkirin — unchanged, still just pronunciation.
:::Beşên din — everything else in one flat bucket: hevmane, jê, têkildar, herwiha binêre, formên alternatîv, dijmane, jornav, jêrnav, notên bikaranînê, bi alfabeyên din, dûnde, çavkanî, bêhtir bixwîne, tewandin, etîmolojî, zaravayên din, werger, and bnr-h — instead of being split across the old Bingehîn/Lînkkirin/Bikaranîn/Din tabs.
:::No DOM-order changes were needed this time — the fix from the blank-tab bug looks up the tab bar's position dynamically now, so it didn't matter that I regrouped which steps go where. Same two files, saved to your Wiki folder — worth another pass through all three tabs once you've pasted this in, same as last time. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 19:34, 14 tebax 2026 (UTC)
::::Mînak:
Ziman
---------------------------------------------
Cureyê rêzimanî (Navdêr)
Navdêr (hilbijêre) ┆ Cîns (hilbijêre) ┆ Jimar (hilbijêre)
- lêker -mê -yekjimar
- rengdêr -nêr -pirjimar
- ... -... -...
---------------------------------------------
Mane || Bilêvkirin || Beşên din
hilbijêre:
- mane - IPA - Hevmane
- nimûne - kîte - Dijmane
- wêne
Dema ku tu "Cureyê rêzimanî" dikî "Lêker" :
Cureyê rêzimanî (Lêker)
Lêker (hilbijêre) ┆ Cure (hilbijêre)
- navdêr -rehê niha
- rengdêr -rehê borî
- ... -...
---------------------------------------------
┆ : select/option ("tab" nîne, tê dîtin)<br>
|| : "tab"
-- [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 19:45, 14 tebax 2026 (UTC)
'''Sê-stûnî ("┆" = ne tab), li gorî Cureyê rêzimanî:'''
{| class="wikitable"
! Cureyê rêzimanî !! Stûna 2 !! Stûna 3 !! Têbînî
|-
| Navdêr / Serenav
| Cîns (hilbijêre ▾: mê / nêr / ... — tenê heke ziman zayendê rêzimanî hebe)
| '''Jimar''' (?) — pirs li jêr
| Qadên "Forma mê/nêr/pirjimar/yekjimar" niha jî li vir hene — ma ev di "Jimar"-ê de tên tevlihev kirin, an cuda dimînin?
|-
| Rengdêr
| (heman m/n/p/y forman ku Navdêr distîne)
| Sûperlatîv (sûp) / Komparatîv (komp)
| Ne li ser her du nîgaran hatiye behs kirin — ma sê-stûnî li vir jî tê bikaranîn?
|-
| Lêker
| '''Cure''' = Cureyê lêkerê (hilbijêre ▾: gerguhêz / negerguhêz / xwerû-... / pêkhatî-... / hevedudanî-... / biwêjî-... — 10 vebijêrk)
| Di heman stûnê de: Rehê dema niha / Rehê dema borî / Rehê dema bilanî (her sê qadên nivîsandinê ne, ne hilbijêrk in)
| Ma "Cure" her sê rehan di xwe de digire wek yek stûn, an her yek stûneke cuda ye?
|-
| Tîp (herf/sembol)
| Girdêk (gir) / Hûrek (hûr)
| —
| Ne behs kiriye
|-
| Her cureyek, li gorî zimên
| Transliterasyon (tr) / Transkrîpsiyon (ts)
| —
| Bi zimên ve girêdayî ye, ne bi cureyê rêzimanî ve
|-
| Her cureyek, tenê ziman=japonî
| Hanja / Translit. hanja
| —
| Ne bi cureyê rêzimanî ve girêdayî ye
|-
| Her cureyek
| '''Tercîhên pêşketî''' (kolapsî): form, formaalt, nekatcure, nekatcins, nekatçendterm, serlînkneke, nekatpalîndrom, neformtr
| —
| Vebijarkî, ji bo hemû cureyan
|}
'''Tabên jêrîn — Mane ‖ Bilêvkirin ‖ Beşên din ("||" = tab):'''
{| class="wikitable"
! Mane !! Bilêvkirin !! Beşên din (hemû 18 hêman)
|-
| mane, nimûne, wêne
| şablonên bilêvkirinê (mînak: IPA, kîte)
| tewandin, etîmolojî, bi zaravayên din, werger, jê, têkildar, herwiha binêre, formên alternatîv, hevmane, dijmane, jornav, jêrnav, notên bikaranînê, bi alfabeyên din, dûnde, çavkanî, bêhtir bixwîne, bnr-h
|}
'''Pirsên vekirî:'''
# "Jimar" (yekjimar/pirjimar) — qadeke ku nîşan dide têketî bi xwe yekjimar e an pirjimar e. Ev cuda ye ji "Forma yekjimar (y)"/"Forma pirjimar (p)" ya heyî (ku forma DÎN a kelîmeyê tomar dike). Herdu bimînin, an werin yek kirin?
# Ma sê-stûnî tenê ji bo Navdêr/Lêker e, an ji bo Rengdêr/Tîp jî heman mantiq derbas dibe?
# Di "Beşên din" de: dixwazî pêşî navnîşek/hilbijartinek nîşan bide (17 hêmanên din jî tê de), û qad tenê piştî hilbijartinê xuya bibin?
:Tu dikarî start.js ji Tercîh/ Amûran rakî û bi test.js li Amûran herî taliyê ye biceribînî. Claude ya li jor hazir kir, Jimar ez dikarim îzah bikim. Feqat bi min di tab-a maneyê de lazim e Bi zaravayên din (heta wek werger her car bila li rûpelan were zêdekirin) û werger jî hebe.--[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 20:18, 14 tebax 2026 (UTC)
:;Navdêr: Tenê "cîns" û "jimar" bes e. "Forma mê", "Forma nêr", ... nayê fêm kirin. Bi min wekî "Tercîhên pêşketî" bi navkî din veşartî çêke.
:;Lêker: "Cureyê lêkerê" nayê fêm kirin, bi min pêşta "geguhez/negerguhêz" were hilbijartin, paşê jî form "hevdudanî/pêkatî/..." ji ber ku her kes vana nizanî... Dîsa jî tu dizanî.
:Bi min beşên "Hevmane" û dijmane jî bike de nav beşa Mane ("tab") ji ber ku pirr tên xwestin.
:Şûnda Wêne jî Nimûne/jêgirtin...
:Herwiha hemû bi rengê şîn hatine çêkirin, nizanim beşên din (===) bi rengê gewr an reş çito dibe? [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 21:35, 14 tebax 2026 (UTC)
::Nimûne/jêgirtin, hevmane, Dijmane li binê her maneyê hene. ji ber ku wana bi maneyê ve girêdayî ne lazim e wisa bimîne feqat belkî şiklekî baştir bibînin. Hînbûna bikaranîna formeke nû bi qasî hînbûna koda wîkiyê zor e heqîqeten... [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 21:45, 14 tebax 2026 (UTC)
:::Min şaş fêm meke feqet te amûrek ji bo Wikihez çêkiriye :) Tu dixwazî ku hemû tiştên ku te çêkiriye tevlî vê Gadgetê bikî û bikarhênerên din jî bi kar bînin... Tu jî dizanî ku kesên ku tên vira çito peyv çêdikin: Ziman > Mane > Mînak > Hevmane > Dijmane ! Du Gadget çêke yek ji bo bikarhênerên ku hertim li vira ne, yekeke din jî ji bo bikarhênerên din (yên ku pirr nên vira).
:::Herwiha kesên ku hertim li vira ne bi Gadgetê gotar çênekin, ''copy/paste'' dikin. [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 22:12, 14 tebax 2026 (UTC)
::::Min xwest her tişt li ser rêza xwe be ji bo ku hîn bibin çi diçe kû derê feqat bi vî şiklî jî zêde dirêj û tevlihev dibe. Loma ez ê wekî tu dibêjî bikim her tiştê din bila collapsed pêşketî be. Ê ku dixwaze pê lê ke û binêre çi dikare were zêdekirin. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 22:26, 14 tebax 2026 (UTC)
:::::Niha baştir tê fêm kirin {{=)}} [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 23:01, 14 tebax 2026 (UTC)
::::::Min ji Opus 5 û Design Tool îstifade kiriye hema bêje milyonek token çûn :D pêşî dîzayn kir dûre dest pê kir wekî dîna bişuxile. Pereyê xwe %100 heq dike welleh :D feqat moda tarî ji bîr kiriye :D [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 23:12, 14 tebax 2026 (UTC)
:::::::Spas! Etîmolojî jî wekî "Bilêvkirin", di beşekê din de cem wê, were çêkirin (Mane|Etîmolojî|Bilêvkirin|Beşên din)? [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 23:20, 14 tebax 2026 (UTC)
::::::::(Mane>Tewandin>Werger|Etîmolojî>Dûnde>|Bilêvkirin(formatek çawa?)>Resim|Eleqedar>Jê>Têkildar>Herwiha binêre|Beşên din)? [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 23:29, 14 tebax 2026 (UTC)
:::::::::Nizanim, biceribîne... [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 23:43, 14 tebax 2026 (UTC)
::::::::::"Li şablonekê bigere" ser Maneyê hatiye nivîsandin, nizanim rind tê fêm kirin an na? Min paşê fêm kir :)) Naskirina Wîkîferhengê hewce ye... Li bin were nivîsandin û "notek" hewce ye. [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 00:02, 15 tebax 2026 (UTC)
:::::::::::"Malûmatên pêşketî nîşan bide" jî bike ser "Hevman" ji ber ku pirr li jor e. Tu nizanî çi dike (nayê dîtin)... [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 00:09, 15 tebax 2026 (UTC)
::::::::::::Dever/Devok jî were nivîsandin ? [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 01:22, 15 tebax 2026 (UTC)
== [[Mediawiki:Gadget-QQ.js]] ==
Ev amûr di şikle Minerva de. Her daîm vê xeletiyê dide:
<syntaxhighlight lang="js">
TypeError: Cannot read properties of null (reading 'addEventListener') at css () at runScript () at Array.<anonymous> () at flushCssBuffer ()
</syntaxhighlight> [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 19:29, 18 tîrmeh 2026 (UTC)
:* [[Bikarhêner:Wikihez/skrîpt/js/Gadget-QQ.js]] --> [[Mediawiki:Gadget-QQ.js]]
:* [[Bikarhêner:Wikihez/Gadget-QQ.css]] --> [[Mediawiki:Gadget-QQ.css]]
:Ez dibêjim çêbû lê ka çend roj biceribînim. Tiştên ku hatin sererastkirin:
:# Google Books API Key dikarî zêde bikî, dixe cookies û di gerokê de dimîne. Berê bê API Key dixebitiya lê êdî mecbûr e ku API Key-a te hebe, bidestxistina wê ne zêde zor e lê dîsa jî tevlihev e.
:# Êdî di mobîlê de dixebite, heta di mobîlê de xweştir xuya dike.
:# Moda tarî
:# OOUI dewsa jquery.ui
:# Li qutiyê çi dixwazî zêde bikî, dikare li gorî îsm, sifet, fiîl bitewîne. Lê ji bo fiîl tenê dikare çend heb inflection bîne.
:# Butona paqij bike lê zêde kir.
:# Çend paqijiyên jêgirtinên Google Kitêbê niha hene.
:[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 23:38, 18 tîrmeh 2026 (UTC)
::Tewandina fiîlan û xeletiya modulê lazim e were rastkirin. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 14:40, 21 tîrmeh 2026 (UTC)
== [[MediaWiki:Gadget-wikt.add-examples.js]] ==
Min ev amûr hinek rojane kir feqat çend problem hene berî ku bar bikin.
Tiştên ku min guhart:
# Êdî li sayfeyên bi {{ş|maneid}} jî dixebite,
# Cihê di wîkîtekstê de yê ku jêgirtin were îlawekirin baştir bû,
# [[Mediawiki:Gadget-citoid-helper.js|citoid helper]] zêde kir ji bo ku bi hêsanî çavkanî bi riya doi, isbn an urlyê werin tijîkirin.
* [[Bikarhêner:Wikihez/Gadget-wikt.add-examples.css]] --> [[MediaWiki:Gadget-wikt.add-examples.css]]
* [[Bikarhêner:Wikihez/Gadget-wikt.add-examples.js]] --> [[MediaWiki:Gadget-wikt.add-examples.js]]
- --[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 00:50, 19 tîrmeh 2026 (UTC)
:Min "wikt." qismên cache kirinê ya wîkiya fransî bi [[MediaWiki:Gadget-StorageUtils.js]] guhartiye. loma ji bîr nekin wê amûrê li [[MediaWiki:Gadgets-definition]] zêde bikin. û navê amûrê jî biguhêrînin. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 09:15, 23 tîrmeh 2026 (UTC)
::Berê li ser WF:ceribandin dixebitî. niha naxebite. Divê were rastkirin. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 22:10, 7 tebax 2026 (UTC)
== Gadget-translation editor ==
* [[MediaWiki:Gadget-translation editor.js]]: divê formata en.wîktê were bikaranîn ji ber ku me gelek tercime ji en.wîktê kopî kir û ev js hîn nikare formata wekî li jêr bi kar bîne.
<syntaxhighlight lang="wikitext">
* {{Z|sh}}:
*: Kirîlî:
*: Latînî
</syntaxhighlight>
—[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:17, 16 tîrmeh 2026 (UTC)
== [[Mediawiki:Gadget-linkify.js]] ==
* ''rûpeleke'' wekî<syntaxhighlight lang="wikitext">[[rûpeleke]]</syntaxhighlight> lînk dike, bi regexê belkî dikare wisa bike <syntaxhighlight lang="wikitext">[[rûpel]]eke</syntaxhighlight>
—[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:17, 16 tîrmeh 2026 (UTC)
* Amûreke din wekî [[User:Wikihez/Gadget-linkify.js|linkify]] lazim e ku herfên mezin biçûk bike ji bo kurmancî.—[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:17, 16 tîrmeh 2026 (UTC)
:{{r|Bikarhêner}} Merheba bira, dikarî viya jî bar bikî?:
* [[Special:PermanentLink/6291974|linkify]] --> [[Mediawiki:Gadget-linkify.js]]
Spas--[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 11:42, 29 tîrmeh 2026 (UTC)
:Dûre [https://ku.wiktionary.org/wiki/MediaWiki:Gadget-start.js#L-283 li vir] wiktviLinkify bike kuLinkify xêra xwe [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 11:51, 29 tîrmeh 2026 (UTC)
::Min ji bîr kir lê zêde bikim niha nikare "Dİ" bike "di", xeletiyeke berbelav a di nivîsên kurdî de, herfên din ên wekî ll yan rr jî hewce ne werin zêdekirin. Dûre em zêde bikin. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 21:42, 29 tîrmeh 2026 (UTC)
:::Min nû ferq kir, sayfeyên ku hîn nehatine çêkirin wîkîlînk nake. Problemeke mezin e divê were rastkirin. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 18:15, 30 tîrmeh 2026 (UTC)
::::Na, lînk dike, tiştekî din heye... [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 10:49, 31 tîrmeh 2026 (UTC)
== Amûra manayê ==
Amûreke din ji bo nivîsina maneyê wekî Nimûne zêde bike lazim e [https://ku.wiktionary.org/w/index.php?title=Bikarh%C3%AAner:Wikihez/test.js&oldid=6276876 js] [https://ku.wiktionary.org/w/index.php?title=%C5%9Eablon:ceribandin2&oldid=6265629 şablon] [https://ku.wiktionary.org/w/index.php?title=Bikarh%C3%AAner:Wikihez/common.css&oldid=6265642 css] --[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 09:12, 23 tîrmeh 2026 (UTC)
== [[MediaWiki:Gadget-jeder.js]] ==
@[[Bikarhêner:Ghybu|Ghybu]] Çavkaniyên jêderê di moda pêşdîtinê de jêderê vedişêre, ew jî min gelek eciz dike wextê çavkanî zêde dikim. Min ji Claude pirsî û kodan nîşanî wê da, wisa cewab da:
Yes — and this file actually explains the whole thing precisely, better than my earlier guess about extract-stripping.
What's happening: the CSS rule
<syntaxhighlight lang="css">
.jeder{
display:none;
}
</syntaxhighlight>
hides every citation by default, *unconditionally*. The only thing that ever makes it visible again is the gadget's JS: it finds each `.jeder`, builds the short "`— (year, author, +)`" summary from the `.j-pewist` fields, and either reveals the short version or — for citations with no `.j-pewist` fields — explicitly sets `display:inline` on the original.
So visibility of citations depends entirely on this JS running. In the normal article view (Image 1) it runs, so you see the collapsed "`(1918, E. Rehmî Ji Mala Hekariyan, Amadekar: M. E. Bozarslan, +)`" form. In whatever generated Image 2 — a hover-preview/extract/API render — gadget JS doesn't execute, so nothing ever removes the `display:none`, and the citation vanishes completely rather than degrading to "still visible, just not collapsed."
<b>The fix:</b> flip the default so the *un-collapsed* state is the safe fallback, and let JS do the hiding only after it successfully builds the short version. That way, any context without JS shows the full citation instead of nothing.
CSS — remove the blanket hide:
<syntaxhighlight lang="css">
.jeder {
/* intentionally no display:none here — see Gadget-... .js */
}
</syntaxhighlight>
JS — do the hiding from script, after the short form exists:
{{veşêre-ser}}
<syntaxhighlight lang="js">
// Ji bo şablonên [[Şablon:jêder]] hatiye nivîsandin.
// Parametreyên ku di navbera "<span class="j-pewist">...</span>" an "{{j-pêwîst|...}}" de ne venaşêre.
$(function() {
function nivisaKurtTevliBike(sund, nivisKurt) {
var zede = $('<a>+</a>')
.addClass('click')
.attr('href', '#')
.attr('title', 'zêdetir')
.css('font-weight', 'bold');
var kurt = $(' <a>↩</a>')
.addClass('click-kurt')
.attr('href', '#')
.attr('title', 'veşêre')
.css('font-weight', 'bold');
$('<span>' + nivisKurt + '</span>')
.append(zede).append(')')
.addClass('jeder-kurt')
.css('font-size', '0.85em')
.insertAfter(sund);
sund.append(' ').append(kurt);
// Only hide the full citation once the short summary actually exists.
// If this script never runs (no-JS clients, hover-preview extracts,
// action=render, etc.), the full citation stays visible instead of
// silently disappearing.
sund.css('display', 'none');
}
function vesere() {
$('.jeder').each(function() {
var elmTab = $(this).find('.j-pewist').clone();
if (elmTab.length) {
var elm = '';
for (var i = elmTab.length - 1; i >= 0; i--) {
elm = elmTab.eq(i).html() + ', ' + elm;
}
var nivisKurt = ' — (' + elm;
nivisaKurtTevliBike($(this), nivisKurt);
}
// else: no j-pewist fields to shorten — leave the full citation
// as it already renders (visible), nothing to do.
});
}
vesere();
$(".click").click(function(e) {
e.preventDefault();
$(this).parent('.jeder-kurt').css('display', 'none');
$(this).parent('.jeder-kurt').prev().css('display', 'inline');
});
$(".click-kurt").click(function(e) {
e.preventDefault();
$(this).parent('.jeder').css('display', 'none');
$(this).parent('.jeder').next().css('display', 'inline');
});
});
</syntaxhighlight>
Net effect:
- JS-enabled readers (normal article view): identical experience to today — collapsed short form with `+`/`↩` toggle.
- No-JS contexts (previews, extracts, screen readers before JS loads, print, etc.): full citation is shown instead of nothing — a real regression fix rather than a cosmetic one.
One caveat worth being upfront about: this fixes it *if* the preview context renders the gadget's HTML/CSS but doesn't execute gadget JS (which is the far more common case, and what this code strongly suggests is happening). If Image 2 instead comes from a pipeline that strips the `.jeder`/`.jegirtin-text` elements out of the HTML entirely before this CSS/JS even gets a chance to apply, no on-wiki CSS/JS change can help — that'd need the extract-generation config changed instead. Given what this gadget file shows, though, I'd bet on the CSS-hide explanation.
{{veşêre-bin}}
Em dûre biceribînin eger xeletî tinebe, vî tiştî jî rast bikin. --[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 20:00, 23 tîrmeh 2026 (UTC)
:Ez APIya MediaWiki rind nizanim belkî Claude dizane:) Em nikarin bibêjin dema ku moda "''action=edit''" e fonksiyona <code>function vesere()</code> bi kar meyîne. [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 15:57, 24 tîrmeh 2026 (UTC)
::Na, di moda "edît"-ê de <code>var elmTab = null</code>... [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 16:13, 24 tîrmeh 2026 (UTC)
?:
<syntaxhighlight lang="js">
if (
mw.config.get('wgAction') === 'edit' ||
mw.config.get('wgAction') === 'submit'
){
var elmTab = [];
} else {
var elmTab = $(this).find('.j-pewist').clone();
}
</syntaxhighlight>
--[[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 16:31, 24 tîrmeh 2026 (UTC)
:Ez jî nizanim Claude çiqas ji mediawiki fêm dike lê heta niha ti tişt nîne ku min jê pirs kir û nikaribû çêke, bila wekî reklam nebe feqat Claude mikemmel e, dibêjim "li vir çima xeletiyeke wisa derdikeve" di dosyeya 2000 rêzî de diçe tiştê xelet tenê rast dike tiştekî din naguherîne. Chatgpt û aistudio qet wisa nakin, eynî dosyeyê deh cara dinivîsin, deh netîceyên cuda derdikevin :D
:Em dikarin vê amûrê wextê edit û submitê neaktîv bikin wekî <syntaxhighlight lang="js">if (!(action === "edit" || action === "submit")) {
:return;</syntaxhighlight> lê wê demê display:none wê çibe nizanim. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 18:23, 24 tîrmeh 2026 (UTC)
::display:none ne hewce ye ma jixwe di nav kodê [https://ku.wiktionary.org/w/index.php?title=MediaWiki:Gadget-jeder.js&oldid=6069025#L-49 L-49] de inline/none heye? [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 18:53, 24 tîrmeh 2026 (UTC)
:Min bi vî şiklî [https://ku.wiktionary.org/w/index.php?title=Bikarh%C3%AAner:Wikihez/vector-2022.js&diff=prev&oldid=6290816#L-28] ceriband feqat nexebitî. "display:none" di pêşdîtinê de dixebite feqat js naşixule. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 14:43, 25 tîrmeh 2026 (UTC)
::Kodên JSê pir hez nakim (pêşta hukurina APIya MWyê hewce bû) dîsa jî ez ê seh bikim :) [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 16:49, 27 tîrmeh 2026 (UTC)
:::Ez niha bi vî şiklî [https://ku.wiktionary.org/w/index.php?title=Bikarh%C3%AAner:Wikihez/test.js&oldid=6290820] [https://ku.wiktionary.org/w/index.php?title=Bikarh%C3%AAner:Wikihez/common.css&oldid=6290821#L-8] bi kar tînim ti problem nîne. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 17:09, 27 tîrmeh 2026 (UTC)
== [[MediaWiki:Gadget-PagePreviews.js]] ==
Ez dibêjim em vê amûrê jî çêkin [[:en:MediaWiki:Gadget-PagePreviews.js]] --[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 10:56, 3 tebax 2026 (UTC)
= Moda tarî =
== [[Şablon:wîkîpediya]] ==
Rengê tarî de xirab e.--[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 19:36, 4 tebax 2026 (UTC)
= Bot =
Karên ku bi botê werin çêkirin ji kerema xwe li vir binivîsin.
== Kategorî:Biwêj ==
[[:Kategorî:Biwêj]] divê were paqijkirin, lîsteya madeyên {{ş|biwêj}} çêke, yên ku tê de bûn, kirin, man hene filtre bike yên din bi destî tê çêkirin.—[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:17, 16 tîrmeh 2026 (UTC)
== Jêgirtin ==
Xistina jêgirtinên beşa [https://ku.wiktionary.org/w/index.php?search=insource%3A%2F%3D+*Ji+%5BWw%5D%C3%AAjey%C3%AA+*%3D%2F&title=Taybet%3AL%C3%AAger%C3%AEn&profile=advanced&fulltext=1&ns0=1&searchToken=8rh0bmw8dccsi7aynl6zli8uf ji wêjeyê] li beşa maneyê. —[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:17, 16 tîrmeh 2026 (UTC)
== Bota Toolforgeê ==
Botekî Toolforgeê lazim e ji bo ku xeletiyên biçûk wekî şablonên bi navên îngilîzî werin kurdîkirin yan jî valahiya beşan rast bike û hwd.—[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:17, 16 tîrmeh 2026 (UTC)
:Min [[Bikarhêner:Wikihez/skrîpt/py/kuwiktkozmetik.py|paqijiyen kozmetîk]] hazir kir feqat hîn navên şablonan naguhêre. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 20:05, 4 tebax 2026 (UTC)
== Updatew ==
Bota [[Bikarhêner:Wikihez/skrîpt/py/updateW.py|updateW]] divê were rojanekirin. Yan jî yekî nû were çêkirin. Şablonên {{ş|W}} di beşa tercimeyan de sererast dike û zimanan rêz dike. Ya niha xeletiya navê zimanî dide.—[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:17, 16 tîrmeh 2026 (UTC)
== sihir --> sêhr ==
Tercimeyên ''[[sêhr]]'' hemû dibêje ''sihir'' loma bi botê lazim e kirin ''sêhr''. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 17:43, 18 tîrmeh 2026 (UTC)
:Sihirbaz --> sêhrbaz [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 18:07, 18 tîrmeh 2026 (UTC)
== Tercimeyên dîroknas ==
Li tercimeyên [[dîroknas]], hevmaneyên wê hewce ye were îlawekirin. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 18:44, 18 tîrmeh 2026 (UTC)
== Mewlûd ==
Sererastkirina jêgirtinên mewlûdê [https://ku.wiktionary.org/w/index.php?search=insource%3A%2Fw%5C%3AMela+His%C3%AAn%C3%AA+Batey%C3%AE%2F&title=Taybet%3AL%C3%AAger%C3%AEn&ns0=1&searchToken=8m0tguy3sqt7edr4sg0u8hedo] wekî [https://ku.wiktionary.org/w/index.php?title=dax%C3%AEdar&curid=284303&diff=6265851&oldid=6142285] [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 09:43, 20 tîrmeh 2026 (UTC)
7i9mz5i7592aqv4czkziyjj18b7xgdy
6333769
6333768
2026-08-15T01:44:58Z
Ghybu
1393
/* MediaWiki:Gadget-start.js */ Bersiv
6333769
wikitext
text/x-wiki
{{/ser}}
= Karên ferhengî =
== Mane ==
* [[:Kategorî:Madeyên bê beşa mane]]
** [[:Kategorî:Madeyên bê beşa mane bi kurmancî]]
Li ser van rûpelan ev made hene ku maneyan wan nehatine nivîsin û divê werin nivîsin. —[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:17, 16 tîrmeh 2026 (UTC)
== Etîmolojî ==
*[[:Kategorî:Daxwazên etîmolojiyê]]
**[[:Kategorî:Daxwazên etîmolojiyê bi kurmancî]]
Li ser van rûpelan ev made hene ku etîmolojiya wan hîn nehatine nivîsin. Ji bo alîkariyê binêre [[WF:Etîmolojî]] —[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:17, 16 tîrmeh 2026 (UTC)
== Cureyê rêzimanî ==
* [[:Kategorî:Gotarên bê kategoriya rêzimanî]]
* [[:Kategorî:Gotarên bê kategoriya rêzimanî bi kurmancî]]
Li ser van rûpelan ev made hene ku cureyên wan yên rêzimanî hîn nehatine nivîsin. Ji bo alîkariyê binêre [[Alîkarî:Cureyên peyvan]] —[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:17, 16 tîrmeh 2026 (UTC)
== Kontrol ==
* [[:Kategorî:Kontrol]]
** [[:Kategorî:Kontrola maneyê]]
Ev madde bi botê hatine çêkirin, yek bi yek divê werin kontrolkirin. —[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:17, 16 tîrmeh 2026 (UTC)
= Şablon =
== IPA ==
* {{ş|IPA}} divê [[Modul:IPA]] bi kar bîne. —[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:17, 16 tîrmeh 2026 (UTC)
== Deng ==
Kurdîkirina belgekirina {{ş|deng}} lazim e.--[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 00:06, 19 tîrmeh 2026 (UTC)
= Modul =
== Modul:form of/templates ==
* [[Modul:form of/templates]]: Divê ev modul were rojanekirin û xeletiyên berê wekî ([[hevalê]]) werin rastkirin. —[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:17, 16 tîrmeh 2026 (UTC)
*:Merheba @[[Bikarhêner:Ghybu|Ghybu]] Te gotibû di vê modulê de xeletî hene, jkx tu dikarî li vir binivîsî çi kêmasî hene, daku wextê rojane dikim ez ji bîr nekim? [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:16, 21 tîrmeh 2026 (UTC)
*::Silav. Nizanim ji bîra min çûye... Herwiha ji bo çêkirina formên navdêran zanînên cîns û tîpa dawî bes e:
*::* (-ê, mê) => çemandî, bangkirin
*::* (-ê, nêr) => îzafe
*::* (-ê, mê û nêr) => îzafe (nêr), bangkirin (mê), çemandî (mê)
*::* (-a) => îzafe (mê)
*::* (-ekî) => îzafe û çemandî (nêr, nebinavkirî)
*::* (-eke) = > îzafe (mê, nebinavkirî)
*::* ...
*:: <code>if find(mw.title.getCurrentTitle().subpageText, 'ekî$') then ... end</code>
*::<code><nowiki>{{ku-tewîn-navForm|<navdêr>|<zayend>}</nowiki></code>
*::Tablo û nivîs di yekcarî de tên çêkirin...
*::Feqet problem lêzêdekirina mînakan e. [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 17:34, 21 tîrmeh 2026 (UTC)
*:::Lêzêdekirina kîjan nimûneyan? Ev koda js ji bo çi ye? Qisûrê nenêre min fêm nekir :/ [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 18:13, 21 tîrmeh 2026 (UTC)
*::::Li vira ([[hevalê#Formeke navdêrê]]) di bin maneyên 1. û 2. mînak nayên tevlî kirin :) [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 18:18, 21 tîrmeh 2026 (UTC)
*:::::Ev tercîh e, ne mecbûrî ye, em dikarin [https://ku.wiktionary.org/w/index.php?title=heval%C3%AA&diff=prev&oldid=6276350 wisa] bikin. Wekî din? [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 18:29, 21 tîrmeh 2026 (UTC)
*::::::Min li jor tênê got ku tenê parametreyên "navdêr" û "zayend" hewce nee. Bi '''[//ku.wiktionary.org/w/index.php?title=heval%C3%AA&curid=969734&diff=6276353&oldid=6276350 vî]''' awayî jî tê çêkirin. Parametreyên din ne hewce ne. [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 18:38, 21 tîrmeh 2026 (UTC)
*:::::::Ji bo wê şabloneke din lazim e, bila ev şablon wekî îngilîzî bimîne em ji bo kurmancî yekî din çêkin. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 18:42, 21 tîrmeh 2026 (UTC)
*::::::::[https://ku.wiktionary.org/w/index.php?title=heval%C3%AA&oldid=6276885 wisa] çawa ye? Bi min nivîsîna nimûneyan zêde ne lazim e ji ber ku ti kes serê xwe pê naêşîne. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 09:46, 23 tîrmeh 2026 (UTC)
*:::::::::@[[Bikarhêner:Ghybu|Ghybu]] Vê şablonê bi kar bînin an na? Navê şablonê kê çi be? [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 19:07, 24 tîrmeh 2026 (UTC)
== Modul:columns ==
* [[Modul:columns]] were rojanekirin û {{ş|kol3}} bila lînka ''nîşan bide'' deyne beriya sernavê, kolê di qutiya rengî de bila nebe. —[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:17, 16 tîrmeh 2026 (UTC)
== Modul:etymon ==
* [[Modul:etymon kevn]]: Rojanekirin hewce ye. —[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:17, 16 tîrmeh 2026 (UTC)
== [[Modul:ziman/code to canonical name]] ==
Belgekirina skrîptê û js divê were rastkirin. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 09:31, 22 tîrmeh 2026 (UTC)
:* [[MediaWiki:UpdateLanguageNameAndCode.js]]
:[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 09:50, 22 tîrmeh 2026 (UTC)
::* [[Modul:ziman/print]]
::[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 09:52, 22 tîrmeh 2026 (UTC)
:::*[[Modul:ziman/şablon]]
:::[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 09:56, 22 tîrmeh 2026 (UTC)
::::* [[MediaWiki:Gadget-translation editor.js/ziman.json]]
::::[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 11:06, 22 tîrmeh 2026 (UTC)
== [[Modul:quote]] ==
Piştî ev modul hate hazirkirin, lazim e navên jegirtinan werin rastkirin û li hemûyan {{param|jêgirtin}} were zêdekirin. Bnr. [[Gotûbêja şablonê:Jêgirtin/Ehmedê Xanî/Mem û Zîn]] [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 22:27, 5 tebax 2026 (UTC)
::Ev modul hema bêje hazir e. Hûn li ser van madeyan çi difikirin:
# {{para|tarîx}} lazim e full date be eger na, lazim e {{para|sal}} were bikaranîn. Feqat "'''2021''' kanûna pêşîn 23" bi vî şiklî bi min ne problem e çnkî derdê en.wikt "attestation" e delîla herî pêşî jî sal e.
#: {{demo|sep=wisa xuya dibe<br>|<nowiki>{{jêder-kitêb/ceribandin|en
|tarîx=23 December 2021|nivîskar=Harry Hobbs; George Williams|sernav=Micronations and the Search for Sovereignty|url=https://www.cambridge.org/core/books/micronations-and-the-search-for-sovereignty/B0414A3A322695D9EE71E4CDDFDA06DE|weşanxane=Cambridge University Press|rûpel=155|isbn=978-1-009-15012-5|jêgirtin=jêgirtin.|t=-}}</nowiki>}}
#{{para|amadekar}}/{{para|edîtor}}/{{para|terciman}} bi şiklê edîtoriya, amadekariya, tercimekirina
#: {{demo|sep=dide<br>|<nowiki>{{jêder-kitêb/ceribandin|en
|sernav=Medical Surgical Nursing|serî=Juta's Manual of Nursing|cildê-seriyê=volume 4|edîtor=Sophie Mataniele Mogotlane; Joyce Mokoena; Motshedisi Eunice Chauke; Anne Young|sal=2005|weşanxane=Juta Academic|isbn=978-0702171840|rûpel=!12-29|jêgirtin=jêgirtin|t=-}}</nowiki>}}
--[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 13:09, 10 tebax 2026 (UTC)
:@[[Bikarhêner:Bikarhêner|Bikarhêner]] û @[[Bikarhêner:Ghybu|Ghybu]] Hîn gelek tişt hene divê îzah bikin û fikrê we pirs bikim, feqat îzahkirin pir zor e, em dest bi bikaranînê bikin û dûre tiştên ku hûn naxwazin em dikarin biguherînîn, dibe? [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 13:11, 10 tebax 2026 (UTC)
::Dibe, piştî çêbû, em di praktîkê de bibînin ku çawa ye. -- [[Bikarhêner:Bikarhêner|Bikarhêner]] ([[Gotûbêja bikarhêner:Bikarhêner|gotûbêj]]) 18:05, 10 tebax 2026 (UTC)
= Javascript =
== [[Mediawiki:Gadget-citoid-helper.js]] ==
Ji bo bi citoidê kopîkirina malûmatên çavkaniyan amûreke wisa lazim e. Xisûsen ji ber ku bi çend amûrên din dikare were bikaranîn.
Feqat çend problem hene, şablonên me de kêmasiya parametreyan gelek in û xerîteyên citoidê hîn nehatine çêkirin. Wana sererast bikin dûre vê amûrê çêkin, piştre [[MediaWiki:Gadget-start.js|start.js]] û [[MediaWiki:Gadget-wikt.add-examples.js|add examples.js]] were rojanekirin.
- --[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 00:04, 19 tîrmeh 2026 (UTC)
:Merheba @[[Bikarhêner:Bikarhêner|Bikarhêner]], ez dibêjim karê Modul:quote zêde wext bistîne, bila em dest bi bikaranîna van amûran bikin dûre kêmasiyan em ê temam bikin înşela. Dikarî vana li cihên xwe yên rast kopî paste bikî?
# [[Special:PermanentLink/6291574|Bikarhêner:Wikihez/skrîpt/js/Gadget-citoid-helper.js]] --> [[Mediawiki:Gadget-citoid-helper.js]]
# Ya li jêr kopî bike qismê herî dawî ya AmûrênVeşartî li [[MediaWiki:Gadgets-definition]]:
## <code><nowiki>* citoid-helper[ResourceLoader|hidden|default|dependencies=mediawiki.util]|citoid-helper.js</nowiki></code>
--[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:58, 26 tîrmeh 2026 (UTC)
== [[MediaWiki:Gadget-start.js]] ==
Rojanekirin hewce ye. Min gelek tişt lê zêde kir lê ez niha test dikime. Piştre em bar bikin:
* [[Bikarhêner:Wikihez/Gadget-start.js]] --> [[MediaWiki:Gadget-start.js]]
* [[Bikarhêner:Wikihez/Gadget-start.css]] --> [[MediaWiki:Gadget-start.css]]
--[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 22:08, 17 tîrmeh 2026 (UTC)
:Min [[MediaWiki:Gadget-start/data.json|data.json]] çêkir ji bo ku bi hêsanî malûmatên heyî werin guhartin bêyî guhartina Javascriptê. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 19:49, 18 tîrmeh 2026 (UTC)
:Xeletiyên ku ji bîr nekim rast bikim:
:* Wextê min çavkanî "kitêb" hilbijart û bi destî tije kir xeletiyeke [https://ku.wiktionary.org/w/index.php?title=xezete&diff=prev&oldid=6265392 wisa] derket her kelîme hate lînkkirin.
:* <code>html("⠿")</code> ev ne lazim e.
:* textarea ji bo çavkaniyên jêgirtinan xaseten yên sernav hîn jî ne draggable e.
:* pêşdîtina zindî checkbox wextê tê rakirin, pêşdîtin winda nabe.
:* Butona mobîlê ya vekirina formê di moda tarî de belî nabe, tenê wekî qutiyeke tarî xuya dibe.
:* Metna hişyarkirinê di guhartina rûpelên heyî de lazim e baştir bikim.
:[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 23:51, 18 tîrmeh 2026 (UTC)
::Ev problem çêbûn, ez ê binêrim ka çi problemên din hene. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 14:15, 19 tîrmeh 2026 (UTC)
:::Çêke: Ji bo qismê çavkaniyê yek dikare API call û Kategorî:Çavkanî bi kar bîne ji bo ku şablon zêde bikî ji yên heyî. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 21:21, 19 tîrmeh 2026 (UTC)
::::Ev jî çêbû, min beşa çavkanî jî çêkir. Eger xeletî dernekeve û problema valahiya piştî etîketê ji bîr nekim, piştî rojanekirina amûrên linkify, û citoid em dikarin bar bikin. Ez ê ti tiştê nû îlawe nekim, zêde dirêj bû. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:14, 21 tîrmeh 2026 (UTC)
:::::Merheba @[[Bikarhêner:Bikarhêner|Bikarhêner]]. Dikarî wana bar bikî?
:::::* [[Bikarhêner:Wikihez/Gadget-start.js]] --> [[MediaWiki:Gadget-start.js]]
:::::* [[Bikarhêner:Wikihez/Gadget-start.css]] --> [[MediaWiki:Gadget-start.css]]
:::::* [[MediaWiki:Gadgets-definition]] wisa rojane bike:
:::::* start[ResourceLoader|default|package|dependencies=mediawiki.util,ext.gadget.StorageUtils,ext.gadget.citoid-helper]|start.js|start.css|start.js/data.json
:::::[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 09:39, 5 tebax 2026 (UTC)
{{şirove}} Dewama ''[[Special:PermanentLink/6333688|Gotûbêja bikarhêner:Rewiye tine#WF:Nû]]'' bila gotûbêja wî em spam nekin. :D
{{r|Ghybu}} dikarî [[Special:PermanentLink/6333689|vê htmlê]] binêrî claude rast fêm kiriye yan na? Daxîne û wek html qeyd bike. --[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 18:43, 14 tebax 2026 (UTC)
:Min seh wîkîyên din jî kir, li wîkiya fransî tiştekî wekî daxwaza min çêkirine (tiştên ku ne hewce ne wekî "tab" çêkirine an jî hatine vêşartin): [//fr.wiktionary.org/w/index.php?title=fdsdfdsf&action=edit&redlink=1]. Formata me yê berî jî bi vê lojîkê hatibû çêkirin, wekî de.wiktionary ([//de.wiktionary.org/w/index.php?title=sdfdsfsdfs&action=edit&preload=Vorlage:Formatvorlage_(Substantiv_vereinfacht)]) [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 19:01, 14 tebax 2026 (UTC)
::PS: Dîsa jî Claude min rind fêm kiriye :)) Feqet min got ku beşên Mane", "Bilêvkirin" û "Beşên din" cem hev (wekî "tab") ". Û dema ku tu terî di nav "Besên din" Hevmane, Jê, ... li wira werin dayîn. Wêne/Resim û Nimûne jî di nav beşa ("tab") "Mane" [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 19:17, 14 tebax 2026 (UTC)
::Erê ya fr.wikt min jî dîtibû jixwe fikrê tab min ji wan girtibû :D (feqat min li cem wan tenê tab-a maneyê dît yên din nedît çawa tê vekirin nizanim) Berê hemû beş piştî maneyê bibûn, dûre min sê Tab çêkir, Bingehîn+Lînkkirin+Bikaranîn. Niha lazim e Tabeke din çêkim. Ya ku claude çêkiriye bnr. [[Special:PermanentLink/6333698#L-7]] ne baş e bnr. [[Special:PermanentLink/6333703|qiyaskirinê li ser vê htmlê]] Êdî ez Claude abuse dikime ji ber ku Pro ye :D [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 19:26, 14 tebax 2026 (UTC)
:::Claude dibêje:
:::Good clarification — that's a real simplification, not just a relabel. Updated STEP_GROUPS from 5 tabs down to 3:
:::Mane — the definitions themselves, plus Wêne (image), now grouped in with it instead of sitting in a separate misc tab. Nimûne needed no change since it was already rendering inside each Mane sense block, not as its own step.
:::Bilêvkirin — unchanged, still just pronunciation.
:::Beşên din — everything else in one flat bucket: hevmane, jê, têkildar, herwiha binêre, formên alternatîv, dijmane, jornav, jêrnav, notên bikaranînê, bi alfabeyên din, dûnde, çavkanî, bêhtir bixwîne, tewandin, etîmolojî, zaravayên din, werger, and bnr-h — instead of being split across the old Bingehîn/Lînkkirin/Bikaranîn/Din tabs.
:::No DOM-order changes were needed this time — the fix from the blank-tab bug looks up the tab bar's position dynamically now, so it didn't matter that I regrouped which steps go where. Same two files, saved to your Wiki folder — worth another pass through all three tabs once you've pasted this in, same as last time. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 19:34, 14 tebax 2026 (UTC)
::::Mînak:
Ziman
---------------------------------------------
Cureyê rêzimanî (Navdêr)
Navdêr (hilbijêre) ┆ Cîns (hilbijêre) ┆ Jimar (hilbijêre)
- lêker -mê -yekjimar
- rengdêr -nêr -pirjimar
- ... -... -...
---------------------------------------------
Mane || Bilêvkirin || Beşên din
hilbijêre:
- mane - IPA - Hevmane
- nimûne - kîte - Dijmane
- wêne
Dema ku tu "Cureyê rêzimanî" dikî "Lêker" :
Cureyê rêzimanî (Lêker)
Lêker (hilbijêre) ┆ Cure (hilbijêre)
- navdêr -rehê niha
- rengdêr -rehê borî
- ... -...
---------------------------------------------
┆ : select/option ("tab" nîne, tê dîtin)<br>
|| : "tab"
-- [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 19:45, 14 tebax 2026 (UTC)
'''Sê-stûnî ("┆" = ne tab), li gorî Cureyê rêzimanî:'''
{| class="wikitable"
! Cureyê rêzimanî !! Stûna 2 !! Stûna 3 !! Têbînî
|-
| Navdêr / Serenav
| Cîns (hilbijêre ▾: mê / nêr / ... — tenê heke ziman zayendê rêzimanî hebe)
| '''Jimar''' (?) — pirs li jêr
| Qadên "Forma mê/nêr/pirjimar/yekjimar" niha jî li vir hene — ma ev di "Jimar"-ê de tên tevlihev kirin, an cuda dimînin?
|-
| Rengdêr
| (heman m/n/p/y forman ku Navdêr distîne)
| Sûperlatîv (sûp) / Komparatîv (komp)
| Ne li ser her du nîgaran hatiye behs kirin — ma sê-stûnî li vir jî tê bikaranîn?
|-
| Lêker
| '''Cure''' = Cureyê lêkerê (hilbijêre ▾: gerguhêz / negerguhêz / xwerû-... / pêkhatî-... / hevedudanî-... / biwêjî-... — 10 vebijêrk)
| Di heman stûnê de: Rehê dema niha / Rehê dema borî / Rehê dema bilanî (her sê qadên nivîsandinê ne, ne hilbijêrk in)
| Ma "Cure" her sê rehan di xwe de digire wek yek stûn, an her yek stûneke cuda ye?
|-
| Tîp (herf/sembol)
| Girdêk (gir) / Hûrek (hûr)
| —
| Ne behs kiriye
|-
| Her cureyek, li gorî zimên
| Transliterasyon (tr) / Transkrîpsiyon (ts)
| —
| Bi zimên ve girêdayî ye, ne bi cureyê rêzimanî ve
|-
| Her cureyek, tenê ziman=japonî
| Hanja / Translit. hanja
| —
| Ne bi cureyê rêzimanî ve girêdayî ye
|-
| Her cureyek
| '''Tercîhên pêşketî''' (kolapsî): form, formaalt, nekatcure, nekatcins, nekatçendterm, serlînkneke, nekatpalîndrom, neformtr
| —
| Vebijarkî, ji bo hemû cureyan
|}
'''Tabên jêrîn — Mane ‖ Bilêvkirin ‖ Beşên din ("||" = tab):'''
{| class="wikitable"
! Mane !! Bilêvkirin !! Beşên din (hemû 18 hêman)
|-
| mane, nimûne, wêne
| şablonên bilêvkirinê (mînak: IPA, kîte)
| tewandin, etîmolojî, bi zaravayên din, werger, jê, têkildar, herwiha binêre, formên alternatîv, hevmane, dijmane, jornav, jêrnav, notên bikaranînê, bi alfabeyên din, dûnde, çavkanî, bêhtir bixwîne, bnr-h
|}
'''Pirsên vekirî:'''
# "Jimar" (yekjimar/pirjimar) — qadeke ku nîşan dide têketî bi xwe yekjimar e an pirjimar e. Ev cuda ye ji "Forma yekjimar (y)"/"Forma pirjimar (p)" ya heyî (ku forma DÎN a kelîmeyê tomar dike). Herdu bimînin, an werin yek kirin?
# Ma sê-stûnî tenê ji bo Navdêr/Lêker e, an ji bo Rengdêr/Tîp jî heman mantiq derbas dibe?
# Di "Beşên din" de: dixwazî pêşî navnîşek/hilbijartinek nîşan bide (17 hêmanên din jî tê de), û qad tenê piştî hilbijartinê xuya bibin?
:Tu dikarî start.js ji Tercîh/ Amûran rakî û bi test.js li Amûran herî taliyê ye biceribînî. Claude ya li jor hazir kir, Jimar ez dikarim îzah bikim. Feqat bi min di tab-a maneyê de lazim e Bi zaravayên din (heta wek werger her car bila li rûpelan were zêdekirin) û werger jî hebe.--[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 20:18, 14 tebax 2026 (UTC)
:;Navdêr: Tenê "cîns" û "jimar" bes e. "Forma mê", "Forma nêr", ... nayê fêm kirin. Bi min wekî "Tercîhên pêşketî" bi navkî din veşartî çêke.
:;Lêker: "Cureyê lêkerê" nayê fêm kirin, bi min pêşta "geguhez/negerguhêz" were hilbijartin, paşê jî form "hevdudanî/pêkatî/..." ji ber ku her kes vana nizanî... Dîsa jî tu dizanî.
:Bi min beşên "Hevmane" û dijmane jî bike de nav beşa Mane ("tab") ji ber ku pirr tên xwestin.
:Şûnda Wêne jî Nimûne/jêgirtin...
:Herwiha hemû bi rengê şîn hatine çêkirin, nizanim beşên din (===) bi rengê gewr an reş çito dibe? [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 21:35, 14 tebax 2026 (UTC)
::Nimûne/jêgirtin, hevmane, Dijmane li binê her maneyê hene. ji ber ku wana bi maneyê ve girêdayî ne lazim e wisa bimîne feqat belkî şiklekî baştir bibînin. Hînbûna bikaranîna formeke nû bi qasî hînbûna koda wîkiyê zor e heqîqeten... [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 21:45, 14 tebax 2026 (UTC)
:::Min şaş fêm meke feqet te amûrek ji bo Wikihez çêkiriye :) Tu dixwazî ku hemû tiştên ku te çêkiriye tevlî vê Gadgetê bikî û bikarhênerên din jî bi kar bînin... Tu jî dizanî ku kesên ku tên vira çito peyv çêdikin: Ziman > Mane > Mînak > Hevmane > Dijmane ! Du Gadget çêke yek ji bo bikarhênerên ku hertim li vira ne, yekeke din jî ji bo bikarhênerên din (yên ku pirr nên vira).
:::Herwiha kesên ku hertim li vira ne bi Gadgetê gotar çênekin, ''copy/paste'' dikin. [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 22:12, 14 tebax 2026 (UTC)
::::Min xwest her tişt li ser rêza xwe be ji bo ku hîn bibin çi diçe kû derê feqat bi vî şiklî jî zêde dirêj û tevlihev dibe. Loma ez ê wekî tu dibêjî bikim her tiştê din bila collapsed pêşketî be. Ê ku dixwaze pê lê ke û binêre çi dikare were zêdekirin. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 22:26, 14 tebax 2026 (UTC)
:::::Niha baştir tê fêm kirin {{=)}} [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 23:01, 14 tebax 2026 (UTC)
::::::Min ji Opus 5 û Design Tool îstifade kiriye hema bêje milyonek token çûn :D pêşî dîzayn kir dûre dest pê kir wekî dîna bişuxile. Pereyê xwe %100 heq dike welleh :D feqat moda tarî ji bîr kiriye :D [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 23:12, 14 tebax 2026 (UTC)
:::::::Spas! Etîmolojî jî wekî "Bilêvkirin", di beşekê din de cem wê, were çêkirin (Mane|Etîmolojî|Bilêvkirin|Beşên din)? [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 23:20, 14 tebax 2026 (UTC)
::::::::(Mane>Tewandin>Werger|Etîmolojî>Dûnde>|Bilêvkirin(formatek çawa?)>Resim|Eleqedar>Jê>Têkildar>Herwiha binêre|Beşên din)? [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 23:29, 14 tebax 2026 (UTC)
:::::::::Nizanim, biceribîne... [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 23:43, 14 tebax 2026 (UTC)
::::::::::"Li şablonekê bigere" ser Maneyê hatiye nivîsandin, nizanim rind tê fêm kirin an na? Min paşê fêm kir :)) Naskirina Wîkîferhengê hewce ye... Li bin were nivîsandin û "notek" hewce ye. [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 00:02, 15 tebax 2026 (UTC)
:::::::::::"Malûmatên pêşketî nîşan bide" jî bike ser "Hevman" ji ber ku pirr li jor e. Tu nizanî çi dike (nayê dîtin)... [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 00:09, 15 tebax 2026 (UTC)
::::::::::::Dever/Devok jî were nivîsandin ? [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 01:22, 15 tebax 2026 (UTC)
:::::::::::::Tistekî din, dema ku tu maneyê dinivîsî bi otomatîk li jêr mane "2" tê nivîsandin, ew jî ne baş e (pirranî ne hewce ye). Bi min wekî "tab" cem "Mane 1" were vekirin (MAne1|Mane 2|Mane 3), bi otomatîk û an jî bi tikandina ser "Maneyeke din lê zêde bike" (cem beşa Maneyê). An jî bin beşa Wergerê bi nivîsa "maneyeke din lê zêde bike" were çêkirin. [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 01:44, 15 tebax 2026 (UTC)
== [[Mediawiki:Gadget-QQ.js]] ==
Ev amûr di şikle Minerva de. Her daîm vê xeletiyê dide:
<syntaxhighlight lang="js">
TypeError: Cannot read properties of null (reading 'addEventListener') at css () at runScript () at Array.<anonymous> () at flushCssBuffer ()
</syntaxhighlight> [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 19:29, 18 tîrmeh 2026 (UTC)
:* [[Bikarhêner:Wikihez/skrîpt/js/Gadget-QQ.js]] --> [[Mediawiki:Gadget-QQ.js]]
:* [[Bikarhêner:Wikihez/Gadget-QQ.css]] --> [[Mediawiki:Gadget-QQ.css]]
:Ez dibêjim çêbû lê ka çend roj biceribînim. Tiştên ku hatin sererastkirin:
:# Google Books API Key dikarî zêde bikî, dixe cookies û di gerokê de dimîne. Berê bê API Key dixebitiya lê êdî mecbûr e ku API Key-a te hebe, bidestxistina wê ne zêde zor e lê dîsa jî tevlihev e.
:# Êdî di mobîlê de dixebite, heta di mobîlê de xweştir xuya dike.
:# Moda tarî
:# OOUI dewsa jquery.ui
:# Li qutiyê çi dixwazî zêde bikî, dikare li gorî îsm, sifet, fiîl bitewîne. Lê ji bo fiîl tenê dikare çend heb inflection bîne.
:# Butona paqij bike lê zêde kir.
:# Çend paqijiyên jêgirtinên Google Kitêbê niha hene.
:[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 23:38, 18 tîrmeh 2026 (UTC)
::Tewandina fiîlan û xeletiya modulê lazim e were rastkirin. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 14:40, 21 tîrmeh 2026 (UTC)
== [[MediaWiki:Gadget-wikt.add-examples.js]] ==
Min ev amûr hinek rojane kir feqat çend problem hene berî ku bar bikin.
Tiştên ku min guhart:
# Êdî li sayfeyên bi {{ş|maneid}} jî dixebite,
# Cihê di wîkîtekstê de yê ku jêgirtin were îlawekirin baştir bû,
# [[Mediawiki:Gadget-citoid-helper.js|citoid helper]] zêde kir ji bo ku bi hêsanî çavkanî bi riya doi, isbn an urlyê werin tijîkirin.
* [[Bikarhêner:Wikihez/Gadget-wikt.add-examples.css]] --> [[MediaWiki:Gadget-wikt.add-examples.css]]
* [[Bikarhêner:Wikihez/Gadget-wikt.add-examples.js]] --> [[MediaWiki:Gadget-wikt.add-examples.js]]
- --[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 00:50, 19 tîrmeh 2026 (UTC)
:Min "wikt." qismên cache kirinê ya wîkiya fransî bi [[MediaWiki:Gadget-StorageUtils.js]] guhartiye. loma ji bîr nekin wê amûrê li [[MediaWiki:Gadgets-definition]] zêde bikin. û navê amûrê jî biguhêrînin. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 09:15, 23 tîrmeh 2026 (UTC)
::Berê li ser WF:ceribandin dixebitî. niha naxebite. Divê were rastkirin. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 22:10, 7 tebax 2026 (UTC)
== Gadget-translation editor ==
* [[MediaWiki:Gadget-translation editor.js]]: divê formata en.wîktê were bikaranîn ji ber ku me gelek tercime ji en.wîktê kopî kir û ev js hîn nikare formata wekî li jêr bi kar bîne.
<syntaxhighlight lang="wikitext">
* {{Z|sh}}:
*: Kirîlî:
*: Latînî
</syntaxhighlight>
—[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:17, 16 tîrmeh 2026 (UTC)
== [[Mediawiki:Gadget-linkify.js]] ==
* ''rûpeleke'' wekî<syntaxhighlight lang="wikitext">[[rûpeleke]]</syntaxhighlight> lînk dike, bi regexê belkî dikare wisa bike <syntaxhighlight lang="wikitext">[[rûpel]]eke</syntaxhighlight>
—[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:17, 16 tîrmeh 2026 (UTC)
* Amûreke din wekî [[User:Wikihez/Gadget-linkify.js|linkify]] lazim e ku herfên mezin biçûk bike ji bo kurmancî.—[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:17, 16 tîrmeh 2026 (UTC)
:{{r|Bikarhêner}} Merheba bira, dikarî viya jî bar bikî?:
* [[Special:PermanentLink/6291974|linkify]] --> [[Mediawiki:Gadget-linkify.js]]
Spas--[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 11:42, 29 tîrmeh 2026 (UTC)
:Dûre [https://ku.wiktionary.org/wiki/MediaWiki:Gadget-start.js#L-283 li vir] wiktviLinkify bike kuLinkify xêra xwe [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 11:51, 29 tîrmeh 2026 (UTC)
::Min ji bîr kir lê zêde bikim niha nikare "Dİ" bike "di", xeletiyeke berbelav a di nivîsên kurdî de, herfên din ên wekî ll yan rr jî hewce ne werin zêdekirin. Dûre em zêde bikin. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 21:42, 29 tîrmeh 2026 (UTC)
:::Min nû ferq kir, sayfeyên ku hîn nehatine çêkirin wîkîlînk nake. Problemeke mezin e divê were rastkirin. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 18:15, 30 tîrmeh 2026 (UTC)
::::Na, lînk dike, tiştekî din heye... [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 10:49, 31 tîrmeh 2026 (UTC)
== Amûra manayê ==
Amûreke din ji bo nivîsina maneyê wekî Nimûne zêde bike lazim e [https://ku.wiktionary.org/w/index.php?title=Bikarh%C3%AAner:Wikihez/test.js&oldid=6276876 js] [https://ku.wiktionary.org/w/index.php?title=%C5%9Eablon:ceribandin2&oldid=6265629 şablon] [https://ku.wiktionary.org/w/index.php?title=Bikarh%C3%AAner:Wikihez/common.css&oldid=6265642 css] --[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 09:12, 23 tîrmeh 2026 (UTC)
== [[MediaWiki:Gadget-jeder.js]] ==
@[[Bikarhêner:Ghybu|Ghybu]] Çavkaniyên jêderê di moda pêşdîtinê de jêderê vedişêre, ew jî min gelek eciz dike wextê çavkanî zêde dikim. Min ji Claude pirsî û kodan nîşanî wê da, wisa cewab da:
Yes — and this file actually explains the whole thing precisely, better than my earlier guess about extract-stripping.
What's happening: the CSS rule
<syntaxhighlight lang="css">
.jeder{
display:none;
}
</syntaxhighlight>
hides every citation by default, *unconditionally*. The only thing that ever makes it visible again is the gadget's JS: it finds each `.jeder`, builds the short "`— (year, author, +)`" summary from the `.j-pewist` fields, and either reveals the short version or — for citations with no `.j-pewist` fields — explicitly sets `display:inline` on the original.
So visibility of citations depends entirely on this JS running. In the normal article view (Image 1) it runs, so you see the collapsed "`(1918, E. Rehmî Ji Mala Hekariyan, Amadekar: M. E. Bozarslan, +)`" form. In whatever generated Image 2 — a hover-preview/extract/API render — gadget JS doesn't execute, so nothing ever removes the `display:none`, and the citation vanishes completely rather than degrading to "still visible, just not collapsed."
<b>The fix:</b> flip the default so the *un-collapsed* state is the safe fallback, and let JS do the hiding only after it successfully builds the short version. That way, any context without JS shows the full citation instead of nothing.
CSS — remove the blanket hide:
<syntaxhighlight lang="css">
.jeder {
/* intentionally no display:none here — see Gadget-... .js */
}
</syntaxhighlight>
JS — do the hiding from script, after the short form exists:
{{veşêre-ser}}
<syntaxhighlight lang="js">
// Ji bo şablonên [[Şablon:jêder]] hatiye nivîsandin.
// Parametreyên ku di navbera "<span class="j-pewist">...</span>" an "{{j-pêwîst|...}}" de ne venaşêre.
$(function() {
function nivisaKurtTevliBike(sund, nivisKurt) {
var zede = $('<a>+</a>')
.addClass('click')
.attr('href', '#')
.attr('title', 'zêdetir')
.css('font-weight', 'bold');
var kurt = $(' <a>↩</a>')
.addClass('click-kurt')
.attr('href', '#')
.attr('title', 'veşêre')
.css('font-weight', 'bold');
$('<span>' + nivisKurt + '</span>')
.append(zede).append(')')
.addClass('jeder-kurt')
.css('font-size', '0.85em')
.insertAfter(sund);
sund.append(' ').append(kurt);
// Only hide the full citation once the short summary actually exists.
// If this script never runs (no-JS clients, hover-preview extracts,
// action=render, etc.), the full citation stays visible instead of
// silently disappearing.
sund.css('display', 'none');
}
function vesere() {
$('.jeder').each(function() {
var elmTab = $(this).find('.j-pewist').clone();
if (elmTab.length) {
var elm = '';
for (var i = elmTab.length - 1; i >= 0; i--) {
elm = elmTab.eq(i).html() + ', ' + elm;
}
var nivisKurt = ' — (' + elm;
nivisaKurtTevliBike($(this), nivisKurt);
}
// else: no j-pewist fields to shorten — leave the full citation
// as it already renders (visible), nothing to do.
});
}
vesere();
$(".click").click(function(e) {
e.preventDefault();
$(this).parent('.jeder-kurt').css('display', 'none');
$(this).parent('.jeder-kurt').prev().css('display', 'inline');
});
$(".click-kurt").click(function(e) {
e.preventDefault();
$(this).parent('.jeder').css('display', 'none');
$(this).parent('.jeder').next().css('display', 'inline');
});
});
</syntaxhighlight>
Net effect:
- JS-enabled readers (normal article view): identical experience to today — collapsed short form with `+`/`↩` toggle.
- No-JS contexts (previews, extracts, screen readers before JS loads, print, etc.): full citation is shown instead of nothing — a real regression fix rather than a cosmetic one.
One caveat worth being upfront about: this fixes it *if* the preview context renders the gadget's HTML/CSS but doesn't execute gadget JS (which is the far more common case, and what this code strongly suggests is happening). If Image 2 instead comes from a pipeline that strips the `.jeder`/`.jegirtin-text` elements out of the HTML entirely before this CSS/JS even gets a chance to apply, no on-wiki CSS/JS change can help — that'd need the extract-generation config changed instead. Given what this gadget file shows, though, I'd bet on the CSS-hide explanation.
{{veşêre-bin}}
Em dûre biceribînin eger xeletî tinebe, vî tiştî jî rast bikin. --[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 20:00, 23 tîrmeh 2026 (UTC)
:Ez APIya MediaWiki rind nizanim belkî Claude dizane:) Em nikarin bibêjin dema ku moda "''action=edit''" e fonksiyona <code>function vesere()</code> bi kar meyîne. [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 15:57, 24 tîrmeh 2026 (UTC)
::Na, di moda "edît"-ê de <code>var elmTab = null</code>... [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 16:13, 24 tîrmeh 2026 (UTC)
?:
<syntaxhighlight lang="js">
if (
mw.config.get('wgAction') === 'edit' ||
mw.config.get('wgAction') === 'submit'
){
var elmTab = [];
} else {
var elmTab = $(this).find('.j-pewist').clone();
}
</syntaxhighlight>
--[[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 16:31, 24 tîrmeh 2026 (UTC)
:Ez jî nizanim Claude çiqas ji mediawiki fêm dike lê heta niha ti tişt nîne ku min jê pirs kir û nikaribû çêke, bila wekî reklam nebe feqat Claude mikemmel e, dibêjim "li vir çima xeletiyeke wisa derdikeve" di dosyeya 2000 rêzî de diçe tiştê xelet tenê rast dike tiştekî din naguherîne. Chatgpt û aistudio qet wisa nakin, eynî dosyeyê deh cara dinivîsin, deh netîceyên cuda derdikevin :D
:Em dikarin vê amûrê wextê edit û submitê neaktîv bikin wekî <syntaxhighlight lang="js">if (!(action === "edit" || action === "submit")) {
:return;</syntaxhighlight> lê wê demê display:none wê çibe nizanim. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 18:23, 24 tîrmeh 2026 (UTC)
::display:none ne hewce ye ma jixwe di nav kodê [https://ku.wiktionary.org/w/index.php?title=MediaWiki:Gadget-jeder.js&oldid=6069025#L-49 L-49] de inline/none heye? [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 18:53, 24 tîrmeh 2026 (UTC)
:Min bi vî şiklî [https://ku.wiktionary.org/w/index.php?title=Bikarh%C3%AAner:Wikihez/vector-2022.js&diff=prev&oldid=6290816#L-28] ceriband feqat nexebitî. "display:none" di pêşdîtinê de dixebite feqat js naşixule. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 14:43, 25 tîrmeh 2026 (UTC)
::Kodên JSê pir hez nakim (pêşta hukurina APIya MWyê hewce bû) dîsa jî ez ê seh bikim :) [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 16:49, 27 tîrmeh 2026 (UTC)
:::Ez niha bi vî şiklî [https://ku.wiktionary.org/w/index.php?title=Bikarh%C3%AAner:Wikihez/test.js&oldid=6290820] [https://ku.wiktionary.org/w/index.php?title=Bikarh%C3%AAner:Wikihez/common.css&oldid=6290821#L-8] bi kar tînim ti problem nîne. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 17:09, 27 tîrmeh 2026 (UTC)
== [[MediaWiki:Gadget-PagePreviews.js]] ==
Ez dibêjim em vê amûrê jî çêkin [[:en:MediaWiki:Gadget-PagePreviews.js]] --[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 10:56, 3 tebax 2026 (UTC)
= Moda tarî =
== [[Şablon:wîkîpediya]] ==
Rengê tarî de xirab e.--[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 19:36, 4 tebax 2026 (UTC)
= Bot =
Karên ku bi botê werin çêkirin ji kerema xwe li vir binivîsin.
== Kategorî:Biwêj ==
[[:Kategorî:Biwêj]] divê were paqijkirin, lîsteya madeyên {{ş|biwêj}} çêke, yên ku tê de bûn, kirin, man hene filtre bike yên din bi destî tê çêkirin.—[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:17, 16 tîrmeh 2026 (UTC)
== Jêgirtin ==
Xistina jêgirtinên beşa [https://ku.wiktionary.org/w/index.php?search=insource%3A%2F%3D+*Ji+%5BWw%5D%C3%AAjey%C3%AA+*%3D%2F&title=Taybet%3AL%C3%AAger%C3%AEn&profile=advanced&fulltext=1&ns0=1&searchToken=8rh0bmw8dccsi7aynl6zli8uf ji wêjeyê] li beşa maneyê. —[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:17, 16 tîrmeh 2026 (UTC)
== Bota Toolforgeê ==
Botekî Toolforgeê lazim e ji bo ku xeletiyên biçûk wekî şablonên bi navên îngilîzî werin kurdîkirin yan jî valahiya beşan rast bike û hwd.—[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:17, 16 tîrmeh 2026 (UTC)
:Min [[Bikarhêner:Wikihez/skrîpt/py/kuwiktkozmetik.py|paqijiyen kozmetîk]] hazir kir feqat hîn navên şablonan naguhêre. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 20:05, 4 tebax 2026 (UTC)
== Updatew ==
Bota [[Bikarhêner:Wikihez/skrîpt/py/updateW.py|updateW]] divê were rojanekirin. Yan jî yekî nû were çêkirin. Şablonên {{ş|W}} di beşa tercimeyan de sererast dike û zimanan rêz dike. Ya niha xeletiya navê zimanî dide.—[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:17, 16 tîrmeh 2026 (UTC)
== sihir --> sêhr ==
Tercimeyên ''[[sêhr]]'' hemû dibêje ''sihir'' loma bi botê lazim e kirin ''sêhr''. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 17:43, 18 tîrmeh 2026 (UTC)
:Sihirbaz --> sêhrbaz [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 18:07, 18 tîrmeh 2026 (UTC)
== Tercimeyên dîroknas ==
Li tercimeyên [[dîroknas]], hevmaneyên wê hewce ye were îlawekirin. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 18:44, 18 tîrmeh 2026 (UTC)
== Mewlûd ==
Sererastkirina jêgirtinên mewlûdê [https://ku.wiktionary.org/w/index.php?search=insource%3A%2Fw%5C%3AMela+His%C3%AAn%C3%AA+Batey%C3%AE%2F&title=Taybet%3AL%C3%AAger%C3%AEn&ns0=1&searchToken=8m0tguy3sqt7edr4sg0u8hedo] wekî [https://ku.wiktionary.org/w/index.php?title=dax%C3%AEdar&curid=284303&diff=6265851&oldid=6142285] [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 09:43, 20 tîrmeh 2026 (UTC)
6uqtanrreo78b94mxb797g4yq8ewcve
6333770
6333769
2026-08-15T01:49:14Z
Ghybu
1393
/* MediaWiki:Gadget-start.js */ Bersiv
6333770
wikitext
text/x-wiki
{{/ser}}
= Karên ferhengî =
== Mane ==
* [[:Kategorî:Madeyên bê beşa mane]]
** [[:Kategorî:Madeyên bê beşa mane bi kurmancî]]
Li ser van rûpelan ev made hene ku maneyan wan nehatine nivîsin û divê werin nivîsin. —[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:17, 16 tîrmeh 2026 (UTC)
== Etîmolojî ==
*[[:Kategorî:Daxwazên etîmolojiyê]]
**[[:Kategorî:Daxwazên etîmolojiyê bi kurmancî]]
Li ser van rûpelan ev made hene ku etîmolojiya wan hîn nehatine nivîsin. Ji bo alîkariyê binêre [[WF:Etîmolojî]] —[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:17, 16 tîrmeh 2026 (UTC)
== Cureyê rêzimanî ==
* [[:Kategorî:Gotarên bê kategoriya rêzimanî]]
* [[:Kategorî:Gotarên bê kategoriya rêzimanî bi kurmancî]]
Li ser van rûpelan ev made hene ku cureyên wan yên rêzimanî hîn nehatine nivîsin. Ji bo alîkariyê binêre [[Alîkarî:Cureyên peyvan]] —[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:17, 16 tîrmeh 2026 (UTC)
== Kontrol ==
* [[:Kategorî:Kontrol]]
** [[:Kategorî:Kontrola maneyê]]
Ev madde bi botê hatine çêkirin, yek bi yek divê werin kontrolkirin. —[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:17, 16 tîrmeh 2026 (UTC)
= Şablon =
== IPA ==
* {{ş|IPA}} divê [[Modul:IPA]] bi kar bîne. —[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:17, 16 tîrmeh 2026 (UTC)
== Deng ==
Kurdîkirina belgekirina {{ş|deng}} lazim e.--[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 00:06, 19 tîrmeh 2026 (UTC)
= Modul =
== Modul:form of/templates ==
* [[Modul:form of/templates]]: Divê ev modul were rojanekirin û xeletiyên berê wekî ([[hevalê]]) werin rastkirin. —[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:17, 16 tîrmeh 2026 (UTC)
*:Merheba @[[Bikarhêner:Ghybu|Ghybu]] Te gotibû di vê modulê de xeletî hene, jkx tu dikarî li vir binivîsî çi kêmasî hene, daku wextê rojane dikim ez ji bîr nekim? [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:16, 21 tîrmeh 2026 (UTC)
*::Silav. Nizanim ji bîra min çûye... Herwiha ji bo çêkirina formên navdêran zanînên cîns û tîpa dawî bes e:
*::* (-ê, mê) => çemandî, bangkirin
*::* (-ê, nêr) => îzafe
*::* (-ê, mê û nêr) => îzafe (nêr), bangkirin (mê), çemandî (mê)
*::* (-a) => îzafe (mê)
*::* (-ekî) => îzafe û çemandî (nêr, nebinavkirî)
*::* (-eke) = > îzafe (mê, nebinavkirî)
*::* ...
*:: <code>if find(mw.title.getCurrentTitle().subpageText, 'ekî$') then ... end</code>
*::<code><nowiki>{{ku-tewîn-navForm|<navdêr>|<zayend>}</nowiki></code>
*::Tablo û nivîs di yekcarî de tên çêkirin...
*::Feqet problem lêzêdekirina mînakan e. [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 17:34, 21 tîrmeh 2026 (UTC)
*:::Lêzêdekirina kîjan nimûneyan? Ev koda js ji bo çi ye? Qisûrê nenêre min fêm nekir :/ [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 18:13, 21 tîrmeh 2026 (UTC)
*::::Li vira ([[hevalê#Formeke navdêrê]]) di bin maneyên 1. û 2. mînak nayên tevlî kirin :) [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 18:18, 21 tîrmeh 2026 (UTC)
*:::::Ev tercîh e, ne mecbûrî ye, em dikarin [https://ku.wiktionary.org/w/index.php?title=heval%C3%AA&diff=prev&oldid=6276350 wisa] bikin. Wekî din? [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 18:29, 21 tîrmeh 2026 (UTC)
*::::::Min li jor tênê got ku tenê parametreyên "navdêr" û "zayend" hewce nee. Bi '''[//ku.wiktionary.org/w/index.php?title=heval%C3%AA&curid=969734&diff=6276353&oldid=6276350 vî]''' awayî jî tê çêkirin. Parametreyên din ne hewce ne. [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 18:38, 21 tîrmeh 2026 (UTC)
*:::::::Ji bo wê şabloneke din lazim e, bila ev şablon wekî îngilîzî bimîne em ji bo kurmancî yekî din çêkin. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 18:42, 21 tîrmeh 2026 (UTC)
*::::::::[https://ku.wiktionary.org/w/index.php?title=heval%C3%AA&oldid=6276885 wisa] çawa ye? Bi min nivîsîna nimûneyan zêde ne lazim e ji ber ku ti kes serê xwe pê naêşîne. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 09:46, 23 tîrmeh 2026 (UTC)
*:::::::::@[[Bikarhêner:Ghybu|Ghybu]] Vê şablonê bi kar bînin an na? Navê şablonê kê çi be? [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 19:07, 24 tîrmeh 2026 (UTC)
== Modul:columns ==
* [[Modul:columns]] were rojanekirin û {{ş|kol3}} bila lînka ''nîşan bide'' deyne beriya sernavê, kolê di qutiya rengî de bila nebe. —[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:17, 16 tîrmeh 2026 (UTC)
== Modul:etymon ==
* [[Modul:etymon kevn]]: Rojanekirin hewce ye. —[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:17, 16 tîrmeh 2026 (UTC)
== [[Modul:ziman/code to canonical name]] ==
Belgekirina skrîptê û js divê were rastkirin. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 09:31, 22 tîrmeh 2026 (UTC)
:* [[MediaWiki:UpdateLanguageNameAndCode.js]]
:[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 09:50, 22 tîrmeh 2026 (UTC)
::* [[Modul:ziman/print]]
::[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 09:52, 22 tîrmeh 2026 (UTC)
:::*[[Modul:ziman/şablon]]
:::[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 09:56, 22 tîrmeh 2026 (UTC)
::::* [[MediaWiki:Gadget-translation editor.js/ziman.json]]
::::[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 11:06, 22 tîrmeh 2026 (UTC)
== [[Modul:quote]] ==
Piştî ev modul hate hazirkirin, lazim e navên jegirtinan werin rastkirin û li hemûyan {{param|jêgirtin}} were zêdekirin. Bnr. [[Gotûbêja şablonê:Jêgirtin/Ehmedê Xanî/Mem û Zîn]] [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 22:27, 5 tebax 2026 (UTC)
::Ev modul hema bêje hazir e. Hûn li ser van madeyan çi difikirin:
# {{para|tarîx}} lazim e full date be eger na, lazim e {{para|sal}} were bikaranîn. Feqat "'''2021''' kanûna pêşîn 23" bi vî şiklî bi min ne problem e çnkî derdê en.wikt "attestation" e delîla herî pêşî jî sal e.
#: {{demo|sep=wisa xuya dibe<br>|<nowiki>{{jêder-kitêb/ceribandin|en
|tarîx=23 December 2021|nivîskar=Harry Hobbs; George Williams|sernav=Micronations and the Search for Sovereignty|url=https://www.cambridge.org/core/books/micronations-and-the-search-for-sovereignty/B0414A3A322695D9EE71E4CDDFDA06DE|weşanxane=Cambridge University Press|rûpel=155|isbn=978-1-009-15012-5|jêgirtin=jêgirtin.|t=-}}</nowiki>}}
#{{para|amadekar}}/{{para|edîtor}}/{{para|terciman}} bi şiklê edîtoriya, amadekariya, tercimekirina
#: {{demo|sep=dide<br>|<nowiki>{{jêder-kitêb/ceribandin|en
|sernav=Medical Surgical Nursing|serî=Juta's Manual of Nursing|cildê-seriyê=volume 4|edîtor=Sophie Mataniele Mogotlane; Joyce Mokoena; Motshedisi Eunice Chauke; Anne Young|sal=2005|weşanxane=Juta Academic|isbn=978-0702171840|rûpel=!12-29|jêgirtin=jêgirtin|t=-}}</nowiki>}}
--[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 13:09, 10 tebax 2026 (UTC)
:@[[Bikarhêner:Bikarhêner|Bikarhêner]] û @[[Bikarhêner:Ghybu|Ghybu]] Hîn gelek tişt hene divê îzah bikin û fikrê we pirs bikim, feqat îzahkirin pir zor e, em dest bi bikaranînê bikin û dûre tiştên ku hûn naxwazin em dikarin biguherînîn, dibe? [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 13:11, 10 tebax 2026 (UTC)
::Dibe, piştî çêbû, em di praktîkê de bibînin ku çawa ye. -- [[Bikarhêner:Bikarhêner|Bikarhêner]] ([[Gotûbêja bikarhêner:Bikarhêner|gotûbêj]]) 18:05, 10 tebax 2026 (UTC)
= Javascript =
== [[Mediawiki:Gadget-citoid-helper.js]] ==
Ji bo bi citoidê kopîkirina malûmatên çavkaniyan amûreke wisa lazim e. Xisûsen ji ber ku bi çend amûrên din dikare were bikaranîn.
Feqat çend problem hene, şablonên me de kêmasiya parametreyan gelek in û xerîteyên citoidê hîn nehatine çêkirin. Wana sererast bikin dûre vê amûrê çêkin, piştre [[MediaWiki:Gadget-start.js|start.js]] û [[MediaWiki:Gadget-wikt.add-examples.js|add examples.js]] were rojanekirin.
- --[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 00:04, 19 tîrmeh 2026 (UTC)
:Merheba @[[Bikarhêner:Bikarhêner|Bikarhêner]], ez dibêjim karê Modul:quote zêde wext bistîne, bila em dest bi bikaranîna van amûran bikin dûre kêmasiyan em ê temam bikin înşela. Dikarî vana li cihên xwe yên rast kopî paste bikî?
# [[Special:PermanentLink/6291574|Bikarhêner:Wikihez/skrîpt/js/Gadget-citoid-helper.js]] --> [[Mediawiki:Gadget-citoid-helper.js]]
# Ya li jêr kopî bike qismê herî dawî ya AmûrênVeşartî li [[MediaWiki:Gadgets-definition]]:
## <code><nowiki>* citoid-helper[ResourceLoader|hidden|default|dependencies=mediawiki.util]|citoid-helper.js</nowiki></code>
--[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:58, 26 tîrmeh 2026 (UTC)
== [[MediaWiki:Gadget-start.js]] ==
Rojanekirin hewce ye. Min gelek tişt lê zêde kir lê ez niha test dikime. Piştre em bar bikin:
* [[Bikarhêner:Wikihez/Gadget-start.js]] --> [[MediaWiki:Gadget-start.js]]
* [[Bikarhêner:Wikihez/Gadget-start.css]] --> [[MediaWiki:Gadget-start.css]]
--[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 22:08, 17 tîrmeh 2026 (UTC)
:Min [[MediaWiki:Gadget-start/data.json|data.json]] çêkir ji bo ku bi hêsanî malûmatên heyî werin guhartin bêyî guhartina Javascriptê. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 19:49, 18 tîrmeh 2026 (UTC)
:Xeletiyên ku ji bîr nekim rast bikim:
:* Wextê min çavkanî "kitêb" hilbijart û bi destî tije kir xeletiyeke [https://ku.wiktionary.org/w/index.php?title=xezete&diff=prev&oldid=6265392 wisa] derket her kelîme hate lînkkirin.
:* <code>html("⠿")</code> ev ne lazim e.
:* textarea ji bo çavkaniyên jêgirtinan xaseten yên sernav hîn jî ne draggable e.
:* pêşdîtina zindî checkbox wextê tê rakirin, pêşdîtin winda nabe.
:* Butona mobîlê ya vekirina formê di moda tarî de belî nabe, tenê wekî qutiyeke tarî xuya dibe.
:* Metna hişyarkirinê di guhartina rûpelên heyî de lazim e baştir bikim.
:[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 23:51, 18 tîrmeh 2026 (UTC)
::Ev problem çêbûn, ez ê binêrim ka çi problemên din hene. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 14:15, 19 tîrmeh 2026 (UTC)
:::Çêke: Ji bo qismê çavkaniyê yek dikare API call û Kategorî:Çavkanî bi kar bîne ji bo ku şablon zêde bikî ji yên heyî. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 21:21, 19 tîrmeh 2026 (UTC)
::::Ev jî çêbû, min beşa çavkanî jî çêkir. Eger xeletî dernekeve û problema valahiya piştî etîketê ji bîr nekim, piştî rojanekirina amûrên linkify, û citoid em dikarin bar bikin. Ez ê ti tiştê nû îlawe nekim, zêde dirêj bû. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:14, 21 tîrmeh 2026 (UTC)
:::::Merheba @[[Bikarhêner:Bikarhêner|Bikarhêner]]. Dikarî wana bar bikî?
:::::* [[Bikarhêner:Wikihez/Gadget-start.js]] --> [[MediaWiki:Gadget-start.js]]
:::::* [[Bikarhêner:Wikihez/Gadget-start.css]] --> [[MediaWiki:Gadget-start.css]]
:::::* [[MediaWiki:Gadgets-definition]] wisa rojane bike:
:::::* start[ResourceLoader|default|package|dependencies=mediawiki.util,ext.gadget.StorageUtils,ext.gadget.citoid-helper]|start.js|start.css|start.js/data.json
:::::[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 09:39, 5 tebax 2026 (UTC)
{{şirove}} Dewama ''[[Special:PermanentLink/6333688|Gotûbêja bikarhêner:Rewiye tine#WF:Nû]]'' bila gotûbêja wî em spam nekin. :D
{{r|Ghybu}} dikarî [[Special:PermanentLink/6333689|vê htmlê]] binêrî claude rast fêm kiriye yan na? Daxîne û wek html qeyd bike. --[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 18:43, 14 tebax 2026 (UTC)
:Min seh wîkîyên din jî kir, li wîkiya fransî tiştekî wekî daxwaza min çêkirine (tiştên ku ne hewce ne wekî "tab" çêkirine an jî hatine vêşartin): [//fr.wiktionary.org/w/index.php?title=fdsdfdsf&action=edit&redlink=1]. Formata me yê berî jî bi vê lojîkê hatibû çêkirin, wekî de.wiktionary ([//de.wiktionary.org/w/index.php?title=sdfdsfsdfs&action=edit&preload=Vorlage:Formatvorlage_(Substantiv_vereinfacht)]) [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 19:01, 14 tebax 2026 (UTC)
::PS: Dîsa jî Claude min rind fêm kiriye :)) Feqet min got ku beşên Mane", "Bilêvkirin" û "Beşên din" cem hev (wekî "tab") ". Û dema ku tu terî di nav "Besên din" Hevmane, Jê, ... li wira werin dayîn. Wêne/Resim û Nimûne jî di nav beşa ("tab") "Mane" [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 19:17, 14 tebax 2026 (UTC)
::Erê ya fr.wikt min jî dîtibû jixwe fikrê tab min ji wan girtibû :D (feqat min li cem wan tenê tab-a maneyê dît yên din nedît çawa tê vekirin nizanim) Berê hemû beş piştî maneyê bibûn, dûre min sê Tab çêkir, Bingehîn+Lînkkirin+Bikaranîn. Niha lazim e Tabeke din çêkim. Ya ku claude çêkiriye bnr. [[Special:PermanentLink/6333698#L-7]] ne baş e bnr. [[Special:PermanentLink/6333703|qiyaskirinê li ser vê htmlê]] Êdî ez Claude abuse dikime ji ber ku Pro ye :D [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 19:26, 14 tebax 2026 (UTC)
:::Claude dibêje:
:::Good clarification — that's a real simplification, not just a relabel. Updated STEP_GROUPS from 5 tabs down to 3:
:::Mane — the definitions themselves, plus Wêne (image), now grouped in with it instead of sitting in a separate misc tab. Nimûne needed no change since it was already rendering inside each Mane sense block, not as its own step.
:::Bilêvkirin — unchanged, still just pronunciation.
:::Beşên din — everything else in one flat bucket: hevmane, jê, têkildar, herwiha binêre, formên alternatîv, dijmane, jornav, jêrnav, notên bikaranînê, bi alfabeyên din, dûnde, çavkanî, bêhtir bixwîne, tewandin, etîmolojî, zaravayên din, werger, and bnr-h — instead of being split across the old Bingehîn/Lînkkirin/Bikaranîn/Din tabs.
:::No DOM-order changes were needed this time — the fix from the blank-tab bug looks up the tab bar's position dynamically now, so it didn't matter that I regrouped which steps go where. Same two files, saved to your Wiki folder — worth another pass through all three tabs once you've pasted this in, same as last time. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 19:34, 14 tebax 2026 (UTC)
::::Mînak:
Ziman
---------------------------------------------
Cureyê rêzimanî (Navdêr)
Navdêr (hilbijêre) ┆ Cîns (hilbijêre) ┆ Jimar (hilbijêre)
- lêker -mê -yekjimar
- rengdêr -nêr -pirjimar
- ... -... -...
---------------------------------------------
Mane || Bilêvkirin || Beşên din
hilbijêre:
- mane - IPA - Hevmane
- nimûne - kîte - Dijmane
- wêne
Dema ku tu "Cureyê rêzimanî" dikî "Lêker" :
Cureyê rêzimanî (Lêker)
Lêker (hilbijêre) ┆ Cure (hilbijêre)
- navdêr -rehê niha
- rengdêr -rehê borî
- ... -...
---------------------------------------------
┆ : select/option ("tab" nîne, tê dîtin)<br>
|| : "tab"
-- [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 19:45, 14 tebax 2026 (UTC)
'''Sê-stûnî ("┆" = ne tab), li gorî Cureyê rêzimanî:'''
{| class="wikitable"
! Cureyê rêzimanî !! Stûna 2 !! Stûna 3 !! Têbînî
|-
| Navdêr / Serenav
| Cîns (hilbijêre ▾: mê / nêr / ... — tenê heke ziman zayendê rêzimanî hebe)
| '''Jimar''' (?) — pirs li jêr
| Qadên "Forma mê/nêr/pirjimar/yekjimar" niha jî li vir hene — ma ev di "Jimar"-ê de tên tevlihev kirin, an cuda dimînin?
|-
| Rengdêr
| (heman m/n/p/y forman ku Navdêr distîne)
| Sûperlatîv (sûp) / Komparatîv (komp)
| Ne li ser her du nîgaran hatiye behs kirin — ma sê-stûnî li vir jî tê bikaranîn?
|-
| Lêker
| '''Cure''' = Cureyê lêkerê (hilbijêre ▾: gerguhêz / negerguhêz / xwerû-... / pêkhatî-... / hevedudanî-... / biwêjî-... — 10 vebijêrk)
| Di heman stûnê de: Rehê dema niha / Rehê dema borî / Rehê dema bilanî (her sê qadên nivîsandinê ne, ne hilbijêrk in)
| Ma "Cure" her sê rehan di xwe de digire wek yek stûn, an her yek stûneke cuda ye?
|-
| Tîp (herf/sembol)
| Girdêk (gir) / Hûrek (hûr)
| —
| Ne behs kiriye
|-
| Her cureyek, li gorî zimên
| Transliterasyon (tr) / Transkrîpsiyon (ts)
| —
| Bi zimên ve girêdayî ye, ne bi cureyê rêzimanî ve
|-
| Her cureyek, tenê ziman=japonî
| Hanja / Translit. hanja
| —
| Ne bi cureyê rêzimanî ve girêdayî ye
|-
| Her cureyek
| '''Tercîhên pêşketî''' (kolapsî): form, formaalt, nekatcure, nekatcins, nekatçendterm, serlînkneke, nekatpalîndrom, neformtr
| —
| Vebijarkî, ji bo hemû cureyan
|}
'''Tabên jêrîn — Mane ‖ Bilêvkirin ‖ Beşên din ("||" = tab):'''
{| class="wikitable"
! Mane !! Bilêvkirin !! Beşên din (hemû 18 hêman)
|-
| mane, nimûne, wêne
| şablonên bilêvkirinê (mînak: IPA, kîte)
| tewandin, etîmolojî, bi zaravayên din, werger, jê, têkildar, herwiha binêre, formên alternatîv, hevmane, dijmane, jornav, jêrnav, notên bikaranînê, bi alfabeyên din, dûnde, çavkanî, bêhtir bixwîne, bnr-h
|}
'''Pirsên vekirî:'''
# "Jimar" (yekjimar/pirjimar) — qadeke ku nîşan dide têketî bi xwe yekjimar e an pirjimar e. Ev cuda ye ji "Forma yekjimar (y)"/"Forma pirjimar (p)" ya heyî (ku forma DÎN a kelîmeyê tomar dike). Herdu bimînin, an werin yek kirin?
# Ma sê-stûnî tenê ji bo Navdêr/Lêker e, an ji bo Rengdêr/Tîp jî heman mantiq derbas dibe?
# Di "Beşên din" de: dixwazî pêşî navnîşek/hilbijartinek nîşan bide (17 hêmanên din jî tê de), û qad tenê piştî hilbijartinê xuya bibin?
:Tu dikarî start.js ji Tercîh/ Amûran rakî û bi test.js li Amûran herî taliyê ye biceribînî. Claude ya li jor hazir kir, Jimar ez dikarim îzah bikim. Feqat bi min di tab-a maneyê de lazim e Bi zaravayên din (heta wek werger her car bila li rûpelan were zêdekirin) û werger jî hebe.--[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 20:18, 14 tebax 2026 (UTC)
:;Navdêr: Tenê "cîns" û "jimar" bes e. "Forma mê", "Forma nêr", ... nayê fêm kirin. Bi min wekî "Tercîhên pêşketî" bi navkî din veşartî çêke.
:;Lêker: "Cureyê lêkerê" nayê fêm kirin, bi min pêşta "geguhez/negerguhêz" were hilbijartin, paşê jî form "hevdudanî/pêkatî/..." ji ber ku her kes vana nizanî... Dîsa jî tu dizanî.
:Bi min beşên "Hevmane" û dijmane jî bike de nav beşa Mane ("tab") ji ber ku pirr tên xwestin.
:Şûnda Wêne jî Nimûne/jêgirtin...
:Herwiha hemû bi rengê şîn hatine çêkirin, nizanim beşên din (===) bi rengê gewr an reş çito dibe? [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 21:35, 14 tebax 2026 (UTC)
::Nimûne/jêgirtin, hevmane, Dijmane li binê her maneyê hene. ji ber ku wana bi maneyê ve girêdayî ne lazim e wisa bimîne feqat belkî şiklekî baştir bibînin. Hînbûna bikaranîna formeke nû bi qasî hînbûna koda wîkiyê zor e heqîqeten... [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 21:45, 14 tebax 2026 (UTC)
:::Min şaş fêm meke feqet te amûrek ji bo Wikihez çêkiriye :) Tu dixwazî ku hemû tiştên ku te çêkiriye tevlî vê Gadgetê bikî û bikarhênerên din jî bi kar bînin... Tu jî dizanî ku kesên ku tên vira çito peyv çêdikin: Ziman > Mane > Mînak > Hevmane > Dijmane ! Du Gadget çêke yek ji bo bikarhênerên ku hertim li vira ne, yekeke din jî ji bo bikarhênerên din (yên ku pirr nên vira).
:::Herwiha kesên ku hertim li vira ne bi Gadgetê gotar çênekin, ''copy/paste'' dikin. [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 22:12, 14 tebax 2026 (UTC)
::::Min xwest her tişt li ser rêza xwe be ji bo ku hîn bibin çi diçe kû derê feqat bi vî şiklî jî zêde dirêj û tevlihev dibe. Loma ez ê wekî tu dibêjî bikim her tiştê din bila collapsed pêşketî be. Ê ku dixwaze pê lê ke û binêre çi dikare were zêdekirin. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 22:26, 14 tebax 2026 (UTC)
:::::Niha baştir tê fêm kirin {{=)}} [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 23:01, 14 tebax 2026 (UTC)
::::::Min ji Opus 5 û Design Tool îstifade kiriye hema bêje milyonek token çûn :D pêşî dîzayn kir dûre dest pê kir wekî dîna bişuxile. Pereyê xwe %100 heq dike welleh :D feqat moda tarî ji bîr kiriye :D [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 23:12, 14 tebax 2026 (UTC)
:::::::Spas! Etîmolojî jî wekî "Bilêvkirin", di beşekê din de cem wê, were çêkirin (Mane|Etîmolojî|Bilêvkirin|Beşên din)? [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 23:20, 14 tebax 2026 (UTC)
::::::::(Mane>Tewandin>Werger|Etîmolojî>Dûnde>|Bilêvkirin(formatek çawa?)>Resim|Eleqedar>Jê>Têkildar>Herwiha binêre|Beşên din)? [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 23:29, 14 tebax 2026 (UTC)
:::::::::Nizanim, biceribîne... [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 23:43, 14 tebax 2026 (UTC)
::::::::::"Li şablonekê bigere" ser Maneyê hatiye nivîsandin, nizanim rind tê fêm kirin an na? Min paşê fêm kir :)) Naskirina Wîkîferhengê hewce ye... Li bin were nivîsandin û "notek" hewce ye. [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 00:02, 15 tebax 2026 (UTC)
:::::::::::"Malûmatên pêşketî nîşan bide" jî bike ser "Hevman" ji ber ku pirr li jor e. Tu nizanî çi dike (nayê dîtin)... [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 00:09, 15 tebax 2026 (UTC)
::::::::::::Dever/Devok jî were nivîsandin ? [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 01:22, 15 tebax 2026 (UTC)
:::::::::::::Tistekî din, dema ku tu maneyê dinivîsî bi otomatîk li jêr mane "2" tê nivîsandin, ew jî ne baş e (pirranî ne hewce ye). Bi min wekî "tab" cem "Mane 1" were vekirin (MAne1|Mane 2|Mane 3), bi otomatîk û an jî bi tikandina ser "Maneyeke din lê zêde bike" (cem beşa Maneyê). An jî bin beşa Wergerê bi nivîsa "maneyeke din lê zêde bike" were çêkirin. [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 01:44, 15 tebax 2026 (UTC)
::::::::::::::Ji bo mane2, mane3, ... problemek heye: "Beşên din" ji bo kîjan maneyê ye :) [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 01:49, 15 tebax 2026 (UTC)
== [[Mediawiki:Gadget-QQ.js]] ==
Ev amûr di şikle Minerva de. Her daîm vê xeletiyê dide:
<syntaxhighlight lang="js">
TypeError: Cannot read properties of null (reading 'addEventListener') at css () at runScript () at Array.<anonymous> () at flushCssBuffer ()
</syntaxhighlight> [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 19:29, 18 tîrmeh 2026 (UTC)
:* [[Bikarhêner:Wikihez/skrîpt/js/Gadget-QQ.js]] --> [[Mediawiki:Gadget-QQ.js]]
:* [[Bikarhêner:Wikihez/Gadget-QQ.css]] --> [[Mediawiki:Gadget-QQ.css]]
:Ez dibêjim çêbû lê ka çend roj biceribînim. Tiştên ku hatin sererastkirin:
:# Google Books API Key dikarî zêde bikî, dixe cookies û di gerokê de dimîne. Berê bê API Key dixebitiya lê êdî mecbûr e ku API Key-a te hebe, bidestxistina wê ne zêde zor e lê dîsa jî tevlihev e.
:# Êdî di mobîlê de dixebite, heta di mobîlê de xweştir xuya dike.
:# Moda tarî
:# OOUI dewsa jquery.ui
:# Li qutiyê çi dixwazî zêde bikî, dikare li gorî îsm, sifet, fiîl bitewîne. Lê ji bo fiîl tenê dikare çend heb inflection bîne.
:# Butona paqij bike lê zêde kir.
:# Çend paqijiyên jêgirtinên Google Kitêbê niha hene.
:[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 23:38, 18 tîrmeh 2026 (UTC)
::Tewandina fiîlan û xeletiya modulê lazim e were rastkirin. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 14:40, 21 tîrmeh 2026 (UTC)
== [[MediaWiki:Gadget-wikt.add-examples.js]] ==
Min ev amûr hinek rojane kir feqat çend problem hene berî ku bar bikin.
Tiştên ku min guhart:
# Êdî li sayfeyên bi {{ş|maneid}} jî dixebite,
# Cihê di wîkîtekstê de yê ku jêgirtin were îlawekirin baştir bû,
# [[Mediawiki:Gadget-citoid-helper.js|citoid helper]] zêde kir ji bo ku bi hêsanî çavkanî bi riya doi, isbn an urlyê werin tijîkirin.
* [[Bikarhêner:Wikihez/Gadget-wikt.add-examples.css]] --> [[MediaWiki:Gadget-wikt.add-examples.css]]
* [[Bikarhêner:Wikihez/Gadget-wikt.add-examples.js]] --> [[MediaWiki:Gadget-wikt.add-examples.js]]
- --[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 00:50, 19 tîrmeh 2026 (UTC)
:Min "wikt." qismên cache kirinê ya wîkiya fransî bi [[MediaWiki:Gadget-StorageUtils.js]] guhartiye. loma ji bîr nekin wê amûrê li [[MediaWiki:Gadgets-definition]] zêde bikin. û navê amûrê jî biguhêrînin. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 09:15, 23 tîrmeh 2026 (UTC)
::Berê li ser WF:ceribandin dixebitî. niha naxebite. Divê were rastkirin. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 22:10, 7 tebax 2026 (UTC)
== Gadget-translation editor ==
* [[MediaWiki:Gadget-translation editor.js]]: divê formata en.wîktê were bikaranîn ji ber ku me gelek tercime ji en.wîktê kopî kir û ev js hîn nikare formata wekî li jêr bi kar bîne.
<syntaxhighlight lang="wikitext">
* {{Z|sh}}:
*: Kirîlî:
*: Latînî
</syntaxhighlight>
—[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:17, 16 tîrmeh 2026 (UTC)
== [[Mediawiki:Gadget-linkify.js]] ==
* ''rûpeleke'' wekî<syntaxhighlight lang="wikitext">[[rûpeleke]]</syntaxhighlight> lînk dike, bi regexê belkî dikare wisa bike <syntaxhighlight lang="wikitext">[[rûpel]]eke</syntaxhighlight>
—[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:17, 16 tîrmeh 2026 (UTC)
* Amûreke din wekî [[User:Wikihez/Gadget-linkify.js|linkify]] lazim e ku herfên mezin biçûk bike ji bo kurmancî.—[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:17, 16 tîrmeh 2026 (UTC)
:{{r|Bikarhêner}} Merheba bira, dikarî viya jî bar bikî?:
* [[Special:PermanentLink/6291974|linkify]] --> [[Mediawiki:Gadget-linkify.js]]
Spas--[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 11:42, 29 tîrmeh 2026 (UTC)
:Dûre [https://ku.wiktionary.org/wiki/MediaWiki:Gadget-start.js#L-283 li vir] wiktviLinkify bike kuLinkify xêra xwe [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 11:51, 29 tîrmeh 2026 (UTC)
::Min ji bîr kir lê zêde bikim niha nikare "Dİ" bike "di", xeletiyeke berbelav a di nivîsên kurdî de, herfên din ên wekî ll yan rr jî hewce ne werin zêdekirin. Dûre em zêde bikin. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 21:42, 29 tîrmeh 2026 (UTC)
:::Min nû ferq kir, sayfeyên ku hîn nehatine çêkirin wîkîlînk nake. Problemeke mezin e divê were rastkirin. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 18:15, 30 tîrmeh 2026 (UTC)
::::Na, lînk dike, tiştekî din heye... [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 10:49, 31 tîrmeh 2026 (UTC)
== Amûra manayê ==
Amûreke din ji bo nivîsina maneyê wekî Nimûne zêde bike lazim e [https://ku.wiktionary.org/w/index.php?title=Bikarh%C3%AAner:Wikihez/test.js&oldid=6276876 js] [https://ku.wiktionary.org/w/index.php?title=%C5%9Eablon:ceribandin2&oldid=6265629 şablon] [https://ku.wiktionary.org/w/index.php?title=Bikarh%C3%AAner:Wikihez/common.css&oldid=6265642 css] --[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 09:12, 23 tîrmeh 2026 (UTC)
== [[MediaWiki:Gadget-jeder.js]] ==
@[[Bikarhêner:Ghybu|Ghybu]] Çavkaniyên jêderê di moda pêşdîtinê de jêderê vedişêre, ew jî min gelek eciz dike wextê çavkanî zêde dikim. Min ji Claude pirsî û kodan nîşanî wê da, wisa cewab da:
Yes — and this file actually explains the whole thing precisely, better than my earlier guess about extract-stripping.
What's happening: the CSS rule
<syntaxhighlight lang="css">
.jeder{
display:none;
}
</syntaxhighlight>
hides every citation by default, *unconditionally*. The only thing that ever makes it visible again is the gadget's JS: it finds each `.jeder`, builds the short "`— (year, author, +)`" summary from the `.j-pewist` fields, and either reveals the short version or — for citations with no `.j-pewist` fields — explicitly sets `display:inline` on the original.
So visibility of citations depends entirely on this JS running. In the normal article view (Image 1) it runs, so you see the collapsed "`(1918, E. Rehmî Ji Mala Hekariyan, Amadekar: M. E. Bozarslan, +)`" form. In whatever generated Image 2 — a hover-preview/extract/API render — gadget JS doesn't execute, so nothing ever removes the `display:none`, and the citation vanishes completely rather than degrading to "still visible, just not collapsed."
<b>The fix:</b> flip the default so the *un-collapsed* state is the safe fallback, and let JS do the hiding only after it successfully builds the short version. That way, any context without JS shows the full citation instead of nothing.
CSS — remove the blanket hide:
<syntaxhighlight lang="css">
.jeder {
/* intentionally no display:none here — see Gadget-... .js */
}
</syntaxhighlight>
JS — do the hiding from script, after the short form exists:
{{veşêre-ser}}
<syntaxhighlight lang="js">
// Ji bo şablonên [[Şablon:jêder]] hatiye nivîsandin.
// Parametreyên ku di navbera "<span class="j-pewist">...</span>" an "{{j-pêwîst|...}}" de ne venaşêre.
$(function() {
function nivisaKurtTevliBike(sund, nivisKurt) {
var zede = $('<a>+</a>')
.addClass('click')
.attr('href', '#')
.attr('title', 'zêdetir')
.css('font-weight', 'bold');
var kurt = $(' <a>↩</a>')
.addClass('click-kurt')
.attr('href', '#')
.attr('title', 'veşêre')
.css('font-weight', 'bold');
$('<span>' + nivisKurt + '</span>')
.append(zede).append(')')
.addClass('jeder-kurt')
.css('font-size', '0.85em')
.insertAfter(sund);
sund.append(' ').append(kurt);
// Only hide the full citation once the short summary actually exists.
// If this script never runs (no-JS clients, hover-preview extracts,
// action=render, etc.), the full citation stays visible instead of
// silently disappearing.
sund.css('display', 'none');
}
function vesere() {
$('.jeder').each(function() {
var elmTab = $(this).find('.j-pewist').clone();
if (elmTab.length) {
var elm = '';
for (var i = elmTab.length - 1; i >= 0; i--) {
elm = elmTab.eq(i).html() + ', ' + elm;
}
var nivisKurt = ' — (' + elm;
nivisaKurtTevliBike($(this), nivisKurt);
}
// else: no j-pewist fields to shorten — leave the full citation
// as it already renders (visible), nothing to do.
});
}
vesere();
$(".click").click(function(e) {
e.preventDefault();
$(this).parent('.jeder-kurt').css('display', 'none');
$(this).parent('.jeder-kurt').prev().css('display', 'inline');
});
$(".click-kurt").click(function(e) {
e.preventDefault();
$(this).parent('.jeder').css('display', 'none');
$(this).parent('.jeder').next().css('display', 'inline');
});
});
</syntaxhighlight>
Net effect:
- JS-enabled readers (normal article view): identical experience to today — collapsed short form with `+`/`↩` toggle.
- No-JS contexts (previews, extracts, screen readers before JS loads, print, etc.): full citation is shown instead of nothing — a real regression fix rather than a cosmetic one.
One caveat worth being upfront about: this fixes it *if* the preview context renders the gadget's HTML/CSS but doesn't execute gadget JS (which is the far more common case, and what this code strongly suggests is happening). If Image 2 instead comes from a pipeline that strips the `.jeder`/`.jegirtin-text` elements out of the HTML entirely before this CSS/JS even gets a chance to apply, no on-wiki CSS/JS change can help — that'd need the extract-generation config changed instead. Given what this gadget file shows, though, I'd bet on the CSS-hide explanation.
{{veşêre-bin}}
Em dûre biceribînin eger xeletî tinebe, vî tiştî jî rast bikin. --[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 20:00, 23 tîrmeh 2026 (UTC)
:Ez APIya MediaWiki rind nizanim belkî Claude dizane:) Em nikarin bibêjin dema ku moda "''action=edit''" e fonksiyona <code>function vesere()</code> bi kar meyîne. [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 15:57, 24 tîrmeh 2026 (UTC)
::Na, di moda "edît"-ê de <code>var elmTab = null</code>... [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 16:13, 24 tîrmeh 2026 (UTC)
?:
<syntaxhighlight lang="js">
if (
mw.config.get('wgAction') === 'edit' ||
mw.config.get('wgAction') === 'submit'
){
var elmTab = [];
} else {
var elmTab = $(this).find('.j-pewist').clone();
}
</syntaxhighlight>
--[[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 16:31, 24 tîrmeh 2026 (UTC)
:Ez jî nizanim Claude çiqas ji mediawiki fêm dike lê heta niha ti tişt nîne ku min jê pirs kir û nikaribû çêke, bila wekî reklam nebe feqat Claude mikemmel e, dibêjim "li vir çima xeletiyeke wisa derdikeve" di dosyeya 2000 rêzî de diçe tiştê xelet tenê rast dike tiştekî din naguherîne. Chatgpt û aistudio qet wisa nakin, eynî dosyeyê deh cara dinivîsin, deh netîceyên cuda derdikevin :D
:Em dikarin vê amûrê wextê edit û submitê neaktîv bikin wekî <syntaxhighlight lang="js">if (!(action === "edit" || action === "submit")) {
:return;</syntaxhighlight> lê wê demê display:none wê çibe nizanim. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 18:23, 24 tîrmeh 2026 (UTC)
::display:none ne hewce ye ma jixwe di nav kodê [https://ku.wiktionary.org/w/index.php?title=MediaWiki:Gadget-jeder.js&oldid=6069025#L-49 L-49] de inline/none heye? [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 18:53, 24 tîrmeh 2026 (UTC)
:Min bi vî şiklî [https://ku.wiktionary.org/w/index.php?title=Bikarh%C3%AAner:Wikihez/vector-2022.js&diff=prev&oldid=6290816#L-28] ceriband feqat nexebitî. "display:none" di pêşdîtinê de dixebite feqat js naşixule. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 14:43, 25 tîrmeh 2026 (UTC)
::Kodên JSê pir hez nakim (pêşta hukurina APIya MWyê hewce bû) dîsa jî ez ê seh bikim :) [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 16:49, 27 tîrmeh 2026 (UTC)
:::Ez niha bi vî şiklî [https://ku.wiktionary.org/w/index.php?title=Bikarh%C3%AAner:Wikihez/test.js&oldid=6290820] [https://ku.wiktionary.org/w/index.php?title=Bikarh%C3%AAner:Wikihez/common.css&oldid=6290821#L-8] bi kar tînim ti problem nîne. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 17:09, 27 tîrmeh 2026 (UTC)
== [[MediaWiki:Gadget-PagePreviews.js]] ==
Ez dibêjim em vê amûrê jî çêkin [[:en:MediaWiki:Gadget-PagePreviews.js]] --[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 10:56, 3 tebax 2026 (UTC)
= Moda tarî =
== [[Şablon:wîkîpediya]] ==
Rengê tarî de xirab e.--[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 19:36, 4 tebax 2026 (UTC)
= Bot =
Karên ku bi botê werin çêkirin ji kerema xwe li vir binivîsin.
== Kategorî:Biwêj ==
[[:Kategorî:Biwêj]] divê were paqijkirin, lîsteya madeyên {{ş|biwêj}} çêke, yên ku tê de bûn, kirin, man hene filtre bike yên din bi destî tê çêkirin.—[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:17, 16 tîrmeh 2026 (UTC)
== Jêgirtin ==
Xistina jêgirtinên beşa [https://ku.wiktionary.org/w/index.php?search=insource%3A%2F%3D+*Ji+%5BWw%5D%C3%AAjey%C3%AA+*%3D%2F&title=Taybet%3AL%C3%AAger%C3%AEn&profile=advanced&fulltext=1&ns0=1&searchToken=8rh0bmw8dccsi7aynl6zli8uf ji wêjeyê] li beşa maneyê. —[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:17, 16 tîrmeh 2026 (UTC)
== Bota Toolforgeê ==
Botekî Toolforgeê lazim e ji bo ku xeletiyên biçûk wekî şablonên bi navên îngilîzî werin kurdîkirin yan jî valahiya beşan rast bike û hwd.—[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:17, 16 tîrmeh 2026 (UTC)
:Min [[Bikarhêner:Wikihez/skrîpt/py/kuwiktkozmetik.py|paqijiyen kozmetîk]] hazir kir feqat hîn navên şablonan naguhêre. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 20:05, 4 tebax 2026 (UTC)
== Updatew ==
Bota [[Bikarhêner:Wikihez/skrîpt/py/updateW.py|updateW]] divê were rojanekirin. Yan jî yekî nû were çêkirin. Şablonên {{ş|W}} di beşa tercimeyan de sererast dike û zimanan rêz dike. Ya niha xeletiya navê zimanî dide.—[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:17, 16 tîrmeh 2026 (UTC)
== sihir --> sêhr ==
Tercimeyên ''[[sêhr]]'' hemû dibêje ''sihir'' loma bi botê lazim e kirin ''sêhr''. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 17:43, 18 tîrmeh 2026 (UTC)
:Sihirbaz --> sêhrbaz [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 18:07, 18 tîrmeh 2026 (UTC)
== Tercimeyên dîroknas ==
Li tercimeyên [[dîroknas]], hevmaneyên wê hewce ye were îlawekirin. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 18:44, 18 tîrmeh 2026 (UTC)
== Mewlûd ==
Sererastkirina jêgirtinên mewlûdê [https://ku.wiktionary.org/w/index.php?search=insource%3A%2Fw%5C%3AMela+His%C3%AAn%C3%AA+Batey%C3%AE%2F&title=Taybet%3AL%C3%AAger%C3%AEn&ns0=1&searchToken=8m0tguy3sqt7edr4sg0u8hedo] wekî [https://ku.wiktionary.org/w/index.php?title=dax%C3%AEdar&curid=284303&diff=6265851&oldid=6142285] [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 09:43, 20 tîrmeh 2026 (UTC)
lhewpt2e9y3buh93no4vawnbj57hstw
6333777
6333770
2026-08-15T11:01:31Z
Wikihez
7344
/* MediaWiki:Gadget-start.js */ Bersiv
6333777
wikitext
text/x-wiki
{{/ser}}
= Karên ferhengî =
== Mane ==
* [[:Kategorî:Madeyên bê beşa mane]]
** [[:Kategorî:Madeyên bê beşa mane bi kurmancî]]
Li ser van rûpelan ev made hene ku maneyan wan nehatine nivîsin û divê werin nivîsin. —[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:17, 16 tîrmeh 2026 (UTC)
== Etîmolojî ==
*[[:Kategorî:Daxwazên etîmolojiyê]]
**[[:Kategorî:Daxwazên etîmolojiyê bi kurmancî]]
Li ser van rûpelan ev made hene ku etîmolojiya wan hîn nehatine nivîsin. Ji bo alîkariyê binêre [[WF:Etîmolojî]] —[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:17, 16 tîrmeh 2026 (UTC)
== Cureyê rêzimanî ==
* [[:Kategorî:Gotarên bê kategoriya rêzimanî]]
* [[:Kategorî:Gotarên bê kategoriya rêzimanî bi kurmancî]]
Li ser van rûpelan ev made hene ku cureyên wan yên rêzimanî hîn nehatine nivîsin. Ji bo alîkariyê binêre [[Alîkarî:Cureyên peyvan]] —[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:17, 16 tîrmeh 2026 (UTC)
== Kontrol ==
* [[:Kategorî:Kontrol]]
** [[:Kategorî:Kontrola maneyê]]
Ev madde bi botê hatine çêkirin, yek bi yek divê werin kontrolkirin. —[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:17, 16 tîrmeh 2026 (UTC)
= Şablon =
== IPA ==
* {{ş|IPA}} divê [[Modul:IPA]] bi kar bîne. —[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:17, 16 tîrmeh 2026 (UTC)
== Deng ==
Kurdîkirina belgekirina {{ş|deng}} lazim e.--[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 00:06, 19 tîrmeh 2026 (UTC)
= Modul =
== Modul:form of/templates ==
* [[Modul:form of/templates]]: Divê ev modul were rojanekirin û xeletiyên berê wekî ([[hevalê]]) werin rastkirin. —[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:17, 16 tîrmeh 2026 (UTC)
*:Merheba @[[Bikarhêner:Ghybu|Ghybu]] Te gotibû di vê modulê de xeletî hene, jkx tu dikarî li vir binivîsî çi kêmasî hene, daku wextê rojane dikim ez ji bîr nekim? [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:16, 21 tîrmeh 2026 (UTC)
*::Silav. Nizanim ji bîra min çûye... Herwiha ji bo çêkirina formên navdêran zanînên cîns û tîpa dawî bes e:
*::* (-ê, mê) => çemandî, bangkirin
*::* (-ê, nêr) => îzafe
*::* (-ê, mê û nêr) => îzafe (nêr), bangkirin (mê), çemandî (mê)
*::* (-a) => îzafe (mê)
*::* (-ekî) => îzafe û çemandî (nêr, nebinavkirî)
*::* (-eke) = > îzafe (mê, nebinavkirî)
*::* ...
*:: <code>if find(mw.title.getCurrentTitle().subpageText, 'ekî$') then ... end</code>
*::<code><nowiki>{{ku-tewîn-navForm|<navdêr>|<zayend>}</nowiki></code>
*::Tablo û nivîs di yekcarî de tên çêkirin...
*::Feqet problem lêzêdekirina mînakan e. [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 17:34, 21 tîrmeh 2026 (UTC)
*:::Lêzêdekirina kîjan nimûneyan? Ev koda js ji bo çi ye? Qisûrê nenêre min fêm nekir :/ [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 18:13, 21 tîrmeh 2026 (UTC)
*::::Li vira ([[hevalê#Formeke navdêrê]]) di bin maneyên 1. û 2. mînak nayên tevlî kirin :) [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 18:18, 21 tîrmeh 2026 (UTC)
*:::::Ev tercîh e, ne mecbûrî ye, em dikarin [https://ku.wiktionary.org/w/index.php?title=heval%C3%AA&diff=prev&oldid=6276350 wisa] bikin. Wekî din? [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 18:29, 21 tîrmeh 2026 (UTC)
*::::::Min li jor tênê got ku tenê parametreyên "navdêr" û "zayend" hewce nee. Bi '''[//ku.wiktionary.org/w/index.php?title=heval%C3%AA&curid=969734&diff=6276353&oldid=6276350 vî]''' awayî jî tê çêkirin. Parametreyên din ne hewce ne. [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 18:38, 21 tîrmeh 2026 (UTC)
*:::::::Ji bo wê şabloneke din lazim e, bila ev şablon wekî îngilîzî bimîne em ji bo kurmancî yekî din çêkin. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 18:42, 21 tîrmeh 2026 (UTC)
*::::::::[https://ku.wiktionary.org/w/index.php?title=heval%C3%AA&oldid=6276885 wisa] çawa ye? Bi min nivîsîna nimûneyan zêde ne lazim e ji ber ku ti kes serê xwe pê naêşîne. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 09:46, 23 tîrmeh 2026 (UTC)
*:::::::::@[[Bikarhêner:Ghybu|Ghybu]] Vê şablonê bi kar bînin an na? Navê şablonê kê çi be? [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 19:07, 24 tîrmeh 2026 (UTC)
== Modul:columns ==
* [[Modul:columns]] were rojanekirin û {{ş|kol3}} bila lînka ''nîşan bide'' deyne beriya sernavê, kolê di qutiya rengî de bila nebe. —[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:17, 16 tîrmeh 2026 (UTC)
== Modul:etymon ==
* [[Modul:etymon kevn]]: Rojanekirin hewce ye. —[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:17, 16 tîrmeh 2026 (UTC)
== [[Modul:ziman/code to canonical name]] ==
Belgekirina skrîptê û js divê were rastkirin. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 09:31, 22 tîrmeh 2026 (UTC)
:* [[MediaWiki:UpdateLanguageNameAndCode.js]]
:[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 09:50, 22 tîrmeh 2026 (UTC)
::* [[Modul:ziman/print]]
::[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 09:52, 22 tîrmeh 2026 (UTC)
:::*[[Modul:ziman/şablon]]
:::[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 09:56, 22 tîrmeh 2026 (UTC)
::::* [[MediaWiki:Gadget-translation editor.js/ziman.json]]
::::[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 11:06, 22 tîrmeh 2026 (UTC)
== [[Modul:quote]] ==
Piştî ev modul hate hazirkirin, lazim e navên jegirtinan werin rastkirin û li hemûyan {{param|jêgirtin}} were zêdekirin. Bnr. [[Gotûbêja şablonê:Jêgirtin/Ehmedê Xanî/Mem û Zîn]] [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 22:27, 5 tebax 2026 (UTC)
::Ev modul hema bêje hazir e. Hûn li ser van madeyan çi difikirin:
# {{para|tarîx}} lazim e full date be eger na, lazim e {{para|sal}} were bikaranîn. Feqat "'''2021''' kanûna pêşîn 23" bi vî şiklî bi min ne problem e çnkî derdê en.wikt "attestation" e delîla herî pêşî jî sal e.
#: {{demo|sep=wisa xuya dibe<br>|<nowiki>{{jêder-kitêb/ceribandin|en
|tarîx=23 December 2021|nivîskar=Harry Hobbs; George Williams|sernav=Micronations and the Search for Sovereignty|url=https://www.cambridge.org/core/books/micronations-and-the-search-for-sovereignty/B0414A3A322695D9EE71E4CDDFDA06DE|weşanxane=Cambridge University Press|rûpel=155|isbn=978-1-009-15012-5|jêgirtin=jêgirtin.|t=-}}</nowiki>}}
#{{para|amadekar}}/{{para|edîtor}}/{{para|terciman}} bi şiklê edîtoriya, amadekariya, tercimekirina
#: {{demo|sep=dide<br>|<nowiki>{{jêder-kitêb/ceribandin|en
|sernav=Medical Surgical Nursing|serî=Juta's Manual of Nursing|cildê-seriyê=volume 4|edîtor=Sophie Mataniele Mogotlane; Joyce Mokoena; Motshedisi Eunice Chauke; Anne Young|sal=2005|weşanxane=Juta Academic|isbn=978-0702171840|rûpel=!12-29|jêgirtin=jêgirtin|t=-}}</nowiki>}}
--[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 13:09, 10 tebax 2026 (UTC)
:@[[Bikarhêner:Bikarhêner|Bikarhêner]] û @[[Bikarhêner:Ghybu|Ghybu]] Hîn gelek tişt hene divê îzah bikin û fikrê we pirs bikim, feqat îzahkirin pir zor e, em dest bi bikaranînê bikin û dûre tiştên ku hûn naxwazin em dikarin biguherînîn, dibe? [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 13:11, 10 tebax 2026 (UTC)
::Dibe, piştî çêbû, em di praktîkê de bibînin ku çawa ye. -- [[Bikarhêner:Bikarhêner|Bikarhêner]] ([[Gotûbêja bikarhêner:Bikarhêner|gotûbêj]]) 18:05, 10 tebax 2026 (UTC)
= Javascript =
== [[Mediawiki:Gadget-citoid-helper.js]] ==
Ji bo bi citoidê kopîkirina malûmatên çavkaniyan amûreke wisa lazim e. Xisûsen ji ber ku bi çend amûrên din dikare were bikaranîn.
Feqat çend problem hene, şablonên me de kêmasiya parametreyan gelek in û xerîteyên citoidê hîn nehatine çêkirin. Wana sererast bikin dûre vê amûrê çêkin, piştre [[MediaWiki:Gadget-start.js|start.js]] û [[MediaWiki:Gadget-wikt.add-examples.js|add examples.js]] were rojanekirin.
- --[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 00:04, 19 tîrmeh 2026 (UTC)
:Merheba @[[Bikarhêner:Bikarhêner|Bikarhêner]], ez dibêjim karê Modul:quote zêde wext bistîne, bila em dest bi bikaranîna van amûran bikin dûre kêmasiyan em ê temam bikin înşela. Dikarî vana li cihên xwe yên rast kopî paste bikî?
# [[Special:PermanentLink/6291574|Bikarhêner:Wikihez/skrîpt/js/Gadget-citoid-helper.js]] --> [[Mediawiki:Gadget-citoid-helper.js]]
# Ya li jêr kopî bike qismê herî dawî ya AmûrênVeşartî li [[MediaWiki:Gadgets-definition]]:
## <code><nowiki>* citoid-helper[ResourceLoader|hidden|default|dependencies=mediawiki.util]|citoid-helper.js</nowiki></code>
--[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:58, 26 tîrmeh 2026 (UTC)
== [[MediaWiki:Gadget-start.js]] ==
Rojanekirin hewce ye. Min gelek tişt lê zêde kir lê ez niha test dikime. Piştre em bar bikin:
* [[Bikarhêner:Wikihez/Gadget-start.js]] --> [[MediaWiki:Gadget-start.js]]
* [[Bikarhêner:Wikihez/Gadget-start.css]] --> [[MediaWiki:Gadget-start.css]]
--[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 22:08, 17 tîrmeh 2026 (UTC)
:Min [[MediaWiki:Gadget-start/data.json|data.json]] çêkir ji bo ku bi hêsanî malûmatên heyî werin guhartin bêyî guhartina Javascriptê. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 19:49, 18 tîrmeh 2026 (UTC)
:Xeletiyên ku ji bîr nekim rast bikim:
:* Wextê min çavkanî "kitêb" hilbijart û bi destî tije kir xeletiyeke [https://ku.wiktionary.org/w/index.php?title=xezete&diff=prev&oldid=6265392 wisa] derket her kelîme hate lînkkirin.
:* <code>html("⠿")</code> ev ne lazim e.
:* textarea ji bo çavkaniyên jêgirtinan xaseten yên sernav hîn jî ne draggable e.
:* pêşdîtina zindî checkbox wextê tê rakirin, pêşdîtin winda nabe.
:* Butona mobîlê ya vekirina formê di moda tarî de belî nabe, tenê wekî qutiyeke tarî xuya dibe.
:* Metna hişyarkirinê di guhartina rûpelên heyî de lazim e baştir bikim.
:[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 23:51, 18 tîrmeh 2026 (UTC)
::Ev problem çêbûn, ez ê binêrim ka çi problemên din hene. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 14:15, 19 tîrmeh 2026 (UTC)
:::Çêke: Ji bo qismê çavkaniyê yek dikare API call û Kategorî:Çavkanî bi kar bîne ji bo ku şablon zêde bikî ji yên heyî. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 21:21, 19 tîrmeh 2026 (UTC)
::::Ev jî çêbû, min beşa çavkanî jî çêkir. Eger xeletî dernekeve û problema valahiya piştî etîketê ji bîr nekim, piştî rojanekirina amûrên linkify, û citoid em dikarin bar bikin. Ez ê ti tiştê nû îlawe nekim, zêde dirêj bû. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:14, 21 tîrmeh 2026 (UTC)
:::::Merheba @[[Bikarhêner:Bikarhêner|Bikarhêner]]. Dikarî wana bar bikî?
:::::* [[Bikarhêner:Wikihez/Gadget-start.js]] --> [[MediaWiki:Gadget-start.js]]
:::::* [[Bikarhêner:Wikihez/Gadget-start.css]] --> [[MediaWiki:Gadget-start.css]]
:::::* [[MediaWiki:Gadgets-definition]] wisa rojane bike:
:::::* start[ResourceLoader|default|package|dependencies=mediawiki.util,ext.gadget.StorageUtils,ext.gadget.citoid-helper]|start.js|start.css|start.js/data.json
:::::[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 09:39, 5 tebax 2026 (UTC)
{{şirove}} Dewama ''[[Special:PermanentLink/6333688|Gotûbêja bikarhêner:Rewiye tine#WF:Nû]]'' bila gotûbêja wî em spam nekin. :D
{{r|Ghybu}} dikarî [[Special:PermanentLink/6333689|vê htmlê]] binêrî claude rast fêm kiriye yan na? Daxîne û wek html qeyd bike. --[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 18:43, 14 tebax 2026 (UTC)
:Min seh wîkîyên din jî kir, li wîkiya fransî tiştekî wekî daxwaza min çêkirine (tiştên ku ne hewce ne wekî "tab" çêkirine an jî hatine vêşartin): [//fr.wiktionary.org/w/index.php?title=fdsdfdsf&action=edit&redlink=1]. Formata me yê berî jî bi vê lojîkê hatibû çêkirin, wekî de.wiktionary ([//de.wiktionary.org/w/index.php?title=sdfdsfsdfs&action=edit&preload=Vorlage:Formatvorlage_(Substantiv_vereinfacht)]) [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 19:01, 14 tebax 2026 (UTC)
::PS: Dîsa jî Claude min rind fêm kiriye :)) Feqet min got ku beşên Mane", "Bilêvkirin" û "Beşên din" cem hev (wekî "tab") ". Û dema ku tu terî di nav "Besên din" Hevmane, Jê, ... li wira werin dayîn. Wêne/Resim û Nimûne jî di nav beşa ("tab") "Mane" [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 19:17, 14 tebax 2026 (UTC)
::Erê ya fr.wikt min jî dîtibû jixwe fikrê tab min ji wan girtibû :D (feqat min li cem wan tenê tab-a maneyê dît yên din nedît çawa tê vekirin nizanim) Berê hemû beş piştî maneyê bibûn, dûre min sê Tab çêkir, Bingehîn+Lînkkirin+Bikaranîn. Niha lazim e Tabeke din çêkim. Ya ku claude çêkiriye bnr. [[Special:PermanentLink/6333698#L-7]] ne baş e bnr. [[Special:PermanentLink/6333703|qiyaskirinê li ser vê htmlê]] Êdî ez Claude abuse dikime ji ber ku Pro ye :D [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 19:26, 14 tebax 2026 (UTC)
:::Claude dibêje:
:::Good clarification — that's a real simplification, not just a relabel. Updated STEP_GROUPS from 5 tabs down to 3:
:::Mane — the definitions themselves, plus Wêne (image), now grouped in with it instead of sitting in a separate misc tab. Nimûne needed no change since it was already rendering inside each Mane sense block, not as its own step.
:::Bilêvkirin — unchanged, still just pronunciation.
:::Beşên din — everything else in one flat bucket: hevmane, jê, têkildar, herwiha binêre, formên alternatîv, dijmane, jornav, jêrnav, notên bikaranînê, bi alfabeyên din, dûnde, çavkanî, bêhtir bixwîne, tewandin, etîmolojî, zaravayên din, werger, and bnr-h — instead of being split across the old Bingehîn/Lînkkirin/Bikaranîn/Din tabs.
:::No DOM-order changes were needed this time — the fix from the blank-tab bug looks up the tab bar's position dynamically now, so it didn't matter that I regrouped which steps go where. Same two files, saved to your Wiki folder — worth another pass through all three tabs once you've pasted this in, same as last time. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 19:34, 14 tebax 2026 (UTC)
::::Mînak:
Ziman
---------------------------------------------
Cureyê rêzimanî (Navdêr)
Navdêr (hilbijêre) ┆ Cîns (hilbijêre) ┆ Jimar (hilbijêre)
- lêker -mê -yekjimar
- rengdêr -nêr -pirjimar
- ... -... -...
---------------------------------------------
Mane || Bilêvkirin || Beşên din
hilbijêre:
- mane - IPA - Hevmane
- nimûne - kîte - Dijmane
- wêne
Dema ku tu "Cureyê rêzimanî" dikî "Lêker" :
Cureyê rêzimanî (Lêker)
Lêker (hilbijêre) ┆ Cure (hilbijêre)
- navdêr -rehê niha
- rengdêr -rehê borî
- ... -...
---------------------------------------------
┆ : select/option ("tab" nîne, tê dîtin)<br>
|| : "tab"
-- [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 19:45, 14 tebax 2026 (UTC)
'''Sê-stûnî ("┆" = ne tab), li gorî Cureyê rêzimanî:'''
{| class="wikitable"
! Cureyê rêzimanî !! Stûna 2 !! Stûna 3 !! Têbînî
|-
| Navdêr / Serenav
| Cîns (hilbijêre ▾: mê / nêr / ... — tenê heke ziman zayendê rêzimanî hebe)
| '''Jimar''' (?) — pirs li jêr
| Qadên "Forma mê/nêr/pirjimar/yekjimar" niha jî li vir hene — ma ev di "Jimar"-ê de tên tevlihev kirin, an cuda dimînin?
|-
| Rengdêr
| (heman m/n/p/y forman ku Navdêr distîne)
| Sûperlatîv (sûp) / Komparatîv (komp)
| Ne li ser her du nîgaran hatiye behs kirin — ma sê-stûnî li vir jî tê bikaranîn?
|-
| Lêker
| '''Cure''' = Cureyê lêkerê (hilbijêre ▾: gerguhêz / negerguhêz / xwerû-... / pêkhatî-... / hevedudanî-... / biwêjî-... — 10 vebijêrk)
| Di heman stûnê de: Rehê dema niha / Rehê dema borî / Rehê dema bilanî (her sê qadên nivîsandinê ne, ne hilbijêrk in)
| Ma "Cure" her sê rehan di xwe de digire wek yek stûn, an her yek stûneke cuda ye?
|-
| Tîp (herf/sembol)
| Girdêk (gir) / Hûrek (hûr)
| —
| Ne behs kiriye
|-
| Her cureyek, li gorî zimên
| Transliterasyon (tr) / Transkrîpsiyon (ts)
| —
| Bi zimên ve girêdayî ye, ne bi cureyê rêzimanî ve
|-
| Her cureyek, tenê ziman=japonî
| Hanja / Translit. hanja
| —
| Ne bi cureyê rêzimanî ve girêdayî ye
|-
| Her cureyek
| '''Tercîhên pêşketî''' (kolapsî): form, formaalt, nekatcure, nekatcins, nekatçendterm, serlînkneke, nekatpalîndrom, neformtr
| —
| Vebijarkî, ji bo hemû cureyan
|}
'''Tabên jêrîn — Mane ‖ Bilêvkirin ‖ Beşên din ("||" = tab):'''
{| class="wikitable"
! Mane !! Bilêvkirin !! Beşên din (hemû 18 hêman)
|-
| mane, nimûne, wêne
| şablonên bilêvkirinê (mînak: IPA, kîte)
| tewandin, etîmolojî, bi zaravayên din, werger, jê, têkildar, herwiha binêre, formên alternatîv, hevmane, dijmane, jornav, jêrnav, notên bikaranînê, bi alfabeyên din, dûnde, çavkanî, bêhtir bixwîne, bnr-h
|}
'''Pirsên vekirî:'''
# "Jimar" (yekjimar/pirjimar) — qadeke ku nîşan dide têketî bi xwe yekjimar e an pirjimar e. Ev cuda ye ji "Forma yekjimar (y)"/"Forma pirjimar (p)" ya heyî (ku forma DÎN a kelîmeyê tomar dike). Herdu bimînin, an werin yek kirin?
# Ma sê-stûnî tenê ji bo Navdêr/Lêker e, an ji bo Rengdêr/Tîp jî heman mantiq derbas dibe?
# Di "Beşên din" de: dixwazî pêşî navnîşek/hilbijartinek nîşan bide (17 hêmanên din jî tê de), û qad tenê piştî hilbijartinê xuya bibin?
:Tu dikarî start.js ji Tercîh/ Amûran rakî û bi test.js li Amûran herî taliyê ye biceribînî. Claude ya li jor hazir kir, Jimar ez dikarim îzah bikim. Feqat bi min di tab-a maneyê de lazim e Bi zaravayên din (heta wek werger her car bila li rûpelan were zêdekirin) û werger jî hebe.--[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 20:18, 14 tebax 2026 (UTC)
:;Navdêr: Tenê "cîns" û "jimar" bes e. "Forma mê", "Forma nêr", ... nayê fêm kirin. Bi min wekî "Tercîhên pêşketî" bi navkî din veşartî çêke.
:;Lêker: "Cureyê lêkerê" nayê fêm kirin, bi min pêşta "geguhez/negerguhêz" were hilbijartin, paşê jî form "hevdudanî/pêkatî/..." ji ber ku her kes vana nizanî... Dîsa jî tu dizanî.
:Bi min beşên "Hevmane" û dijmane jî bike de nav beşa Mane ("tab") ji ber ku pirr tên xwestin.
:Şûnda Wêne jî Nimûne/jêgirtin...
:Herwiha hemû bi rengê şîn hatine çêkirin, nizanim beşên din (===) bi rengê gewr an reş çito dibe? [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 21:35, 14 tebax 2026 (UTC)
::Nimûne/jêgirtin, hevmane, Dijmane li binê her maneyê hene. ji ber ku wana bi maneyê ve girêdayî ne lazim e wisa bimîne feqat belkî şiklekî baştir bibînin. Hînbûna bikaranîna formeke nû bi qasî hînbûna koda wîkiyê zor e heqîqeten... [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 21:45, 14 tebax 2026 (UTC)
:::Min şaş fêm meke feqet te amûrek ji bo Wikihez çêkiriye :) Tu dixwazî ku hemû tiştên ku te çêkiriye tevlî vê Gadgetê bikî û bikarhênerên din jî bi kar bînin... Tu jî dizanî ku kesên ku tên vira çito peyv çêdikin: Ziman > Mane > Mînak > Hevmane > Dijmane ! Du Gadget çêke yek ji bo bikarhênerên ku hertim li vira ne, yekeke din jî ji bo bikarhênerên din (yên ku pirr nên vira).
:::Herwiha kesên ku hertim li vira ne bi Gadgetê gotar çênekin, ''copy/paste'' dikin. [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 22:12, 14 tebax 2026 (UTC)
::::Min xwest her tişt li ser rêza xwe be ji bo ku hîn bibin çi diçe kû derê feqat bi vî şiklî jî zêde dirêj û tevlihev dibe. Loma ez ê wekî tu dibêjî bikim her tiştê din bila collapsed pêşketî be. Ê ku dixwaze pê lê ke û binêre çi dikare were zêdekirin. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 22:26, 14 tebax 2026 (UTC)
:::::Niha baştir tê fêm kirin {{=)}} [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 23:01, 14 tebax 2026 (UTC)
::::::Min ji Opus 5 û Design Tool îstifade kiriye hema bêje milyonek token çûn :D pêşî dîzayn kir dûre dest pê kir wekî dîna bişuxile. Pereyê xwe %100 heq dike welleh :D feqat moda tarî ji bîr kiriye :D [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 23:12, 14 tebax 2026 (UTC)
:::::::Spas! Etîmolojî jî wekî "Bilêvkirin", di beşekê din de cem wê, were çêkirin (Mane|Etîmolojî|Bilêvkirin|Beşên din)? [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 23:20, 14 tebax 2026 (UTC)
::::::::(Mane>Tewandin>Werger|Etîmolojî>Dûnde>|Bilêvkirin(formatek çawa?)>Resim|Eleqedar>Jê>Têkildar>Herwiha binêre|Beşên din)? [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 23:29, 14 tebax 2026 (UTC)
:::::::::Nizanim, biceribîne... [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 23:43, 14 tebax 2026 (UTC)
::::::::::"Li şablonekê bigere" ser Maneyê hatiye nivîsandin, nizanim rind tê fêm kirin an na? Min paşê fêm kir :)) Naskirina Wîkîferhengê hewce ye... Li bin were nivîsandin û "notek" hewce ye. [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 00:02, 15 tebax 2026 (UTC)
:::::::::::"Malûmatên pêşketî nîşan bide" jî bike ser "Hevman" ji ber ku pirr li jor e. Tu nizanî çi dike (nayê dîtin)... [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 00:09, 15 tebax 2026 (UTC)
::::::::::::Dever/Devok jî were nivîsandin ? [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 01:22, 15 tebax 2026 (UTC)
:::::::::::::Tistekî din, dema ku tu maneyê dinivîsî bi otomatîk li jêr mane "2" tê nivîsandin, ew jî ne baş e (pirranî ne hewce ye). Bi min wekî "tab" cem "Mane 1" were vekirin (MAne1|Mane 2|Mane 3), bi otomatîk û an jî bi tikandina ser "Maneyeke din lê zêde bike" (cem beşa Maneyê). An jî bin beşa Wergerê bi nivîsa "maneyeke din lê zêde bike" were çêkirin. [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 01:44, 15 tebax 2026 (UTC)
::::::::::::::Ji bo mane2, mane3, ... problemek heye: "Beşên din" ji bo kîjan maneyê ye :) [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 01:49, 15 tebax 2026 (UTC)
:::::::::::::::Devok/dever ya rastî ji bo kurmancî herî muhîm e lê diçe qismê etîketê ew jî veşartî ye, Niha çawa çêbûye? Min butona +mane zêde bike îlawe kiriye. Beşên din ji bo hemû maneyan e, ji bo maneyên xisûsî lazim e yek qismê malûmatên zêdetir bi kar bîne. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 11:01, 15 tebax 2026 (UTC)
== [[Mediawiki:Gadget-QQ.js]] ==
Ev amûr di şikle Minerva de. Her daîm vê xeletiyê dide:
<syntaxhighlight lang="js">
TypeError: Cannot read properties of null (reading 'addEventListener') at css () at runScript () at Array.<anonymous> () at flushCssBuffer ()
</syntaxhighlight> [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 19:29, 18 tîrmeh 2026 (UTC)
:* [[Bikarhêner:Wikihez/skrîpt/js/Gadget-QQ.js]] --> [[Mediawiki:Gadget-QQ.js]]
:* [[Bikarhêner:Wikihez/Gadget-QQ.css]] --> [[Mediawiki:Gadget-QQ.css]]
:Ez dibêjim çêbû lê ka çend roj biceribînim. Tiştên ku hatin sererastkirin:
:# Google Books API Key dikarî zêde bikî, dixe cookies û di gerokê de dimîne. Berê bê API Key dixebitiya lê êdî mecbûr e ku API Key-a te hebe, bidestxistina wê ne zêde zor e lê dîsa jî tevlihev e.
:# Êdî di mobîlê de dixebite, heta di mobîlê de xweştir xuya dike.
:# Moda tarî
:# OOUI dewsa jquery.ui
:# Li qutiyê çi dixwazî zêde bikî, dikare li gorî îsm, sifet, fiîl bitewîne. Lê ji bo fiîl tenê dikare çend heb inflection bîne.
:# Butona paqij bike lê zêde kir.
:# Çend paqijiyên jêgirtinên Google Kitêbê niha hene.
:[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 23:38, 18 tîrmeh 2026 (UTC)
::Tewandina fiîlan û xeletiya modulê lazim e were rastkirin. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 14:40, 21 tîrmeh 2026 (UTC)
== [[MediaWiki:Gadget-wikt.add-examples.js]] ==
Min ev amûr hinek rojane kir feqat çend problem hene berî ku bar bikin.
Tiştên ku min guhart:
# Êdî li sayfeyên bi {{ş|maneid}} jî dixebite,
# Cihê di wîkîtekstê de yê ku jêgirtin were îlawekirin baştir bû,
# [[Mediawiki:Gadget-citoid-helper.js|citoid helper]] zêde kir ji bo ku bi hêsanî çavkanî bi riya doi, isbn an urlyê werin tijîkirin.
* [[Bikarhêner:Wikihez/Gadget-wikt.add-examples.css]] --> [[MediaWiki:Gadget-wikt.add-examples.css]]
* [[Bikarhêner:Wikihez/Gadget-wikt.add-examples.js]] --> [[MediaWiki:Gadget-wikt.add-examples.js]]
- --[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 00:50, 19 tîrmeh 2026 (UTC)
:Min "wikt." qismên cache kirinê ya wîkiya fransî bi [[MediaWiki:Gadget-StorageUtils.js]] guhartiye. loma ji bîr nekin wê amûrê li [[MediaWiki:Gadgets-definition]] zêde bikin. û navê amûrê jî biguhêrînin. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 09:15, 23 tîrmeh 2026 (UTC)
::Berê li ser WF:ceribandin dixebitî. niha naxebite. Divê were rastkirin. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 22:10, 7 tebax 2026 (UTC)
== Gadget-translation editor ==
* [[MediaWiki:Gadget-translation editor.js]]: divê formata en.wîktê were bikaranîn ji ber ku me gelek tercime ji en.wîktê kopî kir û ev js hîn nikare formata wekî li jêr bi kar bîne.
<syntaxhighlight lang="wikitext">
* {{Z|sh}}:
*: Kirîlî:
*: Latînî
</syntaxhighlight>
—[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:17, 16 tîrmeh 2026 (UTC)
== [[Mediawiki:Gadget-linkify.js]] ==
* ''rûpeleke'' wekî<syntaxhighlight lang="wikitext">[[rûpeleke]]</syntaxhighlight> lînk dike, bi regexê belkî dikare wisa bike <syntaxhighlight lang="wikitext">[[rûpel]]eke</syntaxhighlight>
—[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:17, 16 tîrmeh 2026 (UTC)
* Amûreke din wekî [[User:Wikihez/Gadget-linkify.js|linkify]] lazim e ku herfên mezin biçûk bike ji bo kurmancî.—[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:17, 16 tîrmeh 2026 (UTC)
:{{r|Bikarhêner}} Merheba bira, dikarî viya jî bar bikî?:
* [[Special:PermanentLink/6291974|linkify]] --> [[Mediawiki:Gadget-linkify.js]]
Spas--[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 11:42, 29 tîrmeh 2026 (UTC)
:Dûre [https://ku.wiktionary.org/wiki/MediaWiki:Gadget-start.js#L-283 li vir] wiktviLinkify bike kuLinkify xêra xwe [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 11:51, 29 tîrmeh 2026 (UTC)
::Min ji bîr kir lê zêde bikim niha nikare "Dİ" bike "di", xeletiyeke berbelav a di nivîsên kurdî de, herfên din ên wekî ll yan rr jî hewce ne werin zêdekirin. Dûre em zêde bikin. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 21:42, 29 tîrmeh 2026 (UTC)
:::Min nû ferq kir, sayfeyên ku hîn nehatine çêkirin wîkîlînk nake. Problemeke mezin e divê were rastkirin. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 18:15, 30 tîrmeh 2026 (UTC)
::::Na, lînk dike, tiştekî din heye... [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 10:49, 31 tîrmeh 2026 (UTC)
== Amûra manayê ==
Amûreke din ji bo nivîsina maneyê wekî Nimûne zêde bike lazim e [https://ku.wiktionary.org/w/index.php?title=Bikarh%C3%AAner:Wikihez/test.js&oldid=6276876 js] [https://ku.wiktionary.org/w/index.php?title=%C5%9Eablon:ceribandin2&oldid=6265629 şablon] [https://ku.wiktionary.org/w/index.php?title=Bikarh%C3%AAner:Wikihez/common.css&oldid=6265642 css] --[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 09:12, 23 tîrmeh 2026 (UTC)
== [[MediaWiki:Gadget-jeder.js]] ==
@[[Bikarhêner:Ghybu|Ghybu]] Çavkaniyên jêderê di moda pêşdîtinê de jêderê vedişêre, ew jî min gelek eciz dike wextê çavkanî zêde dikim. Min ji Claude pirsî û kodan nîşanî wê da, wisa cewab da:
Yes — and this file actually explains the whole thing precisely, better than my earlier guess about extract-stripping.
What's happening: the CSS rule
<syntaxhighlight lang="css">
.jeder{
display:none;
}
</syntaxhighlight>
hides every citation by default, *unconditionally*. The only thing that ever makes it visible again is the gadget's JS: it finds each `.jeder`, builds the short "`— (year, author, +)`" summary from the `.j-pewist` fields, and either reveals the short version or — for citations with no `.j-pewist` fields — explicitly sets `display:inline` on the original.
So visibility of citations depends entirely on this JS running. In the normal article view (Image 1) it runs, so you see the collapsed "`(1918, E. Rehmî Ji Mala Hekariyan, Amadekar: M. E. Bozarslan, +)`" form. In whatever generated Image 2 — a hover-preview/extract/API render — gadget JS doesn't execute, so nothing ever removes the `display:none`, and the citation vanishes completely rather than degrading to "still visible, just not collapsed."
<b>The fix:</b> flip the default so the *un-collapsed* state is the safe fallback, and let JS do the hiding only after it successfully builds the short version. That way, any context without JS shows the full citation instead of nothing.
CSS — remove the blanket hide:
<syntaxhighlight lang="css">
.jeder {
/* intentionally no display:none here — see Gadget-... .js */
}
</syntaxhighlight>
JS — do the hiding from script, after the short form exists:
{{veşêre-ser}}
<syntaxhighlight lang="js">
// Ji bo şablonên [[Şablon:jêder]] hatiye nivîsandin.
// Parametreyên ku di navbera "<span class="j-pewist">...</span>" an "{{j-pêwîst|...}}" de ne venaşêre.
$(function() {
function nivisaKurtTevliBike(sund, nivisKurt) {
var zede = $('<a>+</a>')
.addClass('click')
.attr('href', '#')
.attr('title', 'zêdetir')
.css('font-weight', 'bold');
var kurt = $(' <a>↩</a>')
.addClass('click-kurt')
.attr('href', '#')
.attr('title', 'veşêre')
.css('font-weight', 'bold');
$('<span>' + nivisKurt + '</span>')
.append(zede).append(')')
.addClass('jeder-kurt')
.css('font-size', '0.85em')
.insertAfter(sund);
sund.append(' ').append(kurt);
// Only hide the full citation once the short summary actually exists.
// If this script never runs (no-JS clients, hover-preview extracts,
// action=render, etc.), the full citation stays visible instead of
// silently disappearing.
sund.css('display', 'none');
}
function vesere() {
$('.jeder').each(function() {
var elmTab = $(this).find('.j-pewist').clone();
if (elmTab.length) {
var elm = '';
for (var i = elmTab.length - 1; i >= 0; i--) {
elm = elmTab.eq(i).html() + ', ' + elm;
}
var nivisKurt = ' — (' + elm;
nivisaKurtTevliBike($(this), nivisKurt);
}
// else: no j-pewist fields to shorten — leave the full citation
// as it already renders (visible), nothing to do.
});
}
vesere();
$(".click").click(function(e) {
e.preventDefault();
$(this).parent('.jeder-kurt').css('display', 'none');
$(this).parent('.jeder-kurt').prev().css('display', 'inline');
});
$(".click-kurt").click(function(e) {
e.preventDefault();
$(this).parent('.jeder').css('display', 'none');
$(this).parent('.jeder').next().css('display', 'inline');
});
});
</syntaxhighlight>
Net effect:
- JS-enabled readers (normal article view): identical experience to today — collapsed short form with `+`/`↩` toggle.
- No-JS contexts (previews, extracts, screen readers before JS loads, print, etc.): full citation is shown instead of nothing — a real regression fix rather than a cosmetic one.
One caveat worth being upfront about: this fixes it *if* the preview context renders the gadget's HTML/CSS but doesn't execute gadget JS (which is the far more common case, and what this code strongly suggests is happening). If Image 2 instead comes from a pipeline that strips the `.jeder`/`.jegirtin-text` elements out of the HTML entirely before this CSS/JS even gets a chance to apply, no on-wiki CSS/JS change can help — that'd need the extract-generation config changed instead. Given what this gadget file shows, though, I'd bet on the CSS-hide explanation.
{{veşêre-bin}}
Em dûre biceribînin eger xeletî tinebe, vî tiştî jî rast bikin. --[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 20:00, 23 tîrmeh 2026 (UTC)
:Ez APIya MediaWiki rind nizanim belkî Claude dizane:) Em nikarin bibêjin dema ku moda "''action=edit''" e fonksiyona <code>function vesere()</code> bi kar meyîne. [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 15:57, 24 tîrmeh 2026 (UTC)
::Na, di moda "edît"-ê de <code>var elmTab = null</code>... [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 16:13, 24 tîrmeh 2026 (UTC)
?:
<syntaxhighlight lang="js">
if (
mw.config.get('wgAction') === 'edit' ||
mw.config.get('wgAction') === 'submit'
){
var elmTab = [];
} else {
var elmTab = $(this).find('.j-pewist').clone();
}
</syntaxhighlight>
--[[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 16:31, 24 tîrmeh 2026 (UTC)
:Ez jî nizanim Claude çiqas ji mediawiki fêm dike lê heta niha ti tişt nîne ku min jê pirs kir û nikaribû çêke, bila wekî reklam nebe feqat Claude mikemmel e, dibêjim "li vir çima xeletiyeke wisa derdikeve" di dosyeya 2000 rêzî de diçe tiştê xelet tenê rast dike tiştekî din naguherîne. Chatgpt û aistudio qet wisa nakin, eynî dosyeyê deh cara dinivîsin, deh netîceyên cuda derdikevin :D
:Em dikarin vê amûrê wextê edit û submitê neaktîv bikin wekî <syntaxhighlight lang="js">if (!(action === "edit" || action === "submit")) {
:return;</syntaxhighlight> lê wê demê display:none wê çibe nizanim. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 18:23, 24 tîrmeh 2026 (UTC)
::display:none ne hewce ye ma jixwe di nav kodê [https://ku.wiktionary.org/w/index.php?title=MediaWiki:Gadget-jeder.js&oldid=6069025#L-49 L-49] de inline/none heye? [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 18:53, 24 tîrmeh 2026 (UTC)
:Min bi vî şiklî [https://ku.wiktionary.org/w/index.php?title=Bikarh%C3%AAner:Wikihez/vector-2022.js&diff=prev&oldid=6290816#L-28] ceriband feqat nexebitî. "display:none" di pêşdîtinê de dixebite feqat js naşixule. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 14:43, 25 tîrmeh 2026 (UTC)
::Kodên JSê pir hez nakim (pêşta hukurina APIya MWyê hewce bû) dîsa jî ez ê seh bikim :) [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 16:49, 27 tîrmeh 2026 (UTC)
:::Ez niha bi vî şiklî [https://ku.wiktionary.org/w/index.php?title=Bikarh%C3%AAner:Wikihez/test.js&oldid=6290820] [https://ku.wiktionary.org/w/index.php?title=Bikarh%C3%AAner:Wikihez/common.css&oldid=6290821#L-8] bi kar tînim ti problem nîne. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 17:09, 27 tîrmeh 2026 (UTC)
== [[MediaWiki:Gadget-PagePreviews.js]] ==
Ez dibêjim em vê amûrê jî çêkin [[:en:MediaWiki:Gadget-PagePreviews.js]] --[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 10:56, 3 tebax 2026 (UTC)
= Moda tarî =
== [[Şablon:wîkîpediya]] ==
Rengê tarî de xirab e.--[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 19:36, 4 tebax 2026 (UTC)
= Bot =
Karên ku bi botê werin çêkirin ji kerema xwe li vir binivîsin.
== Kategorî:Biwêj ==
[[:Kategorî:Biwêj]] divê were paqijkirin, lîsteya madeyên {{ş|biwêj}} çêke, yên ku tê de bûn, kirin, man hene filtre bike yên din bi destî tê çêkirin.—[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:17, 16 tîrmeh 2026 (UTC)
== Jêgirtin ==
Xistina jêgirtinên beşa [https://ku.wiktionary.org/w/index.php?search=insource%3A%2F%3D+*Ji+%5BWw%5D%C3%AAjey%C3%AA+*%3D%2F&title=Taybet%3AL%C3%AAger%C3%AEn&profile=advanced&fulltext=1&ns0=1&searchToken=8rh0bmw8dccsi7aynl6zli8uf ji wêjeyê] li beşa maneyê. —[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:17, 16 tîrmeh 2026 (UTC)
== Bota Toolforgeê ==
Botekî Toolforgeê lazim e ji bo ku xeletiyên biçûk wekî şablonên bi navên îngilîzî werin kurdîkirin yan jî valahiya beşan rast bike û hwd.—[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:17, 16 tîrmeh 2026 (UTC)
:Min [[Bikarhêner:Wikihez/skrîpt/py/kuwiktkozmetik.py|paqijiyen kozmetîk]] hazir kir feqat hîn navên şablonan naguhêre. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 20:05, 4 tebax 2026 (UTC)
== Updatew ==
Bota [[Bikarhêner:Wikihez/skrîpt/py/updateW.py|updateW]] divê were rojanekirin. Yan jî yekî nû were çêkirin. Şablonên {{ş|W}} di beşa tercimeyan de sererast dike û zimanan rêz dike. Ya niha xeletiya navê zimanî dide.—[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:17, 16 tîrmeh 2026 (UTC)
== sihir --> sêhr ==
Tercimeyên ''[[sêhr]]'' hemû dibêje ''sihir'' loma bi botê lazim e kirin ''sêhr''. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 17:43, 18 tîrmeh 2026 (UTC)
:Sihirbaz --> sêhrbaz [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 18:07, 18 tîrmeh 2026 (UTC)
== Tercimeyên dîroknas ==
Li tercimeyên [[dîroknas]], hevmaneyên wê hewce ye were îlawekirin. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 18:44, 18 tîrmeh 2026 (UTC)
== Mewlûd ==
Sererastkirina jêgirtinên mewlûdê [https://ku.wiktionary.org/w/index.php?search=insource%3A%2Fw%5C%3AMela+His%C3%AAn%C3%AA+Batey%C3%AE%2F&title=Taybet%3AL%C3%AAger%C3%AEn&ns0=1&searchToken=8m0tguy3sqt7edr4sg0u8hedo] wekî [https://ku.wiktionary.org/w/index.php?title=dax%C3%AEdar&curid=284303&diff=6265851&oldid=6142285] [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 09:43, 20 tîrmeh 2026 (UTC)
5j5pihjxecv71ci4y7h3iugephk6p79
Wîkîferheng:Nû
4
1358184
6333668
6291600
2026-08-14T16:10:07Z
Wikihez
7344
Hedefa beralîkirinê ji [[MediaWiki:Gadget-start.js]] ber bi [[MediaWiki:Gadget-start]] ve guhart
6333668
wikitext
text/x-wiki
#BERALÎKIRIN [[MediaWiki:Gadget-start]]
bp4e8j8cypz2w8x44e28laf4khr3xn3
Bikarhêner:Wikihez/Gadget-test.css
2
1358394
6333692
6327634
2026-08-14T18:55:17Z
6333692
css
text/css
6333708
6333692
2026-08-14T19:35:07Z
6333708
css
text/css
6333714
6333708
2026-08-14T19:47:09Z
6333714
css
text/css
6333734
6333714
2026-08-14T21:12:35Z
Wikihez
7344
6333734
css
text/css
6333748
6333734
2026-08-14T22:41:39Z
Wikihez
7344
6333748
css
text/css
/* ===================================================================
#editform while the wizard is active
=================================================================== */
/* Keeps #editform genuinely laid out instead of display:none*/
.wiktku-offscreen {
position: absolute !important;
left: -9999px !important;
top: 0 !important;
width: 100%;
max-width: 100%;
visibility: hidden;
}
/* ===================================================================
Base scale
=================================================================== */
#wiktku-start-form {
font-size: 0.92em;
line-height: 1.35;
}
#wiktku-start-form * {
box-sizing: border-box;
}
.wiktku-addlang-notice {
margin: 0 0 0.8em;
padding: 0.6em 0.8em;
background: var(--wikt-palette-paleblue);
border: 1px solid var(--wikt-palette-lightgrey);
border-radius: 4px;
}
/* ===================================================================
Step cards
a compact card with a left accent bar, so each step reads as
a distinct unit
=================================================================== */
.wiktku-start-step {
padding: 0.7em 0.9em;
margin-bottom: 0.6em;
border: 1px solid var(--wikt-palette-grey-3, #e0e0e0);
border-left: 4px solid var(--wikt-palette-blue-9, #3366cc);
border-radius: 6px;
background: var(--wikt-palette-white);
box-shadow: 0 1px 2px rgba(0, 0, 0, 0.04);
transition: border-left-color 0.15s ease, box-shadow 0.15s ease;
}
.wiktku-start-step:hover {
box-shadow: 0 2px 6px rgba(0, 0, 0, 0.08);
}
.wiktku-start-step:focus-within {
border-left-color: var(--wikt-palette-blue-9, #3366cc);
box-shadow: 0 2px 6px rgba(0, 0, 0, 0.1);
}
/* Ghybu, 14 Tebax 2026: "Cureyê rêzimanî" and "Parametreyên cureyê
rêzimanî" should read as one question, not two. Fuse the posparams
card onto the bottom of the pos card (shared left accent bar, no
border/gap between them) and drop its own big heading in favor of
the smaller, pos-specific label start.js now sets via question_fmt
("Cins/zayend" / "Cureyê lêkerê" / "Taybetmendî"). posparams.visible
only turns this div on once a pos is chosen, and it always renders
immediately after #wiktku-start-pos in the DOM, so this pairing is safe. */
#wiktku-start-pos {
border-radius: 6px 6px 0 0;
margin-bottom: 0;
border-bottom: none;
}
#wiktku-start-posparams {
border-radius: 0 0 6px 6px;
border-top: none;
padding-top: 0.3em;
}
#wiktku-start-posparams .wiktku-start-step-name {
display: none;
}
/* Scoped to #wiktku-start-form (not just .wiktku-start-step-name) and
!important on font-size: this is a real <h3> tag (see start.js), so
the wiki skin's own default heading styles can otherwise win over a
plain class rule and render it unpredictably (varies by skin/
viewport — this was previously landing at a different effective
size on desktop Vector vs. mobile Minerva purely by skin-default
accident, not by design). The heading now leads the visual hierarchy
through both size AND colour (tinted to match the card's accent
bar), while .wiktku-start-step-question below is deliberately
lighter-weight and muted so the two never compete for attention. */
#wiktku-start-form .wiktku-start-step-name {
font-size: 1.1em !important;
font-weight: 700;
letter-spacing: 0.03em;
margin: 0 0 0.3em;
line-height: 1.2;
color: var(--wikt-palette-blue-9, #3366cc);
border: 0;
padding: 0;
}
/* Rewiye tine, 14 Tebax 2026: "pûnto jî biçûk in, xwendina wan hinek zehmet
e" — the question text and the many small per-field labels (Cinsiyet:,
Rehê dema niha:, …) were sized noticeably smaller than the heading above
them; bumped both a step so the whole card reads at a more consistent,
comfortable size instead of the heading standing out and everything
under it feeling like fine print. */
.wiktku-start-step-question {
font-size: 1em;
font-weight: 400;
color: var(--wikt-palette-grey-9, #555);
margin: 0 0 0.5em;
line-height: 1.45;
}
.wiktku-start-step label {
padding-right: 1.2em;
font-size: 1em;
}
/* Rewiye tine, 14 Tebax 2026: short reassurance notes next to the fields
that most confused a first-time user (Bilêvkirin's template dropdown,
Mane's per-sense template dropdown) — muted so they read as a hint, not
another question competing with .wiktku-start-step-question. */
.wiktku-step-hint {
font-size: 0.88em;
font-style: italic;
color: var(--wikt-palette-grey-8, #72777d);
margin: 0 0 0.5em;
line-height: 1.4;
}
/* Same specificity as the rule just above, so it must come after to
actually win: the name label isn't a field label needing right
padding or the form's base label size, it's a heading. */
#wiktku-start-form .wiktku-start-step-name label {
padding-right: 0;
font-size: inherit !important;
color: inherit;
}
input[type="text"].wiktku-start-step-field {
width: 100%;
padding: 5px 8px;
border: 1px solid var(--wikt-palette-lightgrey);
border-radius: 4px;
transition: border-color 0.12s ease, box-shadow 0.12s ease;
}
input[type="text"].wiktku-start-step-field:focus {
border-color: var(--wikt-palette-blue-9, #3366cc);
box-shadow: inset 0 0 0 1px var(--wikt-palette-blue-9, #3366cc);
outline: 0;
}
input[type="text"].wiktku-start-step-field.wiktku-start-narrow {
width: 20em;
}
/* Only used by selects that opt out via .wiktku-plain-select; other
selects get their width from the searchable picker instead (see
input.wiktku-ac-input). */
select.wiktku-start-narrow,
input.wiktku-dfn-tpl-title {
width: 20em;
max-width: 100%;
box-sizing: border-box;
}
#wiktku-start-spinner {
float: right;
margin-left: 1em;
}
#wiktku-start-footer {
display: flex;
flex-wrap: wrap;
align-items: center;
gap: 0.5em;
padding: 0.6em 0.2em;
position: sticky;
bottom: 0;
background: var(--wikt-palette-white);
border-top: 1px solid var(--wikt-palette-grey-3, #e0e0e0);
z-index: 5;
}
/* Quiet, non-competing text — sits next to the cache buttons so the
person can tell at a glance whether their latest edits are backed
up, without it fighting the buttons for attention. */
#wiktku-last-saved {
font-size: 0.85em;
color: var(--wikt-palette-grey-9, #767676);
white-space: nowrap;
}
/* ── Tercîh (settings) icon button — sits in the footer next to the
cache buttons. Uses the Codex "settings" (color-subtle) icon from
Commons directly rather than an OOUI icon-pack module, so it renders
the exact requested glyph without pulling in an extra dependency. */
.wiktku-prefs-btn {
width: 2.2em;
height: 2.2em;
flex: 0 0 auto;
padding: 0;
border: 1px solid var(--wikt-palette-grey-3, #e0e0e0);
border-radius: 2px;
background-color: var(--wikt-palette-white);
background-image: url(//upload.wikimedia.org/wikipedia/commons/e/e0/Codex_icon_settings_color-subtle.svg);
background-repeat: no-repeat;
background-position: center;
background-size: 1.2em 1.2em;
cursor: pointer;
}
.wiktku-prefs-btn:hover {
background-color: var(--wikt-palette-grey-0, #f8f9fa);
}
.wiktku-prefs-btn:active {
background-color: var(--wikt-palette-grey-1, #eaecf0);
}
/* Tercîh dialog body — OOUI's bare ProcessDialog body has no inset of
its own, so text/fields otherwise sit flush against the window edges. */
.wiktku-prefs-dialog-body {
padding: 1em 1.2em;
}
/* ── "Bişîne" click feedback ── */
@keyframes wiktku-btn-flash-pulse {
0% { box-shadow: 0 0 0 0 rgba(51, 102, 204, 0.55); }
70% { box-shadow: 0 0 0 9px rgba(51, 102, 204, 0); }
100% { box-shadow: 0 0 0 0 rgba(51, 102, 204, 0); }
}
#wiktku-unhide-editform.wiktku-btn-flash {
animation: wiktku-btn-flash-pulse 0.5s ease-out;
}
/* Persistent state while the wikitext is being built/submitted, set
alongside OOUI's own setDisabled(true) so it reads clearly even if
the skin's default disabled style is subtle. */
#wiktku-unhide-editform.wiktku-btn-sending .oo-ui-buttonElement-button {
background-color: var(--wikt-palette-grey-9, #767676) !important;
border-color: var(--wikt-palette-grey-9, #767676) !important;
cursor: progress;
opacity: 1 !important;
}
/* Wikihez, 14 Tebax 2026 (item 7): looks exactly like OOUI's own disabled
state, but ISN'T one — the button stays a real, clickable widget so its
click handler can still run and explain why (see wiktkuNotify call next
to wiktkuContentGateOk in start.js). A true setDisabled(true) here would
swallow the click before that message could ever show. */
#wiktku-unhide-editform.wiktku-btn-soft-disabled .oo-ui-buttonElement-button {
opacity: 0.5;
cursor: not-allowed;
}
/* ── "Beşên din" picker (item 3) ── */
.wiktku-besendin-picker {
margin: 0.6em 0 1em;
}
.wiktku-besendin-picker .wiktku-besendin-select {
width: 100%;
max-width: 24em;
}
#wiktku-start-form textarea.wiktku-start-step-field,
#wiktku-start-form textarea.wiktku-start-narrow,
#wiktku-start-form textarea.wiktku-dfn-subfield {
resize: vertical !important;
overflow: auto !important;
box-sizing: border-box !important;
vertical-align: top;
border: 1px solid var(--wikt-palette-lightgrey);
border-radius: 3px;
transition: border-color 0.1s ease, box-shadow 0.1s ease;
}
/* Modern focus state to match the searchable-picker inputs. */
#wiktku-start-form textarea.wiktku-start-step-field:focus,
#wiktku-start-form textarea.wiktku-start-narrow:focus,
#wiktku-start-form textarea.wiktku-dfn-subfield:focus {
border-color: var(--wikt-palette-blue-9, #3366cc);
box-shadow: inset 0 0 0 1px var(--wikt-palette-blue-9, #3366cc);
outline: 0;
}
/* Standard: every textarea in the form is full width by default */
#wiktku-start-form textarea:not(.wiktku-start-narrow) {
width: 100%;
max-width: 100%;
box-sizing: border-box;
}
#wiktku-start-form textarea.wiktku-start-narrow,
#wiktku-start-form textarea.wiktku-dfn-subfield.wiktku-start-narrow {
width: 20em;
max-width: 100%;
min-width: 8em;
height: calc(1.7em + 10px);
min-height: calc(1.7em + 10px);
padding-top: 4px !important;
padding-bottom: 4px !important;
line-height: 1.35 !important;
resize: none !important;
}
/* Exception: "Sernav" / "Sernavê orjînal" citation-source fields (kitêb,
kovar, malper, …) — long enough to be worth 2 rows and manual resizing. */
#wiktku-start-form textarea.wiktku-dfn-quote-src-input.wiktku-dfn-quote-src-input--title {
height: calc(2 * 1.35em + 10px);
min-height: calc(2 * 1.35em + 10px);
}
/* ── Manual drag-to-resize handle ── */
#wiktku-start-form textarea:not(.wiktku-start-narrow) {
resize: none !important;
}
/* Inline modifier button (⊕) */
.wiktku-word-li {
display: flex;
align-items: flex-start;
flex-wrap: wrap;
gap: 0.3em;
}
.wiktku-mod-btn {
flex: 0 0 auto;
width: 1.6em;
height: 1.6em;
padding: 0;
line-height: 1;
border: 1px solid var(--wikt-palette-lightgrey);
border-radius: 2px;
background: var(--wikt-palette-white);
color: var(--wikt-palette-blue-9, #3366cc);
font-size: 1em;
cursor: pointer;
}
.wiktku-mod-btn:hover {
border-color: var(--wikt-palette-blue-9, #3366cc);
background: var(--wikt-palette-paleblue, #eaf3ff);
}
.wiktku-mod-picker {
display: flex;
flex-wrap: wrap;
gap: 0.25em;
width: 100%;
margin-top: 0.15em;
padding: 0.35em;
border: 1px solid var(--wikt-palette-lightgrey);
border-radius: 3px;
background: var(--wikt-palette-white);
box-shadow: 0 1px 3px rgba(0, 0, 0, 0.08);
}
.wiktku-mod-pill {
padding: 2px 8px;
border: 1px solid var(--wikt-palette-grey-3, #e0e0e0);
border-radius: 12px;
background: var(--wikt-palette-paleblue, #eaf3ff);
font-size: 0.85em;
white-space: nowrap;
cursor: pointer;
}
.wiktku-mod-pill:hover {
border-color: var(--wikt-palette-blue-9, #3366cc);
background: var(--wikt-palette-blue-9, #3366cc);
color: var(--wikt-palette-white);
}
.wiktku-mod-pill:disabled,
.wiktku-mod-pill.wiktku-mod-pill-used {
border-color: var(--wikt-palette-grey-3, #e0e0e0);
background: var(--wikt-palette-lightgrey);
color: var(--wikt-palette-grey-3, #999);
cursor: not-allowed;
opacity: 0.6;
}
.wiktku-mod-pill:disabled:hover,
.wiktku-mod-pill.wiktku-mod-pill-used:hover {
border-color: var(--wikt-palette-grey-3, #e0e0e0);
background: var(--wikt-palette-lightgrey);
color: var(--wikt-palette-grey-3, #999);
}
.wiktku-mod-val-wrap {
display: flex;
align-items: center;
gap: 0.25em;
width: 100%;
margin-top: 0.15em;
}
.wiktku-mod-val-input {
flex: 0 1 14em;
max-width: 14em;
padding: 3px 6px;
border: 1px solid var(--wikt-palette-lightgrey);
border-radius: 2px;
}
.wiktku-mod-confirm,
.wiktku-mod-cancel {
flex: 0 0 auto;
width: 1.6em;
height: 1.6em;
padding: 0;
line-height: 1;
border: 1px solid var(--wikt-palette-lightgrey);
border-radius: 2px;
background: var(--wikt-palette-white);
cursor: pointer;
}
.wiktku-mod-confirm {
color: #178a17;
border-color: #178a17;
}
.wiktku-mod-cancel {
color: var(--wikt-palette-red-9, #d33);
border-color: var(--wikt-palette-red-9, #d33);
}
.wiktku-resize-wrap {
position: relative;
display: block;
}
/* Independent of .wiktku-resize-wrap (created separately by
ensureLinebreakBackdrop() in start.js, only for textareas that ever
get flagged with a linebreak) so it doesn't depend on load order
relative to wiktkuMakeManualResizable(). Plain block, no size of its
own — purely a position:relative anchor for the backdrop. */
.wiktku-linebreak-wrap {
position: relative;
display: block;
}
.wiktku-resize-grip {
position: absolute;
right: 2px;
bottom: 2px;
width: 14px;
height: 14px;
cursor: ns-resize;
touch-action: none;
opacity: 0.5;
z-index: 2;
background-image: linear-gradient(135deg, transparent 0 50%, var(--wikt-palette-grey-9, #767676) 50% 100%);
background-repeat: no-repeat;
}
.wiktku-resize-grip:hover,
.wiktku-resize-grip:active {
opacity: 0.9;
}
/* ===================================================================
Searchable dropdown (wrapNativeSelect in start.js)
.wiktku-native-select-wrap > input.wiktku-ac-input (search box)
> ul.wiktku-ac-results (result list)
> select (hidden, holds the value)
=================================================================== */
.wiktku-native-select-wrap {
display: inline-block;
position: relative;
vertical-align: top;
}
/* Matches the width the native select would have had (see
select.wiktku-start-narrow). */
.wiktku-native-select-wrap input[type="search"],
input.wiktku-ac-input {
display: block;
width: 20em;
max-width: 100%;
box-sizing: border-box;
padding: 3px 6px;
border: 1px solid var(--wikt-palette-lightgrey);
border-radius: 2px;
background: var(--wikt-palette-white);
color: inherit;
font-size: inherit;
font-family: inherit;
transition: border-color 0.1s ease, box-shadow 0.1s ease;
}
input.wiktku-ac-input:focus {
border-color: var(--wikt-palette-blue-9);
box-shadow: inset 0 0 0 1px var(--wikt-palette-blue-9);
outline: 0;
}
input.wiktku-ac-input::placeholder {
color: var(--wikt-palette-grey-9);
opacity: 1;
}
/* Hide Safari/Chrome's built-in search decorations. */
input.wiktku-ac-input::-webkit-search-decoration,
input.wiktku-ac-input::-webkit-search-cancel-button,
input.wiktku-ac-input::-webkit-search-results-button {
-webkit-appearance: none;
appearance: none;
}
/* ── Result list ── */
/* top/bottom/max-height are overridden inline by showResults() when it
flips the list above the box; these are just its defaults. */
ul.wiktku-ac-results {
position: absolute;
z-index: 9999;
top: 100%;
bottom: auto;
left: 0;
margin: 0;
padding: 0;
list-style: none;
width: 20em;
max-width: 90vw;
max-height: 13em;
overflow-y: auto;
overscroll-behavior: contain;
-webkit-overflow-scrolling: touch;
background: var(--wikt-palette-white);
border: 1px solid var(--wikt-palette-lightgrey);
border-radius: 3px;
box-shadow: 0 3px 10px rgba(0, 0, 0, 0.15);
}
ul.wiktku-ac-results li {
margin: 0;
padding: 4px 8px;
cursor: pointer;
font-size: 0.92em;
display: flex;
align-items: center;
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
}
/* .wiktku-ac-active is the keyboard cursor; hover mirrors it; :active
covers the touch press state. */
ul.wiktku-ac-results li.wiktku-ac-active,
ul.wiktku-ac-results li:hover {
background: var(--wikt-palette-lightblue);
}
ul.wiktku-ac-results li:active {
background: var(--wikt-palette-blue-9);
color: var(--wikt-palette-white);
}
/* Touch devices: bigger tap targets, no sticky hover. */
@media (pointer: coarse) {
ul.wiktku-ac-results li {
padding: 6px 10px;
min-height: 2.2em;
font-size: 1em;
}
ul.wiktku-ac-results li:hover {
background: transparent;
}
ul.wiktku-ac-results li.wiktku-ac-active {
background: var(--wikt-palette-lightblue);
}
input.wiktku-ac-input {
/* >=16px stops iOS Safari zooming the page when the box is focused. */
font-size: 16px;
min-height: 2.2em;
}
}
/* Item 5 (Wikihez, 14 Tebax 2026): inline preview + confirm panel shown
before inserting an auto-content pronunciation template (ku-IPA,
ku-kîte, …) — deliberately part of the form's own layout rather than a
browser confirm()/prompt() dialog, per "dont use userinput use
something more advanced". */
.wiktku-pron-preview {
margin: 6px 0;
padding: 8px 10px;
border: 1px solid var(--wikt-palette-blue-9, #3366cc);
border-radius: 6px;
background: var(--wikt-palette-paleblue, #eaf3ff);
}
.wiktku-pron-preview-label {
font-size: 0.88em;
font-weight: 600;
color: var(--wikt-palette-grey-9, #555);
margin-bottom: 3px;
}
.wiktku-pron-preview-body {
font-family: monospace;
font-size: 1em;
white-space: pre-wrap;
word-break: break-word;
margin-bottom: 6px;
}
.wiktku-pron-preview-actions {
display: flex;
gap: 6px;
}
.wiktku-pron-preview-confirm,
.wiktku-pron-preview-cancel {
font-size: 0.88em;
padding: 3px 10px;
border-radius: 4px;
cursor: pointer;
border: 1px solid var(--wikt-palette-lightgrey, #a2a9b1);
background: var(--wikt-palette-white, #fff);
}
.wiktku-pron-preview-confirm {
border-color: var(--wikt-palette-blue-9, #3366cc);
color: var(--wikt-palette-blue-9, #3366cc);
font-weight: 600;
}
.wiktku-pron-preview-confirm:disabled {
opacity: 0.5;
cursor: wait;
}
.wiktku-pron-preview-cancel:hover {
background: var(--wikt-palette-grey-0, #f8f9fa);
}
/* Template pickers fill their container since the search box, not the
<select>, is what the user sees. */
.wiktku-pron-wrap .wiktku-native-select-wrap,
.wiktku-etym-wrap .wiktku-native-select-wrap,
.wiktku-pron-wrap .wiktku-native-select-wrap input.wiktku-ac-input,
.wiktku-etym-wrap .wiktku-native-select-wrap input.wiktku-ac-input {
width: 100%;
}
.wiktku-pron-wrap .wiktku-native-select-wrap input.wiktku-ac-input,
.wiktku-etym-wrap .wiktku-native-select-wrap input.wiktku-ac-input {
font-size: 0.88em;
}
.wiktku-cavkani-wrap .wiktku-native-select-wrap,
.wiktku-cavkani-wrap .wiktku-native-select-wrap input.wiktku-ac-input {
width: 100%;
}
/* Template selector inside a sense block. */
.wiktku-dfn-tpl-row .wiktku-native-select-wrap input.wiktku-ac-input {
font-size: 0.88em;
}
/* Language/dialect rows: picker must line up with the word field beside it. */
.wiktku-lang-row .wiktku-native-select-wrap {
flex: 0 0 auto;
}
#wiktku-start-form textarea.wiktku-dfn-mane,
#wiktku-start-form textarea.wiktku-dfn-nimune-text,
#wiktku-start-form .wiktku-dfn-jeder-group textarea.wiktku-dfn-nimune-quote,
#wiktku-start-form .wiktku-dfn-nimune-sub textarea.wiktku-dfn-nimune-tr,
#wiktku-start-form .wiktku-dfn-nimune-sub textarea.wiktku-dfn-nimune-t,
#wiktku-start-form .wiktku-dfn-quote-sub textarea.wiktku-dfn-nimune-quote-tr,
#wiktku-start-form .wiktku-dfn-quote-sub textarea.wiktku-dfn-nimune-quote-t,
#wiktku-start-form textarea.wiktku-dfn-quote-src-manual,
#wiktku-start-form .wiktku-pron-wrap textarea.wiktku-pron-text,
#wiktku-start-form .wiktku-etym-wrap textarea.wiktku-etym-text,
#wiktku-start-form .wiktku-tewandin-wrap textarea.wiktku-tewandin-text,
#wiktku-start-form textarea.wiktku-cavkani-text,
#wiktku-start-form textarea.wiktku-dfn-tercime,
#wiktku-start-form textarea.wiktku-dfn-izah {
--wiktku-ta-rows: 2;
height: calc(var(--wiktku-ta-rows) * 1.35em + 6px);
min-height: calc(var(--wiktku-ta-rows) * 1.35em + 6px);
}
#wiktku-start-form .wiktku-pron-wrap textarea.wiktku-pron-text,
#wiktku-start-form .wiktku-etym-wrap textarea.wiktku-etym-text,
#wiktku-start-form textarea.wiktku-dfn-izah {
--wiktku-ta-rows: 3;
}
#wiktku-start-form textarea.wiktku-cavkani-text {
--wiktku-ta-rows: 4;
}
/* Nimûne + Jêgirtin (citation) boxes, and their tr/t sub-fields: at
least 4 rows so there's room to actually write an example/quote. */
#wiktku-start-form textarea.wiktku-dfn-nimune-text,
#wiktku-start-form .wiktku-dfn-nimune-sub textarea.wiktku-dfn-nimune-tr,
#wiktku-start-form .wiktku-dfn-nimune-sub textarea.wiktku-dfn-nimune-t,
#wiktku-start-form .wiktku-dfn-jeder-group textarea.wiktku-dfn-nimune-quote,
#wiktku-start-form .wiktku-dfn-quote-sub textarea.wiktku-dfn-nimune-quote-tr,
#wiktku-start-form .wiktku-dfn-quote-sub textarea.wiktku-dfn-nimune-quote-t,
#wiktku-start-form textarea.wiktku-dfn-quote-src-manual {
--wiktku-ta-rows: 4;
}
/* Nimûne/jêgirtin box currently contains a typed/pasted linebreak —
the border is nudged so the user notices before it's silently turned
into <br> on output. The break itself is marked precisely, not the
whole box, via a mirrored backdrop layer (see below and
highlightLinebreak()/buildLinebreakBackdropHtml() in start.js). */
#wiktku-start-form textarea.wiktku-has-linebreak {
border-color: var(--wikt-palette-yellow6, #ac6600) !important;
}
/* Backdrop layer: sits behind the textarea showing the same text, with
a highlighted marker at each line that's followed by a break. Its
font/padding/box-sizing/line-height are copied from the textarea via
computed style (see syncLinebreakBackdropMetrics() in start.js), not
shared CSS classes — most of this box's own rules are written as
"textarea.foo", which a <div> with the same class wouldn't match.
Only created lazily, the first time a given textarea actually has a
break — see ensureLinebreakBackdrop(). */
.wiktku-linebreak-backdrop {
position: absolute;
inset: 0;
z-index: 0;
margin: 0;
overflow: hidden;
white-space: pre-wrap;
word-wrap: break-word;
color: transparent;
background: transparent !important;
border-color: transparent !important;
box-shadow: none !important;
resize: none !important;
pointer-events: none;
}
/* Raise the real textarea above its backdrop so typing/selection/caret
behave completely normally; the backdrop's mark shows through only
where the real textarea's own background is transparent. */
#wiktku-start-form textarea.wiktku-has-linebreak-source {
position: relative;
z-index: 1;
background-color: transparent;
}
.wiktku-linebreak-mark {
background-color: var(--wikt-palette-yellow6, #ac6600);
color: var(--wikt-palette-white, #fff);
border-radius: 2px;
}
/* ── Tercime + Îzah boxes ── */
.wiktku-dfn-nonku-wrap {
display: flex;
flex-direction: column;
gap: 3px;
}
.wiktku-dfn-nimune-sub,
.wiktku-dfn-quote-sub {
margin-top: 3px;
margin-left: 1em;
padding-left: 0.6em;
border-left: 2px solid var(--wikt-palette-lightgrey);
display: flex;
flex-direction: column;
gap: 3px;
}
.wiktku-dfn-nimune-sub textarea.wiktku-dfn-nimune-tr,
.wiktku-dfn-nimune-sub textarea.wiktku-dfn-nimune-t {
min-width: 8em;
padding-top: 2px !important;
padding-bottom: 2px !important;
line-height: 1.35 !important;
font-size: 0.88em;
}
/* ── Sense list (Mane step) — numbered badges instead of the browser's
default flat "1." marker, so each sense reads as a distinct block. ── */
ol.wiktku-dfn-list {
list-style: none;
margin: 0;
padding: 0;
counter-reset: wiktku-dfn-sense;
}
ol.wiktku-dfn-list > li.wiktku-dfn-sense {
position: relative;
counter-increment: wiktku-dfn-sense;
padding-left: 2.1em;
margin-bottom: 0.9em;
}
ol.wiktku-dfn-list > li.wiktku-dfn-sense:not(:last-child) {
padding-bottom: 0.9em;
border-bottom: 1px dashed var(--wikt-palette-grey-3, #e0e0e0);
}
ol.wiktku-dfn-list > li.wiktku-dfn-sense::before {
content: counter(wiktku-dfn-sense);
position: absolute;
left: 0;
top: 1px;
width: 1.6em;
height: 1.6em;
border-radius: 50%;
background: var(--wikt-palette-blue-9, #3366cc);
color: var(--wikt-palette-white);
font-size: 0.85em;
font-weight: 700;
display: flex;
align-items: center;
justify-content: center;
}
/* Template selector row inside a sense block */
.wiktku-dfn-tpl-row {
margin-bottom: 3px;
}
/* ── Sub-field titles (Etîket, Kategorî, Hevmane, Dijmane, Nimûne,
Jêgirtin, …) — previously plain unstyled run-on text. Each group
now reads as a small labelled field: the term stands out, the
izah hint stays quiet, and the block gets its own breathing room. ── */
.wiktku-dfn-subgroup {
margin-top: 0.5em;
padding-top: 0.4em;
border-top: 1px dashed var(--wikt-palette-grey-3, #e0e0e0);
}
.wiktku-dfn-subgroup:first-of-type {
margin-top: 0.3em;
padding-top: 0;
border-top: none;
}
.wiktku-dfn-sublabel {
display: block;
margin-bottom: 3px;
font-size: 0.88em;
}
.wiktku-dfn-sublabel-term {
font-weight: 600;
color: var(--wikt-palette-blue-9, #3366cc);
letter-spacing: 0.03em;
font-size: 0.92em;
}
.wiktku-dfn-sublabel-hint {
color: var(--wikt-palette-grey-9, #767676);
font-style: italic;
}
.wiktku-pron-wrap,
.wiktku-etym-wrap,
.wiktku-tewandin-wrap,
.wiktku-cavkani-wrap {
display: flex;
flex-direction: column;
gap: 3px;
}
/* ── POS section tabs ──
Modernized into rounded pills instead of flat file-folder tabs. */
#wiktku-section-tabs {
display: flex;
flex-wrap: wrap;
gap: 4px;
margin-bottom: 0.6em;
align-items: center;
}
#wiktku-section-tabs .wiktku-section-tab {
padding: 3px 12px;
border: 1px solid var(--wikt-palette-lightgrey);
border-radius: 999px;
background: var(--wikt-palette-dullcyan);
cursor: pointer;
font-size: 0.86em;
user-select: none;
transition: background 0.12s ease, border-color 0.12s ease;
}
#wiktku-section-tabs .wiktku-section-tab:hover {
border-color: var(--wikt-palette-blue-9, #3366cc);
}
#wiktku-section-tabs .wiktku-section-tab.wiktku-tab-active {
background: var(--wikt-palette-blue-9, #3366cc);
border-color: var(--wikt-palette-blue-9, #3366cc);
color: var(--wikt-palette-white);
font-weight: 600;
}
/* ── Step-group tabs (Mane / Bilêvkirin / Beşên din — see STEP_GROUPS in
start.js) ── Sits directly under the pill-style section tabs above;
styled as an underlined secondary nav so the two bars stay visually
distinct. */
#wiktku-group-tabs {
display: flex;
flex-wrap: wrap;
gap: 4px;
margin-bottom: 0.8em;
border-bottom: 2px solid var(--wikt-palette-lightgrey);
}
#wiktku-group-tabs .wiktku-group-tab {
position: relative;
padding: 7px 14px 8px;
margin-bottom: -2px;
border-bottom: 3px solid transparent;
border-radius: 3px 3px 0 0;
cursor: pointer;
font-size: 0.95em;
font-weight: 600;
color: var(--wikt-palette-grey-9, #333);
background: var(--wikt-palette-grey-0, #f8f9fa);
user-select: none;
transition: color 0.12s ease, border-color 0.12s ease, background 0.12s ease;
}
#wiktku-group-tabs .wiktku-group-tab:hover {
color: var(--wikt-palette-blue-9, #3366cc);
background: var(--wikt-palette-paleblue, #eaf3ff);
}
#wiktku-group-tabs .wiktku-group-tab.wiktku-tab-active {
border-bottom-color: var(--wikt-palette-blue-9, #3366cc);
color: var(--wikt-palette-white);
background: var(--wikt-palette-blue-9, #3366cc);
font-weight: 700;
}
/* Small dot marking a tab that still has an unfilled required field
hidden inside it (see updateGroupTabIndicators in start.js). Cleared
automatically once that tab becomes the active one. */
#wiktku-group-tabs .wiktku-group-tab.wiktku-tab-missing::after {
content: "";
position: absolute;
top: 4px;
right: -1px;
width: 6px;
height: 6px;
border-radius: 50%;
background: var(--wikt-palette-red-9, #d33);
}
.wiktku-lang-row-list {
margin: 0;
padding: 0;
list-style: none;
}
.wiktku-lang-row {
display: flex;
align-items: flex-start;
gap: 6px;
margin-bottom: 3px;
flex-wrap: wrap;
}
.wiktku-lang-row-words {
margin: 0;
padding: 0;
list-style: none;
display: flex;
flex-direction: column;
gap: 3px;
}
/* Dûnde/Werger/Zarava rows: align the picker's height with the adjacent
word textarea (see .wiktku-start-narrow above). */
.wiktku-lang-row .wiktku-native-select-wrap input.wiktku-ac-input {
height: calc(1.7em + 10px);
min-height: calc(1.7em + 10px);
padding-top: 4px;
padding-bottom: 4px;
}
/* ── Werger / Bi zaravayên din groups: one per gloss, shared spacing ── */
#wiktku-start-trans .wiktku-trans-group,
#wiktku-start-zarava .wiktku-zarava-group {
margin-bottom: 0.6em;
}
#wiktku-start-trans .wiktku-trans-group:last-child,
#wiktku-start-zarava .wiktku-zarava-group:last-child {
margin-bottom: 0;
}
#wiktku-start-trans .wiktku-trans-group-label,
#wiktku-start-zarava .wiktku-zarava-group-label {
font-weight: 600;
font-size: 0.88em;
margin-bottom: 3px;
}
.wiktku-dfn-jeder-group {
margin-top: 3px;
}
.wiktku-dfn-quote-src-sel {
font-size: 0.88em;
margin-top: 3px;
display: block;
}
.wiktku-dfn-quote-src-fields {
display: flex;
flex-direction: column;
gap: 3px;
margin-top: 3px;
}
/* Stacked layout: textarea gets its own full-width row, button + status
sit below it on their own row. Simpler and more robust than sharing a
row with the button — that required the textarea's own resize-wrap
div (added by wiktkuMakeManualResizable in start.js) to correctly
inherit flex-grow, which kept being fragile across breakpoints. */
.wiktku-dfn-quote-citoid {
display: flex;
flex-direction: column;
align-items: stretch;
gap: 0.4em;
margin-top: 3px;
margin-bottom: 3px;
}
.wiktku-dfn-quote-citoid-input {
width: 100%;
max-width: 100%;
box-sizing: border-box;
}
/* Column flex + align-items:stretch (above) is what makes the textarea's
.wiktku-resize-wrap (see wiktkuMakeManualResizable in start.js) reach
full width automatically — stretch fills the cross axis for any block
child, no flex-grow needed on the wrap itself. The button and status
text, right below the textarea, opt back out of that stretch so they
stay their natural (small) size instead of also going full width. */
.wiktku-dfn-quote-citoid-btn,
.wiktku-dfn-quote-citoid-status {
align-self: flex-start;
}
.wiktku-dfn-quote-src-cat-status {
display: block;
font-size: 0.82em;
color: var(--wikt-palette-lightgrey, #767676);
margin-top: 2px;
}
.wiktku-dfn-quote-src-row {
display: flex;
align-items: baseline;
gap: 4px;
flex-wrap: wrap;
}
.wiktku-dfn-quote-src-row label {
font-size: 0.82em;
white-space: nowrap;
min-width: 8em;
}
textarea.wiktku-dfn-quote-src-input {
flex: 1 1 12em;
max-width: 100%;
box-sizing: border-box;
}
@media (max-width: 720px) {
.wiktku-lang-row {
flex-direction: column;
}
/* Re-assert against the wiki's own mobile skin heading styles,
which can apply their own mobile-breakpoint rules to this real
<h3> and load after ours in the cascade — see the rule itself,
above, for why this needs guarding at all. */
#wiktku-start-form .wiktku-start-step-name {
font-size: 1.05em !important;
margin: 0 0 0.2em !important;
line-height: 1.2 !important;
border: 0 !important;
padding: 0 !important;
}
/* Single column: search box and list use the full width. Narrow
textareas (Etîket, Hevmane, Dûnde/Jê/Têkildar/Binêre herwiha word
boxes, citation source fields, …) join them here too — at a fixed
20em width they used to poke out past the step card on narrow
screens. */
.wiktku-native-select-wrap,
input.wiktku-ac-input,
ul.wiktku-ac-results,
#wiktku-start-form textarea.wiktku-start-narrow,
#wiktku-start-form textarea.wiktku-dfn-subfield.wiktku-start-narrow {
width: 100%;
max-width: 100%;
}
.wiktku-mod-val-input {
flex: 1 1 auto;
max-width: 100%;
}
#wiktku-start-form textarea.wiktku-dfn-mane,
#wiktku-start-form .wiktku-pron-wrap textarea.wiktku-pron-text,
#wiktku-start-form .wiktku-etym-wrap textarea.wiktku-etym-text {
--wiktku-ta-rows: 3;
font-size: 1em;
}
#wiktku-start-form .wiktku-tewandin-wrap textarea.wiktku-tewandin-text,
#wiktku-start-form textarea.wiktku-cavkani-text {
--wiktku-ta-rows: 4;
font-size: 1em;
}
/* Nimûne + Jêgirtin and their tr/t sub-fields: keep at least 4 rows
on mobile too, rather than shrinking further than the desktop size. */
#wiktku-start-form textarea.wiktku-dfn-nimune-text,
#wiktku-start-form .wiktku-dfn-nimune-sub textarea.wiktku-dfn-nimune-tr,
#wiktku-start-form .wiktku-dfn-nimune-sub textarea.wiktku-dfn-nimune-t,
#wiktku-start-form .wiktku-dfn-jeder-group textarea.wiktku-dfn-nimune-quote,
#wiktku-start-form .wiktku-dfn-quote-sub textarea.wiktku-dfn-nimune-quote-tr,
#wiktku-start-form .wiktku-dfn-quote-sub textarea.wiktku-dfn-nimune-quote-t {
--wiktku-ta-rows: 4;
font-size: 1em;
}
/* Citoid URL/DOI/ISBN box: taller tap target (~2 lines) on mobile,
and now that this field is a <textarea> (see start.js) its
placeholder can actually wrap into that space — a plain <input>'s
placeholder can never wrap, no matter its height. */
.wiktku-dfn-quote-citoid-input {
min-height: calc(2 * 1.35em + 10px);
font-size: 1em;
}
.wiktku-dfn-nimune-sub,
.wiktku-dfn-quote-sub {
margin-left: 0.5em;
padding-left: 0.4em;
}
.wiktku-pron-wrap .wiktku-native-select-wrap input.wiktku-ac-input,
.wiktku-etym-wrap .wiktku-native-select-wrap input.wiktku-ac-input {
font-size: 1em;
min-height: 2.2em;
}
.wiktku-dfn-quote-src-row label {
min-width: 6em;
}
#wiktku-start-form textarea.wiktku-dfn-quote-src-input {
width: 100%;
flex: 1 1 100%;
}
.wiktku-start-step {
padding: 0.5em 0.6em;
}
}
/* ===================================================================
Night mode
Palette.css already flips every --wikt-palette-* var for night mode,
so rules built from those vars need nothing here. This hook is only
for real colours that can't be a palette var — here, the panel border,
since a drop shadow is invisible against an equally dark page.
Not needed: li:active's white text already flips to a dark colour at
night via --wikt-palette-white, so it stays legible on its own.
=================================================================== */
@media screen {
html.skin-theme-clientpref-night .wiktku-ac-results {
/* Border stands in for the shadow, invisible on a dark page. */
border-color: var(--wikt-palette-grey-5);
box-shadow: 0 3px 10px rgba(0, 0, 0, 0.6);
}
html.skin-theme-clientpref-night .wiktku-start-step,
html.skin-theme-clientpref-night .wiktku-start-step:hover,
html.skin-theme-clientpref-night .wiktku-start-step:focus-within {
box-shadow: none;
}
}
@media screen and (prefers-color-scheme: dark) {
html.skin-theme-clientpref-os .wiktku-ac-results {
border-color: var(--wikt-palette-grey-5);
box-shadow: 0 3px 10px rgba(0, 0, 0, 0.6);
}
html.skin-theme-clientpref-os .wiktku-start-step,
html.skin-theme-clientpref-os .wiktku-start-step:hover,
html.skin-theme-clientpref-os .wiktku-start-step:focus-within {
box-shadow: none;
}
}
/* "Zimanek lê zêde bike" portlet icon (Minerva/mobile) — Feather-core-edit.svg
via CSS mask, matching Minerva's own icon pattern. */
.minerva-icon-portletlink-ca-wiktku-addlang {
-webkit-mask-image: url("https://upload.wikimedia.org/wikipedia/commons/d/d7/Feather-core-edit.svg");
mask-image: url("https://upload.wikimedia.org/wikipedia/commons/d/d7/Feather-core-edit.svg");
-webkit-mask-repeat: no-repeat;
mask-repeat: no-repeat;
-webkit-mask-position: center;
mask-position: center;
-webkit-mask-size: 20px;
mask-size: 20px;
background-color: currentColor;
background-image: none;
}
/* ── posparams step (live wikitext + helper widgets) ── */
.wiktku-posparams-wrap {
display: flex;
flex-direction: column;
gap: 6px;
}
.wiktku-posparams-helpers {
display: flex;
flex-direction: column;
gap: 4px;
}
.wiktku-posparams-row {
display: flex;
align-items: center;
gap: 6px;
flex-wrap: wrap;
}
.wiktku-posparams-row label {
/* Rewiye tine, 14 Tebax 2026: these were the smallest labels on the whole
card (0.9em, one step below everything else) — the mobile breakpoint
already bumps this to 1em below; matching that on desktop too instead
of only fixing it for mobile. */
font-size: 1em;
min-width: 10em;
padding-right: 0;
}
.wiktku-posparams-text {
width: 100%;
box-sizing: border-box;
font-family: monospace;
font-size: 0.9em;
}
.wiktku-posparams-opt-toggle {
font-size: 0.85em;
margin-top: 2px;
display: inline-block;
}
.wiktku-posparams-opt-panel {
display: flex;
flex-direction: column;
gap: 2px;
padding: 4px 0 2px 1em;
}
.wiktku-posparams-opt-row {
display: flex;
align-items: center;
gap: 4px;
font-size: 0.85em;
}
/* ── resim step (one or more images) ── */
.wiktku-resim-list {
display: flex;
flex-direction: column;
gap: 6px;
}
.wiktku-resim-item {
display: flex;
flex-direction: column;
gap: 4px;
}
.wiktku-resim-item .wiktku-posparams-row {
flex-direction: column;
align-items: flex-start;
gap: 2px;
}
.wiktku-resim-item .wiktku-posparams-row label {
min-width: 0;
font-size: 0.9em;
}
/* ── dfn: "hide/show all subsections" link ──
Same show/hide-link pattern as "Tercîhên pêşketî" (posparams), but
toggles a class on the whole dfn stepDiv rather than one panel, so
a single click hides the etîket/kategorî/hevmane/dijmane/nimûne/
jêgirtin/etc. subgroups across every sense block at once (see
steps.dfn.build in start.js). */
.wiktku-dfn-subs-toggle {
font-size: 0.85em;
font-weight: 500;
display: inline-block;
margin: 2px 0 8px;
color: var(--wikt-palette-blue-9, #3366cc);
text-decoration: none;
}
.wiktku-dfn-subs-toggle:hover {
text-decoration: underline;
}
#wiktku-start-dfn.wiktku-dfn-subs-hidden .wiktku-dfn-subgroup {
display: none !important;
}
/* ===================================================================
Desktop text bump
The modifier pills/buttons and posparams helper text (labels,
"Tercîhên pêşketî" opt panel) use fairly small font-sizes that read
fine on mobile — narrow-viewport rendering effectively scales them
up — but look too small on a full desktop screen at their literal
em size. Bump them up past the 720px breakpoint only; mobile keeps
the original sizing above.
=================================================================== */
@media (min-width: 721px) {
.wiktku-mod-btn,
.wiktku-mod-confirm,
.wiktku-mod-cancel {
width: 1.8em;
height: 1.8em;
font-size: 1.1em;
}
.wiktku-mod-pill {
font-size: 0.95em;
padding: 3px 10px;
}
.wiktku-mod-val-input {
font-size: 0.95em;
}
.wiktku-posparams-row label {
font-size: 1em;
}
.wiktku-posparams-text {
font-size: 1em;
}
.wiktku-posparams-opt-toggle {
font-size: 0.95em;
}
.wiktku-posparams-opt-row {
font-size: 0.95em;
}
.wiktku-dfn-subs-toggle {
font-size: 0.95em;
}
/* Item 2 (Wikihez, 14 Tebax 2026): "sê-stûnî" — the same side-by-side,
multi-column card layout Ghybu asked for on POS/Cîns/Jimar now
applies to every posparams helper field (transliteration, gendered
forms, comparative/superlative, hanja, verb-tense roots, …), not
just those first two. Desktop-only per Wikihez's note that this isn't
supported on mobile — the plain stacked list above stays as-is
below this breakpoint. Rows are toggled via jQuery .show()/.hide()
(inline display:block/none) same as before; the grid only changes
how visible rows are arranged, not which ones are visible. */
.wiktku-posparams-helpers {
display: grid;
grid-template-columns: repeat(auto-fill, minmax(180px, 1fr));
gap: 10px 16px;
align-items: start;
}
.wiktku-posparams-helpers > .wiktku-posparams-row {
flex-direction: column;
align-items: stretch;
flex-wrap: nowrap;
gap: 3px;
}
.wiktku-posparams-helpers > .wiktku-posparams-row label {
min-width: 0;
}
.wiktku-posparams-helpers > .wiktku-posparams-row .wiktku-posparams-field,
.wiktku-posparams-helpers > .wiktku-posparams-row select.wiktku-posparams-cinsiyet-sel,
.wiktku-posparams-helpers > .wiktku-posparams-row select.wiktku-posparams-lektur-sel {
width: 100%;
max-width: 100%;
box-sizing: border-box;
}
/* The "Jimar" row added for item 1 lives here too (see start.js) — no
extra CSS needed, it's just another .wiktku-posparams-row. */
/* These two aren't per-field rows — span the full card width so the
collapsed toggle and its checkbox list don't get squeezed into one
narrow column. */
.wiktku-posparams-helpers > .wiktku-posparams-opt-toggle,
.wiktku-posparams-helpers > .wiktku-posparams-opt-panel {
grid-column: 1 / -1;
}
}
6pnx8pfwzj9p1lt0rei83iw3re9umw9
6333753
6333748
2026-08-14T22:56:13Z
Wikihez
7344
6333753
css
text/css
/* ===================================================================
#editform while the wizard is active
=================================================================== */
/* Keeps #editform genuinely laid out instead of display:none*/
.wiktku-offscreen {
position: absolute !important;
left: -9999px !important;
top: 0 !important;
width: 100%;
max-width: 100%;
visibility: hidden;
}
/* ===================================================================
Base scale
=================================================================== */
#wiktku-start-form {
font-size: 0.92em;
line-height: 1.35;
}
#wiktku-start-form * {
box-sizing: border-box;
}
.wiktku-addlang-notice {
margin: 0 0 0.8em;
padding: 0.6em 0.8em;
background: var(--wikt-palette-paleblue);
border: 1px solid var(--wikt-palette-lightgrey);
border-radius: 4px;
}
/* ===================================================================
Step cards
a compact card with a left accent bar, so each step reads as
a distinct unit
=================================================================== */
.wiktku-start-step {
padding: 0.7em 0.9em;
margin-bottom: 0.6em;
border: 1px solid var(--wikt-palette-grey-3, #e0e0e0);
border-left: 4px solid var(--wikt-palette-blue-9, #3366cc);
border-radius: 6px;
background: var(--wikt-palette-white);
box-shadow: 0 1px 2px rgba(0, 0, 0, 0.04);
transition: border-left-color 0.15s ease, box-shadow 0.15s ease;
}
.wiktku-start-step:hover {
box-shadow: 0 2px 6px rgba(0, 0, 0, 0.08);
}
.wiktku-start-step:focus-within {
border-left-color: var(--wikt-palette-blue-9, #3366cc);
box-shadow: 0 2px 6px rgba(0, 0, 0, 0.1);
}
/* Ghybu, 14 Tebax 2026: "Cureyê rêzimanî" and "Parametreyên cureyê
rêzimanî" should read as one question, not two. Fuse the posparams
card onto the bottom of the pos card (shared left accent bar, no
border/gap between them) and drop its own big heading in favor of
the smaller, pos-specific label start.js now sets via question_fmt
("Cins/zayend" / "Cureyê lêkerê" / "Taybetmendî"). posparams.visible
only turns this div on once a pos is chosen, and it always renders
immediately after #wiktku-start-pos in the DOM, so this pairing is safe. */
#wiktku-start-pos {
border-radius: 6px 6px 0 0;
margin-bottom: 0;
border-bottom: none;
}
#wiktku-start-posparams {
border-radius: 0 0 6px 6px;
border-top: none;
padding-top: 0.3em;
}
#wiktku-start-posparams .wiktku-start-step-name {
display: none;
}
/* Scoped to #wiktku-start-form (not just .wiktku-start-step-name) and
!important on font-size: this is a real <h3> tag (see start.js), so
the wiki skin's own default heading styles can otherwise win over a
plain class rule and render it unpredictably (varies by skin/
viewport — this was previously landing at a different effective
size on desktop Vector vs. mobile Minerva purely by skin-default
accident, not by design). The heading now leads the visual hierarchy
through both size AND colour (tinted to match the card's accent
bar), while .wiktku-start-step-question below is deliberately
lighter-weight and muted so the two never compete for attention. */
#wiktku-start-form .wiktku-start-step-name {
font-size: 1.1em !important;
font-weight: 700;
letter-spacing: 0.03em;
margin: 0 0 0.3em;
line-height: 1.2;
color: var(--wikt-palette-blue-9, #3366cc);
border: 0;
padding: 0;
}
/* Rewiye tine, 14 Tebax 2026: "pûnto jî biçûk in, xwendina wan hinek zehmet
e" — the question text and the many small per-field labels (Cinsiyet:,
Rehê dema niha:, …) were sized noticeably smaller than the heading above
them; bumped both a step so the whole card reads at a more consistent,
comfortable size instead of the heading standing out and everything
under it feeling like fine print. */
.wiktku-start-step-question {
font-size: 1em;
font-weight: 400;
color: var(--wikt-palette-grey-9, #555);
margin: 0 0 0.5em;
line-height: 1.45;
}
.wiktku-start-step label {
padding-right: 1.2em;
font-size: 1em;
}
/* Rewiye tine, 14 Tebax 2026: short reassurance notes next to the fields
that most confused a first-time user (Bilêvkirin's template dropdown,
Mane's per-sense template dropdown) — muted so they read as a hint, not
another question competing with .wiktku-start-step-question. */
.wiktku-step-hint {
font-size: 0.88em;
font-style: italic;
color: var(--wikt-palette-grey-8, #72777d);
margin: 0 0 0.5em;
line-height: 1.4;
}
/* Same specificity as the rule just above, so it must come after to
actually win: the name label isn't a field label needing right
padding or the form's base label size, it's a heading. */
#wiktku-start-form .wiktku-start-step-name label {
padding-right: 0;
font-size: inherit !important;
color: inherit;
}
input[type="text"].wiktku-start-step-field {
width: 100%;
padding: 5px 8px;
border: 1px solid var(--wikt-palette-lightgrey);
border-radius: 4px;
transition: border-color 0.12s ease, box-shadow 0.12s ease;
}
input[type="text"].wiktku-start-step-field:focus {
border-color: var(--wikt-palette-blue-9, #3366cc);
box-shadow: inset 0 0 0 1px var(--wikt-palette-blue-9, #3366cc);
outline: 0;
}
input[type="text"].wiktku-start-step-field.wiktku-start-narrow {
width: 20em;
}
/* Only used by selects that opt out via .wiktku-plain-select; other
selects get their width from the searchable picker instead (see
input.wiktku-ac-input). */
select.wiktku-start-narrow,
input.wiktku-dfn-tpl-title {
width: 20em;
max-width: 100%;
box-sizing: border-box;
}
#wiktku-start-spinner {
float: right;
margin-left: 1em;
}
#wiktku-start-footer {
display: flex;
flex-wrap: wrap;
align-items: center;
gap: 0.5em;
padding: 0.6em 0.2em;
position: sticky;
bottom: 0;
background: var(--wikt-palette-white);
border-top: 1px solid var(--wikt-palette-grey-3, #e0e0e0);
z-index: 5;
}
/* Quiet, non-competing text — sits next to the cache buttons so the
person can tell at a glance whether their latest edits are backed
up, without it fighting the buttons for attention. */
#wiktku-last-saved {
font-size: 0.85em;
color: var(--wikt-palette-grey-9, #767676);
white-space: nowrap;
}
/* ── Tercîh (settings) icon button — sits in the footer next to the
cache buttons. Uses the Codex "settings" (color-subtle) icon from
Commons directly rather than an OOUI icon-pack module, so it renders
the exact requested glyph without pulling in an extra dependency. */
.wiktku-prefs-btn {
width: 2.2em;
height: 2.2em;
flex: 0 0 auto;
padding: 0;
border: 1px solid var(--wikt-palette-grey-3, #e0e0e0);
border-radius: 2px;
background-color: var(--wikt-palette-white);
background-image: url(//upload.wikimedia.org/wikipedia/commons/e/e0/Codex_icon_settings_color-subtle.svg);
background-repeat: no-repeat;
background-position: center;
background-size: 1.2em 1.2em;
cursor: pointer;
}
.wiktku-prefs-btn:hover {
background-color: var(--wikt-palette-grey-0, #f8f9fa);
}
.wiktku-prefs-btn:active {
background-color: var(--wikt-palette-grey-1, #eaecf0);
}
/* Tercîh dialog body — OOUI's bare ProcessDialog body has no inset of
its own, so text/fields otherwise sit flush against the window edges. */
.wiktku-prefs-dialog-body {
padding: 1em 1.2em;
}
/* ── "Bişîne" click feedback ── */
@keyframes wiktku-btn-flash-pulse {
0% { box-shadow: 0 0 0 0 rgba(51, 102, 204, 0.55); }
70% { box-shadow: 0 0 0 9px rgba(51, 102, 204, 0); }
100% { box-shadow: 0 0 0 0 rgba(51, 102, 204, 0); }
}
#wiktku-unhide-editform.wiktku-btn-flash {
animation: wiktku-btn-flash-pulse 0.5s ease-out;
}
/* Persistent state while the wikitext is being built/submitted, set
alongside OOUI's own setDisabled(true) so it reads clearly even if
the skin's default disabled style is subtle. */
#wiktku-unhide-editform.wiktku-btn-sending .oo-ui-buttonElement-button {
background-color: var(--wikt-palette-grey-9, #767676) !important;
border-color: var(--wikt-palette-grey-9, #767676) !important;
cursor: progress;
opacity: 1 !important;
}
/* Wikihez, 14 Tebax 2026 (item 7): looks exactly like OOUI's own disabled
state, but ISN'T one — the button stays a real, clickable widget so its
click handler can still run and explain why (see wiktkuNotify call next
to wiktkuContentGateOk in start.js). A true setDisabled(true) here would
swallow the click before that message could ever show. */
#wiktku-unhide-editform.wiktku-btn-soft-disabled .oo-ui-buttonElement-button {
opacity: 0.5;
cursor: not-allowed;
}
/* ── "Beşên din" picker (item 3) ── */
.wiktku-besendin-picker {
margin: 0.6em 0 1em;
}
.wiktku-besendin-picker .wiktku-besendin-select {
width: 100%;
max-width: 24em;
}
#wiktku-start-form textarea.wiktku-start-step-field,
#wiktku-start-form textarea.wiktku-start-narrow,
#wiktku-start-form textarea.wiktku-dfn-subfield {
resize: vertical !important;
overflow: auto !important;
box-sizing: border-box !important;
vertical-align: top;
border: 1px solid var(--wikt-palette-lightgrey);
border-radius: 3px;
transition: border-color 0.1s ease, box-shadow 0.1s ease;
}
/* Modern focus state to match the searchable-picker inputs. */
#wiktku-start-form textarea.wiktku-start-step-field:focus,
#wiktku-start-form textarea.wiktku-start-narrow:focus,
#wiktku-start-form textarea.wiktku-dfn-subfield:focus {
border-color: var(--wikt-palette-blue-9, #3366cc);
box-shadow: inset 0 0 0 1px var(--wikt-palette-blue-9, #3366cc);
outline: 0;
}
/* Standard: every textarea in the form is full width by default */
#wiktku-start-form textarea:not(.wiktku-start-narrow) {
width: 100%;
max-width: 100%;
box-sizing: border-box;
}
#wiktku-start-form textarea.wiktku-start-narrow,
#wiktku-start-form textarea.wiktku-dfn-subfield.wiktku-start-narrow {
width: 20em;
max-width: 100%;
min-width: 8em;
height: calc(1.7em + 10px);
min-height: calc(1.7em + 10px);
padding-top: 4px !important;
padding-bottom: 4px !important;
line-height: 1.35 !important;
resize: none !important;
}
/* Exception: "Sernav" / "Sernavê orjînal" citation-source fields (kitêb,
kovar, malper, …) — long enough to be worth 2 rows and manual resizing. */
#wiktku-start-form textarea.wiktku-dfn-quote-src-input.wiktku-dfn-quote-src-input--title {
height: calc(2 * 1.35em + 10px);
min-height: calc(2 * 1.35em + 10px);
}
/* ── Manual drag-to-resize handle ── */
#wiktku-start-form textarea:not(.wiktku-start-narrow) {
resize: none !important;
}
/* Inline modifier button (⊕) */
.wiktku-word-li {
display: flex;
align-items: flex-start;
flex-wrap: wrap;
gap: 0.3em;
}
.wiktku-mod-btn {
flex: 0 0 auto;
width: 1.6em;
height: 1.6em;
padding: 0;
line-height: 1;
border: 1px solid var(--wikt-palette-lightgrey);
border-radius: 2px;
background: var(--wikt-palette-white);
color: var(--wikt-palette-blue-9, #3366cc);
font-size: 1em;
cursor: pointer;
}
.wiktku-mod-btn:hover {
border-color: var(--wikt-palette-blue-9, #3366cc);
background: var(--wikt-palette-paleblue, #eaf3ff);
}
.wiktku-mod-picker {
display: flex;
flex-wrap: wrap;
gap: 0.25em;
width: 100%;
margin-top: 0.15em;
padding: 0.35em;
border: 1px solid var(--wikt-palette-lightgrey);
border-radius: 3px;
background: var(--wikt-palette-white);
box-shadow: 0 1px 3px rgba(0, 0, 0, 0.08);
}
.wiktku-mod-pill {
padding: 2px 8px;
border: 1px solid var(--wikt-palette-grey-3, #e0e0e0);
border-radius: 12px;
background: var(--wikt-palette-paleblue, #eaf3ff);
font-size: 0.85em;
white-space: nowrap;
cursor: pointer;
}
.wiktku-mod-pill:hover {
border-color: var(--wikt-palette-blue-9, #3366cc);
background: var(--wikt-palette-blue-9, #3366cc);
color: var(--wikt-palette-white);
}
.wiktku-mod-pill:disabled,
.wiktku-mod-pill.wiktku-mod-pill-used {
border-color: var(--wikt-palette-grey-3, #e0e0e0);
background: var(--wikt-palette-lightgrey);
color: var(--wikt-palette-grey-3, #999);
cursor: not-allowed;
opacity: 0.6;
}
.wiktku-mod-pill:disabled:hover,
.wiktku-mod-pill.wiktku-mod-pill-used:hover {
border-color: var(--wikt-palette-grey-3, #e0e0e0);
background: var(--wikt-palette-lightgrey);
color: var(--wikt-palette-grey-3, #999);
}
.wiktku-mod-val-wrap {
display: flex;
align-items: center;
gap: 0.25em;
width: 100%;
margin-top: 0.15em;
}
.wiktku-mod-val-input {
flex: 0 1 14em;
max-width: 14em;
padding: 3px 6px;
border: 1px solid var(--wikt-palette-lightgrey);
border-radius: 2px;
}
.wiktku-mod-confirm,
.wiktku-mod-cancel {
flex: 0 0 auto;
width: 1.6em;
height: 1.6em;
padding: 0;
line-height: 1;
border: 1px solid var(--wikt-palette-lightgrey);
border-radius: 2px;
background: var(--wikt-palette-white);
cursor: pointer;
}
.wiktku-mod-confirm {
color: #178a17;
border-color: #178a17;
}
.wiktku-mod-cancel {
color: var(--wikt-palette-red-9, #d33);
border-color: var(--wikt-palette-red-9, #d33);
}
.wiktku-resize-wrap {
position: relative;
display: block;
}
/* Independent of .wiktku-resize-wrap (created separately by
ensureLinebreakBackdrop() in start.js, only for textareas that ever
get flagged with a linebreak) so it doesn't depend on load order
relative to wiktkuMakeManualResizable(). Plain block, no size of its
own — purely a position:relative anchor for the backdrop. */
.wiktku-linebreak-wrap {
position: relative;
display: block;
}
.wiktku-resize-grip {
position: absolute;
right: 2px;
bottom: 2px;
width: 14px;
height: 14px;
cursor: ns-resize;
touch-action: none;
opacity: 0.5;
z-index: 2;
background-image: linear-gradient(135deg, transparent 0 50%, var(--wikt-palette-grey-9, #767676) 50% 100%);
background-repeat: no-repeat;
}
.wiktku-resize-grip:hover,
.wiktku-resize-grip:active {
opacity: 0.9;
}
/* ===================================================================
Searchable dropdown (wrapNativeSelect in start.js)
.wiktku-native-select-wrap > input.wiktku-ac-input (search box)
> ul.wiktku-ac-results (result list)
> select (hidden, holds the value)
=================================================================== */
.wiktku-native-select-wrap {
display: inline-block;
position: relative;
vertical-align: top;
}
/* Matches the width the native select would have had (see
select.wiktku-start-narrow). */
.wiktku-native-select-wrap input[type="search"],
input.wiktku-ac-input {
display: block;
width: 20em;
max-width: 100%;
box-sizing: border-box;
padding: 3px 6px;
border: 1px solid var(--wikt-palette-lightgrey);
border-radius: 2px;
background: var(--wikt-palette-white);
color: inherit;
font-size: inherit;
font-family: inherit;
transition: border-color 0.1s ease, box-shadow 0.1s ease;
}
input.wiktku-ac-input:focus {
border-color: var(--wikt-palette-blue-9);
box-shadow: inset 0 0 0 1px var(--wikt-palette-blue-9);
outline: 0;
}
input.wiktku-ac-input::placeholder {
color: var(--wikt-palette-grey-9);
opacity: 1;
}
/* Hide Safari/Chrome's built-in search decorations. */
input.wiktku-ac-input::-webkit-search-decoration,
input.wiktku-ac-input::-webkit-search-cancel-button,
input.wiktku-ac-input::-webkit-search-results-button {
-webkit-appearance: none;
appearance: none;
}
/* ── Result list ── */
/* top/bottom/max-height are overridden inline by showResults() when it
flips the list above the box; these are just its defaults. */
ul.wiktku-ac-results {
position: absolute;
z-index: 9999;
top: 100%;
bottom: auto;
left: 0;
margin: 0;
padding: 0;
list-style: none;
width: 20em;
max-width: 90vw;
max-height: 13em;
overflow-y: auto;
overscroll-behavior: contain;
-webkit-overflow-scrolling: touch;
background: var(--wikt-palette-white);
border: 1px solid var(--wikt-palette-lightgrey);
border-radius: 3px;
box-shadow: 0 3px 10px rgba(0, 0, 0, 0.15);
}
ul.wiktku-ac-results li {
margin: 0;
padding: 4px 8px;
cursor: pointer;
font-size: 0.92em;
display: flex;
align-items: center;
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
}
/* .wiktku-ac-active is the keyboard cursor; hover mirrors it; :active
covers the touch press state. */
ul.wiktku-ac-results li.wiktku-ac-active,
ul.wiktku-ac-results li:hover {
background: var(--wikt-palette-lightblue);
}
ul.wiktku-ac-results li:active {
background: var(--wikt-palette-blue-9);
color: var(--wikt-palette-white);
}
/* Touch devices: bigger tap targets, no sticky hover. */
@media (pointer: coarse) {
ul.wiktku-ac-results li {
padding: 6px 10px;
min-height: 2.2em;
font-size: 1em;
}
ul.wiktku-ac-results li:hover {
background: transparent;
}
ul.wiktku-ac-results li.wiktku-ac-active {
background: var(--wikt-palette-lightblue);
}
input.wiktku-ac-input {
/* >=16px stops iOS Safari zooming the page when the box is focused. */
font-size: 16px;
min-height: 2.2em;
}
}
/* Item 5 (Wikihez, 14 Tebax 2026): inline preview + confirm panel shown
before inserting an auto-content pronunciation template (ku-IPA,
ku-kîte, …) — deliberately part of the form's own layout rather than a
browser confirm()/prompt() dialog, per "dont use userinput use
something more advanced". */
.wiktku-pron-preview {
margin: 6px 0;
padding: 8px 10px;
border: 1px solid var(--wikt-palette-blue-9, #3366cc);
border-radius: 6px;
background: var(--wikt-palette-paleblue, #eaf3ff);
}
.wiktku-pron-preview-label {
font-size: 0.88em;
font-weight: 600;
color: var(--wikt-palette-grey-9, #555);
margin-bottom: 3px;
}
.wiktku-pron-preview-body {
font-family: monospace;
font-size: 1em;
white-space: pre-wrap;
word-break: break-word;
margin-bottom: 6px;
}
.wiktku-pron-preview-actions {
display: flex;
gap: 6px;
}
.wiktku-pron-preview-confirm,
.wiktku-pron-preview-cancel {
font-size: 0.88em;
padding: 3px 10px;
border-radius: 4px;
cursor: pointer;
border: 1px solid var(--wikt-palette-lightgrey, #a2a9b1);
background: var(--wikt-palette-white, #fff);
}
.wiktku-pron-preview-confirm {
border-color: var(--wikt-palette-blue-9, #3366cc);
color: var(--wikt-palette-blue-9, #3366cc);
font-weight: 600;
}
.wiktku-pron-preview-confirm:disabled {
opacity: 0.5;
cursor: wait;
}
.wiktku-pron-preview-cancel:hover {
background: var(--wikt-palette-grey-0, #f8f9fa);
}
/* Template pickers fill their container since the search box, not the
<select>, is what the user sees. */
.wiktku-pron-wrap .wiktku-native-select-wrap,
.wiktku-etym-wrap .wiktku-native-select-wrap,
.wiktku-pron-wrap .wiktku-native-select-wrap input.wiktku-ac-input,
.wiktku-etym-wrap .wiktku-native-select-wrap input.wiktku-ac-input {
width: 100%;
}
.wiktku-pron-wrap .wiktku-native-select-wrap input.wiktku-ac-input,
.wiktku-etym-wrap .wiktku-native-select-wrap input.wiktku-ac-input {
font-size: 0.88em;
}
.wiktku-cavkani-wrap .wiktku-native-select-wrap,
.wiktku-cavkani-wrap .wiktku-native-select-wrap input.wiktku-ac-input {
width: 100%;
}
/* Template selector inside a sense block. */
.wiktku-dfn-tpl-row .wiktku-native-select-wrap input.wiktku-ac-input {
font-size: 0.88em;
}
/* Language/dialect rows: picker must line up with the word field beside it. */
.wiktku-lang-row .wiktku-native-select-wrap {
flex: 0 0 auto;
}
#wiktku-start-form textarea.wiktku-dfn-mane,
#wiktku-start-form textarea.wiktku-dfn-nimune-text,
#wiktku-start-form .wiktku-dfn-jeder-group textarea.wiktku-dfn-nimune-quote,
#wiktku-start-form .wiktku-dfn-nimune-sub textarea.wiktku-dfn-nimune-tr,
#wiktku-start-form .wiktku-dfn-nimune-sub textarea.wiktku-dfn-nimune-t,
#wiktku-start-form .wiktku-dfn-quote-sub textarea.wiktku-dfn-nimune-quote-tr,
#wiktku-start-form .wiktku-dfn-quote-sub textarea.wiktku-dfn-nimune-quote-t,
#wiktku-start-form textarea.wiktku-dfn-quote-src-manual,
#wiktku-start-form .wiktku-pron-wrap textarea.wiktku-pron-text,
#wiktku-start-form .wiktku-etym-wrap textarea.wiktku-etym-text,
#wiktku-start-form .wiktku-tewandin-wrap textarea.wiktku-tewandin-text,
#wiktku-start-form textarea.wiktku-cavkani-text,
#wiktku-start-form textarea.wiktku-dfn-tercime,
#wiktku-start-form textarea.wiktku-dfn-izah {
--wiktku-ta-rows: 2;
height: calc(var(--wiktku-ta-rows) * 1.35em + 6px);
min-height: calc(var(--wiktku-ta-rows) * 1.35em + 6px);
}
#wiktku-start-form .wiktku-pron-wrap textarea.wiktku-pron-text,
#wiktku-start-form .wiktku-etym-wrap textarea.wiktku-etym-text,
#wiktku-start-form textarea.wiktku-dfn-izah {
--wiktku-ta-rows: 3;
}
#wiktku-start-form textarea.wiktku-cavkani-text {
--wiktku-ta-rows: 4;
}
/* Nimûne + Jêgirtin (citation) boxes, and their tr/t sub-fields: at
least 4 rows so there's room to actually write an example/quote. */
#wiktku-start-form textarea.wiktku-dfn-nimune-text,
#wiktku-start-form .wiktku-dfn-nimune-sub textarea.wiktku-dfn-nimune-tr,
#wiktku-start-form .wiktku-dfn-nimune-sub textarea.wiktku-dfn-nimune-t,
#wiktku-start-form .wiktku-dfn-jeder-group textarea.wiktku-dfn-nimune-quote,
#wiktku-start-form .wiktku-dfn-quote-sub textarea.wiktku-dfn-nimune-quote-tr,
#wiktku-start-form .wiktku-dfn-quote-sub textarea.wiktku-dfn-nimune-quote-t,
#wiktku-start-form textarea.wiktku-dfn-quote-src-manual {
--wiktku-ta-rows: 4;
}
/* Nimûne/jêgirtin box currently contains a typed/pasted linebreak —
the border is nudged so the user notices before it's silently turned
into <br> on output. The break itself is marked precisely, not the
whole box, via a mirrored backdrop layer (see below and
highlightLinebreak()/buildLinebreakBackdropHtml() in start.js). */
#wiktku-start-form textarea.wiktku-has-linebreak {
border-color: var(--wikt-palette-yellow6, #ac6600) !important;
}
/* Backdrop layer: sits behind the textarea showing the same text, with
a highlighted marker at each line that's followed by a break. Its
font/padding/box-sizing/line-height are copied from the textarea via
computed style (see syncLinebreakBackdropMetrics() in start.js), not
shared CSS classes — most of this box's own rules are written as
"textarea.foo", which a <div> with the same class wouldn't match.
Only created lazily, the first time a given textarea actually has a
break — see ensureLinebreakBackdrop(). */
.wiktku-linebreak-backdrop {
position: absolute;
inset: 0;
z-index: 0;
margin: 0;
overflow: hidden;
white-space: pre-wrap;
word-wrap: break-word;
color: transparent;
background: transparent !important;
border-color: transparent !important;
box-shadow: none !important;
resize: none !important;
pointer-events: none;
}
/* Raise the real textarea above its backdrop so typing/selection/caret
behave completely normally; the backdrop's mark shows through only
where the real textarea's own background is transparent. */
#wiktku-start-form textarea.wiktku-has-linebreak-source {
position: relative;
z-index: 1;
background-color: transparent;
}
.wiktku-linebreak-mark {
background-color: var(--wikt-palette-yellow6, #ac6600);
color: var(--wikt-palette-white, #fff);
border-radius: 2px;
}
/* ── Tercime + Îzah boxes ── */
.wiktku-dfn-nonku-wrap {
display: flex;
flex-direction: column;
gap: 3px;
}
.wiktku-dfn-nimune-sub,
.wiktku-dfn-quote-sub {
margin-top: 3px;
margin-left: 1em;
padding-left: 0.6em;
border-left: 2px solid var(--wikt-palette-lightgrey);
display: flex;
flex-direction: column;
gap: 3px;
}
.wiktku-dfn-nimune-sub textarea.wiktku-dfn-nimune-tr,
.wiktku-dfn-nimune-sub textarea.wiktku-dfn-nimune-t {
min-width: 8em;
padding-top: 2px !important;
padding-bottom: 2px !important;
line-height: 1.35 !important;
font-size: 0.88em;
}
/* ── Sense list (Mane step) — numbered badges instead of the browser's
default flat "1." marker, so each sense reads as a distinct block. ── */
ol.wiktku-dfn-list {
list-style: none;
margin: 0;
padding: 0;
counter-reset: wiktku-dfn-sense;
}
ol.wiktku-dfn-list > li.wiktku-dfn-sense {
position: relative;
counter-increment: wiktku-dfn-sense;
padding-left: 2.1em;
margin-bottom: 0.9em;
}
ol.wiktku-dfn-list > li.wiktku-dfn-sense:not(:last-child) {
padding-bottom: 0.9em;
border-bottom: 1px dashed var(--wikt-palette-grey-3, #e0e0e0);
}
ol.wiktku-dfn-list > li.wiktku-dfn-sense::before {
content: counter(wiktku-dfn-sense);
position: absolute;
left: 0;
top: 1px;
width: 1.6em;
height: 1.6em;
border-radius: 50%;
background: var(--wikt-palette-blue-9, #3366cc);
color: var(--wikt-palette-white);
font-size: 0.85em;
font-weight: 700;
display: flex;
align-items: center;
justify-content: center;
}
/* Template selector row inside a sense block */
.wiktku-dfn-tpl-row {
margin-bottom: 3px;
}
/* ── Sub-field titles (Etîket, Kategorî, Hevmane, Dijmane, Nimûne,
Jêgirtin, …) — previously plain unstyled run-on text. Each group
now reads as a small labelled field: the term stands out, the
izah hint stays quiet, and the block gets its own breathing room. ── */
.wiktku-dfn-subgroup {
margin-top: 0.5em;
padding-top: 0.4em;
border-top: 1px dashed var(--wikt-palette-grey-3, #e0e0e0);
}
.wiktku-dfn-subgroup:first-of-type {
margin-top: 0.3em;
padding-top: 0;
border-top: none;
}
.wiktku-dfn-sublabel {
display: block;
margin-bottom: 3px;
font-size: 0.88em;
}
.wiktku-dfn-sublabel-term {
font-weight: 600;
color: var(--wikt-palette-blue-9, #3366cc);
letter-spacing: 0.03em;
font-size: 0.92em;
}
.wiktku-dfn-sublabel-hint {
color: var(--wikt-palette-grey-9, #767676);
font-style: italic;
}
.wiktku-pron-wrap,
.wiktku-etym-wrap,
.wiktku-tewandin-wrap,
.wiktku-cavkani-wrap {
display: flex;
flex-direction: column;
gap: 3px;
}
/* ── POS section tabs ──
Modernized into rounded pills instead of flat file-folder tabs. */
#wiktku-section-tabs {
display: flex;
flex-wrap: wrap;
gap: 4px;
margin-bottom: 0.6em;
align-items: center;
}
#wiktku-section-tabs .wiktku-section-tab {
padding: 3px 12px;
border: 1px solid var(--wikt-palette-lightgrey);
border-radius: 999px;
background: var(--wikt-palette-dullcyan);
cursor: pointer;
font-size: 0.86em;
user-select: none;
transition: background 0.12s ease, border-color 0.12s ease;
}
#wiktku-section-tabs .wiktku-section-tab:hover {
border-color: var(--wikt-palette-blue-9, #3366cc);
}
#wiktku-section-tabs .wiktku-section-tab.wiktku-tab-active {
background: var(--wikt-palette-blue-9, #3366cc);
border-color: var(--wikt-palette-blue-9, #3366cc);
color: var(--wikt-palette-white);
font-weight: 600;
}
/* ── Step-group tabs (Mane / Bilêvkirin / Beşên din — see STEP_GROUPS in
start.js) ── Sits directly under the pill-style section tabs above;
styled as an underlined secondary nav so the two bars stay visually
distinct. */
#wiktku-group-tabs {
display: flex;
flex-wrap: wrap;
gap: 4px;
margin-bottom: 0.8em;
border-bottom: 2px solid var(--wikt-palette-lightgrey);
}
#wiktku-group-tabs .wiktku-group-tab {
position: relative;
padding: 7px 14px 8px;
margin-bottom: -2px;
border-bottom: 3px solid transparent;
border-radius: 3px 3px 0 0;
cursor: pointer;
font-size: 0.95em;
font-weight: 600;
color: var(--wikt-palette-grey-9, #333);
background: var(--wikt-palette-grey-0, #f8f9fa);
user-select: none;
transition: color 0.12s ease, border-color 0.12s ease, background 0.12s ease;
}
#wiktku-group-tabs .wiktku-group-tab:hover {
color: var(--wikt-palette-blue-9, #3366cc);
background: var(--wikt-palette-paleblue, #eaf3ff);
}
#wiktku-group-tabs .wiktku-group-tab.wiktku-tab-active {
border-bottom-color: var(--wikt-palette-blue-9, #3366cc);
color: var(--wikt-palette-white);
background: var(--wikt-palette-blue-9, #3366cc);
font-weight: 700;
}
/* Small dot marking a tab that still has an unfilled required field
hidden inside it (see updateGroupTabIndicators in start.js). Cleared
automatically once that tab becomes the active one. */
#wiktku-group-tabs .wiktku-group-tab.wiktku-tab-missing::after {
content: "";
position: absolute;
top: 4px;
right: -1px;
width: 6px;
height: 6px;
border-radius: 50%;
background: var(--wikt-palette-red-9, #d33);
}
.wiktku-lang-row-list {
margin: 0;
padding: 0;
list-style: none;
}
.wiktku-lang-row {
display: flex;
align-items: flex-start;
gap: 6px;
margin-bottom: 3px;
flex-wrap: wrap;
}
.wiktku-lang-row-words {
margin: 0;
padding: 0;
list-style: none;
display: flex;
flex-direction: column;
gap: 3px;
}
/* Dûnde/Werger/Zarava rows: align the picker's height with the adjacent
word textarea (see .wiktku-start-narrow above). */
.wiktku-lang-row .wiktku-native-select-wrap input.wiktku-ac-input {
height: calc(1.7em + 10px);
min-height: calc(1.7em + 10px);
padding-top: 4px;
padding-bottom: 4px;
}
/* ── Werger / Bi zaravayên din groups: one per gloss, shared spacing ── */
#wiktku-start-trans .wiktku-trans-group,
#wiktku-start-zarava .wiktku-zarava-group {
margin-bottom: 0.6em;
}
#wiktku-start-trans .wiktku-trans-group:last-child,
#wiktku-start-zarava .wiktku-zarava-group:last-child {
margin-bottom: 0;
}
#wiktku-start-trans .wiktku-trans-group-label,
#wiktku-start-zarava .wiktku-zarava-group-label {
font-weight: 600;
font-size: 0.88em;
margin-bottom: 3px;
}
.wiktku-dfn-jeder-group {
margin-top: 3px;
}
.wiktku-dfn-quote-src-sel {
font-size: 0.88em;
margin-top: 3px;
display: block;
}
.wiktku-dfn-quote-src-fields {
display: flex;
flex-direction: column;
gap: 3px;
margin-top: 3px;
}
/* Stacked layout: textarea gets its own full-width row, button + status
sit below it on their own row. Simpler and more robust than sharing a
row with the button — that required the textarea's own resize-wrap
div (added by wiktkuMakeManualResizable in start.js) to correctly
inherit flex-grow, which kept being fragile across breakpoints. */
.wiktku-dfn-quote-citoid {
display: flex;
flex-direction: column;
align-items: stretch;
gap: 0.4em;
margin-top: 3px;
margin-bottom: 3px;
}
.wiktku-dfn-quote-citoid-input {
width: 100%;
max-width: 100%;
box-sizing: border-box;
}
/* Column flex + align-items:stretch (above) is what makes the textarea's
.wiktku-resize-wrap (see wiktkuMakeManualResizable in start.js) reach
full width automatically — stretch fills the cross axis for any block
child, no flex-grow needed on the wrap itself. The button and status
text, right below the textarea, opt back out of that stretch so they
stay their natural (small) size instead of also going full width. */
.wiktku-dfn-quote-citoid-btn,
.wiktku-dfn-quote-citoid-status {
align-self: flex-start;
}
.wiktku-dfn-quote-src-cat-status {
display: block;
font-size: 0.82em;
color: var(--wikt-palette-lightgrey, #767676);
margin-top: 2px;
}
.wiktku-dfn-quote-src-row {
display: flex;
align-items: baseline;
gap: 4px;
flex-wrap: wrap;
}
.wiktku-dfn-quote-src-row label {
font-size: 0.82em;
white-space: nowrap;
min-width: 8em;
}
textarea.wiktku-dfn-quote-src-input {
flex: 1 1 12em;
max-width: 100%;
box-sizing: border-box;
}
@media (max-width: 720px) {
.wiktku-lang-row {
flex-direction: column;
}
/* Re-assert against the wiki's own mobile skin heading styles,
which can apply their own mobile-breakpoint rules to this real
<h3> and load after ours in the cascade — see the rule itself,
above, for why this needs guarding at all. */
#wiktku-start-form .wiktku-start-step-name {
font-size: 1.05em !important;
margin: 0 0 0.2em !important;
line-height: 1.2 !important;
border: 0 !important;
padding: 0 !important;
}
/* Single column: search box and list use the full width. Narrow
textareas (Etîket, Hevmane, Dûnde/Jê/Têkildar/Binêre herwiha word
boxes, citation source fields, …) join them here too — at a fixed
20em width they used to poke out past the step card on narrow
screens. */
.wiktku-native-select-wrap,
input.wiktku-ac-input,
ul.wiktku-ac-results,
#wiktku-start-form textarea.wiktku-start-narrow,
#wiktku-start-form textarea.wiktku-dfn-subfield.wiktku-start-narrow {
width: 100%;
max-width: 100%;
}
.wiktku-mod-val-input {
flex: 1 1 auto;
max-width: 100%;
}
#wiktku-start-form textarea.wiktku-dfn-mane,
#wiktku-start-form .wiktku-pron-wrap textarea.wiktku-pron-text,
#wiktku-start-form .wiktku-etym-wrap textarea.wiktku-etym-text {
--wiktku-ta-rows: 3;
font-size: 1em;
}
#wiktku-start-form .wiktku-tewandin-wrap textarea.wiktku-tewandin-text,
#wiktku-start-form textarea.wiktku-cavkani-text {
--wiktku-ta-rows: 4;
font-size: 1em;
}
/* Nimûne + Jêgirtin and their tr/t sub-fields: keep at least 4 rows
on mobile too, rather than shrinking further than the desktop size. */
#wiktku-start-form textarea.wiktku-dfn-nimune-text,
#wiktku-start-form .wiktku-dfn-nimune-sub textarea.wiktku-dfn-nimune-tr,
#wiktku-start-form .wiktku-dfn-nimune-sub textarea.wiktku-dfn-nimune-t,
#wiktku-start-form .wiktku-dfn-jeder-group textarea.wiktku-dfn-nimune-quote,
#wiktku-start-form .wiktku-dfn-quote-sub textarea.wiktku-dfn-nimune-quote-tr,
#wiktku-start-form .wiktku-dfn-quote-sub textarea.wiktku-dfn-nimune-quote-t {
--wiktku-ta-rows: 4;
font-size: 1em;
}
/* Citoid URL/DOI/ISBN box: taller tap target (~2 lines) on mobile,
and now that this field is a <textarea> (see start.js) its
placeholder can actually wrap into that space — a plain <input>'s
placeholder can never wrap, no matter its height. */
.wiktku-dfn-quote-citoid-input {
min-height: calc(2 * 1.35em + 10px);
font-size: 1em;
}
.wiktku-dfn-nimune-sub,
.wiktku-dfn-quote-sub {
margin-left: 0.5em;
padding-left: 0.4em;
}
.wiktku-pron-wrap .wiktku-native-select-wrap input.wiktku-ac-input,
.wiktku-etym-wrap .wiktku-native-select-wrap input.wiktku-ac-input {
font-size: 1em;
min-height: 2.2em;
}
.wiktku-dfn-quote-src-row label {
min-width: 6em;
}
#wiktku-start-form textarea.wiktku-dfn-quote-src-input {
width: 100%;
flex: 1 1 100%;
}
.wiktku-start-step {
padding: 0.5em 0.6em;
}
}
/* ===================================================================
Night mode
Palette.css already flips every --wikt-palette-* var for night mode,
so rules built from those vars need nothing here. This hook is only
for real colours that can't be a palette var — here, the panel border,
since a drop shadow is invisible against an equally dark page.
Not needed: li:active's white text already flips to a dark colour at
night via --wikt-palette-white, so it stays legible on its own.
=================================================================== */
@media screen {
html.skin-theme-clientpref-night .wiktku-ac-results {
/* Border stands in for the shadow, invisible on a dark page. */
border-color: var(--wikt-palette-grey-5);
box-shadow: 0 3px 10px rgba(0, 0, 0, 0.6);
}
html.skin-theme-clientpref-night .wiktku-start-step,
html.skin-theme-clientpref-night .wiktku-start-step:hover,
html.skin-theme-clientpref-night .wiktku-start-step:focus-within {
box-shadow: none;
}
}
@media screen and (prefers-color-scheme: dark) {
html.skin-theme-clientpref-os .wiktku-ac-results {
border-color: var(--wikt-palette-grey-5);
box-shadow: 0 3px 10px rgba(0, 0, 0, 0.6);
}
html.skin-theme-clientpref-os .wiktku-start-step,
html.skin-theme-clientpref-os .wiktku-start-step:hover,
html.skin-theme-clientpref-os .wiktku-start-step:focus-within {
box-shadow: none;
}
}
/* "Zimanek lê zêde bike" portlet icon (Minerva/mobile) — Feather-core-edit.svg
via CSS mask, matching Minerva's own icon pattern. */
.minerva-icon-portletlink-ca-wiktku-addlang {
-webkit-mask-image: url("https://upload.wikimedia.org/wikipedia/commons/d/d7/Feather-core-edit.svg");
mask-image: url("https://upload.wikimedia.org/wikipedia/commons/d/d7/Feather-core-edit.svg");
-webkit-mask-repeat: no-repeat;
mask-repeat: no-repeat;
-webkit-mask-position: center;
mask-position: center;
-webkit-mask-size: 20px;
mask-size: 20px;
background-color: currentColor;
background-image: none;
}
/* ── posparams step (live wikitext + helper widgets) ── */
.wiktku-posparams-wrap {
display: flex;
flex-direction: column;
gap: 6px;
}
.wiktku-posparams-helpers {
display: flex;
flex-direction: column;
gap: 4px;
}
.wiktku-posparams-row {
display: flex;
align-items: center;
gap: 6px;
flex-wrap: wrap;
}
.wiktku-posparams-row label {
/* Rewiye tine, 14 Tebax 2026: these were the smallest labels on the whole
card (0.9em, one step below everything else) — the mobile breakpoint
already bumps this to 1em below; matching that on desktop too instead
of only fixing it for mobile. */
font-size: 1em;
min-width: 10em;
padding-right: 0;
}
.wiktku-posparams-text {
width: 100%;
box-sizing: border-box;
font-family: monospace;
font-size: 0.9em;
}
.wiktku-posparams-opt-toggle {
font-size: 0.85em;
margin-top: 2px;
display: inline-block;
}
.wiktku-posparams-opt-panel {
display: flex;
flex-direction: column;
gap: 2px;
padding: 4px 0 2px 1em;
}
.wiktku-posparams-opt-row {
display: flex;
align-items: center;
gap: 4px;
font-size: 0.85em;
}
/* ── resim step (one or more images) ── */
.wiktku-resim-list {
display: flex;
flex-direction: column;
gap: 6px;
}
.wiktku-resim-item {
display: flex;
flex-direction: column;
gap: 4px;
}
.wiktku-resim-item .wiktku-posparams-row {
flex-direction: column;
align-items: flex-start;
gap: 2px;
}
.wiktku-resim-item .wiktku-posparams-row label {
min-width: 0;
font-size: 0.9em;
}
/* ── dfn: "hide/show all subsections" link ──
Same show/hide-link pattern as "Tercîhên pêşketî" (posparams), but
toggles a class on the whole dfn stepDiv rather than one panel, so
a single click hides the etîket/kategorî/hevmane/dijmane/nimûne/
jêgirtin/etc. subgroups across every sense block at once (see
steps.dfn.build in start.js). */
.wiktku-dfn-subs-toggle {
font-size: 0.85em;
font-weight: 500;
display: inline-block;
margin: 2px 0 8px;
color: var(--wikt-palette-blue-9, #3366cc);
text-decoration: none;
}
.wiktku-dfn-subs-toggle:hover {
text-decoration: underline;
}
/* Only the ADVANCED subgroups collapse now (Ghybu, 14 Tebax 2026): Nimûne,
Jêgirtin, Hevmane and Dijmane stay open because they are what people
actually come here to fill in — see steps.dfn.allGroups, whose adv: flag
is what puts this class on a group. */
#wiktku-start-dfn.wiktku-dfn-subs-hidden .wiktku-dfn-subgroup-adv {
display: none !important;
}
/* ===================================================================
Desktop text bump
The modifier pills/buttons and posparams helper text (labels,
"Tercîhên pêşketî" opt panel) use fairly small font-sizes that read
fine on mobile — narrow-viewport rendering effectively scales them
up — but look too small on a full desktop screen at their literal
em size. Bump them up past the 720px breakpoint only; mobile keeps
the original sizing above.
=================================================================== */
@media (min-width: 721px) {
.wiktku-mod-btn,
.wiktku-mod-confirm,
.wiktku-mod-cancel {
width: 1.8em;
height: 1.8em;
font-size: 1.1em;
}
.wiktku-mod-pill {
font-size: 0.95em;
padding: 3px 10px;
}
.wiktku-mod-val-input {
font-size: 0.95em;
}
.wiktku-posparams-row label {
font-size: 1em;
}
.wiktku-posparams-text {
font-size: 1em;
}
.wiktku-posparams-opt-toggle {
font-size: 0.95em;
}
.wiktku-posparams-opt-row {
font-size: 0.95em;
}
.wiktku-dfn-subs-toggle {
font-size: 0.95em;
}
/* Item 2 (Wikihez, 14 Tebax 2026): "sê-stûnî" — the same side-by-side,
multi-column card layout Ghybu asked for on POS/Cîns/Jimar now
applies to every posparams helper field (transliteration, gendered
forms, comparative/superlative, hanja, verb-tense roots, …), not
just those first two. Desktop-only per Wikihez's note that this isn't
supported on mobile — the plain stacked list above stays as-is
below this breakpoint. Rows are toggled via jQuery .show()/.hide()
(inline display:block/none) same as before; the grid only changes
how visible rows are arranged, not which ones are visible. */
.wiktku-posparams-helpers {
display: grid;
grid-template-columns: repeat(auto-fill, minmax(180px, 1fr));
gap: 10px 16px;
align-items: start;
}
.wiktku-posparams-helpers > .wiktku-posparams-row {
flex-direction: column;
align-items: stretch;
flex-wrap: nowrap;
gap: 3px;
}
.wiktku-posparams-helpers > .wiktku-posparams-row label {
min-width: 0;
}
.wiktku-posparams-helpers > .wiktku-posparams-row .wiktku-posparams-field,
.wiktku-posparams-helpers > .wiktku-posparams-row select.wiktku-posparams-cinsiyet-sel,
.wiktku-posparams-helpers > .wiktku-posparams-row select.wiktku-posparams-lektur-sel {
width: 100%;
max-width: 100%;
box-sizing: border-box;
}
/* The "Jimar" row added for item 1 lives here too (see start.js) — no
extra CSS needed, it's just another .wiktku-posparams-row. */
/* These two aren't per-field rows — span the full card width so the
collapsed toggle and its checkbox list don't get squeezed into one
narrow column. */
.wiktku-posparams-helpers > .wiktku-posparams-opt-toggle,
.wiktku-posparams-helpers > .wiktku-posparams-opt-panel {
grid-column: 1 / -1;
}
}
/* ===================================================================
SÊWIRANA NÛ — design system layer
===================================================================
From the "Cerdevanê ketanê — sêwirana nû" spec (15 Tebax 2026).
Appended rather than merged into the rules above on purpose: everything
before this point is layout (what sits next to what, which row wraps
where) and still does its job. This block is purely the visual skin —
colour, type, weight, radius, spacing — so it comes last and wins, and
so a future revert is a delete of one contiguous section.
Two deliberate deviations from the spec document:
1. No @import of Spectral / IBM Plex from Google Fonts. Wikimedia wikis
send a Content-Security-Policy that blocks third-party font hosts,
so the import would fail silently and we would ship a broken-looking
fallback nobody chose. The stacks below name the spec's faces first
(so they are used if the wiki ever installs them locally) and then
fall back to faces with the same feel: a transitional serif for
headings, the UI sans for body, the platform mono for wikitext.
2. Blue is spent, not sprayed. Ghybu, 14 Tebax 2026: "hemû bi rengê şîn
hatine çêkirin, nizanim beşên din (===) bi rengê gewr an reş çito
dibe?" — so section headings are near-black now and the accent is
reserved for things you can act on: focus, links, the active tab,
the primary button, chips.
=================================================================== */
#wiktku-start-form {
/* Surfaces */
--wikt-page: #f4efe5;
--wikt-card: #fffdf8;
--wikt-card-sunken: #fbf8f1;
--wikt-rule: #ded6c8; /* structural hairline */
--wikt-rule-soft: #efe8db; /* inside a card */
--wikt-field-edge: #cfc7b8;
/* Ink */
--wikt-ink: #1c1a17;
--wikt-ink-2: #3d3830;
--wikt-ink-3: #57514a;
--wikt-muted: #8a8378;
--wikt-placeholder: #b3ab9e;
/* Accent + status */
--wikt-accent: #2a5db0;
--wikt-accent-deep: #22406f;
--wikt-accent-tint: #eef2fa;
--wikt-accent-edge: #d5def0;
--wikt-danger: #9c3a28;
/* Shape */
--wikt-r-field: 10px;
--wikt-r-card: 14px;
--wikt-r-pill: 999px;
--wikt-tap: 44px; /* minimum field height */
--wikt-serif: Spectral, "Iowan Old Style", Georgia, "Times New Roman", serif;
--wikt-sans: "IBM Plex Sans", system-ui, -apple-system, "Segoe UI", sans-serif;
--wikt-mono: "IBM Plex Mono", ui-monospace, SFMono-Regular, Menlo, Consolas, monospace;
font-family: var(--wikt-sans);
font-size: 15px;
line-height: 1.55;
color: var(--wikt-ink);
background: var(--wikt-page);
padding: 24px;
border-radius: var(--wikt-r-card);
}
/* ── Cards ───────────────────────────────────────────────────────────
The old card had a 4px blue left bar and two shadows. The spec is
explicit — "Ti sî (shadow) tune; tenê xetên 1px" — so the card is
now a flat cream panel held by a single hairline. */
#wiktku-start-form .wiktku-start-step {
background: var(--wikt-card);
border: 1px solid #e6dfd2;
border-left: 1px solid #e6dfd2;
border-radius: var(--wikt-r-card);
box-shadow: none;
padding: 24px 24px 20px;
margin-bottom: 16px;
transition: border-color 0.12s ease;
}
#wiktku-start-form .wiktku-start-step:hover,
#wiktku-start-form .wiktku-start-step:focus-within {
box-shadow: none;
border-color: var(--wikt-rule);
}
/* The fused pos + posparams pair keeps reading as one card. */
#wiktku-start-form #wiktku-start-pos {
border-radius: var(--wikt-r-card) var(--wikt-r-card) 0 0;
border-bottom: none;
padding-bottom: 8px;
}
#wiktku-start-form #wiktku-start-posparams {
border-radius: 0 0 var(--wikt-r-card) var(--wikt-r-card);
border-top: none;
padding-top: 4px;
}
/* ── Type ────────────────────────────────────────────────────────────
Step headings: serif, regular weight, near-black. Previously bold,
letterspaced and blue — three signals doing one job. */
#wiktku-start-form .wiktku-start-step-name {
font-family: var(--wikt-serif);
font-size: 24px !important;
font-weight: 400;
letter-spacing: -0.01em;
line-height: 1.15;
color: var(--wikt-ink);
margin: 0 0 12px;
}
/* display:block matters: this is a <label>, so it was sharing a line with
the control it introduces wherever start.js didn't emit a <br>. */
#wiktku-start-form .wiktku-start-step-question {
display: block;
font-size: 15px;
font-weight: 400;
color: var(--wikt-ink-3);
margin: 0 0 12px;
line-height: 1.6;
max-width: 62ch;
}
/* Same reason — a field label belongs above its field, not beside it. */
#wiktku-start-form .wiktku-posparams-row label,
#wiktku-start-form .wiktku-dfn-sublabel {
display: block;
margin-bottom: 6px;
padding-right: 0;
}
/* Field labels: small, medium weight, full-strength ink — they label a
control, so they should not read as body copy. */
#wiktku-start-form .wiktku-start-step label,
#wiktku-start-form .wiktku-posparams-row label,
#wiktku-start-form .wiktku-dfn-sublabel {
font-size: 13px;
font-weight: 500;
color: var(--wikt-ink);
letter-spacing: 0.01em;
}
/* The parenthetical/example half of a label is supporting text. */
#wiktku-start-form .wiktku-dfn-sublabel-hint,
#wiktku-start-form .wiktku-step-hint {
font-weight: 400;
font-style: italic;
color: var(--wikt-muted);
font-size: 12.5px;
}
/* ── Fields ──────────────────────────────────────────────────────────
One shape for every control: 1px edge, 10px radius, 44px tall. */
#wiktku-start-form input[type="text"],
#wiktku-start-form input[type="search"],
#wiktku-start-form textarea,
#wiktku-start-form select {
font-family: var(--wikt-sans);
font-size: 15px;
color: var(--wikt-ink);
background: #fff;
border: 1px solid var(--wikt-field-edge);
border-radius: var(--wikt-r-field);
padding: 10px 14px;
box-shadow: none;
transition: border-color 0.12s ease, box-shadow 0.12s ease;
}
#wiktku-start-form input[type="text"],
#wiktku-start-form input[type="search"],
#wiktku-start-form select {
min-height: var(--wikt-tap);
}
#wiktku-start-form textarea {
line-height: 1.6;
}
/* Wikitext and anything template-shaped reads as code. */
#wiktku-start-form .wiktku-posparams-text,
#wiktku-start-form .wiktku-pron-text,
#wiktku-start-form .wiktku-etym-text,
#wiktku-start-form .wiktku-cavkani-text,
#wiktku-start-form .wiktku-tewandin-text,
#wiktku-start-form .wiktku-pron-preview-body {
font-family: var(--wikt-mono);
font-size: 13.5px;
background: #f7f4ec;
border-color: #e6dfd2;
}
#wiktku-start-form ::placeholder {
color: var(--wikt-placeholder);
opacity: 1;
}
/* Focus: accent edge + 3px tint halo. The only "elevation" in the design. */
#wiktku-start-form input[type="text"]:focus,
#wiktku-start-form input[type="search"]:focus,
#wiktku-start-form textarea:focus,
#wiktku-start-form select:focus,
#wiktku-start-form input.wiktku-ac-input:focus {
border-color: var(--wikt-accent);
box-shadow: 0 0 0 3px var(--wikt-accent-tint);
outline: 0;
}
/* The searchable picker's visible input is the field, so it takes the
field shape too (it otherwise inherits an older, boxier rule). */
#wiktku-start-form input.wiktku-ac-input {
min-height: var(--wikt-tap);
border-radius: var(--wikt-r-field);
border-color: var(--wikt-field-edge);
font-size: 15px;
}
#wiktku-start-form .wiktku-ac-results {
border: 1px solid var(--wikt-rule);
border-radius: var(--wikt-r-field);
background: var(--wikt-card);
box-shadow: none;
}
#wiktku-start-form .wiktku-ac-results li.wiktku-ac-active,
#wiktku-start-form .wiktku-ac-results li:hover {
background: var(--wikt-accent-tint);
color: var(--wikt-accent-deep);
}
/* ── Tabs → the accent's main job ────────────────────────────────────
Active tab: tint fill + 3px accent underline, per the spec's
"xala hûrgulî" note. Inactive tabs are plain text. */
#wiktku-start-form #wiktku-group-tabs,
#wiktku-start-form #wiktku-section-tabs {
display: flex;
flex-wrap: wrap;
gap: 4px;
align-items: center;
border-bottom: 1px solid var(--wikt-rule);
margin-bottom: 16px;
padding-bottom: 0;
}
#wiktku-start-form .wiktku-group-tab,
#wiktku-start-form .wiktku-section-tab {
font-size: 13.5px;
font-weight: 500;
color: var(--wikt-ink-3);
background: transparent;
border: 0;
border-bottom: 3px solid transparent;
border-radius: var(--wikt-r-pill) var(--wikt-r-pill) 0 0;
padding: 9px 14px 11px;
cursor: pointer;
transition: background 0.12s ease, color 0.12s ease;
}
#wiktku-start-form .wiktku-group-tab:hover,
#wiktku-start-form .wiktku-section-tab:hover {
background: var(--wikt-card-sunken);
color: var(--wikt-ink);
}
#wiktku-start-form .wiktku-group-tab.wiktku-tab-active,
#wiktku-start-form .wiktku-section-tab.wiktku-tab-active {
background: var(--wikt-accent-tint);
color: var(--wikt-accent);
border-bottom-color: var(--wikt-accent);
}
/* ── Progressive-disclosure toggles ──────────────────────────────────
Shared by "Tercîhên pêşketî" (posparams) and "Malûmatên pêşketî"
(Mane). Both are now the main way the form stays short, so they get a
real affordance — a rotating chevron and a count of what is behind
them — instead of a small blue link. */
#wiktku-start-form .wiktku-adv-toggle-row {
display: flex;
align-items: center;
justify-content: space-between;
gap: 16px;
flex-wrap: wrap;
margin: 4px 0 12px;
padding-top: 16px;
border-top: 1px solid var(--wikt-rule-soft);
}
#wiktku-start-form .wiktku-adv-toggle {
display: inline-flex;
align-items: center;
gap: 10px;
font-size: 14px;
font-weight: 500;
color: var(--wikt-accent);
text-decoration: none;
cursor: pointer;
}
#wiktku-start-form .wiktku-adv-toggle:hover .wiktku-adv-toggle-text {
text-decoration: underline;
}
#wiktku-start-form .wiktku-adv-toggle-chevron {
width: 22px;
height: 22px;
flex: 0 0 22px;
display: grid;
place-items: center;
font-size: 11px;
border: 1px solid var(--wikt-accent-edge);
background: var(--wikt-accent-tint);
border-radius: 6px;
transform: rotate(-90deg);
transition: transform 0.15s ease;
}
/* Open state: dfn flips the class on the step, posparams on the link. */
#wiktku-start-form .wiktku-adv-toggle.wiktku-adv-open .wiktku-adv-toggle-chevron,
#wiktku-start-dfn:not(.wiktku-dfn-subs-hidden) .wiktku-adv-toggle-chevron {
transform: rotate(0deg);
}
#wiktku-start-form .wiktku-adv-toggle-count {
font-family: var(--wikt-mono);
font-size: 12px;
color: var(--wikt-muted);
white-space: nowrap;
}
#wiktku-start-form .wiktku-posparams-adv-panel {
border: 1px solid var(--wikt-rule-soft);
border-radius: 12px;
background: var(--wikt-card-sunken);
padding: 20px 18px;
margin-bottom: 4px;
}
/* ── posparams grid ──────────────────────────────────────────────────
"Tor, ne rêz" — two columns, nothing narrower than 220px, so the six
gender/number fields stop being a six-across scanline. */
@media (min-width: 721px) {
#wiktku-start-form .wiktku-posparams-helpers,
#wiktku-start-form .wiktku-posparams-adv-panel {
display: grid;
grid-template-columns: repeat(auto-fill, minmax(220px, 1fr));
gap: 18px 22px;
align-items: start;
}
#wiktku-start-form .wiktku-posparams-adv-panel > .wiktku-posparams-row,
#wiktku-start-form .wiktku-posparams-helpers > .wiktku-posparams-row {
flex-direction: column;
align-items: stretch;
flex-wrap: nowrap;
gap: 7px;
}
#wiktku-start-form .wiktku-posparams-helpers > .wiktku-adv-toggle-row,
#wiktku-start-form .wiktku-posparams-helpers > .wiktku-posparams-adv-panel,
#wiktku-start-form .wiktku-posparams-adv-panel > .wiktku-posparams-opt-panel {
grid-column: 1 / -1;
}
}
#wiktku-start-form .wiktku-posparams-opt-panel {
border-top: 1px solid var(--wikt-rule-soft);
padding-top: 14px;
margin-top: 4px;
}
#wiktku-start-form .wiktku-posparams-opt-row {
font-size: 13px;
color: var(--wikt-ink-3);
}
/* ── Sense blocks ────────────────────────────────────────────────────
Each sense is a sunken panel inside the Mane card, with its number as
an accent counter — so "how many meanings am I writing" is legible at
a glance. */
#wiktku-start-form .wiktku-dfn-subgroup {
margin: 14px 0 0;
padding-top: 14px;
border-top: 1px solid var(--wikt-rule-soft);
}
/* Nimûne leads the list now, and a divider above the first item would be
a rule against the sense's own text. (Needed explicitly: the older
:first-of-type rule further up is a class selector and loses to the
id-scoped one above.) */
#wiktku-start-form .wiktku-dfn-subgroup:first-of-type {
margin-top: 8px;
padding-top: 0;
border-top: none;
}
#wiktku-start-form .wiktku-dfn-sublabel-term {
color: var(--wikt-ink);
}
/* Every sense sub-field is a plain white field like any other. Older rules
gave several of them a tinted fill, which read as "disabled" next to the
white Mane box directly above them. */
#wiktku-start-form .wiktku-dfn-subfield,
#wiktku-start-form textarea.wiktku-dfn-mane {
background: #fff;
border: 1px solid var(--wikt-field-edge);
border-radius: var(--wikt-r-field);
}
/* No "1." "2." markers on the sub-lists. Ghybu, 14 Tebax 2026, on exactly
this: numbered rows read as a form you must fill from the top down, when
really each row is just "another one if you have another one" — and with
a block-level textarea per row the marker also lands on its own line
above the field, which looks like a stray character. */
#wiktku-start-form .wiktku-dfn-sublist {
margin: 0;
padding-left: 0;
list-style: none;
}
#wiktku-start-form .wiktku-dfn-sublist > li {
margin-bottom: 6px;
}
/* ── Chips: tags, modifiers, template pills ──────────────────────────── */
#wiktku-start-form .wiktku-mod-pill,
#wiktku-start-form .wiktku-besendin-select + .wiktku-chip {
background: var(--wikt-accent-tint);
color: var(--wikt-accent-deep);
border: 1px solid var(--wikt-accent-edge);
border-radius: var(--wikt-r-pill);
font-size: 13px;
padding: 6px 12px;
}
#wiktku-start-form .wiktku-mod-btn,
#wiktku-start-form .wiktku-mod-confirm,
#wiktku-start-form .wiktku-mod-cancel {
border: 1px solid var(--wikt-accent-edge);
background: var(--wikt-accent-tint);
color: var(--wikt-accent);
border-radius: 8px;
}
/* ── Footer + buttons ────────────────────────────────────────────────
Spec: one primary pill, everything else quiet. The two red buttons
sitting next to it are the loudest thing on the old screen for no
reason — they become outline buttons in the danger colour instead of
filled ones. */
#wiktku-start-form #wiktku-start-footer {
background: var(--wikt-card-sunken);
border-top: 1px solid var(--wikt-rule);
border-radius: 0 0 var(--wikt-r-card) var(--wikt-r-card);
padding: 16px 20px;
gap: 10px;
}
#wiktku-start-form #wiktku-start-footer .oo-ui-buttonElement-button {
border-radius: var(--wikt-r-pill) !important;
font-family: var(--wikt-sans);
font-size: 14px;
font-weight: 500;
padding: 11px 22px;
box-shadow: none !important;
min-height: var(--wikt-tap);
}
#wiktku-start-form #wiktku-unhide-editform .oo-ui-buttonElement-button {
background: var(--wikt-accent) !important;
border-color: var(--wikt-accent) !important;
color: #fff !important;
}
/* Destructive actions: outline, not fill. */
#wiktku-start-form #wiktku-start-footer .oo-ui-flaggedElement-destructive .oo-ui-buttonElement-button {
background: var(--wikt-card) !important;
border-color: var(--wikt-danger) !important;
color: var(--wikt-danger) !important;
}
#wiktku-start-form #wiktku-last-saved {
font-family: var(--wikt-mono);
font-size: 12px;
color: var(--wikt-muted);
}
/* ── Beşên din picker ────────────────────────────────────────────────
This dropdown is now the entry point to eighteen sections, so it gets
room and a label rather than sitting flush under the tab bar. */
#wiktku-start-form .wiktku-besendin-picker {
margin: 0 0 20px;
padding: 16px 18px;
background: var(--wikt-card);
border: 1px solid #e6dfd2;
border-radius: 12px;
}
#wiktku-start-form .wiktku-besendin-picker .wiktku-native-select-wrap,
#wiktku-start-form .wiktku-besendin-picker input.wiktku-ac-input {
width: 100%;
max-width: 28em;
}
/* ── Notices ─────────────────────────────────────────────────────────── */
#wiktku-start-form .wiktku-addlang-notice {
background: var(--wikt-accent-tint);
border: 1px solid var(--wikt-accent-edge);
border-radius: var(--wikt-r-field);
color: var(--wikt-ink-2);
padding: 12px 16px;
margin-bottom: 16px;
}
#wiktku-start-form .wiktku-pron-preview {
background: var(--wikt-accent-tint);
border-color: var(--wikt-accent-edge);
border-radius: 12px;
}
#wiktku-start-form .wiktku-pron-preview-confirm,
#wiktku-start-form .wiktku-pron-preview-cancel {
border-radius: var(--wikt-r-pill);
padding: 8px 16px;
min-height: 36px;
}
/* Links carry the accent and a soft underline, per the spec's `a` rule. */
#wiktku-start-form a {
color: var(--wikt-accent);
text-decoration: none;
border-bottom: 1px solid rgba(42, 93, 176, 0.35);
}
#wiktku-start-form a:hover {
color: #1c4685;
}
#wiktku-start-form .wiktku-adv-toggle,
#wiktku-start-form .wiktku-group-tab,
#wiktku-start-form .wiktku-section-tab {
border-bottom-style: solid;
}
#wiktku-start-form .wiktku-adv-toggle {
border-bottom: 0;
}
01ogixwe2u5vr3izr03en6wu5j4o4oa
6333760
6333753
2026-08-14T23:33:17Z
Wikihez
7344
6333760
css
text/css
/* ===================================================================
#editform while the wizard is active
=================================================================== */
/* Keeps #editform genuinely laid out instead of display:none*/
.wiktku-offscreen {
position: absolute !important;
left: -9999px !important;
top: 0 !important;
width: 100%;
max-width: 100%;
visibility: hidden;
}
/* ===================================================================
Base scale
=================================================================== */
#wiktku-start-form {
font-size: 0.92em;
line-height: 1.35;
}
#wiktku-start-form * {
box-sizing: border-box;
}
.wiktku-addlang-notice {
margin: 0 0 0.8em;
padding: 0.6em 0.8em;
background: var(--wikt-palette-paleblue);
border: 1px solid var(--wikt-palette-lightgrey);
border-radius: 4px;
}
/* ===================================================================
Step cards
a compact card with a left accent bar, so each step reads as
a distinct unit
=================================================================== */
.wiktku-start-step {
padding: 0.7em 0.9em;
margin-bottom: 0.6em;
border: 1px solid var(--wikt-palette-grey-3, #e0e0e0);
border-left: 4px solid var(--wikt-palette-blue-9, #3366cc);
border-radius: 6px;
background: var(--wikt-palette-white);
box-shadow: 0 1px 2px rgba(0, 0, 0, 0.04);
transition: border-left-color 0.15s ease, box-shadow 0.15s ease;
}
.wiktku-start-step:hover {
box-shadow: 0 2px 6px rgba(0, 0, 0, 0.08);
}
.wiktku-start-step:focus-within {
border-left-color: var(--wikt-palette-blue-9, #3366cc);
box-shadow: 0 2px 6px rgba(0, 0, 0, 0.1);
}
/* Ghybu, 14 Tebax 2026: "Cureyê rêzimanî" and "Parametreyên cureyê
rêzimanî" should read as one question, not two. Fuse the posparams
card onto the bottom of the pos card (shared left accent bar, no
border/gap between them) and drop its own big heading in favor of
the smaller, pos-specific label start.js now sets via question_fmt
("Cins/zayend" / "Cureyê lêkerê" / "Taybetmendî"). posparams.visible
only turns this div on once a pos is chosen, and it always renders
immediately after #wiktku-start-pos in the DOM, so this pairing is safe. */
#wiktku-start-pos {
border-radius: 6px 6px 0 0;
margin-bottom: 0;
border-bottom: none;
}
#wiktku-start-posparams {
border-radius: 0 0 6px 6px;
border-top: none;
padding-top: 0.3em;
}
#wiktku-start-posparams .wiktku-start-step-name {
display: none;
}
/* Scoped to #wiktku-start-form (not just .wiktku-start-step-name) and
!important on font-size: this is a real <h3> tag (see start.js), so
the wiki skin's own default heading styles can otherwise win over a
plain class rule and render it unpredictably (varies by skin/
viewport — this was previously landing at a different effective
size on desktop Vector vs. mobile Minerva purely by skin-default
accident, not by design). The heading now leads the visual hierarchy
through both size AND colour (tinted to match the card's accent
bar), while .wiktku-start-step-question below is deliberately
lighter-weight and muted so the two never compete for attention. */
#wiktku-start-form .wiktku-start-step-name {
font-size: 1.1em !important;
font-weight: 700;
letter-spacing: 0.03em;
margin: 0 0 0.3em;
line-height: 1.2;
color: var(--wikt-palette-blue-9, #3366cc);
border: 0;
padding: 0;
}
/* Rewiye tine, 14 Tebax 2026: "pûnto jî biçûk in, xwendina wan hinek zehmet
e" — the question text and the many small per-field labels (Cinsiyet:,
Rehê dema niha:, …) were sized noticeably smaller than the heading above
them; bumped both a step so the whole card reads at a more consistent,
comfortable size instead of the heading standing out and everything
under it feeling like fine print. */
.wiktku-start-step-question {
font-size: 1em;
font-weight: 400;
color: var(--wikt-palette-grey-9, #555);
margin: 0 0 0.5em;
line-height: 1.45;
}
.wiktku-start-step label {
padding-right: 1.2em;
font-size: 1em;
}
/* Rewiye tine, 14 Tebax 2026: short reassurance notes next to the fields
that most confused a first-time user (Bilêvkirin's template dropdown,
Mane's per-sense template dropdown) — muted so they read as a hint, not
another question competing with .wiktku-start-step-question. */
.wiktku-step-hint {
font-size: 0.88em;
font-style: italic;
color: var(--wikt-palette-grey-8, #72777d);
margin: 0 0 0.5em;
line-height: 1.4;
}
/* Same specificity as the rule just above, so it must come after to
actually win: the name label isn't a field label needing right
padding or the form's base label size, it's a heading. */
#wiktku-start-form .wiktku-start-step-name label {
padding-right: 0;
font-size: inherit !important;
color: inherit;
}
input[type="text"].wiktku-start-step-field {
width: 100%;
padding: 5px 8px;
border: 1px solid var(--wikt-palette-lightgrey);
border-radius: 4px;
transition: border-color 0.12s ease, box-shadow 0.12s ease;
}
input[type="text"].wiktku-start-step-field:focus {
border-color: var(--wikt-palette-blue-9, #3366cc);
box-shadow: inset 0 0 0 1px var(--wikt-palette-blue-9, #3366cc);
outline: 0;
}
input[type="text"].wiktku-start-step-field.wiktku-start-narrow {
width: 20em;
}
/* Only used by selects that opt out via .wiktku-plain-select; other
selects get their width from the searchable picker instead (see
input.wiktku-ac-input). */
select.wiktku-start-narrow,
input.wiktku-dfn-tpl-title {
width: 20em;
max-width: 100%;
box-sizing: border-box;
}
#wiktku-start-spinner {
float: right;
margin-left: 1em;
}
#wiktku-start-footer {
display: flex;
flex-wrap: wrap;
align-items: center;
gap: 0.5em;
padding: 0.6em 0.2em;
position: sticky;
bottom: 0;
background: var(--wikt-palette-white);
border-top: 1px solid var(--wikt-palette-grey-3, #e0e0e0);
z-index: 5;
}
/* Quiet, non-competing text — sits next to the cache buttons so the
person can tell at a glance whether their latest edits are backed
up, without it fighting the buttons for attention. */
#wiktku-last-saved {
font-size: 0.85em;
color: var(--wikt-palette-grey-9, #767676);
white-space: nowrap;
}
/* ── Tercîh (settings) icon button — sits in the footer next to the
cache buttons. Uses the Codex "settings" (color-subtle) icon from
Commons directly rather than an OOUI icon-pack module, so it renders
the exact requested glyph without pulling in an extra dependency. */
.wiktku-prefs-btn {
width: 2.2em;
height: 2.2em;
flex: 0 0 auto;
padding: 0;
border: 1px solid var(--wikt-palette-grey-3, #e0e0e0);
border-radius: 2px;
background-color: var(--wikt-palette-white);
background-image: url(//upload.wikimedia.org/wikipedia/commons/e/e0/Codex_icon_settings_color-subtle.svg);
background-repeat: no-repeat;
background-position: center;
background-size: 1.2em 1.2em;
cursor: pointer;
}
.wiktku-prefs-btn:hover {
background-color: var(--wikt-palette-grey-0, #f8f9fa);
}
.wiktku-prefs-btn:active {
background-color: var(--wikt-palette-grey-1, #eaecf0);
}
/* Tercîh dialog body — OOUI's bare ProcessDialog body has no inset of
its own, so text/fields otherwise sit flush against the window edges. */
.wiktku-prefs-dialog-body {
padding: 1em 1.2em;
}
/* ── "Bişîne" click feedback ── */
@keyframes wiktku-btn-flash-pulse {
0% { box-shadow: 0 0 0 0 rgba(51, 102, 204, 0.55); }
70% { box-shadow: 0 0 0 9px rgba(51, 102, 204, 0); }
100% { box-shadow: 0 0 0 0 rgba(51, 102, 204, 0); }
}
#wiktku-unhide-editform.wiktku-btn-flash {
animation: wiktku-btn-flash-pulse 0.5s ease-out;
}
/* Persistent state while the wikitext is being built/submitted, set
alongside OOUI's own setDisabled(true) so it reads clearly even if
the skin's default disabled style is subtle. */
#wiktku-unhide-editform.wiktku-btn-sending .oo-ui-buttonElement-button {
background-color: var(--wikt-palette-grey-9, #767676) !important;
border-color: var(--wikt-palette-grey-9, #767676) !important;
cursor: progress;
opacity: 1 !important;
}
/* Wikihez, 14 Tebax 2026 (item 7): looks exactly like OOUI's own disabled
state, but ISN'T one — the button stays a real, clickable widget so its
click handler can still run and explain why (see wiktkuNotify call next
to wiktkuContentGateOk in start.js). A true setDisabled(true) here would
swallow the click before that message could ever show. */
#wiktku-unhide-editform.wiktku-btn-soft-disabled .oo-ui-buttonElement-button {
opacity: 0.5;
cursor: not-allowed;
}
/* ── "Beşên din" picker (item 3) ── */
.wiktku-besendin-picker {
margin: 0.6em 0 1em;
}
.wiktku-besendin-picker .wiktku-besendin-select {
width: 100%;
max-width: 24em;
}
#wiktku-start-form textarea.wiktku-start-step-field,
#wiktku-start-form textarea.wiktku-start-narrow,
#wiktku-start-form textarea.wiktku-dfn-subfield {
resize: vertical !important;
overflow: auto !important;
box-sizing: border-box !important;
vertical-align: top;
border: 1px solid var(--wikt-palette-lightgrey);
border-radius: 3px;
transition: border-color 0.1s ease, box-shadow 0.1s ease;
}
/* Modern focus state to match the searchable-picker inputs. */
#wiktku-start-form textarea.wiktku-start-step-field:focus,
#wiktku-start-form textarea.wiktku-start-narrow:focus,
#wiktku-start-form textarea.wiktku-dfn-subfield:focus {
border-color: var(--wikt-palette-blue-9, #3366cc);
box-shadow: inset 0 0 0 1px var(--wikt-palette-blue-9, #3366cc);
outline: 0;
}
/* Standard: every textarea in the form is full width by default */
#wiktku-start-form textarea:not(.wiktku-start-narrow) {
width: 100%;
max-width: 100%;
box-sizing: border-box;
}
#wiktku-start-form textarea.wiktku-start-narrow,
#wiktku-start-form textarea.wiktku-dfn-subfield.wiktku-start-narrow {
width: 20em;
max-width: 100%;
min-width: 8em;
height: calc(1.7em + 10px);
min-height: calc(1.7em + 10px);
padding-top: 4px !important;
padding-bottom: 4px !important;
line-height: 1.35 !important;
resize: none !important;
}
/* Exception: "Sernav" / "Sernavê orjînal" citation-source fields (kitêb,
kovar, malper, …) — long enough to be worth 2 rows and manual resizing. */
#wiktku-start-form textarea.wiktku-dfn-quote-src-input.wiktku-dfn-quote-src-input--title {
height: calc(2 * 1.35em + 10px);
min-height: calc(2 * 1.35em + 10px);
}
/* ── Manual drag-to-resize handle ── */
#wiktku-start-form textarea:not(.wiktku-start-narrow) {
resize: none !important;
}
/* Inline modifier button (⊕) */
.wiktku-word-li {
display: flex;
align-items: flex-start;
flex-wrap: wrap;
gap: 0.3em;
}
.wiktku-mod-btn {
flex: 0 0 auto;
width: 1.6em;
height: 1.6em;
padding: 0;
line-height: 1;
border: 1px solid var(--wikt-palette-lightgrey);
border-radius: 2px;
background: var(--wikt-palette-white);
color: var(--wikt-palette-blue-9, #3366cc);
font-size: 1em;
cursor: pointer;
}
.wiktku-mod-btn:hover {
border-color: var(--wikt-palette-blue-9, #3366cc);
background: var(--wikt-palette-paleblue, #eaf3ff);
}
.wiktku-mod-picker {
display: flex;
flex-wrap: wrap;
gap: 0.25em;
width: 100%;
margin-top: 0.15em;
padding: 0.35em;
border: 1px solid var(--wikt-palette-lightgrey);
border-radius: 3px;
background: var(--wikt-palette-white);
box-shadow: 0 1px 3px rgba(0, 0, 0, 0.08);
}
.wiktku-mod-pill {
padding: 2px 8px;
border: 1px solid var(--wikt-palette-grey-3, #e0e0e0);
border-radius: 12px;
background: var(--wikt-palette-paleblue, #eaf3ff);
font-size: 0.85em;
white-space: nowrap;
cursor: pointer;
}
.wiktku-mod-pill:hover {
border-color: var(--wikt-palette-blue-9, #3366cc);
background: var(--wikt-palette-blue-9, #3366cc);
color: var(--wikt-palette-white);
}
.wiktku-mod-pill:disabled,
.wiktku-mod-pill.wiktku-mod-pill-used {
border-color: var(--wikt-palette-grey-3, #e0e0e0);
background: var(--wikt-palette-lightgrey);
color: var(--wikt-palette-grey-3, #999);
cursor: not-allowed;
opacity: 0.6;
}
.wiktku-mod-pill:disabled:hover,
.wiktku-mod-pill.wiktku-mod-pill-used:hover {
border-color: var(--wikt-palette-grey-3, #e0e0e0);
background: var(--wikt-palette-lightgrey);
color: var(--wikt-palette-grey-3, #999);
}
.wiktku-mod-val-wrap {
display: flex;
align-items: center;
gap: 0.25em;
width: 100%;
margin-top: 0.15em;
}
.wiktku-mod-val-input {
flex: 0 1 14em;
max-width: 14em;
padding: 3px 6px;
border: 1px solid var(--wikt-palette-lightgrey);
border-radius: 2px;
}
.wiktku-mod-confirm,
.wiktku-mod-cancel {
flex: 0 0 auto;
width: 1.6em;
height: 1.6em;
padding: 0;
line-height: 1;
border: 1px solid var(--wikt-palette-lightgrey);
border-radius: 2px;
background: var(--wikt-palette-white);
cursor: pointer;
}
.wiktku-mod-confirm {
color: #178a17;
border-color: #178a17;
}
.wiktku-mod-cancel {
color: var(--wikt-palette-red-9, #d33);
border-color: var(--wikt-palette-red-9, #d33);
}
.wiktku-resize-wrap {
position: relative;
display: block;
}
/* Independent of .wiktku-resize-wrap (created separately by
ensureLinebreakBackdrop() in start.js, only for textareas that ever
get flagged with a linebreak) so it doesn't depend on load order
relative to wiktkuMakeManualResizable(). Plain block, no size of its
own — purely a position:relative anchor for the backdrop. */
.wiktku-linebreak-wrap {
position: relative;
display: block;
}
.wiktku-resize-grip {
position: absolute;
right: 2px;
bottom: 2px;
width: 14px;
height: 14px;
cursor: ns-resize;
touch-action: none;
opacity: 0.5;
z-index: 2;
background-image: linear-gradient(135deg, transparent 0 50%, var(--wikt-palette-grey-9, #767676) 50% 100%);
background-repeat: no-repeat;
}
.wiktku-resize-grip:hover,
.wiktku-resize-grip:active {
opacity: 0.9;
}
/* ===================================================================
Searchable dropdown (wrapNativeSelect in start.js)
.wiktku-native-select-wrap > input.wiktku-ac-input (search box)
> ul.wiktku-ac-results (result list)
> select (hidden, holds the value)
=================================================================== */
.wiktku-native-select-wrap {
display: inline-block;
position: relative;
vertical-align: top;
}
/* Matches the width the native select would have had (see
select.wiktku-start-narrow). */
.wiktku-native-select-wrap input[type="search"],
input.wiktku-ac-input {
display: block;
width: 20em;
max-width: 100%;
box-sizing: border-box;
padding: 3px 6px;
border: 1px solid var(--wikt-palette-lightgrey);
border-radius: 2px;
background: var(--wikt-palette-white);
color: inherit;
font-size: inherit;
font-family: inherit;
transition: border-color 0.1s ease, box-shadow 0.1s ease;
}
input.wiktku-ac-input:focus {
border-color: var(--wikt-palette-blue-9);
box-shadow: inset 0 0 0 1px var(--wikt-palette-blue-9);
outline: 0;
}
input.wiktku-ac-input::placeholder {
color: var(--wikt-palette-grey-9);
opacity: 1;
}
/* Hide Safari/Chrome's built-in search decorations. */
input.wiktku-ac-input::-webkit-search-decoration,
input.wiktku-ac-input::-webkit-search-cancel-button,
input.wiktku-ac-input::-webkit-search-results-button {
-webkit-appearance: none;
appearance: none;
}
/* ── Result list ── */
/* top/bottom/max-height are overridden inline by showResults() when it
flips the list above the box; these are just its defaults. */
ul.wiktku-ac-results {
position: absolute;
z-index: 9999;
top: 100%;
bottom: auto;
left: 0;
margin: 0;
padding: 0;
list-style: none;
width: 20em;
max-width: 90vw;
max-height: 13em;
overflow-y: auto;
overscroll-behavior: contain;
-webkit-overflow-scrolling: touch;
background: var(--wikt-palette-white);
border: 1px solid var(--wikt-palette-lightgrey);
border-radius: 3px;
box-shadow: 0 3px 10px rgba(0, 0, 0, 0.15);
}
ul.wiktku-ac-results li {
margin: 0;
padding: 4px 8px;
cursor: pointer;
font-size: 0.92em;
display: flex;
align-items: center;
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
}
/* .wiktku-ac-active is the keyboard cursor; hover mirrors it; :active
covers the touch press state. */
ul.wiktku-ac-results li.wiktku-ac-active,
ul.wiktku-ac-results li:hover {
background: var(--wikt-palette-lightblue);
}
ul.wiktku-ac-results li:active {
background: var(--wikt-palette-blue-9);
color: var(--wikt-palette-white);
}
/* Touch devices: bigger tap targets, no sticky hover. */
@media (pointer: coarse) {
ul.wiktku-ac-results li {
padding: 6px 10px;
min-height: 2.2em;
font-size: 1em;
}
ul.wiktku-ac-results li:hover {
background: transparent;
}
ul.wiktku-ac-results li.wiktku-ac-active {
background: var(--wikt-palette-lightblue);
}
input.wiktku-ac-input {
/* >=16px stops iOS Safari zooming the page when the box is focused. */
font-size: 16px;
min-height: 2.2em;
}
}
/* Item 5 (Wikihez, 14 Tebax 2026): inline preview + confirm panel shown
before inserting an auto-content pronunciation template (ku-IPA,
ku-kîte, …) — deliberately part of the form's own layout rather than a
browser confirm()/prompt() dialog, per "dont use userinput use
something more advanced". */
.wiktku-pron-preview {
margin: 6px 0;
padding: 8px 10px;
border: 1px solid var(--wikt-palette-blue-9, #3366cc);
border-radius: 6px;
background: var(--wikt-palette-paleblue, #eaf3ff);
}
.wiktku-pron-preview-label {
font-size: 0.88em;
font-weight: 600;
color: var(--wikt-palette-grey-9, #555);
margin-bottom: 3px;
}
.wiktku-pron-preview-body {
font-family: monospace;
font-size: 1em;
white-space: pre-wrap;
word-break: break-word;
margin-bottom: 6px;
}
.wiktku-pron-preview-actions {
display: flex;
gap: 6px;
}
.wiktku-pron-preview-confirm,
.wiktku-pron-preview-cancel {
font-size: 0.88em;
padding: 3px 10px;
border-radius: 4px;
cursor: pointer;
border: 1px solid var(--wikt-palette-lightgrey, #a2a9b1);
background: var(--wikt-palette-white, #fff);
}
.wiktku-pron-preview-confirm {
border-color: var(--wikt-palette-blue-9, #3366cc);
color: var(--wikt-palette-blue-9, #3366cc);
font-weight: 600;
}
.wiktku-pron-preview-confirm:disabled {
opacity: 0.5;
cursor: wait;
}
.wiktku-pron-preview-cancel:hover {
background: var(--wikt-palette-grey-0, #f8f9fa);
}
/* Template pickers fill their container since the search box, not the
<select>, is what the user sees. */
.wiktku-pron-wrap .wiktku-native-select-wrap,
.wiktku-etym-wrap .wiktku-native-select-wrap,
.wiktku-pron-wrap .wiktku-native-select-wrap input.wiktku-ac-input,
.wiktku-etym-wrap .wiktku-native-select-wrap input.wiktku-ac-input {
width: 100%;
}
.wiktku-pron-wrap .wiktku-native-select-wrap input.wiktku-ac-input,
.wiktku-etym-wrap .wiktku-native-select-wrap input.wiktku-ac-input {
font-size: 0.88em;
}
.wiktku-cavkani-wrap .wiktku-native-select-wrap,
.wiktku-cavkani-wrap .wiktku-native-select-wrap input.wiktku-ac-input {
width: 100%;
}
/* Template selector inside a sense block. */
.wiktku-dfn-tpl-row .wiktku-native-select-wrap input.wiktku-ac-input {
font-size: 0.88em;
}
/* Language/dialect rows: picker must line up with the word field beside it. */
.wiktku-lang-row .wiktku-native-select-wrap {
flex: 0 0 auto;
}
#wiktku-start-form textarea.wiktku-dfn-mane,
#wiktku-start-form textarea.wiktku-dfn-nimune-text,
#wiktku-start-form .wiktku-dfn-jeder-group textarea.wiktku-dfn-nimune-quote,
#wiktku-start-form .wiktku-dfn-nimune-sub textarea.wiktku-dfn-nimune-tr,
#wiktku-start-form .wiktku-dfn-nimune-sub textarea.wiktku-dfn-nimune-t,
#wiktku-start-form .wiktku-dfn-quote-sub textarea.wiktku-dfn-nimune-quote-tr,
#wiktku-start-form .wiktku-dfn-quote-sub textarea.wiktku-dfn-nimune-quote-t,
#wiktku-start-form textarea.wiktku-dfn-quote-src-manual,
#wiktku-start-form .wiktku-pron-wrap textarea.wiktku-pron-text,
#wiktku-start-form .wiktku-etym-wrap textarea.wiktku-etym-text,
#wiktku-start-form .wiktku-tewandin-wrap textarea.wiktku-tewandin-text,
#wiktku-start-form textarea.wiktku-cavkani-text,
#wiktku-start-form textarea.wiktku-dfn-tercime,
#wiktku-start-form textarea.wiktku-dfn-izah {
--wiktku-ta-rows: 2;
height: calc(var(--wiktku-ta-rows) * 1.35em + 6px);
min-height: calc(var(--wiktku-ta-rows) * 1.35em + 6px);
}
#wiktku-start-form .wiktku-pron-wrap textarea.wiktku-pron-text,
#wiktku-start-form .wiktku-etym-wrap textarea.wiktku-etym-text,
#wiktku-start-form textarea.wiktku-dfn-izah {
--wiktku-ta-rows: 3;
}
#wiktku-start-form textarea.wiktku-cavkani-text {
--wiktku-ta-rows: 4;
}
/* Nimûne + Jêgirtin (citation) boxes, and their tr/t sub-fields: at
least 4 rows so there's room to actually write an example/quote. */
#wiktku-start-form textarea.wiktku-dfn-nimune-text,
#wiktku-start-form .wiktku-dfn-nimune-sub textarea.wiktku-dfn-nimune-tr,
#wiktku-start-form .wiktku-dfn-nimune-sub textarea.wiktku-dfn-nimune-t,
#wiktku-start-form .wiktku-dfn-jeder-group textarea.wiktku-dfn-nimune-quote,
#wiktku-start-form .wiktku-dfn-quote-sub textarea.wiktku-dfn-nimune-quote-tr,
#wiktku-start-form .wiktku-dfn-quote-sub textarea.wiktku-dfn-nimune-quote-t,
#wiktku-start-form textarea.wiktku-dfn-quote-src-manual {
--wiktku-ta-rows: 4;
}
/* Nimûne/jêgirtin box currently contains a typed/pasted linebreak —
the border is nudged so the user notices before it's silently turned
into <br> on output. The break itself is marked precisely, not the
whole box, via a mirrored backdrop layer (see below and
highlightLinebreak()/buildLinebreakBackdropHtml() in start.js). */
#wiktku-start-form textarea.wiktku-has-linebreak {
border-color: var(--wikt-palette-yellow6, #ac6600) !important;
}
/* Backdrop layer: sits behind the textarea showing the same text, with
a highlighted marker at each line that's followed by a break. Its
font/padding/box-sizing/line-height are copied from the textarea via
computed style (see syncLinebreakBackdropMetrics() in start.js), not
shared CSS classes — most of this box's own rules are written as
"textarea.foo", which a <div> with the same class wouldn't match.
Only created lazily, the first time a given textarea actually has a
break — see ensureLinebreakBackdrop(). */
.wiktku-linebreak-backdrop {
position: absolute;
inset: 0;
z-index: 0;
margin: 0;
overflow: hidden;
white-space: pre-wrap;
word-wrap: break-word;
color: transparent;
background: transparent !important;
border-color: transparent !important;
box-shadow: none !important;
resize: none !important;
pointer-events: none;
}
/* Raise the real textarea above its backdrop so typing/selection/caret
behave completely normally; the backdrop's mark shows through only
where the real textarea's own background is transparent. */
#wiktku-start-form textarea.wiktku-has-linebreak-source {
position: relative;
z-index: 1;
background-color: transparent;
}
.wiktku-linebreak-mark {
background-color: var(--wikt-palette-yellow6, #ac6600);
color: var(--wikt-palette-white, #fff);
border-radius: 2px;
}
/* ── Tercime + Îzah boxes ── */
.wiktku-dfn-nonku-wrap {
display: flex;
flex-direction: column;
gap: 3px;
}
.wiktku-dfn-nimune-sub,
.wiktku-dfn-quote-sub {
margin-top: 3px;
margin-left: 1em;
padding-left: 0.6em;
border-left: 2px solid var(--wikt-palette-lightgrey);
display: flex;
flex-direction: column;
gap: 3px;
}
.wiktku-dfn-nimune-sub textarea.wiktku-dfn-nimune-tr,
.wiktku-dfn-nimune-sub textarea.wiktku-dfn-nimune-t {
min-width: 8em;
padding-top: 2px !important;
padding-bottom: 2px !important;
line-height: 1.35 !important;
font-size: 0.88em;
}
/* ── Sense list (Mane step) — numbered badges instead of the browser's
default flat "1." marker, so each sense reads as a distinct block. ── */
ol.wiktku-dfn-list {
list-style: none;
margin: 0;
padding: 0;
counter-reset: wiktku-dfn-sense;
}
ol.wiktku-dfn-list > li.wiktku-dfn-sense {
position: relative;
counter-increment: wiktku-dfn-sense;
padding-left: 2.1em;
margin-bottom: 0.9em;
}
ol.wiktku-dfn-list > li.wiktku-dfn-sense:not(:last-child) {
padding-bottom: 0.9em;
border-bottom: 1px dashed var(--wikt-palette-grey-3, #e0e0e0);
}
ol.wiktku-dfn-list > li.wiktku-dfn-sense::before {
content: counter(wiktku-dfn-sense);
position: absolute;
left: 0;
top: 1px;
width: 1.6em;
height: 1.6em;
border-radius: 50%;
background: var(--wikt-palette-blue-9, #3366cc);
color: var(--wikt-palette-white);
font-size: 0.85em;
font-weight: 700;
display: flex;
align-items: center;
justify-content: center;
}
/* Template selector row inside a sense block */
.wiktku-dfn-tpl-row {
margin-bottom: 3px;
}
/* ── Sub-field titles (Etîket, Kategorî, Hevmane, Dijmane, Nimûne,
Jêgirtin, …) — previously plain unstyled run-on text. Each group
now reads as a small labelled field: the term stands out, the
izah hint stays quiet, and the block gets its own breathing room. ── */
.wiktku-dfn-subgroup {
margin-top: 0.5em;
padding-top: 0.4em;
border-top: 1px dashed var(--wikt-palette-grey-3, #e0e0e0);
}
.wiktku-dfn-subgroup:first-of-type {
margin-top: 0.3em;
padding-top: 0;
border-top: none;
}
.wiktku-dfn-sublabel {
display: block;
margin-bottom: 3px;
font-size: 0.88em;
}
.wiktku-dfn-sublabel-term {
font-weight: 600;
color: var(--wikt-palette-blue-9, #3366cc);
letter-spacing: 0.03em;
font-size: 0.92em;
}
.wiktku-dfn-sublabel-hint {
color: var(--wikt-palette-grey-9, #767676);
font-style: italic;
}
.wiktku-pron-wrap,
.wiktku-etym-wrap,
.wiktku-tewandin-wrap,
.wiktku-cavkani-wrap {
display: flex;
flex-direction: column;
gap: 3px;
}
/* ── POS section tabs ──
Modernized into rounded pills instead of flat file-folder tabs. */
#wiktku-section-tabs {
display: flex;
flex-wrap: wrap;
gap: 4px;
margin-bottom: 0.6em;
align-items: center;
}
#wiktku-section-tabs .wiktku-section-tab {
padding: 3px 12px;
border: 1px solid var(--wikt-palette-lightgrey);
border-radius: 999px;
background: var(--wikt-palette-dullcyan);
cursor: pointer;
font-size: 0.86em;
user-select: none;
transition: background 0.12s ease, border-color 0.12s ease;
}
#wiktku-section-tabs .wiktku-section-tab:hover {
border-color: var(--wikt-palette-blue-9, #3366cc);
}
#wiktku-section-tabs .wiktku-section-tab.wiktku-tab-active {
background: var(--wikt-palette-blue-9, #3366cc);
border-color: var(--wikt-palette-blue-9, #3366cc);
color: var(--wikt-palette-white);
font-weight: 600;
}
/* ── Step-group tabs (Mane / Bilêvkirin / Beşên din — see STEP_GROUPS in
start.js) ── Sits directly under the pill-style section tabs above;
styled as an underlined secondary nav so the two bars stay visually
distinct. */
#wiktku-group-tabs {
display: flex;
flex-wrap: wrap;
gap: 4px;
margin-bottom: 0.8em;
border-bottom: 2px solid var(--wikt-palette-lightgrey);
}
#wiktku-group-tabs .wiktku-group-tab {
position: relative;
padding: 7px 14px 8px;
margin-bottom: -2px;
border-bottom: 3px solid transparent;
border-radius: 3px 3px 0 0;
cursor: pointer;
font-size: 0.95em;
font-weight: 600;
color: var(--wikt-palette-grey-9, #333);
background: var(--wikt-palette-grey-0, #f8f9fa);
user-select: none;
transition: color 0.12s ease, border-color 0.12s ease, background 0.12s ease;
}
#wiktku-group-tabs .wiktku-group-tab:hover {
color: var(--wikt-palette-blue-9, #3366cc);
background: var(--wikt-palette-paleblue, #eaf3ff);
}
#wiktku-group-tabs .wiktku-group-tab.wiktku-tab-active {
border-bottom-color: var(--wikt-palette-blue-9, #3366cc);
color: var(--wikt-palette-white);
background: var(--wikt-palette-blue-9, #3366cc);
font-weight: 700;
}
/* Small dot marking a tab that still has an unfilled required field
hidden inside it (see updateGroupTabIndicators in start.js). Cleared
automatically once that tab becomes the active one. */
#wiktku-group-tabs .wiktku-group-tab.wiktku-tab-missing::after {
content: "";
position: absolute;
top: 4px;
right: -1px;
width: 6px;
height: 6px;
border-radius: 50%;
background: var(--wikt-palette-red-9, #d33);
}
.wiktku-lang-row-list {
margin: 0;
padding: 0;
list-style: none;
}
.wiktku-lang-row {
display: flex;
align-items: flex-start;
gap: 6px;
margin-bottom: 3px;
flex-wrap: wrap;
}
.wiktku-lang-row-words {
margin: 0;
padding: 0;
list-style: none;
display: flex;
flex-direction: column;
gap: 3px;
}
/* Dûnde/Werger/Zarava rows: align the picker's height with the adjacent
word textarea (see .wiktku-start-narrow above). */
.wiktku-lang-row .wiktku-native-select-wrap input.wiktku-ac-input {
height: calc(1.7em + 10px);
min-height: calc(1.7em + 10px);
padding-top: 4px;
padding-bottom: 4px;
}
/* ── Werger / Bi zaravayên din groups: one per gloss, shared spacing ── */
#wiktku-start-trans .wiktku-trans-group,
#wiktku-start-zarava .wiktku-zarava-group {
margin-bottom: 0.6em;
}
#wiktku-start-trans .wiktku-trans-group:last-child,
#wiktku-start-zarava .wiktku-zarava-group:last-child {
margin-bottom: 0;
}
#wiktku-start-trans .wiktku-trans-group-label,
#wiktku-start-zarava .wiktku-zarava-group-label {
font-weight: 600;
font-size: 0.88em;
margin-bottom: 3px;
}
.wiktku-dfn-jeder-group {
margin-top: 3px;
}
.wiktku-dfn-quote-src-sel {
font-size: 0.88em;
margin-top: 3px;
display: block;
}
.wiktku-dfn-quote-src-fields {
display: flex;
flex-direction: column;
gap: 3px;
margin-top: 3px;
}
/* Stacked layout: textarea gets its own full-width row, button + status
sit below it on their own row. Simpler and more robust than sharing a
row with the button — that required the textarea's own resize-wrap
div (added by wiktkuMakeManualResizable in start.js) to correctly
inherit flex-grow, which kept being fragile across breakpoints. */
.wiktku-dfn-quote-citoid {
display: flex;
flex-direction: column;
align-items: stretch;
gap: 0.4em;
margin-top: 3px;
margin-bottom: 3px;
}
.wiktku-dfn-quote-citoid-input {
width: 100%;
max-width: 100%;
box-sizing: border-box;
}
/* Column flex + align-items:stretch (above) is what makes the textarea's
.wiktku-resize-wrap (see wiktkuMakeManualResizable in start.js) reach
full width automatically — stretch fills the cross axis for any block
child, no flex-grow needed on the wrap itself. The button and status
text, right below the textarea, opt back out of that stretch so they
stay their natural (small) size instead of also going full width. */
.wiktku-dfn-quote-citoid-btn,
.wiktku-dfn-quote-citoid-status {
align-self: flex-start;
}
.wiktku-dfn-quote-src-cat-status {
display: block;
font-size: 0.82em;
color: var(--wikt-palette-lightgrey, #767676);
margin-top: 2px;
}
.wiktku-dfn-quote-src-row {
display: flex;
align-items: baseline;
gap: 4px;
flex-wrap: wrap;
}
.wiktku-dfn-quote-src-row label {
font-size: 0.82em;
white-space: nowrap;
min-width: 8em;
}
textarea.wiktku-dfn-quote-src-input {
flex: 1 1 12em;
max-width: 100%;
box-sizing: border-box;
}
@media (max-width: 720px) {
.wiktku-lang-row {
flex-direction: column;
}
/* Re-assert against the wiki's own mobile skin heading styles,
which can apply their own mobile-breakpoint rules to this real
<h3> and load after ours in the cascade — see the rule itself,
above, for why this needs guarding at all. */
#wiktku-start-form .wiktku-start-step-name {
font-size: 1.05em !important;
margin: 0 0 0.2em !important;
line-height: 1.2 !important;
border: 0 !important;
padding: 0 !important;
}
/* Single column: search box and list use the full width. Narrow
textareas (Etîket, Hevmane, Dûnde/Jê/Têkildar/Binêre herwiha word
boxes, citation source fields, …) join them here too — at a fixed
20em width they used to poke out past the step card on narrow
screens. */
.wiktku-native-select-wrap,
input.wiktku-ac-input,
ul.wiktku-ac-results,
#wiktku-start-form textarea.wiktku-start-narrow,
#wiktku-start-form textarea.wiktku-dfn-subfield.wiktku-start-narrow {
width: 100%;
max-width: 100%;
}
.wiktku-mod-val-input {
flex: 1 1 auto;
max-width: 100%;
}
#wiktku-start-form textarea.wiktku-dfn-mane,
#wiktku-start-form .wiktku-pron-wrap textarea.wiktku-pron-text,
#wiktku-start-form .wiktku-etym-wrap textarea.wiktku-etym-text {
--wiktku-ta-rows: 3;
font-size: 1em;
}
#wiktku-start-form .wiktku-tewandin-wrap textarea.wiktku-tewandin-text,
#wiktku-start-form textarea.wiktku-cavkani-text {
--wiktku-ta-rows: 4;
font-size: 1em;
}
/* Nimûne + Jêgirtin and their tr/t sub-fields: keep at least 4 rows
on mobile too, rather than shrinking further than the desktop size. */
#wiktku-start-form textarea.wiktku-dfn-nimune-text,
#wiktku-start-form .wiktku-dfn-nimune-sub textarea.wiktku-dfn-nimune-tr,
#wiktku-start-form .wiktku-dfn-nimune-sub textarea.wiktku-dfn-nimune-t,
#wiktku-start-form .wiktku-dfn-jeder-group textarea.wiktku-dfn-nimune-quote,
#wiktku-start-form .wiktku-dfn-quote-sub textarea.wiktku-dfn-nimune-quote-tr,
#wiktku-start-form .wiktku-dfn-quote-sub textarea.wiktku-dfn-nimune-quote-t {
--wiktku-ta-rows: 4;
font-size: 1em;
}
/* Citoid URL/DOI/ISBN box: taller tap target (~2 lines) on mobile,
and now that this field is a <textarea> (see start.js) its
placeholder can actually wrap into that space — a plain <input>'s
placeholder can never wrap, no matter its height. */
.wiktku-dfn-quote-citoid-input {
min-height: calc(2 * 1.35em + 10px);
font-size: 1em;
}
.wiktku-dfn-nimune-sub,
.wiktku-dfn-quote-sub {
margin-left: 0.5em;
padding-left: 0.4em;
}
.wiktku-pron-wrap .wiktku-native-select-wrap input.wiktku-ac-input,
.wiktku-etym-wrap .wiktku-native-select-wrap input.wiktku-ac-input {
font-size: 1em;
min-height: 2.2em;
}
.wiktku-dfn-quote-src-row label {
min-width: 6em;
}
#wiktku-start-form textarea.wiktku-dfn-quote-src-input {
width: 100%;
flex: 1 1 100%;
}
.wiktku-start-step {
padding: 0.5em 0.6em;
}
}
/* ===================================================================
Night mode
Palette.css already flips every --wikt-palette-* var for night mode,
so rules built from those vars need nothing here. This hook is only
for real colours that can't be a palette var — here, the panel border,
since a drop shadow is invisible against an equally dark page.
Not needed: li:active's white text already flips to a dark colour at
night via --wikt-palette-white, so it stays legible on its own.
=================================================================== */
@media screen {
html.skin-theme-clientpref-night .wiktku-ac-results {
/* Border stands in for the shadow, invisible on a dark page. */
border-color: var(--wikt-palette-grey-5);
box-shadow: 0 3px 10px rgba(0, 0, 0, 0.6);
}
html.skin-theme-clientpref-night .wiktku-start-step,
html.skin-theme-clientpref-night .wiktku-start-step:hover,
html.skin-theme-clientpref-night .wiktku-start-step:focus-within {
box-shadow: none;
}
}
@media screen and (prefers-color-scheme: dark) {
html.skin-theme-clientpref-os .wiktku-ac-results {
border-color: var(--wikt-palette-grey-5);
box-shadow: 0 3px 10px rgba(0, 0, 0, 0.6);
}
html.skin-theme-clientpref-os .wiktku-start-step,
html.skin-theme-clientpref-os .wiktku-start-step:hover,
html.skin-theme-clientpref-os .wiktku-start-step:focus-within {
box-shadow: none;
}
}
/* "Zimanek lê zêde bike" portlet icon (Minerva/mobile) — Feather-core-edit.svg
via CSS mask, matching Minerva's own icon pattern. */
.minerva-icon-portletlink-ca-wiktku-addlang {
-webkit-mask-image: url("https://upload.wikimedia.org/wikipedia/commons/d/d7/Feather-core-edit.svg");
mask-image: url("https://upload.wikimedia.org/wikipedia/commons/d/d7/Feather-core-edit.svg");
-webkit-mask-repeat: no-repeat;
mask-repeat: no-repeat;
-webkit-mask-position: center;
mask-position: center;
-webkit-mask-size: 20px;
mask-size: 20px;
background-color: currentColor;
background-image: none;
}
/* ── posparams step (live wikitext + helper widgets) ── */
.wiktku-posparams-wrap {
display: flex;
flex-direction: column;
gap: 6px;
}
.wiktku-posparams-helpers {
display: flex;
flex-direction: column;
gap: 4px;
}
.wiktku-posparams-row {
display: flex;
align-items: center;
gap: 6px;
flex-wrap: wrap;
}
.wiktku-posparams-row label {
/* Rewiye tine, 14 Tebax 2026: these were the smallest labels on the whole
card (0.9em, one step below everything else) — the mobile breakpoint
already bumps this to 1em below; matching that on desktop too instead
of only fixing it for mobile. */
font-size: 1em;
min-width: 10em;
padding-right: 0;
}
.wiktku-posparams-text {
width: 100%;
box-sizing: border-box;
font-family: monospace;
font-size: 0.9em;
}
.wiktku-posparams-opt-toggle {
font-size: 0.85em;
margin-top: 2px;
display: inline-block;
}
.wiktku-posparams-opt-panel {
display: flex;
flex-direction: column;
gap: 2px;
padding: 4px 0 2px 1em;
}
.wiktku-posparams-opt-row {
display: flex;
align-items: center;
gap: 4px;
font-size: 0.85em;
}
/* ── resim step (one or more images) ── */
.wiktku-resim-list {
display: flex;
flex-direction: column;
gap: 6px;
}
.wiktku-resim-item {
display: flex;
flex-direction: column;
gap: 4px;
}
.wiktku-resim-item .wiktku-posparams-row {
flex-direction: column;
align-items: flex-start;
gap: 2px;
}
.wiktku-resim-item .wiktku-posparams-row label {
min-width: 0;
font-size: 0.9em;
}
/* ── dfn: "hide/show all subsections" link ──
Same show/hide-link pattern as "Tercîhên pêşketî" (posparams), but
toggles a class on the whole dfn stepDiv rather than one panel, so
a single click hides the etîket/kategorî/hevmane/dijmane/nimûne/
jêgirtin/etc. subgroups across every sense block at once (see
steps.dfn.build in start.js). */
.wiktku-dfn-subs-toggle {
font-size: 0.85em;
font-weight: 500;
display: inline-block;
margin: 2px 0 8px;
color: var(--wikt-palette-blue-9, #3366cc);
text-decoration: none;
}
.wiktku-dfn-subs-toggle:hover {
text-decoration: underline;
}
/* Only the ADVANCED subgroups collapse now (Ghybu, 14 Tebax 2026): Nimûne,
Jêgirtin, Hevmane and Dijmane stay open because they are what people
actually come here to fill in — see steps.dfn.allGroups, whose adv: flag
is what puts this class on a group. */
#wiktku-start-dfn.wiktku-dfn-subs-hidden .wiktku-dfn-subgroup-adv {
display: none !important;
}
/* ===================================================================
Desktop text bump
The modifier pills/buttons and posparams helper text (labels,
"Tercîhên pêşketî" opt panel) use fairly small font-sizes that read
fine on mobile — narrow-viewport rendering effectively scales them
up — but look too small on a full desktop screen at their literal
em size. Bump them up past the 720px breakpoint only; mobile keeps
the original sizing above.
=================================================================== */
@media (min-width: 721px) {
.wiktku-mod-btn,
.wiktku-mod-confirm,
.wiktku-mod-cancel {
width: 1.8em;
height: 1.8em;
font-size: 1.1em;
}
.wiktku-mod-pill {
font-size: 0.95em;
padding: 3px 10px;
}
.wiktku-mod-val-input {
font-size: 0.95em;
}
.wiktku-posparams-row label {
font-size: 1em;
}
.wiktku-posparams-text {
font-size: 1em;
}
.wiktku-posparams-opt-toggle {
font-size: 0.95em;
}
.wiktku-posparams-opt-row {
font-size: 0.95em;
}
.wiktku-dfn-subs-toggle {
font-size: 0.95em;
}
/* Item 2 (Wikihez, 14 Tebax 2026): "sê-stûnî" — the same side-by-side,
multi-column card layout Ghybu asked for on POS/Cîns/Jimar now
applies to every posparams helper field (transliteration, gendered
forms, comparative/superlative, hanja, verb-tense roots, …), not
just those first two. Desktop-only per Wikihez's note that this isn't
supported on mobile — the plain stacked list above stays as-is
below this breakpoint. Rows are toggled via jQuery .show()/.hide()
(inline display:block/none) same as before; the grid only changes
how visible rows are arranged, not which ones are visible. */
.wiktku-posparams-helpers {
display: grid;
grid-template-columns: repeat(auto-fill, minmax(180px, 1fr));
gap: 10px 16px;
align-items: start;
}
.wiktku-posparams-helpers > .wiktku-posparams-row {
flex-direction: column;
align-items: stretch;
flex-wrap: nowrap;
gap: 3px;
}
.wiktku-posparams-helpers > .wiktku-posparams-row label {
min-width: 0;
}
.wiktku-posparams-helpers > .wiktku-posparams-row .wiktku-posparams-field,
.wiktku-posparams-helpers > .wiktku-posparams-row select.wiktku-posparams-cinsiyet-sel,
.wiktku-posparams-helpers > .wiktku-posparams-row select.wiktku-posparams-lektur-sel {
width: 100%;
max-width: 100%;
box-sizing: border-box;
}
/* The "Jimar" row added for item 1 lives here too (see start.js) — no
extra CSS needed, it's just another .wiktku-posparams-row. */
/* These two aren't per-field rows — span the full card width so the
collapsed toggle and its checkbox list don't get squeezed into one
narrow column. */
.wiktku-posparams-helpers > .wiktku-posparams-opt-toggle,
.wiktku-posparams-helpers > .wiktku-posparams-opt-panel {
grid-column: 1 / -1;
}
}
/* ===================================================================
SÊWIRANA NÛ — design system layer
===================================================================
From the "Cerdevanê ketanê — sêwirana nû" spec (15 Tebax 2026).
Appended rather than merged into the rules above on purpose: everything
before this point is layout (what sits next to what, which row wraps
where) and still does its job. This block is purely the visual skin —
colour, type, weight, radius, spacing — so it comes last and wins, and
so a future revert is a delete of one contiguous section.
Two deliberate deviations from the spec document:
1. No @import of Spectral / IBM Plex from Google Fonts. Wikimedia wikis
send a Content-Security-Policy that blocks third-party font hosts,
so the import would fail silently and we would ship a broken-looking
fallback nobody chose. The stacks below name the spec's faces first
(so they are used if the wiki ever installs them locally) and then
fall back to faces with the same feel: a transitional serif for
headings, the UI sans for body, the platform mono for wikitext.
2. Blue is spent, not sprayed. Ghybu, 14 Tebax 2026: "hemû bi rengê şîn
hatine çêkirin, nizanim beşên din (===) bi rengê gewr an reş çito
dibe?" — so section headings are near-black now and the accent is
reserved for things you can act on: focus, links, the active tab,
the primary button, chips.
=================================================================== */
#wiktku-start-form {
/* Surfaces */
--wikt-page: #f4efe5;
--wikt-card: #fffdf8;
--wikt-card-sunken: #fbf8f1;
--wikt-rule: #ded6c8; /* structural hairline */
--wikt-rule-soft: #efe8db; /* inside a card */
--wikt-field-edge: #cfc7b8;
--wikt-field-bg: #fff;
--wikt-code-bg: #f7f4ec;
--wikt-card-edge: #e6dfd2;
/* Ink */
--wikt-ink: #1c1a17;
--wikt-ink-2: #3d3830;
--wikt-ink-3: #57514a;
--wikt-muted: #8a8378;
--wikt-placeholder: #b3ab9e;
/* Accent + status */
--wikt-accent: #2a5db0;
--wikt-accent-deep: #22406f;
--wikt-accent-tint: #eef2fa;
--wikt-accent-edge: #d5def0;
--wikt-danger: #9c3a28;
--wikt-on-accent: #fff; /* text on a filled accent button */
--wikt-link-under: rgba(42, 93, 176, 0.35);
/* Shape */
--wikt-r-field: 10px;
--wikt-r-card: 14px;
--wikt-r-pill: 999px;
--wikt-tap: 44px; /* minimum field height */
--wikt-serif: Spectral, "Iowan Old Style", Georgia, "Times New Roman", serif;
--wikt-sans: "IBM Plex Sans", system-ui, -apple-system, "Segoe UI", sans-serif;
--wikt-mono: "IBM Plex Mono", ui-monospace, SFMono-Regular, Menlo, Consolas, monospace;
font-family: var(--wikt-sans);
font-size: 15px;
line-height: 1.55;
color: var(--wikt-ink);
background: var(--wikt-page);
padding: 24px;
border-radius: var(--wikt-r-card);
}
/* ── Cards ───────────────────────────────────────────────────────────
The old card had a 4px blue left bar and two shadows. The spec is
explicit — "Ti sî (shadow) tune; tenê xetên 1px" — so the card is
now a flat cream panel held by a single hairline. */
#wiktku-start-form .wiktku-start-step {
background: var(--wikt-card);
border: 1px solid var(--wikt-card-edge);
border-left: 1px solid var(--wikt-card-edge);
border-radius: var(--wikt-r-card);
box-shadow: none;
padding: 24px 24px 20px;
margin-bottom: 16px;
transition: border-color 0.12s ease;
}
#wiktku-start-form .wiktku-start-step:hover,
#wiktku-start-form .wiktku-start-step:focus-within {
box-shadow: none;
border-color: var(--wikt-rule);
}
/* The fused pos + posparams pair keeps reading as one card. */
#wiktku-start-form #wiktku-start-pos {
border-radius: var(--wikt-r-card) var(--wikt-r-card) 0 0;
border-bottom: none;
padding-bottom: 8px;
}
#wiktku-start-form #wiktku-start-posparams {
border-radius: 0 0 var(--wikt-r-card) var(--wikt-r-card);
border-top: none;
padding-top: 4px;
}
/* ── Type ────────────────────────────────────────────────────────────
Step headings: serif, regular weight, near-black. Previously bold,
letterspaced and blue — three signals doing one job. */
#wiktku-start-form .wiktku-start-step-name {
font-family: var(--wikt-serif);
font-size: 24px !important;
font-weight: 400;
letter-spacing: -0.01em;
line-height: 1.15;
color: var(--wikt-ink);
margin: 0 0 12px;
}
/* display:block matters: this is a <label>, so it was sharing a line with
the control it introduces wherever start.js didn't emit a <br>. */
#wiktku-start-form .wiktku-start-step-question {
display: block;
font-size: 15px;
font-weight: 400;
color: var(--wikt-ink-3);
margin: 0 0 12px;
line-height: 1.6;
max-width: 62ch;
}
/* Same reason — a field label belongs above its field, not beside it. */
#wiktku-start-form .wiktku-posparams-row label,
#wiktku-start-form .wiktku-dfn-sublabel {
display: block;
margin-bottom: 6px;
padding-right: 0;
}
/* Field labels: small, medium weight, full-strength ink — they label a
control, so they should not read as body copy. */
#wiktku-start-form .wiktku-start-step label,
#wiktku-start-form .wiktku-posparams-row label,
#wiktku-start-form .wiktku-dfn-sublabel {
font-size: 13px;
font-weight: 500;
color: var(--wikt-ink);
letter-spacing: 0.01em;
}
/* The parenthetical/example half of a label is supporting text. */
#wiktku-start-form .wiktku-dfn-sublabel-hint,
#wiktku-start-form .wiktku-step-hint {
font-weight: 400;
font-style: italic;
color: var(--wikt-muted);
font-size: 12.5px;
}
/* ── Fields ──────────────────────────────────────────────────────────
One shape for every control: 1px edge, 10px radius, 44px tall. */
#wiktku-start-form input[type="text"],
#wiktku-start-form input[type="search"],
#wiktku-start-form input.wiktku-ac-input,
#wiktku-start-form textarea,
#wiktku-start-form select {
font-family: var(--wikt-sans);
font-size: 15px;
color: var(--wikt-ink);
background: var(--wikt-field-bg);
border: 1px solid var(--wikt-field-edge);
border-radius: var(--wikt-r-field);
padding: 10px 14px;
box-shadow: none;
transition: border-color 0.12s ease, box-shadow 0.12s ease;
}
#wiktku-start-form input[type="text"],
#wiktku-start-form input[type="search"],
#wiktku-start-form select {
min-height: var(--wikt-tap);
}
#wiktku-start-form textarea {
line-height: 1.6;
}
/* Wikitext and anything template-shaped reads as code. */
#wiktku-start-form .wiktku-posparams-text,
#wiktku-start-form .wiktku-pron-text,
#wiktku-start-form .wiktku-etym-text,
#wiktku-start-form .wiktku-cavkani-text,
#wiktku-start-form .wiktku-tewandin-text,
#wiktku-start-form .wiktku-pron-preview-body {
font-family: var(--wikt-mono);
font-size: 13.5px;
background: var(--wikt-code-bg);
border-color: var(--wikt-card-edge);
}
#wiktku-start-form ::placeholder {
color: var(--wikt-placeholder);
opacity: 1;
}
/* Focus: accent edge + 3px tint halo. The only "elevation" in the design. */
#wiktku-start-form input[type="text"]:focus,
#wiktku-start-form input[type="search"]:focus,
#wiktku-start-form textarea:focus,
#wiktku-start-form select:focus,
#wiktku-start-form input.wiktku-ac-input:focus {
border-color: var(--wikt-accent);
box-shadow: 0 0 0 3px var(--wikt-accent-tint);
outline: 0;
}
/* The searchable picker's visible input is the field, so it takes the
field shape too (it otherwise inherits an older, boxier rule). */
#wiktku-start-form input.wiktku-ac-input {
min-height: var(--wikt-tap);
border-radius: var(--wikt-r-field);
border-color: var(--wikt-field-edge);
font-size: 15px;
}
#wiktku-start-form .wiktku-ac-results {
border: 1px solid var(--wikt-rule);
border-radius: var(--wikt-r-field);
background: var(--wikt-card);
box-shadow: none;
}
#wiktku-start-form .wiktku-ac-results li.wiktku-ac-active,
#wiktku-start-form .wiktku-ac-results li:hover {
background: var(--wikt-accent-tint);
color: var(--wikt-accent-deep);
}
/* ── Tabs → the accent's main job ────────────────────────────────────
Active tab: tint fill + 3px accent underline, per the spec's
"xala hûrgulî" note. Inactive tabs are plain text. */
#wiktku-start-form #wiktku-group-tabs,
#wiktku-start-form #wiktku-section-tabs {
display: flex;
flex-wrap: wrap;
gap: 4px;
align-items: center;
border-bottom: 1px solid var(--wikt-rule);
margin-bottom: 16px;
padding-bottom: 0;
}
#wiktku-start-form .wiktku-group-tab,
#wiktku-start-form .wiktku-section-tab {
font-size: 13.5px;
font-weight: 500;
color: var(--wikt-ink-3);
background: transparent;
border: 0;
border-bottom: 3px solid transparent;
border-radius: var(--wikt-r-pill) var(--wikt-r-pill) 0 0;
padding: 9px 14px 11px;
cursor: pointer;
transition: background 0.12s ease, color 0.12s ease;
}
#wiktku-start-form .wiktku-group-tab:hover,
#wiktku-start-form .wiktku-section-tab:hover {
background: var(--wikt-card-sunken);
color: var(--wikt-ink);
}
#wiktku-start-form .wiktku-group-tab.wiktku-tab-active,
#wiktku-start-form .wiktku-section-tab.wiktku-tab-active {
background: var(--wikt-accent-tint);
color: var(--wikt-accent);
border-bottom-color: var(--wikt-accent);
}
/* ── Progressive-disclosure toggles ──────────────────────────────────
Shared by "Tercîhên pêşketî" (posparams) and "Malûmatên pêşketî"
(Mane). Both are now the main way the form stays short, so they get a
real affordance — a rotating chevron and a count of what is behind
them — instead of a small blue link. */
#wiktku-start-form .wiktku-adv-toggle-row {
display: flex;
align-items: center;
justify-content: space-between;
gap: 16px;
flex-wrap: wrap;
margin: 4px 0 12px;
padding-top: 16px;
border-top: 1px solid var(--wikt-rule-soft);
}
#wiktku-start-form .wiktku-adv-toggle {
display: inline-flex;
align-items: center;
gap: 10px;
font-size: 14px;
font-weight: 500;
color: var(--wikt-accent);
text-decoration: none;
cursor: pointer;
}
#wiktku-start-form .wiktku-adv-toggle:hover .wiktku-adv-toggle-text {
text-decoration: underline;
}
#wiktku-start-form .wiktku-adv-toggle-chevron {
width: 22px;
height: 22px;
flex: 0 0 22px;
display: grid;
place-items: center;
font-size: 11px;
border: 1px solid var(--wikt-accent-edge);
background: var(--wikt-accent-tint);
border-radius: 6px;
transform: rotate(-90deg);
transition: transform 0.15s ease;
}
/* Open state: dfn flips the class on the step, posparams on the link. */
#wiktku-start-form .wiktku-adv-toggle.wiktku-adv-open .wiktku-adv-toggle-chevron,
#wiktku-start-dfn:not(.wiktku-dfn-subs-hidden) .wiktku-adv-toggle-chevron {
transform: rotate(0deg);
}
#wiktku-start-form .wiktku-adv-toggle-count {
font-family: var(--wikt-mono);
font-size: 12px;
color: var(--wikt-muted);
white-space: nowrap;
}
#wiktku-start-form .wiktku-posparams-adv-panel {
border: 1px solid var(--wikt-rule-soft);
border-radius: 12px;
background: var(--wikt-card-sunken);
padding: 20px 18px;
margin-bottom: 4px;
}
/* ── posparams grid ──────────────────────────────────────────────────
"Tor, ne rêz" — two columns, nothing narrower than 220px, so the six
gender/number fields stop being a six-across scanline. */
@media (min-width: 721px) {
#wiktku-start-form .wiktku-posparams-helpers,
#wiktku-start-form .wiktku-posparams-adv-panel {
display: grid;
grid-template-columns: repeat(auto-fill, minmax(220px, 1fr));
gap: 18px 22px;
align-items: start;
}
#wiktku-start-form .wiktku-posparams-adv-panel > .wiktku-posparams-row,
#wiktku-start-form .wiktku-posparams-helpers > .wiktku-posparams-row {
flex-direction: column;
align-items: stretch;
flex-wrap: nowrap;
gap: 7px;
}
#wiktku-start-form .wiktku-posparams-helpers > .wiktku-adv-toggle-row,
#wiktku-start-form .wiktku-posparams-helpers > .wiktku-posparams-adv-panel,
#wiktku-start-form .wiktku-posparams-adv-panel > .wiktku-posparams-opt-panel {
grid-column: 1 / -1;
}
}
#wiktku-start-form .wiktku-posparams-opt-panel {
border-top: 1px solid var(--wikt-rule-soft);
padding-top: 14px;
margin-top: 4px;
}
#wiktku-start-form .wiktku-posparams-opt-row {
font-size: 13px;
color: var(--wikt-ink-3);
}
/* ── Sense blocks ────────────────────────────────────────────────────
Each sense is a sunken panel inside the Mane card, with its number as
an accent counter — so "how many meanings am I writing" is legible at
a glance. */
#wiktku-start-form .wiktku-dfn-subgroup {
margin: 14px 0 0;
padding-top: 14px;
border-top: 1px solid var(--wikt-rule-soft);
}
/* Nimûne leads the list now, and a divider above the first item would be
a rule against the sense's own text. (Needed explicitly: the older
:first-of-type rule further up is a class selector and loses to the
id-scoped one above.) */
#wiktku-start-form .wiktku-dfn-subgroup:first-of-type {
margin-top: 8px;
padding-top: 0;
border-top: none;
}
#wiktku-start-form .wiktku-dfn-sublabel-term {
color: var(--wikt-ink);
}
/* Every sense sub-field is a plain white field like any other. Older rules
gave several of them a tinted fill, which read as "disabled" next to the
white Mane box directly above them. */
#wiktku-start-form .wiktku-dfn-subfield,
#wiktku-start-form textarea.wiktku-dfn-mane {
background: var(--wikt-field-bg);
border: 1px solid var(--wikt-field-edge);
border-radius: var(--wikt-r-field);
}
/* No "1." "2." markers on the sub-lists. Ghybu, 14 Tebax 2026, on exactly
this: numbered rows read as a form you must fill from the top down, when
really each row is just "another one if you have another one" — and with
a block-level textarea per row the marker also lands on its own line
above the field, which looks like a stray character. */
#wiktku-start-form .wiktku-dfn-sublist {
margin: 0;
padding-left: 0;
list-style: none;
}
#wiktku-start-form .wiktku-dfn-sublist > li {
margin-bottom: 6px;
}
/* ── Chips: tags, modifiers, template pills ──────────────────────────── */
#wiktku-start-form .wiktku-mod-pill,
#wiktku-start-form .wiktku-besendin-select + .wiktku-chip {
background: var(--wikt-accent-tint);
color: var(--wikt-accent-deep);
border: 1px solid var(--wikt-accent-edge);
border-radius: var(--wikt-r-pill);
font-size: 13px;
padding: 6px 12px;
}
#wiktku-start-form .wiktku-mod-btn,
#wiktku-start-form .wiktku-mod-confirm,
#wiktku-start-form .wiktku-mod-cancel {
border: 1px solid var(--wikt-accent-edge);
background: var(--wikt-accent-tint);
color: var(--wikt-accent);
border-radius: 8px;
}
/* ── Footer + buttons ────────────────────────────────────────────────
Spec: one primary pill, everything else quiet. The two red buttons
sitting next to it are the loudest thing on the old screen for no
reason — they become outline buttons in the danger colour instead of
filled ones. */
#wiktku-start-form #wiktku-start-footer {
background: var(--wikt-card-sunken);
border-top: 1px solid var(--wikt-rule);
border-radius: 0 0 var(--wikt-r-card) var(--wikt-r-card);
padding: 16px 20px;
gap: 10px;
}
#wiktku-start-form #wiktku-start-footer .oo-ui-buttonElement-button {
border-radius: var(--wikt-r-pill) !important;
font-family: var(--wikt-sans);
font-size: 14px;
font-weight: 500;
padding: 11px 22px;
box-shadow: none !important;
min-height: var(--wikt-tap);
}
#wiktku-start-form #wiktku-unhide-editform .oo-ui-buttonElement-button {
background: var(--wikt-accent) !important;
border-color: var(--wikt-accent) !important;
color: var(--wikt-on-accent) !important;
}
/* Destructive actions: outline, not fill. */
#wiktku-start-form #wiktku-start-footer .oo-ui-flaggedElement-destructive .oo-ui-buttonElement-button {
background: var(--wikt-card) !important;
border-color: var(--wikt-danger) !important;
color: var(--wikt-danger) !important;
}
#wiktku-start-form #wiktku-last-saved {
font-family: var(--wikt-mono);
font-size: 12px;
color: var(--wikt-muted);
}
/* ── Beşên din picker ────────────────────────────────────────────────
This dropdown is now the entry point to eighteen sections, so it gets
room and a label rather than sitting flush under the tab bar. */
#wiktku-start-form .wiktku-besendin-picker {
margin: 0 0 20px;
padding: 16px 18px;
background: var(--wikt-card);
border: 1px solid var(--wikt-card-edge);
border-radius: 12px;
}
#wiktku-start-form .wiktku-besendin-picker .wiktku-native-select-wrap,
#wiktku-start-form .wiktku-besendin-picker input.wiktku-ac-input {
width: 100%;
max-width: 28em;
}
/* ── Notices ─────────────────────────────────────────────────────────── */
#wiktku-start-form .wiktku-addlang-notice {
background: var(--wikt-accent-tint);
border: 1px solid var(--wikt-accent-edge);
border-radius: var(--wikt-r-field);
color: var(--wikt-ink-2);
padding: 12px 16px;
margin-bottom: 16px;
}
#wiktku-start-form .wiktku-pron-preview {
background: var(--wikt-accent-tint);
border-color: var(--wikt-accent-edge);
border-radius: 12px;
}
#wiktku-start-form .wiktku-pron-preview-confirm,
#wiktku-start-form .wiktku-pron-preview-cancel {
border-radius: var(--wikt-r-pill);
padding: 8px 16px;
min-height: 36px;
}
/* Links carry the accent and a soft underline, per the spec's `a` rule. */
#wiktku-start-form a {
color: var(--wikt-accent);
text-decoration: none;
border-bottom: 1px solid var(--wikt-link-under);
}
#wiktku-start-form a:hover {
color: var(--wikt-accent-deep);
}
#wiktku-start-form .wiktku-adv-toggle,
#wiktku-start-form .wiktku-group-tab,
#wiktku-start-form .wiktku-section-tab {
border-bottom-style: solid;
}
#wiktku-start-form .wiktku-adv-toggle {
border-bottom: 0;
}
/* ===================================================================
Dark mode
===================================================================
Every colour above is a token on #wiktku-start-form, so night mode is
a swap of that one block — no rule is duplicated.
Three selectors, because MediaWiki has three states and guessing wrong
is worse than not supporting it: an explicit night choice, "follow my
OS" plus an OS that says dark, and skins old enough to set no theme
class at all (older mobile output), where prefers-color-scheme is the
only signal available. The :not() chain on the last one keeps it from
overriding someone who explicitly asked for day mode.
The palette is warm, not neutral grey — a straight inversion of a cream
design lands on blue-grey and loses the character of it. Accent lightens
to #7ba7e8: #2a5db0 on a dark card is around 2.4:1, which fails contrast
and reads as near-black.
=================================================================== */
html.skin-theme-clientpref-night #wiktku-start-form,
html.skin-nightmode #wiktku-start-form {
--wikt-page: #171613;
--wikt-card: #201e1a;
--wikt-card-sunken: #1a1916;
--wikt-card-edge: #322e28;
--wikt-rule: #3a3630;
--wikt-rule-soft: #2c2924;
--wikt-field-edge: #4a453d;
--wikt-field-bg: #191815;
--wikt-code-bg: #14130f;
--wikt-ink: #ece7dd;
--wikt-ink-2: #d5cfc4;
--wikt-ink-3: #b3aca1;
--wikt-muted: #8f887c;
--wikt-placeholder: #6d675e;
--wikt-accent: #7ba7e8;
--wikt-accent-deep: #cfe0f8;
--wikt-accent-tint: #1c2839;
--wikt-accent-edge: #35496b;
--wikt-danger: #e5907c;
--wikt-on-accent: #14213a;
--wikt-link-under: rgba(123, 167, 232, 0.4);
}
@media screen and (prefers-color-scheme: dark) {
html.skin-theme-clientpref-os #wiktku-start-form,
html:not(.skin-theme-clientpref-day):not(.skin-theme-clientpref-night):not(.skin-theme-clientpref-os) #wiktku-start-form {
--wikt-page: #171613;
--wikt-card: #201e1a;
--wikt-card-sunken: #1a1916;
--wikt-card-edge: #322e28;
--wikt-rule: #3a3630;
--wikt-rule-soft: #2c2924;
--wikt-field-edge: #4a453d;
--wikt-field-bg: #191815;
--wikt-code-bg: #14130f;
--wikt-ink: #ece7dd;
--wikt-ink-2: #d5cfc4;
--wikt-ink-3: #b3aca1;
--wikt-muted: #8f887c;
--wikt-placeholder: #6d675e;
--wikt-accent: #7ba7e8;
--wikt-accent-deep: #cfe0f8;
--wikt-accent-tint: #1c2839;
--wikt-accent-edge: #35496b;
--wikt-danger: #e5907c;
--wikt-on-accent: #14213a;
--wikt-link-under: rgba(123, 167, 232, 0.4);
}
}
/* A handful of pre-design-layer rules still name literal light colours
(they predate the tokens). Rather than hunt every one, neutralise the
ones that actually show through in night mode. */
html.skin-theme-clientpref-night #wiktku-start-form .wiktku-ac-results,
html.skin-nightmode #wiktku-start-form .wiktku-ac-results {
background: var(--wikt-card);
border-color: var(--wikt-rule);
color: var(--wikt-ink);
}
@media screen and (prefers-color-scheme: dark) {
html.skin-theme-clientpref-os #wiktku-start-form .wiktku-ac-results,
html:not(.skin-theme-clientpref-day):not(.skin-theme-clientpref-night):not(.skin-theme-clientpref-os) #wiktku-start-form .wiktku-ac-results {
background: var(--wikt-card);
border-color: var(--wikt-rule);
color: var(--wikt-ink);
}
}
/* ===================================================================
Autocomplete list: stop it escaping its card
===================================================================
ul.wiktku-ac-results carried a hard `width: 20em` regardless of the
field it belongs to. On the full-width pickers — "Çavkanî hilbijêre" is
the obvious one — the list is absolutely positioned at the wrapper's
left edge, so a fixed 20em runs straight past the card's right border
whenever the card is narrower than that.
The wrapper is shrink-to-fit around its input, so `width: 100%` here
means "exactly as wide as the field I belong to" — which is what a
combobox should do — while min-width keeps the short pickers readable
and max-width stops either from leaving the viewport. */
#wiktku-start-form ul.wiktku-ac-results {
width: 100%;
min-width: min(18em, 100%);
max-width: min(92vw, 34em);
box-sizing: border-box;
border-radius: var(--wikt-r-field);
box-shadow: none;
}
/* And the wrapper itself must not exceed the card it sits in. */
#wiktku-start-form .wiktku-native-select-wrap {
max-width: 100%;
}
#wiktku-start-form .wiktku-cavkani-wrap .wiktku-native-select-wrap,
#wiktku-start-form .wiktku-cavkani-wrap input.wiktku-ac-input,
#wiktku-start-form .wiktku-pron-wrap .wiktku-native-select-wrap,
#wiktku-start-form .wiktku-etym-wrap .wiktku-native-select-wrap {
width: 100%;
max-width: 100%;
box-sizing: border-box;
}
/* ===================================================================
Mobile: the footer was the loudest thing on a small screen
===================================================================
Four 44px-tall pills with 22px of side padding wrap into three rows and
eat most of a phone viewport — and the footer is sticky, so that stays
on screen the whole time. Below 720px the primary button keeps its full
size (it is the one you press) and everything else shrinks to a
secondary scale.
=================================================================== */
@media (max-width: 720px) {
#wiktku-start-form {
padding: 12px;
font-size: 14px;
}
#wiktku-start-form .wiktku-start-step {
padding: 16px 14px 14px;
border-radius: 12px;
}
#wiktku-start-form .wiktku-start-step-name {
font-size: 20px !important;
}
#wiktku-start-form #wiktku-start-footer {
padding: 10px 12px;
gap: 6px;
row-gap: 8px;
}
#wiktku-start-form #wiktku-start-footer .oo-ui-buttonElement-button {
font-size: 13px;
padding: 8px 14px;
min-height: 38px;
}
/* The one you actually press stays thumb-sized. */
#wiktku-start-form #wiktku-unhide-editform .oo-ui-buttonElement-button {
font-size: 14px;
padding: 10px 20px;
min-height: var(--wikt-tap);
}
/* Secondary actions share a row instead of each claiming a full one. */
#wiktku-start-form #wiktku-start-footer .oo-ui-buttonElement {
flex: 0 1 auto;
}
#wiktku-start-form #wiktku-last-saved {
flex: 1 0 100%;
order: 10;
font-size: 11px;
white-space: normal;
}
#wiktku-start-form .wiktku-adv-toggle-row {
gap: 8px;
}
#wiktku-start-form .wiktku-adv-toggle-count {
font-size: 11px;
}
}
lx2f55umbc4ea83n9dmlvweglohnoty
6333773
6333760
2026-08-15T10:01:01Z
Wikihez
7344
6333773
css
text/css
/* ===================================================================
#editform while the wizard is active
=================================================================== */
/* Keeps #editform genuinely laid out instead of display:none*/
.wiktku-offscreen {
position: absolute !important;
left: -9999px !important;
top: 0 !important;
width: 100%;
max-width: 100%;
visibility: hidden;
}
/* ===================================================================
Base scale
=================================================================== */
#wiktku-start-form {
font-size: 0.92em;
line-height: 1.35;
}
#wiktku-start-form * {
box-sizing: border-box;
}
.wiktku-addlang-notice {
margin: 0 0 0.8em;
padding: 0.6em 0.8em;
background: var(--wikt-palette-paleblue);
border: 1px solid var(--wikt-palette-lightgrey);
border-radius: 4px;
}
/* ===================================================================
Step cards
a compact card with a left accent bar, so each step reads as
a distinct unit
=================================================================== */
.wiktku-start-step {
padding: 0.7em 0.9em;
margin-bottom: 0.6em;
border: 1px solid var(--wikt-palette-grey-3, #e0e0e0);
border-left: 4px solid var(--wikt-palette-blue-9, #3366cc);
border-radius: 6px;
background: var(--wikt-palette-white);
box-shadow: 0 1px 2px rgba(0, 0, 0, 0.04);
transition: border-left-color 0.15s ease, box-shadow 0.15s ease;
}
.wiktku-start-step:hover {
box-shadow: 0 2px 6px rgba(0, 0, 0, 0.08);
}
.wiktku-start-step:focus-within {
border-left-color: var(--wikt-palette-blue-9, #3366cc);
box-shadow: 0 2px 6px rgba(0, 0, 0, 0.1);
}
/* Ghybu, 14 Tebax 2026: "Cureyê rêzimanî" and "Parametreyên cureyê
rêzimanî" should read as one question, not two. Fuse the posparams
card onto the bottom of the pos card (shared left accent bar, no
border/gap between them) and drop its own big heading in favor of
the smaller, pos-specific label start.js now sets via question_fmt
("Cins/zayend" / "Cureyê lêkerê" / "Taybetmendî"). posparams.visible
only turns this div on once a pos is chosen, and it always renders
immediately after #wiktku-start-pos in the DOM, so this pairing is safe. */
#wiktku-start-pos {
border-radius: 6px 6px 0 0;
margin-bottom: 0;
border-bottom: none;
}
#wiktku-start-posparams {
border-radius: 0 0 6px 6px;
border-top: none;
padding-top: 0.3em;
}
#wiktku-start-posparams .wiktku-start-step-name {
display: none;
}
/* Scoped to #wiktku-start-form (not just .wiktku-start-step-name) and
!important on font-size: this is a real <h3> tag (see start.js), so
the wiki skin's own default heading styles can otherwise win over a
plain class rule and render it unpredictably (varies by skin/
viewport — this was previously landing at a different effective
size on desktop Vector vs. mobile Minerva purely by skin-default
accident, not by design). The heading now leads the visual hierarchy
through both size AND colour (tinted to match the card's accent
bar), while .wiktku-start-step-question below is deliberately
lighter-weight and muted so the two never compete for attention. */
#wiktku-start-form .wiktku-start-step-name {
font-size: 1.1em !important;
font-weight: 700;
letter-spacing: 0.03em;
margin: 0 0 0.3em;
line-height: 1.2;
color: var(--wikt-palette-blue-9, #3366cc);
border: 0;
padding: 0;
}
/* Rewiye tine, 14 Tebax 2026: "pûnto jî biçûk in, xwendina wan hinek zehmet
e" — the question text and the many small per-field labels (Cinsiyet:,
Rehê dema niha:, …) were sized noticeably smaller than the heading above
them; bumped both a step so the whole card reads at a more consistent,
comfortable size instead of the heading standing out and everything
under it feeling like fine print. */
.wiktku-start-step-question {
font-size: 1em;
font-weight: 400;
color: var(--wikt-palette-grey-9, #555);
margin: 0 0 0.5em;
line-height: 1.45;
}
.wiktku-start-step label {
padding-right: 1.2em;
font-size: 1em;
}
/* Rewiye tine, 14 Tebax 2026: short reassurance notes next to the fields
that most confused a first-time user (Bilêvkirin's template dropdown,
Mane's per-sense template dropdown) — muted so they read as a hint, not
another question competing with .wiktku-start-step-question. */
.wiktku-step-hint {
font-size: 0.88em;
font-style: italic;
color: var(--wikt-palette-grey-8, #72777d);
margin: 0 0 0.5em;
line-height: 1.4;
}
/* Same specificity as the rule just above, so it must come after to
actually win: the name label isn't a field label needing right
padding or the form's base label size, it's a heading. */
#wiktku-start-form .wiktku-start-step-name label {
padding-right: 0;
font-size: inherit !important;
color: inherit;
}
input[type="text"].wiktku-start-step-field {
width: 100%;
padding: 5px 8px;
border: 1px solid var(--wikt-palette-lightgrey);
border-radius: 4px;
transition: border-color 0.12s ease, box-shadow 0.12s ease;
}
input[type="text"].wiktku-start-step-field:focus {
border-color: var(--wikt-palette-blue-9, #3366cc);
box-shadow: inset 0 0 0 1px var(--wikt-palette-blue-9, #3366cc);
outline: 0;
}
input[type="text"].wiktku-start-step-field.wiktku-start-narrow {
width: 20em;
}
/* Only used by selects that opt out via .wiktku-plain-select; other
selects get their width from the searchable picker instead (see
input.wiktku-ac-input). */
select.wiktku-start-narrow,
input.wiktku-dfn-tpl-title {
width: 20em;
max-width: 100%;
box-sizing: border-box;
}
#wiktku-start-spinner {
float: right;
margin-left: 1em;
}
#wiktku-start-footer {
display: flex;
flex-wrap: wrap;
align-items: center;
gap: 0.5em;
padding: 0.6em 0.2em;
position: sticky;
bottom: 0;
background: var(--wikt-palette-white);
border-top: 1px solid var(--wikt-palette-grey-3, #e0e0e0);
z-index: 5;
}
/* Quiet, non-competing text — sits next to the cache buttons so the
person can tell at a glance whether their latest edits are backed
up, without it fighting the buttons for attention. */
#wiktku-last-saved {
font-size: 0.85em;
color: var(--wikt-palette-grey-9, #767676);
white-space: nowrap;
}
/* ── Tercîh (settings) icon button — sits in the footer next to the
cache buttons. Uses the Codex "settings" (color-subtle) icon from
Commons directly rather than an OOUI icon-pack module, so it renders
the exact requested glyph without pulling in an extra dependency. */
.wiktku-prefs-btn {
width: 2.2em;
height: 2.2em;
flex: 0 0 auto;
padding: 0;
border: 1px solid var(--wikt-palette-grey-3, #e0e0e0);
border-radius: 2px;
background-color: var(--wikt-palette-white);
background-image: url(//upload.wikimedia.org/wikipedia/commons/e/e0/Codex_icon_settings_color-subtle.svg);
background-repeat: no-repeat;
background-position: center;
background-size: 1.2em 1.2em;
cursor: pointer;
}
.wiktku-prefs-btn:hover {
background-color: var(--wikt-palette-grey-0, #f8f9fa);
}
.wiktku-prefs-btn:active {
background-color: var(--wikt-palette-grey-1, #eaecf0);
}
/* Tercîh dialog body — OOUI's bare ProcessDialog body has no inset of
its own, so text/fields otherwise sit flush against the window edges. */
.wiktku-prefs-dialog-body {
padding: 1em 1.2em;
}
/* ── "Bişîne" click feedback ── */
@keyframes wiktku-btn-flash-pulse {
0% { box-shadow: 0 0 0 0 rgba(51, 102, 204, 0.55); }
70% { box-shadow: 0 0 0 9px rgba(51, 102, 204, 0); }
100% { box-shadow: 0 0 0 0 rgba(51, 102, 204, 0); }
}
#wiktku-unhide-editform.wiktku-btn-flash {
animation: wiktku-btn-flash-pulse 0.5s ease-out;
}
/* Persistent state while the wikitext is being built/submitted, set
alongside OOUI's own setDisabled(true) so it reads clearly even if
the skin's default disabled style is subtle. */
#wiktku-unhide-editform.wiktku-btn-sending .oo-ui-buttonElement-button {
background-color: var(--wikt-palette-grey-9, #767676) !important;
border-color: var(--wikt-palette-grey-9, #767676) !important;
cursor: progress;
opacity: 1 !important;
}
/* Wikihez, 14 Tebax 2026 (item 7): looks exactly like OOUI's own disabled
state, but ISN'T one — the button stays a real, clickable widget so its
click handler can still run and explain why (see wiktkuNotify call next
to wiktkuContentGateOk in start.js). A true setDisabled(true) here would
swallow the click before that message could ever show. */
#wiktku-unhide-editform.wiktku-btn-soft-disabled .oo-ui-buttonElement-button {
opacity: 0.5;
cursor: not-allowed;
}
/* ── "Beşên din" picker (item 3) ── */
.wiktku-besendin-picker {
margin: 0.6em 0 1em;
}
.wiktku-besendin-picker .wiktku-besendin-select {
width: 100%;
max-width: 24em;
}
#wiktku-start-form textarea.wiktku-start-step-field,
#wiktku-start-form textarea.wiktku-start-narrow,
#wiktku-start-form textarea.wiktku-dfn-subfield {
resize: vertical !important;
overflow: auto !important;
box-sizing: border-box !important;
vertical-align: top;
border: 1px solid var(--wikt-palette-lightgrey);
border-radius: 3px;
transition: border-color 0.1s ease, box-shadow 0.1s ease;
}
/* Modern focus state to match the searchable-picker inputs. */
#wiktku-start-form textarea.wiktku-start-step-field:focus,
#wiktku-start-form textarea.wiktku-start-narrow:focus,
#wiktku-start-form textarea.wiktku-dfn-subfield:focus {
border-color: var(--wikt-palette-blue-9, #3366cc);
box-shadow: inset 0 0 0 1px var(--wikt-palette-blue-9, #3366cc);
outline: 0;
}
/* Standard: every textarea in the form is full width by default */
#wiktku-start-form textarea:not(.wiktku-start-narrow) {
width: 100%;
max-width: 100%;
box-sizing: border-box;
}
#wiktku-start-form textarea.wiktku-start-narrow,
#wiktku-start-form textarea.wiktku-dfn-subfield.wiktku-start-narrow {
width: 20em;
max-width: 100%;
min-width: 8em;
height: calc(1.7em + 10px);
min-height: calc(1.7em + 10px);
padding-top: 4px !important;
padding-bottom: 4px !important;
line-height: 1.35 !important;
resize: none !important;
}
/* Exception: "Sernav" / "Sernavê orjînal" citation-source fields (kitêb,
kovar, malper, …) — long enough to be worth 2 rows and manual resizing. */
#wiktku-start-form textarea.wiktku-dfn-quote-src-input.wiktku-dfn-quote-src-input--title {
height: calc(2 * 1.35em + 10px);
min-height: calc(2 * 1.35em + 10px);
}
/* ── Manual drag-to-resize handle ── */
#wiktku-start-form textarea:not(.wiktku-start-narrow) {
resize: none !important;
}
/* Inline modifier button (⊕) */
.wiktku-word-li {
display: flex;
align-items: flex-start;
flex-wrap: wrap;
gap: 0.3em;
}
.wiktku-mod-btn {
flex: 0 0 auto;
width: 1.6em;
height: 1.6em;
padding: 0;
line-height: 1;
border: 1px solid var(--wikt-palette-lightgrey);
border-radius: 2px;
background: var(--wikt-palette-white);
color: var(--wikt-palette-blue-9, #3366cc);
font-size: 1em;
cursor: pointer;
}
.wiktku-mod-btn:hover {
border-color: var(--wikt-palette-blue-9, #3366cc);
background: var(--wikt-palette-paleblue, #eaf3ff);
}
.wiktku-mod-picker {
display: flex;
flex-wrap: wrap;
gap: 0.25em;
width: 100%;
margin-top: 0.15em;
padding: 0.35em;
border: 1px solid var(--wikt-palette-lightgrey);
border-radius: 3px;
background: var(--wikt-palette-white);
box-shadow: 0 1px 3px rgba(0, 0, 0, 0.08);
}
.wiktku-mod-pill {
padding: 2px 8px;
border: 1px solid var(--wikt-palette-grey-3, #e0e0e0);
border-radius: 12px;
background: var(--wikt-palette-paleblue, #eaf3ff);
font-size: 0.85em;
white-space: nowrap;
cursor: pointer;
}
.wiktku-mod-pill:hover {
border-color: var(--wikt-palette-blue-9, #3366cc);
background: var(--wikt-palette-blue-9, #3366cc);
color: var(--wikt-palette-white);
}
.wiktku-mod-pill:disabled,
.wiktku-mod-pill.wiktku-mod-pill-used {
border-color: var(--wikt-palette-grey-3, #e0e0e0);
background: var(--wikt-palette-lightgrey);
color: var(--wikt-palette-grey-3, #999);
cursor: not-allowed;
opacity: 0.6;
}
.wiktku-mod-pill:disabled:hover,
.wiktku-mod-pill.wiktku-mod-pill-used:hover {
border-color: var(--wikt-palette-grey-3, #e0e0e0);
background: var(--wikt-palette-lightgrey);
color: var(--wikt-palette-grey-3, #999);
}
.wiktku-mod-val-wrap {
display: flex;
align-items: center;
gap: 0.25em;
width: 100%;
margin-top: 0.15em;
}
.wiktku-mod-val-input {
flex: 0 1 14em;
max-width: 14em;
padding: 3px 6px;
border: 1px solid var(--wikt-palette-lightgrey);
border-radius: 2px;
}
.wiktku-mod-confirm,
.wiktku-mod-cancel {
flex: 0 0 auto;
width: 1.6em;
height: 1.6em;
padding: 0;
line-height: 1;
border: 1px solid var(--wikt-palette-lightgrey);
border-radius: 2px;
background: var(--wikt-palette-white);
cursor: pointer;
}
.wiktku-mod-confirm {
color: #178a17;
border-color: #178a17;
}
.wiktku-mod-cancel {
color: var(--wikt-palette-red-9, #d33);
border-color: var(--wikt-palette-red-9, #d33);
}
.wiktku-resize-wrap {
position: relative;
display: block;
}
/* Independent of .wiktku-resize-wrap (created separately by
ensureLinebreakBackdrop() in start.js, only for textareas that ever
get flagged with a linebreak) so it doesn't depend on load order
relative to wiktkuMakeManualResizable(). Plain block, no size of its
own — purely a position:relative anchor for the backdrop. */
.wiktku-linebreak-wrap {
position: relative;
display: block;
}
.wiktku-resize-grip {
position: absolute;
right: 2px;
bottom: 2px;
width: 14px;
height: 14px;
cursor: ns-resize;
touch-action: none;
opacity: 0.5;
z-index: 2;
background-image: linear-gradient(135deg, transparent 0 50%, var(--wikt-palette-grey-9, #767676) 50% 100%);
background-repeat: no-repeat;
}
.wiktku-resize-grip:hover,
.wiktku-resize-grip:active {
opacity: 0.9;
}
/* ===================================================================
Searchable dropdown (wrapNativeSelect in start.js)
.wiktku-native-select-wrap > input.wiktku-ac-input (search box)
> ul.wiktku-ac-results (result list)
> select (hidden, holds the value)
=================================================================== */
.wiktku-native-select-wrap {
display: inline-block;
position: relative;
vertical-align: top;
}
/* Matches the width the native select would have had (see
select.wiktku-start-narrow). */
.wiktku-native-select-wrap input[type="search"],
input.wiktku-ac-input {
display: block;
width: 20em;
max-width: 100%;
box-sizing: border-box;
padding: 3px 6px;
border: 1px solid var(--wikt-palette-lightgrey);
border-radius: 2px;
background: var(--wikt-palette-white);
color: inherit;
font-size: inherit;
font-family: inherit;
transition: border-color 0.1s ease, box-shadow 0.1s ease;
}
input.wiktku-ac-input:focus {
border-color: var(--wikt-palette-blue-9);
box-shadow: inset 0 0 0 1px var(--wikt-palette-blue-9);
outline: 0;
}
input.wiktku-ac-input::placeholder {
color: var(--wikt-palette-grey-9);
opacity: 1;
}
/* Hide Safari/Chrome's built-in search decorations. */
input.wiktku-ac-input::-webkit-search-decoration,
input.wiktku-ac-input::-webkit-search-cancel-button,
input.wiktku-ac-input::-webkit-search-results-button {
-webkit-appearance: none;
appearance: none;
}
/* ── Result list ── */
/* top/bottom/max-height are overridden inline by showResults() when it
flips the list above the box; these are just its defaults. */
ul.wiktku-ac-results {
position: absolute;
z-index: 9999;
top: 100%;
bottom: auto;
left: 0;
margin: 0;
padding: 0;
list-style: none;
width: 20em;
max-width: 90vw;
max-height: 13em;
overflow-y: auto;
overscroll-behavior: contain;
-webkit-overflow-scrolling: touch;
background: var(--wikt-palette-white);
border: 1px solid var(--wikt-palette-lightgrey);
border-radius: 3px;
box-shadow: 0 3px 10px rgba(0, 0, 0, 0.15);
}
ul.wiktku-ac-results li {
margin: 0;
padding: 4px 8px;
cursor: pointer;
font-size: 0.92em;
display: flex;
align-items: center;
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
}
/* .wiktku-ac-active is the keyboard cursor; hover mirrors it; :active
covers the touch press state. */
ul.wiktku-ac-results li.wiktku-ac-active,
ul.wiktku-ac-results li:hover {
background: var(--wikt-palette-lightblue);
}
ul.wiktku-ac-results li:active {
background: var(--wikt-palette-blue-9);
color: var(--wikt-palette-white);
}
/* Touch devices: bigger tap targets, no sticky hover. */
@media (pointer: coarse) {
ul.wiktku-ac-results li {
padding: 6px 10px;
min-height: 2.2em;
font-size: 1em;
}
ul.wiktku-ac-results li:hover {
background: transparent;
}
ul.wiktku-ac-results li.wiktku-ac-active {
background: var(--wikt-palette-lightblue);
}
input.wiktku-ac-input {
/* >=16px stops iOS Safari zooming the page when the box is focused. */
font-size: 16px;
min-height: 2.2em;
}
}
/* Item 5 (Wikihez, 14 Tebax 2026): inline preview + confirm panel shown
before inserting an auto-content pronunciation template (ku-IPA,
ku-kîte, …) — deliberately part of the form's own layout rather than a
browser confirm()/prompt() dialog, per "dont use userinput use
something more advanced". */
.wiktku-pron-preview {
margin: 6px 0;
padding: 8px 10px;
border: 1px solid var(--wikt-palette-blue-9, #3366cc);
border-radius: 6px;
background: var(--wikt-palette-paleblue, #eaf3ff);
}
.wiktku-pron-preview-label {
font-size: 0.88em;
font-weight: 600;
color: var(--wikt-palette-grey-9, #555);
margin-bottom: 3px;
}
.wiktku-pron-preview-body {
font-family: monospace;
font-size: 1em;
white-space: pre-wrap;
word-break: break-word;
margin-bottom: 6px;
}
.wiktku-pron-preview-actions {
display: flex;
gap: 6px;
}
.wiktku-pron-preview-confirm,
.wiktku-pron-preview-cancel {
font-size: 0.88em;
padding: 3px 10px;
border-radius: 4px;
cursor: pointer;
border: 1px solid var(--wikt-palette-lightgrey, #a2a9b1);
background: var(--wikt-palette-white, #fff);
}
.wiktku-pron-preview-confirm {
border-color: var(--wikt-palette-blue-9, #3366cc);
color: var(--wikt-palette-blue-9, #3366cc);
font-weight: 600;
}
.wiktku-pron-preview-confirm:disabled {
opacity: 0.5;
cursor: wait;
}
.wiktku-pron-preview-cancel:hover {
background: var(--wikt-palette-grey-0, #f8f9fa);
}
/* Template pickers fill their container since the search box, not the
<select>, is what the user sees. */
.wiktku-pron-wrap .wiktku-native-select-wrap,
.wiktku-etym-wrap .wiktku-native-select-wrap,
.wiktku-pron-wrap .wiktku-native-select-wrap input.wiktku-ac-input,
.wiktku-etym-wrap .wiktku-native-select-wrap input.wiktku-ac-input {
width: 100%;
}
.wiktku-pron-wrap .wiktku-native-select-wrap input.wiktku-ac-input,
.wiktku-etym-wrap .wiktku-native-select-wrap input.wiktku-ac-input {
font-size: 0.88em;
}
.wiktku-cavkani-wrap .wiktku-native-select-wrap,
.wiktku-cavkani-wrap .wiktku-native-select-wrap input.wiktku-ac-input {
width: 100%;
}
/* Template selector inside a sense block. */
.wiktku-dfn-tpl-row .wiktku-native-select-wrap input.wiktku-ac-input {
font-size: 0.88em;
}
/* Language/dialect rows: picker must line up with the word field beside it. */
.wiktku-lang-row .wiktku-native-select-wrap {
flex: 0 0 auto;
}
#wiktku-start-form textarea.wiktku-dfn-mane,
#wiktku-start-form textarea.wiktku-dfn-nimune-text,
#wiktku-start-form .wiktku-dfn-jeder-group textarea.wiktku-dfn-nimune-quote,
#wiktku-start-form .wiktku-dfn-nimune-sub textarea.wiktku-dfn-nimune-tr,
#wiktku-start-form .wiktku-dfn-nimune-sub textarea.wiktku-dfn-nimune-t,
#wiktku-start-form .wiktku-dfn-quote-sub textarea.wiktku-dfn-nimune-quote-tr,
#wiktku-start-form .wiktku-dfn-quote-sub textarea.wiktku-dfn-nimune-quote-t,
#wiktku-start-form textarea.wiktku-dfn-quote-src-manual,
#wiktku-start-form .wiktku-pron-wrap textarea.wiktku-pron-text,
#wiktku-start-form .wiktku-etym-wrap textarea.wiktku-etym-text,
#wiktku-start-form .wiktku-tewandin-wrap textarea.wiktku-tewandin-text,
#wiktku-start-form textarea.wiktku-cavkani-text,
#wiktku-start-form textarea.wiktku-dfn-tercime,
#wiktku-start-form textarea.wiktku-dfn-izah {
--wiktku-ta-rows: 2;
height: calc(var(--wiktku-ta-rows) * 1.35em + 6px);
min-height: calc(var(--wiktku-ta-rows) * 1.35em + 6px);
}
#wiktku-start-form .wiktku-pron-wrap textarea.wiktku-pron-text,
#wiktku-start-form .wiktku-etym-wrap textarea.wiktku-etym-text,
#wiktku-start-form textarea.wiktku-dfn-izah {
--wiktku-ta-rows: 3;
}
#wiktku-start-form textarea.wiktku-cavkani-text {
--wiktku-ta-rows: 4;
}
/* Nimûne + Jêgirtin (citation) boxes, and their tr/t sub-fields: at
least 4 rows so there's room to actually write an example/quote. */
#wiktku-start-form textarea.wiktku-dfn-nimune-text,
#wiktku-start-form .wiktku-dfn-nimune-sub textarea.wiktku-dfn-nimune-tr,
#wiktku-start-form .wiktku-dfn-nimune-sub textarea.wiktku-dfn-nimune-t,
#wiktku-start-form .wiktku-dfn-jeder-group textarea.wiktku-dfn-nimune-quote,
#wiktku-start-form .wiktku-dfn-quote-sub textarea.wiktku-dfn-nimune-quote-tr,
#wiktku-start-form .wiktku-dfn-quote-sub textarea.wiktku-dfn-nimune-quote-t,
#wiktku-start-form textarea.wiktku-dfn-quote-src-manual {
--wiktku-ta-rows: 4;
}
/* Nimûne/jêgirtin box currently contains a typed/pasted linebreak —
the border is nudged so the user notices before it's silently turned
into <br> on output. The break itself is marked precisely, not the
whole box, via a mirrored backdrop layer (see below and
highlightLinebreak()/buildLinebreakBackdropHtml() in start.js). */
#wiktku-start-form textarea.wiktku-has-linebreak {
border-color: var(--wikt-palette-yellow6, #ac6600) !important;
}
/* Backdrop layer: sits behind the textarea showing the same text, with
a highlighted marker at each line that's followed by a break. Its
font/padding/box-sizing/line-height are copied from the textarea via
computed style (see syncLinebreakBackdropMetrics() in start.js), not
shared CSS classes — most of this box's own rules are written as
"textarea.foo", which a <div> with the same class wouldn't match.
Only created lazily, the first time a given textarea actually has a
break — see ensureLinebreakBackdrop(). */
.wiktku-linebreak-backdrop {
position: absolute;
inset: 0;
z-index: 0;
margin: 0;
overflow: hidden;
white-space: pre-wrap;
word-wrap: break-word;
color: transparent;
background: transparent !important;
border-color: transparent !important;
box-shadow: none !important;
resize: none !important;
pointer-events: none;
}
/* Raise the real textarea above its backdrop so typing/selection/caret
behave completely normally; the backdrop's mark shows through only
where the real textarea's own background is transparent. */
#wiktku-start-form textarea.wiktku-has-linebreak-source {
position: relative;
z-index: 1;
background-color: transparent;
}
.wiktku-linebreak-mark {
background-color: var(--wikt-palette-yellow6, #ac6600);
color: var(--wikt-palette-white, #fff);
border-radius: 2px;
}
/* ── Tercime + Îzah boxes ── */
.wiktku-dfn-nonku-wrap {
display: flex;
flex-direction: column;
gap: 3px;
}
.wiktku-dfn-nimune-sub,
.wiktku-dfn-quote-sub {
margin-top: 3px;
margin-left: 1em;
padding-left: 0.6em;
border-left: 2px solid var(--wikt-palette-lightgrey);
display: flex;
flex-direction: column;
gap: 3px;
}
.wiktku-dfn-nimune-sub textarea.wiktku-dfn-nimune-tr,
.wiktku-dfn-nimune-sub textarea.wiktku-dfn-nimune-t {
min-width: 8em;
padding-top: 2px !important;
padding-bottom: 2px !important;
line-height: 1.35 !important;
font-size: 0.88em;
}
/* ── Sense list (Mane step) — numbered badges instead of the browser's
default flat "1." marker, so each sense reads as a distinct block. ── */
ol.wiktku-dfn-list {
list-style: none;
margin: 0;
padding: 0;
counter-reset: wiktku-dfn-sense;
}
ol.wiktku-dfn-list > li.wiktku-dfn-sense {
position: relative;
counter-increment: wiktku-dfn-sense;
padding-left: 2.1em;
margin-bottom: 0.9em;
}
ol.wiktku-dfn-list > li.wiktku-dfn-sense:not(:last-child) {
padding-bottom: 0.9em;
border-bottom: 1px dashed var(--wikt-palette-grey-3, #e0e0e0);
}
ol.wiktku-dfn-list > li.wiktku-dfn-sense::before {
content: counter(wiktku-dfn-sense);
position: absolute;
left: 0;
top: 1px;
width: 1.6em;
height: 1.6em;
border-radius: 50%;
background: var(--wikt-palette-blue-9, #3366cc);
color: var(--wikt-palette-white);
font-size: 0.85em;
font-weight: 700;
display: flex;
align-items: center;
justify-content: center;
}
/* Template selector row inside a sense block */
.wiktku-dfn-tpl-row {
margin-bottom: 3px;
}
/* ── Sub-field titles (Etîket, Kategorî, Hevmane, Dijmane, Nimûne,
Jêgirtin, …) — previously plain unstyled run-on text. Each group
now reads as a small labelled field: the term stands out, the
izah hint stays quiet, and the block gets its own breathing room. ── */
.wiktku-dfn-subgroup {
margin-top: 0.5em;
padding-top: 0.4em;
border-top: 1px dashed var(--wikt-palette-grey-3, #e0e0e0);
}
.wiktku-dfn-subgroup:first-of-type {
margin-top: 0.3em;
padding-top: 0;
border-top: none;
}
.wiktku-dfn-sublabel {
display: block;
margin-bottom: 3px;
font-size: 0.88em;
}
.wiktku-dfn-sublabel-term {
font-weight: 600;
color: var(--wikt-palette-blue-9, #3366cc);
letter-spacing: 0.03em;
font-size: 0.92em;
}
.wiktku-dfn-sublabel-hint {
color: var(--wikt-palette-grey-9, #767676);
font-style: italic;
}
.wiktku-pron-wrap,
.wiktku-etym-wrap,
.wiktku-tewandin-wrap,
.wiktku-cavkani-wrap {
display: flex;
flex-direction: column;
gap: 3px;
}
/* ── POS section tabs ──
Modernized into rounded pills instead of flat file-folder tabs. */
#wiktku-section-tabs {
display: flex;
flex-wrap: wrap;
gap: 4px;
margin-bottom: 0.6em;
align-items: center;
}
#wiktku-section-tabs .wiktku-section-tab {
padding: 3px 12px;
border: 1px solid var(--wikt-palette-lightgrey);
border-radius: 999px;
background: var(--wikt-palette-dullcyan);
cursor: pointer;
font-size: 0.86em;
user-select: none;
transition: background 0.12s ease, border-color 0.12s ease;
}
#wiktku-section-tabs .wiktku-section-tab:hover {
border-color: var(--wikt-palette-blue-9, #3366cc);
}
#wiktku-section-tabs .wiktku-section-tab.wiktku-tab-active {
background: var(--wikt-palette-blue-9, #3366cc);
border-color: var(--wikt-palette-blue-9, #3366cc);
color: var(--wikt-palette-white);
font-weight: 600;
}
/* ── Step-group tabs (Mane / Bilêvkirin / Beşên din — see STEP_GROUPS in
start.js) ── Sits directly under the pill-style section tabs above;
styled as an underlined secondary nav so the two bars stay visually
distinct. */
#wiktku-group-tabs {
display: flex;
flex-wrap: wrap;
gap: 4px;
margin-bottom: 0.8em;
border-bottom: 2px solid var(--wikt-palette-lightgrey);
}
#wiktku-group-tabs .wiktku-group-tab {
position: relative;
padding: 7px 14px 8px;
margin-bottom: -2px;
border-bottom: 3px solid transparent;
border-radius: 3px 3px 0 0;
cursor: pointer;
font-size: 0.95em;
font-weight: 600;
color: var(--wikt-palette-grey-9, #333);
background: var(--wikt-palette-grey-0, #f8f9fa);
user-select: none;
transition: color 0.12s ease, border-color 0.12s ease, background 0.12s ease;
}
#wiktku-group-tabs .wiktku-group-tab:hover {
color: var(--wikt-palette-blue-9, #3366cc);
background: var(--wikt-palette-paleblue, #eaf3ff);
}
#wiktku-group-tabs .wiktku-group-tab.wiktku-tab-active {
border-bottom-color: var(--wikt-palette-blue-9, #3366cc);
color: var(--wikt-palette-white);
background: var(--wikt-palette-blue-9, #3366cc);
font-weight: 700;
}
/* Small dot marking a tab that still has an unfilled required field
hidden inside it (see updateGroupTabIndicators in start.js). Cleared
automatically once that tab becomes the active one. */
#wiktku-group-tabs .wiktku-group-tab.wiktku-tab-missing::after {
content: "";
position: absolute;
top: 4px;
right: -1px;
width: 6px;
height: 6px;
border-radius: 50%;
background: var(--wikt-palette-red-9, #d33);
}
.wiktku-lang-row-list {
margin: 0;
padding: 0;
list-style: none;
}
.wiktku-lang-row {
display: flex;
align-items: flex-start;
gap: 6px;
margin-bottom: 3px;
flex-wrap: wrap;
}
.wiktku-lang-row-words {
margin: 0;
padding: 0;
list-style: none;
display: flex;
flex-direction: column;
gap: 3px;
}
/* Dûnde/Werger/Zarava rows: align the picker's height with the adjacent
word textarea (see .wiktku-start-narrow above). */
.wiktku-lang-row .wiktku-native-select-wrap input.wiktku-ac-input {
height: calc(1.7em + 10px);
min-height: calc(1.7em + 10px);
padding-top: 4px;
padding-bottom: 4px;
}
/* ── Werger / Bi zaravayên din groups: one per gloss, shared spacing ── */
#wiktku-start-trans .wiktku-trans-group,
#wiktku-start-zarava .wiktku-zarava-group {
margin-bottom: 0.6em;
}
#wiktku-start-trans .wiktku-trans-group:last-child,
#wiktku-start-zarava .wiktku-zarava-group:last-child {
margin-bottom: 0;
}
#wiktku-start-trans .wiktku-trans-group-label,
#wiktku-start-zarava .wiktku-zarava-group-label {
font-weight: 600;
font-size: 0.88em;
margin-bottom: 3px;
}
.wiktku-dfn-jeder-group {
margin-top: 3px;
}
.wiktku-dfn-quote-src-sel {
font-size: 0.88em;
margin-top: 3px;
display: block;
}
.wiktku-dfn-quote-src-fields {
display: flex;
flex-direction: column;
gap: 3px;
margin-top: 3px;
}
/* Stacked layout: textarea gets its own full-width row, button + status
sit below it on their own row. Simpler and more robust than sharing a
row with the button — that required the textarea's own resize-wrap
div (added by wiktkuMakeManualResizable in start.js) to correctly
inherit flex-grow, which kept being fragile across breakpoints. */
.wiktku-dfn-quote-citoid {
display: flex;
flex-direction: column;
align-items: stretch;
gap: 0.4em;
margin-top: 3px;
margin-bottom: 3px;
}
.wiktku-dfn-quote-citoid-input {
width: 100%;
max-width: 100%;
box-sizing: border-box;
}
/* Column flex + align-items:stretch (above) is what makes the textarea's
.wiktku-resize-wrap (see wiktkuMakeManualResizable in start.js) reach
full width automatically — stretch fills the cross axis for any block
child, no flex-grow needed on the wrap itself. The button and status
text, right below the textarea, opt back out of that stretch so they
stay their natural (small) size instead of also going full width. */
.wiktku-dfn-quote-citoid-btn,
.wiktku-dfn-quote-citoid-status {
align-self: flex-start;
}
.wiktku-dfn-quote-src-cat-status {
display: block;
font-size: 0.82em;
color: var(--wikt-palette-lightgrey, #767676);
margin-top: 2px;
}
.wiktku-dfn-quote-src-row {
display: flex;
align-items: baseline;
gap: 4px;
flex-wrap: wrap;
}
.wiktku-dfn-quote-src-row label {
font-size: 0.82em;
white-space: nowrap;
min-width: 8em;
}
textarea.wiktku-dfn-quote-src-input {
flex: 1 1 12em;
max-width: 100%;
box-sizing: border-box;
}
@media (max-width: 720px) {
.wiktku-lang-row {
flex-direction: column;
}
/* Re-assert against the wiki's own mobile skin heading styles,
which can apply their own mobile-breakpoint rules to this real
<h3> and load after ours in the cascade — see the rule itself,
above, for why this needs guarding at all. */
#wiktku-start-form .wiktku-start-step-name {
font-size: 1.05em !important;
margin: 0 0 0.2em !important;
line-height: 1.2 !important;
border: 0 !important;
padding: 0 !important;
}
/* Single column: search box and list use the full width. Narrow
textareas (Etîket, Hevmane, Dûnde/Jê/Têkildar/Binêre herwiha word
boxes, citation source fields, …) join them here too — at a fixed
20em width they used to poke out past the step card on narrow
screens. */
.wiktku-native-select-wrap,
input.wiktku-ac-input,
ul.wiktku-ac-results,
#wiktku-start-form textarea.wiktku-start-narrow,
#wiktku-start-form textarea.wiktku-dfn-subfield.wiktku-start-narrow {
width: 100%;
max-width: 100%;
}
.wiktku-mod-val-input {
flex: 1 1 auto;
max-width: 100%;
}
#wiktku-start-form textarea.wiktku-dfn-mane,
#wiktku-start-form .wiktku-pron-wrap textarea.wiktku-pron-text,
#wiktku-start-form .wiktku-etym-wrap textarea.wiktku-etym-text {
--wiktku-ta-rows: 3;
font-size: 1em;
}
#wiktku-start-form .wiktku-tewandin-wrap textarea.wiktku-tewandin-text,
#wiktku-start-form textarea.wiktku-cavkani-text {
--wiktku-ta-rows: 4;
font-size: 1em;
}
/* Nimûne + Jêgirtin and their tr/t sub-fields: keep at least 4 rows
on mobile too, rather than shrinking further than the desktop size. */
#wiktku-start-form textarea.wiktku-dfn-nimune-text,
#wiktku-start-form .wiktku-dfn-nimune-sub textarea.wiktku-dfn-nimune-tr,
#wiktku-start-form .wiktku-dfn-nimune-sub textarea.wiktku-dfn-nimune-t,
#wiktku-start-form .wiktku-dfn-jeder-group textarea.wiktku-dfn-nimune-quote,
#wiktku-start-form .wiktku-dfn-quote-sub textarea.wiktku-dfn-nimune-quote-tr,
#wiktku-start-form .wiktku-dfn-quote-sub textarea.wiktku-dfn-nimune-quote-t {
--wiktku-ta-rows: 4;
font-size: 1em;
}
/* Citoid URL/DOI/ISBN box: taller tap target (~2 lines) on mobile,
and now that this field is a <textarea> (see start.js) its
placeholder can actually wrap into that space — a plain <input>'s
placeholder can never wrap, no matter its height. */
.wiktku-dfn-quote-citoid-input {
min-height: calc(2 * 1.35em + 10px);
font-size: 1em;
}
.wiktku-dfn-nimune-sub,
.wiktku-dfn-quote-sub {
margin-left: 0.5em;
padding-left: 0.4em;
}
.wiktku-pron-wrap .wiktku-native-select-wrap input.wiktku-ac-input,
.wiktku-etym-wrap .wiktku-native-select-wrap input.wiktku-ac-input {
font-size: 1em;
min-height: 2.2em;
}
.wiktku-dfn-quote-src-row label {
min-width: 6em;
}
#wiktku-start-form textarea.wiktku-dfn-quote-src-input {
width: 100%;
flex: 1 1 100%;
}
.wiktku-start-step {
padding: 0.5em 0.6em;
}
}
/* ===================================================================
Night mode
Palette.css already flips every --wikt-palette-* var for night mode,
so rules built from those vars need nothing here. This hook is only
for real colours that can't be a palette var — here, the panel border,
since a drop shadow is invisible against an equally dark page.
Not needed: li:active's white text already flips to a dark colour at
night via --wikt-palette-white, so it stays legible on its own.
=================================================================== */
@media screen {
html.skin-theme-clientpref-night .wiktku-ac-results {
/* Border stands in for the shadow, invisible on a dark page. */
border-color: var(--wikt-palette-grey-5);
box-shadow: 0 3px 10px rgba(0, 0, 0, 0.6);
}
html.skin-theme-clientpref-night .wiktku-start-step,
html.skin-theme-clientpref-night .wiktku-start-step:hover,
html.skin-theme-clientpref-night .wiktku-start-step:focus-within {
box-shadow: none;
}
}
@media screen and (prefers-color-scheme: dark) {
html.skin-theme-clientpref-os .wiktku-ac-results {
border-color: var(--wikt-palette-grey-5);
box-shadow: 0 3px 10px rgba(0, 0, 0, 0.6);
}
html.skin-theme-clientpref-os .wiktku-start-step,
html.skin-theme-clientpref-os .wiktku-start-step:hover,
html.skin-theme-clientpref-os .wiktku-start-step:focus-within {
box-shadow: none;
}
}
/* "Zimanek lê zêde bike" portlet icon (Minerva/mobile) — Feather-core-edit.svg
via CSS mask, matching Minerva's own icon pattern. */
.minerva-icon-portletlink-ca-wiktku-addlang {
-webkit-mask-image: url("https://upload.wikimedia.org/wikipedia/commons/d/d7/Feather-core-edit.svg");
mask-image: url("https://upload.wikimedia.org/wikipedia/commons/d/d7/Feather-core-edit.svg");
-webkit-mask-repeat: no-repeat;
mask-repeat: no-repeat;
-webkit-mask-position: center;
mask-position: center;
-webkit-mask-size: 20px;
mask-size: 20px;
background-color: currentColor;
background-image: none;
}
/* ── posparams step (live wikitext + helper widgets) ── */
.wiktku-posparams-wrap {
display: flex;
flex-direction: column;
gap: 6px;
}
.wiktku-posparams-helpers {
display: flex;
flex-direction: column;
gap: 4px;
}
.wiktku-posparams-row {
display: flex;
align-items: center;
gap: 6px;
flex-wrap: wrap;
}
.wiktku-posparams-row label {
/* Rewiye tine, 14 Tebax 2026: these were the smallest labels on the whole
card (0.9em, one step below everything else) — the mobile breakpoint
already bumps this to 1em below; matching that on desktop too instead
of only fixing it for mobile. */
font-size: 1em;
min-width: 10em;
padding-right: 0;
}
.wiktku-posparams-text {
width: 100%;
box-sizing: border-box;
font-family: monospace;
font-size: 0.9em;
}
.wiktku-posparams-opt-toggle {
font-size: 0.85em;
margin-top: 2px;
display: inline-block;
}
.wiktku-posparams-opt-panel {
display: flex;
flex-direction: column;
gap: 2px;
padding: 4px 0 2px 1em;
}
.wiktku-posparams-opt-row {
display: flex;
align-items: center;
gap: 4px;
font-size: 0.85em;
}
/* ── resim step (one or more images) ── */
.wiktku-resim-list {
display: flex;
flex-direction: column;
gap: 6px;
}
.wiktku-resim-item {
display: flex;
flex-direction: column;
gap: 4px;
}
.wiktku-resim-item .wiktku-posparams-row {
flex-direction: column;
align-items: flex-start;
gap: 2px;
}
.wiktku-resim-item .wiktku-posparams-row label {
min-width: 0;
font-size: 0.9em;
}
/* ── dfn: "hide/show all subsections" link ──
Same show/hide-link pattern as "Tercîhên pêşketî" (posparams), but
toggles a class on the whole dfn stepDiv rather than one panel, so
a single click hides the etîket/kategorî/hevmane/dijmane/nimûne/
jêgirtin/etc. subgroups across every sense block at once (see
steps.dfn.build in start.js). */
.wiktku-dfn-subs-toggle {
font-size: 0.85em;
font-weight: 500;
display: inline-block;
margin: 2px 0 8px;
color: var(--wikt-palette-blue-9, #3366cc);
text-decoration: none;
}
.wiktku-dfn-subs-toggle:hover {
text-decoration: underline;
}
/* Only the ADVANCED subgroups collapse now (Ghybu, 14 Tebax 2026): Nimûne,
Jêgirtin, Hevmane and Dijmane stay open because they are what people
actually come here to fill in — see steps.dfn.allGroups, whose adv: flag
is what puts this class on a group. */
#wiktku-start-dfn.wiktku-dfn-subs-hidden .wiktku-dfn-subgroup-adv {
display: none !important;
}
/* ===================================================================
Desktop text bump
The modifier pills/buttons and posparams helper text (labels,
"Tercîhên pêşketî" opt panel) use fairly small font-sizes that read
fine on mobile — narrow-viewport rendering effectively scales them
up — but look too small on a full desktop screen at their literal
em size. Bump them up past the 720px breakpoint only; mobile keeps
the original sizing above.
=================================================================== */
@media (min-width: 721px) {
.wiktku-mod-btn,
.wiktku-mod-confirm,
.wiktku-mod-cancel {
width: 1.8em;
height: 1.8em;
font-size: 1.1em;
}
.wiktku-mod-pill {
font-size: 0.95em;
padding: 3px 10px;
}
.wiktku-mod-val-input {
font-size: 0.95em;
}
.wiktku-posparams-row label {
font-size: 1em;
}
.wiktku-posparams-text {
font-size: 1em;
}
.wiktku-posparams-opt-toggle {
font-size: 0.95em;
}
.wiktku-posparams-opt-row {
font-size: 0.95em;
}
.wiktku-dfn-subs-toggle {
font-size: 0.95em;
}
/* Item 2 (Wikihez, 14 Tebax 2026): "sê-stûnî" — the same side-by-side,
multi-column card layout Ghybu asked for on POS/Cîns/Jimar now
applies to every posparams helper field (transliteration, gendered
forms, comparative/superlative, hanja, verb-tense roots, …), not
just those first two. Desktop-only per Wikihez's note that this isn't
supported on mobile — the plain stacked list above stays as-is
below this breakpoint. Rows are toggled via jQuery .show()/.hide()
(inline display:block/none) same as before; the grid only changes
how visible rows are arranged, not which ones are visible. */
.wiktku-posparams-helpers {
display: grid;
grid-template-columns: repeat(auto-fill, minmax(180px, 1fr));
gap: 10px 16px;
align-items: start;
}
.wiktku-posparams-helpers > .wiktku-posparams-row {
flex-direction: column;
align-items: stretch;
flex-wrap: nowrap;
gap: 3px;
}
.wiktku-posparams-helpers > .wiktku-posparams-row label {
min-width: 0;
}
.wiktku-posparams-helpers > .wiktku-posparams-row .wiktku-posparams-field,
.wiktku-posparams-helpers > .wiktku-posparams-row select.wiktku-posparams-cinsiyet-sel,
.wiktku-posparams-helpers > .wiktku-posparams-row select.wiktku-posparams-lektur-sel {
width: 100%;
max-width: 100%;
box-sizing: border-box;
}
/* The "Jimar" row added for item 1 lives here too (see start.js) — no
extra CSS needed, it's just another .wiktku-posparams-row. */
/* These two aren't per-field rows — span the full card width so the
collapsed toggle and its checkbox list don't get squeezed into one
narrow column. */
.wiktku-posparams-helpers > .wiktku-posparams-opt-toggle,
.wiktku-posparams-helpers > .wiktku-posparams-opt-panel {
grid-column: 1 / -1;
}
}
/* ===================================================================
SÊWIRANA NÛ — design system layer
===================================================================
From the "Cerdevanê ketanê — sêwirana nû" spec (15 Tebax 2026).
Appended rather than merged into the rules above on purpose: everything
before this point is layout (what sits next to what, which row wraps
where) and still does its job. This block is purely the visual skin —
colour, type, weight, radius, spacing — so it comes last and wins, and
so a future revert is a delete of one contiguous section.
Two deliberate deviations from the spec document:
1. No @import of Spectral / IBM Plex from Google Fonts. Wikimedia wikis
send a Content-Security-Policy that blocks third-party font hosts,
so the import would fail silently and we would ship a broken-looking
fallback nobody chose. The stacks below name the spec's faces first
(so they are used if the wiki ever installs them locally) and then
fall back to faces with the same feel: a transitional serif for
headings, the UI sans for body, the platform mono for wikitext.
2. Blue is spent, not sprayed. Ghybu, 14 Tebax 2026: "hemû bi rengê şîn
hatine çêkirin, nizanim beşên din (===) bi rengê gewr an reş çito
dibe?" — so section headings are near-black now and the accent is
reserved for things you can act on: focus, links, the active tab,
the primary button, chips.
=================================================================== */
#wiktku-start-form {
/* Surfaces */
--wikt-page: #f4efe5;
--wikt-card: #fffdf8;
--wikt-card-sunken: #fbf8f1;
--wikt-rule: #ded6c8; /* structural hairline */
--wikt-rule-soft: #efe8db; /* inside a card */
--wikt-field-edge: #cfc7b8;
--wikt-field-bg: #fff;
--wikt-code-bg: #f7f4ec;
--wikt-card-edge: #e6dfd2;
/* Ink */
--wikt-ink: #1c1a17;
--wikt-ink-2: #3d3830;
--wikt-ink-3: #57514a;
--wikt-muted: #8a8378;
--wikt-placeholder: #b3ab9e;
/* Accent + status */
--wikt-accent: #2a5db0;
--wikt-accent-deep: #22406f;
--wikt-accent-tint: #eef2fa;
--wikt-accent-edge: #d5def0;
--wikt-danger: #9c3a28;
--wikt-on-accent: #fff; /* text on a filled accent button */
--wikt-link-under: rgba(42, 93, 176, 0.35);
/* Shape */
--wikt-r-field: 10px;
--wikt-r-card: 14px;
--wikt-r-pill: 999px;
--wikt-tap: 44px; /* minimum field height */
--wikt-serif: Spectral, "Iowan Old Style", Georgia, "Times New Roman", serif;
--wikt-sans: "IBM Plex Sans", system-ui, -apple-system, "Segoe UI", sans-serif;
--wikt-mono: "IBM Plex Mono", ui-monospace, SFMono-Regular, Menlo, Consolas, monospace;
font-family: var(--wikt-sans);
font-size: 15px;
line-height: 1.55;
color: var(--wikt-ink);
background: var(--wikt-page);
padding: 24px;
border-radius: var(--wikt-r-card);
}
/* ── Cards ───────────────────────────────────────────────────────────
The old card had a 4px blue left bar and two shadows. The spec is
explicit — "Ti sî (shadow) tune; tenê xetên 1px" — so the card is
now a flat cream panel held by a single hairline. */
#wiktku-start-form .wiktku-start-step {
background: var(--wikt-card);
border: 1px solid var(--wikt-card-edge);
border-left: 1px solid var(--wikt-card-edge);
border-radius: var(--wikt-r-card);
box-shadow: none;
padding: 24px 24px 20px;
margin-bottom: 16px;
transition: border-color 0.12s ease;
}
#wiktku-start-form .wiktku-start-step:hover,
#wiktku-start-form .wiktku-start-step:focus-within {
box-shadow: none;
border-color: var(--wikt-rule);
}
/* The fused pos + posparams pair keeps reading as one card. */
#wiktku-start-form #wiktku-start-pos {
border-radius: var(--wikt-r-card) var(--wikt-r-card) 0 0;
border-bottom: none;
padding-bottom: 8px;
}
#wiktku-start-form #wiktku-start-posparams {
border-radius: 0 0 var(--wikt-r-card) var(--wikt-r-card);
border-top: none;
padding-top: 4px;
}
/* ── Type ────────────────────────────────────────────────────────────
Step headings: serif, regular weight, near-black. Previously bold,
letterspaced and blue — three signals doing one job. */
#wiktku-start-form .wiktku-start-step-name {
font-family: var(--wikt-serif);
font-size: 24px !important;
font-weight: 400;
letter-spacing: -0.01em;
line-height: 1.15;
color: var(--wikt-ink);
margin: 0 0 12px;
}
/* display:block matters: this is a <label>, so it was sharing a line with
the control it introduces wherever start.js didn't emit a <br>. */
#wiktku-start-form .wiktku-start-step-question {
display: block;
font-size: 15px;
font-weight: 400;
color: var(--wikt-ink-3);
margin: 0 0 12px;
line-height: 1.6;
max-width: 62ch;
}
/* Same reason — a field label belongs above its field, not beside it. */
#wiktku-start-form .wiktku-posparams-row label,
#wiktku-start-form .wiktku-dfn-sublabel {
display: block;
margin-bottom: 6px;
padding-right: 0;
}
/* Field labels: small, medium weight, full-strength ink — they label a
control, so they should not read as body copy. */
#wiktku-start-form .wiktku-start-step label,
#wiktku-start-form .wiktku-posparams-row label,
#wiktku-start-form .wiktku-dfn-sublabel {
font-size: 13px;
font-weight: 500;
color: var(--wikt-ink);
letter-spacing: 0.01em;
}
/* The parenthetical/example half of a label is supporting text. */
#wiktku-start-form .wiktku-dfn-sublabel-hint,
#wiktku-start-form .wiktku-step-hint {
font-weight: 400;
font-style: italic;
color: var(--wikt-muted);
font-size: 12.5px;
}
/* ── Fields ──────────────────────────────────────────────────────────
One shape for every control: 1px edge, 10px radius, 44px tall. */
#wiktku-start-form input[type="text"],
#wiktku-start-form input[type="search"],
#wiktku-start-form input.wiktku-ac-input,
#wiktku-start-form textarea,
#wiktku-start-form select {
font-family: var(--wikt-sans);
font-size: 15px;
color: var(--wikt-ink);
background: var(--wikt-field-bg);
border: 1px solid var(--wikt-field-edge);
border-radius: var(--wikt-r-field);
padding: 10px 14px;
box-shadow: none;
transition: border-color 0.12s ease, box-shadow 0.12s ease;
}
#wiktku-start-form input[type="text"],
#wiktku-start-form input[type="search"],
#wiktku-start-form select {
min-height: var(--wikt-tap);
}
#wiktku-start-form textarea {
line-height: 1.6;
}
/* Wikitext and anything template-shaped reads as code. */
#wiktku-start-form .wiktku-posparams-text,
#wiktku-start-form .wiktku-pron-text,
#wiktku-start-form .wiktku-etym-text,
#wiktku-start-form .wiktku-cavkani-text,
#wiktku-start-form .wiktku-tewandin-text,
#wiktku-start-form .wiktku-pron-preview-body {
font-family: var(--wikt-mono);
font-size: 13.5px;
background: var(--wikt-code-bg);
border-color: var(--wikt-card-edge);
}
#wiktku-start-form ::placeholder {
color: var(--wikt-placeholder);
opacity: 1;
}
/* Focus: accent edge + 3px tint halo. The only "elevation" in the design. */
#wiktku-start-form input[type="text"]:focus,
#wiktku-start-form input[type="search"]:focus,
#wiktku-start-form textarea:focus,
#wiktku-start-form select:focus,
#wiktku-start-form input.wiktku-ac-input:focus {
border-color: var(--wikt-accent);
box-shadow: 0 0 0 3px var(--wikt-accent-tint);
outline: 0;
}
/* The searchable picker's visible input is the field, so it takes the
field shape too (it otherwise inherits an older, boxier rule). */
#wiktku-start-form input.wiktku-ac-input {
min-height: var(--wikt-tap);
border-radius: var(--wikt-r-field);
border-color: var(--wikt-field-edge);
font-size: 15px;
}
#wiktku-start-form .wiktku-ac-results {
border: 1px solid var(--wikt-rule);
border-radius: var(--wikt-r-field);
background: var(--wikt-card);
box-shadow: none;
}
#wiktku-start-form .wiktku-ac-results li.wiktku-ac-active,
#wiktku-start-form .wiktku-ac-results li:hover {
background: var(--wikt-accent-tint);
color: var(--wikt-accent-deep);
}
/* ── Tabs → the accent's main job ────────────────────────────────────
Active tab: tint fill + 3px accent underline, per the spec's
"xala hûrgulî" note. Inactive tabs are plain text. */
#wiktku-start-form #wiktku-group-tabs,
#wiktku-start-form #wiktku-section-tabs {
display: flex;
flex-wrap: wrap;
gap: 4px;
align-items: center;
border-bottom: 1px solid var(--wikt-rule);
margin-bottom: 16px;
padding-bottom: 0;
}
#wiktku-start-form .wiktku-group-tab,
#wiktku-start-form .wiktku-section-tab {
font-size: 13.5px;
font-weight: 500;
color: var(--wikt-ink-3);
background: transparent;
border: 0;
border-bottom: 3px solid transparent;
border-radius: var(--wikt-r-pill) var(--wikt-r-pill) 0 0;
padding: 9px 14px 11px;
cursor: pointer;
transition: background 0.12s ease, color 0.12s ease;
}
#wiktku-start-form .wiktku-group-tab:hover,
#wiktku-start-form .wiktku-section-tab:hover {
background: var(--wikt-card-sunken);
color: var(--wikt-ink);
}
#wiktku-start-form .wiktku-group-tab.wiktku-tab-active,
#wiktku-start-form .wiktku-section-tab.wiktku-tab-active {
background: var(--wikt-accent-tint);
color: var(--wikt-accent);
border-bottom-color: var(--wikt-accent);
}
/* ── Progressive-disclosure toggles ──────────────────────────────────
Shared by "Tercîhên pêşketî" (posparams) and "Malûmatên pêşketî"
(Mane). Both are now the main way the form stays short, so they get a
real affordance — a rotating chevron and a count of what is behind
them — instead of a small blue link. */
#wiktku-start-form .wiktku-adv-toggle-row {
display: flex;
align-items: center;
justify-content: space-between;
gap: 16px;
flex-wrap: wrap;
margin: 4px 0 12px;
padding-top: 16px;
border-top: 1px solid var(--wikt-rule-soft);
}
#wiktku-start-form .wiktku-adv-toggle {
display: inline-flex;
align-items: center;
gap: 10px;
font-size: 14px;
font-weight: 500;
color: var(--wikt-accent);
text-decoration: none;
cursor: pointer;
}
#wiktku-start-form .wiktku-adv-toggle:hover .wiktku-adv-toggle-text {
text-decoration: underline;
}
#wiktku-start-form .wiktku-adv-toggle-chevron {
width: 22px;
height: 22px;
flex: 0 0 22px;
display: grid;
place-items: center;
font-size: 11px;
border: 1px solid var(--wikt-accent-edge);
background: var(--wikt-accent-tint);
border-radius: 6px;
transform: rotate(-90deg);
transition: transform 0.15s ease;
}
/* Open state: dfn flips the class on the step, posparams on the link. */
#wiktku-start-form .wiktku-adv-toggle.wiktku-adv-open .wiktku-adv-toggle-chevron,
#wiktku-start-dfn:not(.wiktku-dfn-subs-hidden) .wiktku-adv-toggle-chevron {
transform: rotate(0deg);
}
#wiktku-start-form .wiktku-adv-toggle-count {
font-family: var(--wikt-mono);
font-size: 12px;
color: var(--wikt-muted);
white-space: nowrap;
}
#wiktku-start-form .wiktku-posparams-adv-panel {
border: 1px solid var(--wikt-rule-soft);
border-radius: 12px;
background: var(--wikt-card-sunken);
padding: 20px 18px;
margin-bottom: 4px;
}
/* ── posparams grid ──────────────────────────────────────────────────
"Tor, ne rêz" — two columns, nothing narrower than 220px, so the six
gender/number fields stop being a six-across scanline. */
@media (min-width: 721px) {
#wiktku-start-form .wiktku-posparams-helpers,
#wiktku-start-form .wiktku-posparams-adv-panel {
display: grid;
grid-template-columns: repeat(auto-fill, minmax(220px, 1fr));
gap: 18px 22px;
align-items: start;
}
#wiktku-start-form .wiktku-posparams-adv-panel > .wiktku-posparams-row,
#wiktku-start-form .wiktku-posparams-helpers > .wiktku-posparams-row {
flex-direction: column;
align-items: stretch;
flex-wrap: nowrap;
gap: 7px;
}
#wiktku-start-form .wiktku-posparams-helpers > .wiktku-adv-toggle-row,
#wiktku-start-form .wiktku-posparams-helpers > .wiktku-posparams-adv-panel,
#wiktku-start-form .wiktku-posparams-adv-panel > .wiktku-posparams-opt-panel {
grid-column: 1 / -1;
}
}
#wiktku-start-form .wiktku-posparams-opt-panel {
border-top: 1px solid var(--wikt-rule-soft);
padding-top: 14px;
margin-top: 4px;
}
#wiktku-start-form .wiktku-posparams-opt-row {
font-size: 13px;
color: var(--wikt-ink-3);
}
/* ── Sense blocks ────────────────────────────────────────────────────
Each sense is a sunken panel inside the Mane card, with its number as
an accent counter — so "how many meanings am I writing" is legible at
a glance. */
#wiktku-start-form .wiktku-dfn-subgroup {
margin: 14px 0 0;
padding-top: 14px;
border-top: 1px solid var(--wikt-rule-soft);
}
/* Nimûne leads the list now, and a divider above the first item would be
a rule against the sense's own text. (Needed explicitly: the older
:first-of-type rule further up is a class selector and loses to the
id-scoped one above.) */
#wiktku-start-form .wiktku-dfn-subgroup:first-of-type {
margin-top: 8px;
padding-top: 0;
border-top: none;
}
#wiktku-start-form .wiktku-dfn-sublabel-term {
color: var(--wikt-ink);
}
/* Every sense sub-field is a plain white field like any other. Older rules
gave several of them a tinted fill, which read as "disabled" next to the
white Mane box directly above them. */
#wiktku-start-form .wiktku-dfn-subfield,
#wiktku-start-form textarea.wiktku-dfn-mane {
background: var(--wikt-field-bg);
border: 1px solid var(--wikt-field-edge);
border-radius: var(--wikt-r-field);
}
/* No "1." "2." markers on the sub-lists. Ghybu, 14 Tebax 2026, on exactly
this: numbered rows read as a form you must fill from the top down, when
really each row is just "another one if you have another one" — and with
a block-level textarea per row the marker also lands on its own line
above the field, which looks like a stray character. */
#wiktku-start-form .wiktku-dfn-sublist {
margin: 0;
padding-left: 0;
list-style: none;
}
#wiktku-start-form .wiktku-dfn-sublist > li {
margin-bottom: 6px;
}
/* ── Chips: tags, modifiers, template pills ──────────────────────────── */
#wiktku-start-form .wiktku-mod-pill,
#wiktku-start-form .wiktku-besendin-select + .wiktku-chip {
background: var(--wikt-accent-tint);
color: var(--wikt-accent-deep);
border: 1px solid var(--wikt-accent-edge);
border-radius: var(--wikt-r-pill);
font-size: 13px;
padding: 6px 12px;
}
#wiktku-start-form .wiktku-mod-btn,
#wiktku-start-form .wiktku-mod-confirm,
#wiktku-start-form .wiktku-mod-cancel {
border: 1px solid var(--wikt-accent-edge);
background: var(--wikt-accent-tint);
color: var(--wikt-accent);
border-radius: 8px;
}
/* ── Footer + buttons ────────────────────────────────────────────────
Spec: one primary pill, everything else quiet. The two red buttons
sitting next to it are the loudest thing on the old screen for no
reason — they become outline buttons in the danger colour instead of
filled ones. */
#wiktku-start-form #wiktku-start-footer {
background: var(--wikt-card-sunken);
border-top: 1px solid var(--wikt-rule);
border-radius: 0 0 var(--wikt-r-card) var(--wikt-r-card);
padding: 16px 20px;
gap: 10px;
}
#wiktku-start-form #wiktku-start-footer .oo-ui-buttonElement-button {
border-radius: var(--wikt-r-pill) !important;
font-family: var(--wikt-sans);
font-size: 14px;
font-weight: 500;
padding: 11px 22px;
box-shadow: none !important;
min-height: var(--wikt-tap);
}
#wiktku-start-form #wiktku-unhide-editform .oo-ui-buttonElement-button {
background: var(--wikt-accent) !important;
border-color: var(--wikt-accent) !important;
color: var(--wikt-on-accent) !important;
}
/* Destructive actions: outline, not fill. */
#wiktku-start-form #wiktku-start-footer .oo-ui-flaggedElement-destructive .oo-ui-buttonElement-button {
background: var(--wikt-card) !important;
border-color: var(--wikt-danger) !important;
color: var(--wikt-danger) !important;
}
#wiktku-start-form #wiktku-last-saved {
font-family: var(--wikt-mono);
font-size: 12px;
color: var(--wikt-muted);
}
/* ── Beşên din picker ────────────────────────────────────────────────
This dropdown is now the entry point to eighteen sections, so it gets
room and a label rather than sitting flush under the tab bar. */
#wiktku-start-form .wiktku-besendin-picker {
margin: 0 0 20px;
padding: 16px 18px;
background: var(--wikt-card);
border: 1px solid var(--wikt-card-edge);
border-radius: 12px;
}
#wiktku-start-form .wiktku-besendin-picker .wiktku-native-select-wrap,
#wiktku-start-form .wiktku-besendin-picker input.wiktku-ac-input {
width: 100%;
max-width: 28em;
}
/* ── Notices ─────────────────────────────────────────────────────────── */
#wiktku-start-form .wiktku-addlang-notice {
background: var(--wikt-accent-tint);
border: 1px solid var(--wikt-accent-edge);
border-radius: var(--wikt-r-field);
color: var(--wikt-ink-2);
padding: 12px 16px;
margin-bottom: 16px;
}
#wiktku-start-form .wiktku-pron-preview {
background: var(--wikt-accent-tint);
border-color: var(--wikt-accent-edge);
border-radius: 12px;
}
#wiktku-start-form .wiktku-pron-preview-confirm,
#wiktku-start-form .wiktku-pron-preview-cancel {
border-radius: var(--wikt-r-pill);
padding: 8px 16px;
min-height: 36px;
}
/* Links carry the accent and a soft underline, per the spec's `a` rule. */
#wiktku-start-form a {
color: var(--wikt-accent);
text-decoration: none;
border-bottom: 1px solid var(--wikt-link-under);
}
#wiktku-start-form a:hover {
color: var(--wikt-accent-deep);
}
#wiktku-start-form .wiktku-adv-toggle,
#wiktku-start-form .wiktku-group-tab,
#wiktku-start-form .wiktku-section-tab {
border-bottom-style: solid;
}
#wiktku-start-form .wiktku-adv-toggle {
border-bottom: 0;
}
/* ===================================================================
Dark mode
===================================================================
Every colour above is a token on #wiktku-start-form, so night mode is
a swap of that one block — no rule is duplicated.
Three selectors, because MediaWiki has three states and guessing wrong
is worse than not supporting it: an explicit night choice, "follow my
OS" plus an OS that says dark, and skins old enough to set no theme
class at all (older mobile output), where prefers-color-scheme is the
only signal available. The :not() chain on the last one keeps it from
overriding someone who explicitly asked for day mode.
The palette is warm, not neutral grey — a straight inversion of a cream
design lands on blue-grey and loses the character of it. Accent lightens
to #7ba7e8: #2a5db0 on a dark card is around 2.4:1, which fails contrast
and reads as near-black.
=================================================================== */
html.skin-theme-clientpref-night #wiktku-start-form,
html.skin-nightmode #wiktku-start-form {
--wikt-page: #171613;
--wikt-card: #201e1a;
--wikt-card-sunken: #1a1916;
--wikt-card-edge: #322e28;
--wikt-rule: #3a3630;
--wikt-rule-soft: #2c2924;
--wikt-field-edge: #4a453d;
--wikt-field-bg: #191815;
--wikt-code-bg: #14130f;
--wikt-ink: #ece7dd;
--wikt-ink-2: #d5cfc4;
--wikt-ink-3: #b3aca1;
--wikt-muted: #8f887c;
--wikt-placeholder: #6d675e;
--wikt-accent: #7ba7e8;
--wikt-accent-deep: #cfe0f8;
--wikt-accent-tint: #1c2839;
--wikt-accent-edge: #35496b;
--wikt-danger: #e5907c;
--wikt-on-accent: #14213a;
--wikt-link-under: rgba(123, 167, 232, 0.4);
}
@media screen and (prefers-color-scheme: dark) {
html.skin-theme-clientpref-os #wiktku-start-form,
html:not(.skin-theme-clientpref-day):not(.skin-theme-clientpref-night):not(.skin-theme-clientpref-os) #wiktku-start-form {
--wikt-page: #171613;
--wikt-card: #201e1a;
--wikt-card-sunken: #1a1916;
--wikt-card-edge: #322e28;
--wikt-rule: #3a3630;
--wikt-rule-soft: #2c2924;
--wikt-field-edge: #4a453d;
--wikt-field-bg: #191815;
--wikt-code-bg: #14130f;
--wikt-ink: #ece7dd;
--wikt-ink-2: #d5cfc4;
--wikt-ink-3: #b3aca1;
--wikt-muted: #8f887c;
--wikt-placeholder: #6d675e;
--wikt-accent: #7ba7e8;
--wikt-accent-deep: #cfe0f8;
--wikt-accent-tint: #1c2839;
--wikt-accent-edge: #35496b;
--wikt-danger: #e5907c;
--wikt-on-accent: #14213a;
--wikt-link-under: rgba(123, 167, 232, 0.4);
}
}
/* A handful of pre-design-layer rules still name literal light colours
(they predate the tokens). Rather than hunt every one, neutralise the
ones that actually show through in night mode. */
html.skin-theme-clientpref-night #wiktku-start-form .wiktku-ac-results,
html.skin-nightmode #wiktku-start-form .wiktku-ac-results {
background: var(--wikt-card);
border-color: var(--wikt-rule);
color: var(--wikt-ink);
}
@media screen and (prefers-color-scheme: dark) {
html.skin-theme-clientpref-os #wiktku-start-form .wiktku-ac-results,
html:not(.skin-theme-clientpref-day):not(.skin-theme-clientpref-night):not(.skin-theme-clientpref-os) #wiktku-start-form .wiktku-ac-results {
background: var(--wikt-card);
border-color: var(--wikt-rule);
color: var(--wikt-ink);
}
}
/* ===================================================================
Autocomplete list: stop it escaping its card
===================================================================
ul.wiktku-ac-results carried a hard `width: 20em` regardless of the
field it belongs to. On the full-width pickers — "Çavkanî hilbijêre" is
the obvious one — the list is absolutely positioned at the wrapper's
left edge, so a fixed 20em runs straight past the card's right border
whenever the card is narrower than that.
The wrapper is shrink-to-fit around its input, so `width: 100%` here
means "exactly as wide as the field I belong to" — which is what a
combobox should do — while min-width keeps the short pickers readable
and max-width stops either from leaving the viewport. */
#wiktku-start-form ul.wiktku-ac-results {
width: 100%;
min-width: min(18em, 100%);
max-width: min(92vw, 34em);
box-sizing: border-box;
border-radius: var(--wikt-r-field);
box-shadow: none;
}
/* And the wrapper itself must not exceed the card it sits in. */
#wiktku-start-form .wiktku-native-select-wrap {
max-width: 100%;
}
#wiktku-start-form .wiktku-cavkani-wrap .wiktku-native-select-wrap,
#wiktku-start-form .wiktku-cavkani-wrap input.wiktku-ac-input,
#wiktku-start-form .wiktku-pron-wrap .wiktku-native-select-wrap,
#wiktku-start-form .wiktku-etym-wrap .wiktku-native-select-wrap {
width: 100%;
max-width: 100%;
box-sizing: border-box;
}
/* ===================================================================
Mobile: the footer was the loudest thing on a small screen
===================================================================
Four 44px-tall pills with 22px of side padding wrap into three rows and
eat most of a phone viewport — and the footer is sticky, so that stays
on screen the whole time. Below 720px the primary button keeps its full
size (it is the one you press) and everything else shrinks to a
secondary scale.
=================================================================== */
@media (max-width: 720px) {
#wiktku-start-form {
padding: 12px;
font-size: 14px;
}
#wiktku-start-form .wiktku-start-step {
padding: 16px 14px 14px;
border-radius: 12px;
}
#wiktku-start-form .wiktku-start-step-name {
font-size: 20px !important;
}
#wiktku-start-form #wiktku-start-footer {
padding: 10px 12px;
gap: 6px;
row-gap: 8px;
}
#wiktku-start-form #wiktku-start-footer .oo-ui-buttonElement-button {
font-size: 13px;
padding: 8px 14px;
min-height: 38px;
}
/* The one you actually press stays thumb-sized. */
#wiktku-start-form #wiktku-unhide-editform .oo-ui-buttonElement-button {
font-size: 14px;
padding: 10px 20px;
min-height: var(--wikt-tap);
}
/* Secondary actions share a row instead of each claiming a full one. */
#wiktku-start-form #wiktku-start-footer .oo-ui-buttonElement {
flex: 0 1 auto;
}
#wiktku-start-form #wiktku-last-saved {
flex: 1 0 100%;
order: 10;
font-size: 11px;
white-space: normal;
}
#wiktku-start-form .wiktku-adv-toggle-row {
gap: 8px;
}
#wiktku-start-form .wiktku-adv-toggle-count {
font-size: 11px;
}
}
/* ===================================================================
IPA character palette (v3 spec)
===================================================================
Click-to-insert chart under Bilêvkirin, after fr.wiktionary's. Two
sub-tabs — a short Kurmancî set that opens by default, and the full
chart — because ~20 of the ~180 IPA symbols ever occur in Kurmancî
and showing all of them first is the same "wall of fields" problem
this redesign exists to fix.
=================================================================== */
#wiktku-start-form .wiktku-ipa-panel {
border: 1px solid var(--wikt-card-edge);
border-radius: 12px;
background: var(--wikt-card-sunken);
padding: 0 0 12px;
margin-bottom: 8px;
overflow: hidden;
}
#wiktku-start-form .wiktku-ipa-subtabs {
display: flex;
align-items: center;
gap: 4px;
padding: 8px 12px 0;
border-bottom: 1px solid var(--wikt-rule-soft);
margin-bottom: 12px;
flex-wrap: wrap;
}
#wiktku-start-form .wiktku-ipa-subtab {
font-size: 13px;
font-weight: 500;
color: var(--wikt-ink-3);
padding: 7px 12px 9px;
border-bottom: 3px solid transparent;
border-radius: 8px 8px 0 0;
cursor: pointer;
}
#wiktku-start-form .wiktku-ipa-subtab:hover {
background: var(--wikt-card);
color: var(--wikt-ink);
}
#wiktku-start-form .wiktku-ipa-subtab.wiktku-tab-active {
background: var(--wikt-accent-tint);
color: var(--wikt-accent);
border-bottom-color: var(--wikt-accent);
}
/* Templates are not characters, so they sit apart from the chart —
pinned to the right of the sub-tab row. */
#wiktku-start-form .wiktku-ipa-tplbtns {
margin-left: auto;
display: flex;
gap: 6px;
padding-bottom: 6px;
}
#wiktku-start-form .wiktku-ipa-tplbtn {
font-family: var(--wikt-mono);
font-size: 12px;
padding: 6px 10px;
border-radius: 7px;
border: 1px solid var(--wikt-accent-edge);
background: var(--wikt-accent-tint);
color: var(--wikt-accent);
cursor: pointer;
white-space: nowrap;
}
#wiktku-start-form .wiktku-ipa-tplbtn:hover {
border-color: var(--wikt-accent);
}
#wiktku-start-form .wiktku-ipa-grid {
display: flex;
flex-direction: column;
gap: 8px;
padding: 0 12px;
}
#wiktku-start-form .wiktku-ipa-row {
display: flex;
align-items: flex-start;
gap: 10px;
}
#wiktku-start-form .wiktku-ipa-rowlabel {
flex: 0 0 74px;
font-size: 11.5px;
color: var(--wikt-muted);
padding-top: 8px;
line-height: 1.3;
}
#wiktku-start-form .wiktku-ipa-keys {
display: flex;
flex-wrap: wrap;
gap: 4px;
flex: 1 1 auto;
}
#wiktku-start-form .wiktku-ipa-key {
width: 30px;
height: 30px;
padding: 0;
border-radius: 8px;
border: 1px solid var(--wikt-field-edge);
background: var(--wikt-field-bg);
color: var(--wikt-ink);
font-family: var(--wikt-mono);
font-size: 14px;
line-height: 1;
cursor: pointer;
display: grid;
place-items: center;
transition: background 0.1s ease, border-color 0.1s ease;
}
#wiktku-start-form .wiktku-ipa-key:hover {
background: var(--wikt-accent-tint);
border-color: var(--wikt-accent);
color: var(--wikt-accent-deep);
}
#wiktku-start-form .wiktku-ipa-key:active {
transform: translateY(1px);
}
/* Ligatures like d͡ʒ and long vowels need a little more room than one
glyph; let those keys grow instead of clipping. */
#wiktku-start-form .wiktku-ipa-key {
width: auto;
min-width: 30px;
padding: 0 5px;
}
/* A combining mark is shown on a dotted circle so it has something to
attach to; only the mark itself is inserted. */
#wiktku-start-form .wiktku-ipa-key-combining {
color: var(--wikt-ink-2);
}
@media (max-width: 720px) {
#wiktku-start-form .wiktku-ipa-row {
flex-direction: column;
gap: 3px;
}
#wiktku-start-form .wiktku-ipa-rowlabel {
flex: 0 0 auto;
padding-top: 0;
}
#wiktku-start-form .wiktku-ipa-key {
min-width: 34px;
height: 34px;
}
}
/* ── "+ Beş zêde bike" menu ──────────────────────────────────────────
Adding a part of speech and adding Bilêvkirin are different actions,
so the button opens a small menu instead of doing one of them. */
#wiktku-start-form .wiktku-addsection-menu {
position: absolute;
z-index: 60;
margin-top: 6px;
min-width: 15em;
background: var(--wikt-card);
border: 1px solid var(--wikt-rule);
border-radius: 10px;
padding: 4px;
display: flex;
flex-direction: column;
}
#wiktku-start-form .wiktku-addsection-item {
display: flex;
flex-direction: column;
gap: 1px;
padding: 8px 10px;
border-radius: 7px;
border-bottom: 0;
text-decoration: none;
color: var(--wikt-ink);
}
#wiktku-start-form .wiktku-addsection-item:hover {
background: var(--wikt-accent-tint);
}
#wiktku-start-form .wiktku-addsection-item-label {
font-size: 13.5px;
font-weight: 500;
}
#wiktku-start-form .wiktku-addsection-item-hint {
font-size: 11.5px;
color: var(--wikt-muted);
}
#wiktku-start-form #wiktku-section-tabs .oo-ui-buttonElement {
position: relative;
}
/* Bilêvkirin is a peer of the POS sections but not a part of speech —
a hairline before it marks the boundary. */
#wiktku-start-form .wiktku-section-tab-pron {
margin-left: 6px;
border-left: 1px solid var(--wikt-rule);
padding-left: 14px;
border-radius: 0;
}
/* ===================================================================
Per-sense accordion (v3 spec)
===================================================================
"Tenê maneya ku tê nivîsandin vekirî ye" — each meaning is a closed
box showing its own text, so a four-sense entry fits on one screen
instead of scrolling for a minute. A sense with nothing in it is
never collapsed: the trailing empty one is how you add the next
meaning, so hiding it would hide the only way forward.
=================================================================== */
#wiktku-start-form li.wiktku-dfn-sense {
border: 1px solid var(--wikt-card-edge);
border-radius: 12px;
background: var(--wikt-card);
margin-bottom: 10px;
padding: 0;
list-style: none;
overflow: visible;
}
#wiktku-start-form .wiktku-dfn-sense-header {
display: flex;
align-items: center;
gap: 10px;
padding: 12px 14px;
cursor: pointer;
border-radius: 12px;
user-select: none;
}
#wiktku-start-form li.wiktku-dfn-sense:not(.wiktku-sense-collapsed) .wiktku-dfn-sense-header {
border-bottom: 1px solid var(--wikt-rule-soft);
border-radius: 12px 12px 0 0;
}
#wiktku-start-form .wiktku-dfn-sense-header:hover {
background: var(--wikt-card-sunken);
}
#wiktku-start-form .wiktku-dfn-sense-num {
flex: 0 0 22px;
height: 22px;
border-radius: 999px;
background: var(--wikt-accent);
color: var(--wikt-on-accent);
font-family: var(--wikt-mono);
font-size: 12px;
display: grid;
place-items: center;
}
#wiktku-start-form .wiktku-dfn-sense-title {
font-size: 13.5px;
font-weight: 500;
white-space: nowrap;
}
/* The summary is the point of a collapsed row, so it only shows there. */
#wiktku-start-form .wiktku-dfn-sense-summary {
flex: 1 1 auto;
min-width: 0;
font-size: 13px;
color: var(--wikt-muted);
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
display: none;
}
#wiktku-start-form li.wiktku-sense-collapsed .wiktku-dfn-sense-summary {
display: block;
}
#wiktku-start-form .wiktku-dfn-sense-chevron {
margin-left: auto;
color: var(--wikt-muted);
font-size: 12px;
transition: transform 0.15s ease;
}
#wiktku-start-form li.wiktku-sense-collapsed .wiktku-dfn-sense-chevron {
transform: rotate(-90deg);
}
#wiktku-start-form .wiktku-dfn-sense-body {
padding: 14px;
}
#wiktku-start-form li.wiktku-sense-collapsed .wiktku-dfn-sense-body {
display: none;
}
/* ===================================================================
Template rows in the pickers (v3 spec)
===================================================================
"Ti cihê ku şablon tê hilbijartin bêyî 🔗 û i namîne" — one row shape
everywhere a template is chosen. Rewiye tine's original complaint was
that "guharto? kevnbûyî? ku-Latn? şaşnivîs?" mean nothing to a
newcomer; the ⓘ answers that without leaving the form, and the 🔗 is
there for when it doesn't.
=================================================================== */
#wiktku-start-form ul.wiktku-ac-results li.wiktku-ac-tplrow {
display: flex;
align-items: center;
gap: 8px;
min-height: 44px;
white-space: normal;
padding: 6px 10px;
}
#wiktku-start-form .wiktku-ac-tpltext {
flex: 1 1 auto;
min-width: 0;
font-family: var(--wikt-mono);
font-size: 13px;
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
}
/* Status, not category: green is the one to reach for, yellow means
"only if you specifically need it" (kevnbûyî, şaşnivîs, kêmpeyda). */
#wiktku-start-form .wiktku-tpl-dot {
flex: 0 0 8px;
width: 8px;
height: 8px;
border-radius: 999px;
}
#wiktku-start-form .wiktku-tpl-dot-ok { background: #3d8a55; }
#wiktku-start-form .wiktku-tpl-dot-special { background: #c9971f; }
#wiktku-start-form .wiktku-tpl-icons {
flex: 0 0 auto;
display: flex;
gap: 5px;
align-items: center;
}
#wiktku-start-form .wiktku-tpl-icon {
width: 26px;
height: 26px;
display: grid;
place-items: center;
font-size: 12px;
line-height: 1;
cursor: pointer;
border: 1px solid var(--wikt-accent-edge);
background: var(--wikt-accent-tint);
color: var(--wikt-accent);
border-bottom: 1px solid var(--wikt-accent-edge);
text-decoration: none;
padding: 0;
}
#wiktku-start-form .wiktku-tpl-icon-link { border-radius: 7px; }
#wiktku-start-form .wiktku-tpl-icon-info {
border-radius: 999px;
font-family: var(--wikt-serif);
font-style: italic;
font-weight: 600;
background: transparent;
border-color: var(--wikt-field-edge);
color: var(--wikt-muted);
}
#wiktku-start-form .wiktku-tpl-icon:hover {
border-color: var(--wikt-accent);
color: var(--wikt-accent);
background: var(--wikt-accent-tint);
}
/* ── The ⓘ panel ─────────────────────────────────────────────────────
Three parts, in the spec's order: what it does, its parameters, and a
way out to the template page. */
#wiktku-start-form .wiktku-tpl-info {
position: relative;
margin: 8px 0 4px;
padding: 14px 16px;
border: 1px solid var(--wikt-accent-edge);
background: var(--wikt-accent-tint);
border-radius: 12px;
font-size: 13.5px;
line-height: 1.6;
color: var(--wikt-ink-2);
}
#wiktku-start-form .wiktku-tpl-info-name {
font-family: var(--wikt-mono);
font-size: 13px;
color: var(--wikt-accent-deep);
margin-bottom: 6px;
}
#wiktku-start-form .wiktku-tpl-info-params {
margin-top: 8px;
}
#wiktku-start-form .wiktku-tpl-info-params-title {
font-size: 12px;
color: var(--wikt-muted);
margin-bottom: 2px;
}
#wiktku-start-form .wiktku-tpl-info-params ul {
margin: 0;
padding-left: 18px;
font-family: var(--wikt-mono);
font-size: 12.5px;
}
#wiktku-start-form .wiktku-tpl-info-link {
display: inline-block;
margin-top: 10px;
font-size: 13px;
}
#wiktku-start-form .wiktku-tpl-info-close {
position: absolute;
top: 8px;
right: 8px;
width: 24px;
height: 24px;
border-radius: 999px;
border: 0;
background: transparent;
color: var(--wikt-muted);
cursor: pointer;
font-size: 13px;
line-height: 1;
}
#wiktku-start-form .wiktku-tpl-info-close:hover {
background: var(--wikt-card);
color: var(--wikt-ink);
}
/* ===================================================================
Footer overflow "⋯" (v3 spec)
===================================================================
Bişîne and "Edîtora çavkaniyê veke" stay on the bar; the two cache
actions, the saved-at note and Tercîh move in here. Four equal-weight
buttons (two of them red) made the destructive ones as loud as the
one you actually want, and on a phone the sticky footer wrapped to
three rows.
=================================================================== */
#wiktku-start-form .wiktku-more-wrap {
position: relative;
margin-left: auto;
flex: 0 0 auto;
}
#wiktku-start-form .wiktku-more-btn {
width: 36px;
height: 36px;
border-radius: 999px;
border: 1px solid var(--wikt-field-edge);
background: var(--wikt-card);
color: var(--wikt-muted);
font-size: 16px;
line-height: 1;
cursor: pointer;
display: grid;
place-items: center;
}
#wiktku-start-form .wiktku-more-btn:hover {
border-color: var(--wikt-accent);
color: var(--wikt-accent);
}
#wiktku-start-form .wiktku-more-menu {
position: absolute;
right: 0;
bottom: calc(100% + 8px);
z-index: 70;
min-width: 17em;
background: var(--wikt-card);
border: 1px solid var(--wikt-rule);
border-radius: 12px;
padding: 6px;
display: flex;
flex-direction: column;
gap: 2px;
}
#wiktku-start-form .wiktku-more-item {
display: flex;
align-items: center;
gap: 8px;
}
/* The buttons inside the menu are menu rows, not buttons on a bar. */
#wiktku-start-form .wiktku-more-item .oo-ui-buttonElement {
flex: 1 1 auto;
}
#wiktku-start-form .wiktku-more-item .oo-ui-buttonElement-button {
display: block;
width: 100%;
text-align: left;
border: 0 !important;
background: transparent !important;
border-radius: 7px !important;
padding: 9px 10px;
min-height: 0;
font-weight: 400;
color: var(--wikt-ink) !important;
}
#wiktku-start-form .wiktku-more-item .oo-ui-buttonElement-button:hover {
background: var(--wikt-accent-tint) !important;
}
#wiktku-start-form .wiktku-more-item-danger .oo-ui-buttonElement-button {
color: var(--wikt-danger) !important;
}
#wiktku-start-form .wiktku-more-item-prefs .wiktku-prefs-btn {
width: 26px;
height: 26px;
flex: 0 0 26px;
border: 0;
background-color: transparent;
}
#wiktku-start-form .wiktku-more-item-label {
font-size: 13.5px;
}
#wiktku-start-form .wiktku-more-sep {
height: 1px;
background: var(--wikt-rule-soft);
margin: 4px 2px;
}
#wiktku-start-form .wiktku-more-note {
padding: 4px 10px 2px;
}
#wiktku-start-form .wiktku-more-note #wiktku-last-saved {
white-space: normal;
}
/* The accordion header carries the sense number now, so the older CSS
counter badge on the <li> would draw a second one behind it. Retire the
counter and its indent — the header owns this. */
#wiktku-start-form ol.wiktku-dfn-list > li.wiktku-dfn-sense::before {
content: none;
}
#wiktku-start-form ol.wiktku-dfn-list > li.wiktku-dfn-sense {
padding-left: 0;
padding-bottom: 0;
border-bottom: 0;
margin-bottom: 10px;
}
#wiktku-start-form ol.wiktku-dfn-list > li.wiktku-dfn-sense:not(:last-child) {
padding-bottom: 0;
border-bottom: 0;
}
i43gzclvjf50e5w318myeqjsgg60gp8
6333776
6333773
2026-08-15T10:43:00Z
Wikihez
7344
6333776
css
text/css
/* ===================================================================
#editform while the wizard is active
=================================================================== */
/* Keeps #editform genuinely laid out instead of display:none*/
.wiktku-offscreen {
position: absolute !important;
left: -9999px !important;
top: 0 !important;
width: 100%;
max-width: 100%;
visibility: hidden;
}
/* ===================================================================
Base scale
=================================================================== */
#wiktku-start-form {
font-size: 0.92em;
line-height: 1.35;
}
#wiktku-start-form * {
box-sizing: border-box;
}
.wiktku-addlang-notice {
margin: 0 0 0.8em;
padding: 0.6em 0.8em;
background: var(--wikt-palette-paleblue);
border: 1px solid var(--wikt-palette-lightgrey);
border-radius: 4px;
}
/* ===================================================================
Step cards
a compact card with a left accent bar, so each step reads as
a distinct unit
=================================================================== */
.wiktku-start-step {
padding: 0.7em 0.9em;
margin-bottom: 0.6em;
border: 1px solid var(--wikt-palette-grey-3, #e0e0e0);
border-left: 4px solid var(--wikt-palette-blue-9, #3366cc);
border-radius: 6px;
background: var(--wikt-palette-white);
box-shadow: 0 1px 2px rgba(0, 0, 0, 0.04);
transition: border-left-color 0.15s ease, box-shadow 0.15s ease;
}
.wiktku-start-step:hover {
box-shadow: 0 2px 6px rgba(0, 0, 0, 0.08);
}
.wiktku-start-step:focus-within {
border-left-color: var(--wikt-palette-blue-9, #3366cc);
box-shadow: 0 2px 6px rgba(0, 0, 0, 0.1);
}
/* Ghybu, 14 Tebax 2026: "Cureyê rêzimanî" and "Parametreyên cureyê
rêzimanî" should read as one question, not two. Fuse the posparams
card onto the bottom of the pos card (shared left accent bar, no
border/gap between them) and drop its own big heading in favor of
the smaller, pos-specific label start.js now sets via question_fmt
("Cins/zayend" / "Cureyê lêkerê" / "Taybetmendî"). posparams.visible
only turns this div on once a pos is chosen, and it always renders
immediately after #wiktku-start-pos in the DOM, so this pairing is safe. */
#wiktku-start-pos {
border-radius: 6px 6px 0 0;
margin-bottom: 0;
border-bottom: none;
}
#wiktku-start-posparams {
border-radius: 0 0 6px 6px;
border-top: none;
padding-top: 0.3em;
}
#wiktku-start-posparams .wiktku-start-step-name {
display: none;
}
/* Scoped to #wiktku-start-form (not just .wiktku-start-step-name) and
!important on font-size: this is a real <h3> tag (see start.js), so
the wiki skin's own default heading styles can otherwise win over a
plain class rule and render it unpredictably (varies by skin/
viewport — this was previously landing at a different effective
size on desktop Vector vs. mobile Minerva purely by skin-default
accident, not by design). The heading now leads the visual hierarchy
through both size AND colour (tinted to match the card's accent
bar), while .wiktku-start-step-question below is deliberately
lighter-weight and muted so the two never compete for attention. */
#wiktku-start-form .wiktku-start-step-name {
font-size: 1.1em !important;
font-weight: 700;
letter-spacing: 0.03em;
margin: 0 0 0.3em;
line-height: 1.2;
color: var(--wikt-palette-blue-9, #3366cc);
border: 0;
padding: 0;
}
/* Rewiye tine, 14 Tebax 2026: "pûnto jî biçûk in, xwendina wan hinek zehmet
e" — the question text and the many small per-field labels (Cinsiyet:,
Rehê dema niha:, …) were sized noticeably smaller than the heading above
them; bumped both a step so the whole card reads at a more consistent,
comfortable size instead of the heading standing out and everything
under it feeling like fine print. */
.wiktku-start-step-question {
font-size: 1em;
font-weight: 400;
color: var(--wikt-palette-grey-9, #555);
margin: 0 0 0.5em;
line-height: 1.45;
}
.wiktku-start-step label {
padding-right: 1.2em;
font-size: 1em;
}
/* Rewiye tine, 14 Tebax 2026: short reassurance notes next to the fields
that most confused a first-time user (Bilêvkirin's template dropdown,
Mane's per-sense template dropdown) — muted so they read as a hint, not
another question competing with .wiktku-start-step-question. */
.wiktku-step-hint {
font-size: 0.88em;
font-style: italic;
color: var(--wikt-palette-grey-8, #72777d);
margin: 0 0 0.5em;
line-height: 1.4;
}
/* Same specificity as the rule just above, so it must come after to
actually win: the name label isn't a field label needing right
padding or the form's base label size, it's a heading. */
#wiktku-start-form .wiktku-start-step-name label {
padding-right: 0;
font-size: inherit !important;
color: inherit;
}
input[type="text"].wiktku-start-step-field {
width: 100%;
padding: 5px 8px;
border: 1px solid var(--wikt-palette-lightgrey);
border-radius: 4px;
transition: border-color 0.12s ease, box-shadow 0.12s ease;
}
input[type="text"].wiktku-start-step-field:focus {
border-color: var(--wikt-palette-blue-9, #3366cc);
box-shadow: inset 0 0 0 1px var(--wikt-palette-blue-9, #3366cc);
outline: 0;
}
input[type="text"].wiktku-start-step-field.wiktku-start-narrow {
width: 20em;
}
/* Only used by selects that opt out via .wiktku-plain-select; other
selects get their width from the searchable picker instead (see
input.wiktku-ac-input). */
select.wiktku-start-narrow,
input.wiktku-dfn-tpl-title {
width: 20em;
max-width: 100%;
box-sizing: border-box;
}
#wiktku-start-spinner {
float: right;
margin-left: 1em;
}
#wiktku-start-footer {
display: flex;
flex-wrap: wrap;
align-items: center;
gap: 0.5em;
padding: 0.6em 0.2em;
position: sticky;
bottom: 0;
background: var(--wikt-palette-white);
border-top: 1px solid var(--wikt-palette-grey-3, #e0e0e0);
z-index: 5;
}
/* Quiet, non-competing text — sits next to the cache buttons so the
person can tell at a glance whether their latest edits are backed
up, without it fighting the buttons for attention. */
#wiktku-last-saved {
font-size: 0.85em;
color: var(--wikt-palette-grey-9, #767676);
white-space: nowrap;
}
/* ── Tercîh (settings) icon button — sits in the footer next to the
cache buttons. Uses the Codex "settings" (color-subtle) icon from
Commons directly rather than an OOUI icon-pack module, so it renders
the exact requested glyph without pulling in an extra dependency. */
.wiktku-prefs-btn {
width: 2.2em;
height: 2.2em;
flex: 0 0 auto;
padding: 0;
border: 1px solid var(--wikt-palette-grey-3, #e0e0e0);
border-radius: 2px;
background-color: var(--wikt-palette-white);
background-image: url(//upload.wikimedia.org/wikipedia/commons/e/e0/Codex_icon_settings_color-subtle.svg);
background-repeat: no-repeat;
background-position: center;
background-size: 1.2em 1.2em;
cursor: pointer;
}
.wiktku-prefs-btn:hover {
background-color: var(--wikt-palette-grey-0, #f8f9fa);
}
.wiktku-prefs-btn:active {
background-color: var(--wikt-palette-grey-1, #eaecf0);
}
/* Tercîh dialog body — OOUI's bare ProcessDialog body has no inset of
its own, so text/fields otherwise sit flush against the window edges. */
.wiktku-prefs-dialog-body {
padding: 1em 1.2em;
}
/* ── "Bişîne" click feedback ── */
@keyframes wiktku-btn-flash-pulse {
0% { box-shadow: 0 0 0 0 rgba(51, 102, 204, 0.55); }
70% { box-shadow: 0 0 0 9px rgba(51, 102, 204, 0); }
100% { box-shadow: 0 0 0 0 rgba(51, 102, 204, 0); }
}
#wiktku-unhide-editform.wiktku-btn-flash {
animation: wiktku-btn-flash-pulse 0.5s ease-out;
}
/* Persistent state while the wikitext is being built/submitted, set
alongside OOUI's own setDisabled(true) so it reads clearly even if
the skin's default disabled style is subtle. */
#wiktku-unhide-editform.wiktku-btn-sending .oo-ui-buttonElement-button {
background-color: var(--wikt-palette-grey-9, #767676) !important;
border-color: var(--wikt-palette-grey-9, #767676) !important;
cursor: progress;
opacity: 1 !important;
}
/* Wikihez, 14 Tebax 2026 (item 7): looks exactly like OOUI's own disabled
state, but ISN'T one — the button stays a real, clickable widget so its
click handler can still run and explain why (see wiktkuNotify call next
to wiktkuContentGateOk in start.js). A true setDisabled(true) here would
swallow the click before that message could ever show. */
#wiktku-unhide-editform.wiktku-btn-soft-disabled .oo-ui-buttonElement-button {
opacity: 0.5;
cursor: not-allowed;
}
/* ── "Beşên din" picker (item 3) ── */
.wiktku-besendin-picker {
margin: 0.6em 0 1em;
}
.wiktku-besendin-picker .wiktku-besendin-select {
width: 100%;
max-width: 24em;
}
#wiktku-start-form textarea.wiktku-start-step-field,
#wiktku-start-form textarea.wiktku-start-narrow,
#wiktku-start-form textarea.wiktku-dfn-subfield {
resize: vertical !important;
overflow: auto !important;
box-sizing: border-box !important;
vertical-align: top;
border: 1px solid var(--wikt-palette-lightgrey);
border-radius: 3px;
transition: border-color 0.1s ease, box-shadow 0.1s ease;
}
/* Modern focus state to match the searchable-picker inputs. */
#wiktku-start-form textarea.wiktku-start-step-field:focus,
#wiktku-start-form textarea.wiktku-start-narrow:focus,
#wiktku-start-form textarea.wiktku-dfn-subfield:focus {
border-color: var(--wikt-palette-blue-9, #3366cc);
box-shadow: inset 0 0 0 1px var(--wikt-palette-blue-9, #3366cc);
outline: 0;
}
/* Standard: every textarea in the form is full width by default */
#wiktku-start-form textarea:not(.wiktku-start-narrow) {
width: 100%;
max-width: 100%;
box-sizing: border-box;
}
#wiktku-start-form textarea.wiktku-start-narrow,
#wiktku-start-form textarea.wiktku-dfn-subfield.wiktku-start-narrow {
width: 20em;
max-width: 100%;
min-width: 8em;
height: calc(1.7em + 10px);
min-height: calc(1.7em + 10px);
padding-top: 4px !important;
padding-bottom: 4px !important;
line-height: 1.35 !important;
resize: none !important;
}
/* Exception: "Sernav" / "Sernavê orjînal" citation-source fields (kitêb,
kovar, malper, …) — long enough to be worth 2 rows and manual resizing. */
#wiktku-start-form textarea.wiktku-dfn-quote-src-input.wiktku-dfn-quote-src-input--title {
height: calc(2 * 1.35em + 10px);
min-height: calc(2 * 1.35em + 10px);
}
/* ── Manual drag-to-resize handle ── */
#wiktku-start-form textarea:not(.wiktku-start-narrow) {
resize: none !important;
}
/* Inline modifier button (⊕) */
.wiktku-word-li {
display: flex;
align-items: flex-start;
flex-wrap: wrap;
gap: 0.3em;
}
.wiktku-mod-btn {
flex: 0 0 auto;
width: 1.6em;
height: 1.6em;
padding: 0;
line-height: 1;
border: 1px solid var(--wikt-palette-lightgrey);
border-radius: 2px;
background: var(--wikt-palette-white);
color: var(--wikt-palette-blue-9, #3366cc);
font-size: 1em;
cursor: pointer;
}
.wiktku-mod-btn:hover {
border-color: var(--wikt-palette-blue-9, #3366cc);
background: var(--wikt-palette-paleblue, #eaf3ff);
}
.wiktku-mod-picker {
display: flex;
flex-wrap: wrap;
gap: 0.25em;
width: 100%;
margin-top: 0.15em;
padding: 0.35em;
border: 1px solid var(--wikt-palette-lightgrey);
border-radius: 3px;
background: var(--wikt-palette-white);
box-shadow: 0 1px 3px rgba(0, 0, 0, 0.08);
}
.wiktku-mod-pill {
padding: 2px 8px;
border: 1px solid var(--wikt-palette-grey-3, #e0e0e0);
border-radius: 12px;
background: var(--wikt-palette-paleblue, #eaf3ff);
font-size: 0.85em;
white-space: nowrap;
cursor: pointer;
}
.wiktku-mod-pill:hover {
border-color: var(--wikt-palette-blue-9, #3366cc);
background: var(--wikt-palette-blue-9, #3366cc);
color: var(--wikt-palette-white);
}
.wiktku-mod-pill:disabled,
.wiktku-mod-pill.wiktku-mod-pill-used {
border-color: var(--wikt-palette-grey-3, #e0e0e0);
background: var(--wikt-palette-lightgrey);
color: var(--wikt-palette-grey-3, #999);
cursor: not-allowed;
opacity: 0.6;
}
.wiktku-mod-pill:disabled:hover,
.wiktku-mod-pill.wiktku-mod-pill-used:hover {
border-color: var(--wikt-palette-grey-3, #e0e0e0);
background: var(--wikt-palette-lightgrey);
color: var(--wikt-palette-grey-3, #999);
}
.wiktku-mod-val-wrap {
display: flex;
align-items: center;
gap: 0.25em;
width: 100%;
margin-top: 0.15em;
}
.wiktku-mod-val-input {
flex: 0 1 14em;
max-width: 14em;
padding: 3px 6px;
border: 1px solid var(--wikt-palette-lightgrey);
border-radius: 2px;
}
.wiktku-mod-confirm,
.wiktku-mod-cancel {
flex: 0 0 auto;
width: 1.6em;
height: 1.6em;
padding: 0;
line-height: 1;
border: 1px solid var(--wikt-palette-lightgrey);
border-radius: 2px;
background: var(--wikt-palette-white);
cursor: pointer;
}
.wiktku-mod-confirm {
color: #178a17;
border-color: #178a17;
}
.wiktku-mod-cancel {
color: var(--wikt-palette-red-9, #d33);
border-color: var(--wikt-palette-red-9, #d33);
}
.wiktku-resize-wrap {
position: relative;
display: block;
}
/* Independent of .wiktku-resize-wrap (created separately by
ensureLinebreakBackdrop() in start.js, only for textareas that ever
get flagged with a linebreak) so it doesn't depend on load order
relative to wiktkuMakeManualResizable(). Plain block, no size of its
own — purely a position:relative anchor for the backdrop. */
.wiktku-linebreak-wrap {
position: relative;
display: block;
}
.wiktku-resize-grip {
position: absolute;
right: 2px;
bottom: 2px;
width: 14px;
height: 14px;
cursor: ns-resize;
touch-action: none;
opacity: 0.5;
z-index: 2;
background-image: linear-gradient(135deg, transparent 0 50%, var(--wikt-palette-grey-9, #767676) 50% 100%);
background-repeat: no-repeat;
}
.wiktku-resize-grip:hover,
.wiktku-resize-grip:active {
opacity: 0.9;
}
/* ===================================================================
Searchable dropdown (wrapNativeSelect in start.js)
.wiktku-native-select-wrap > input.wiktku-ac-input (search box)
> ul.wiktku-ac-results (result list)
> select (hidden, holds the value)
=================================================================== */
.wiktku-native-select-wrap {
display: inline-block;
position: relative;
vertical-align: top;
}
/* Matches the width the native select would have had (see
select.wiktku-start-narrow). */
.wiktku-native-select-wrap input[type="search"],
input.wiktku-ac-input {
display: block;
width: 20em;
max-width: 100%;
box-sizing: border-box;
padding: 3px 6px;
border: 1px solid var(--wikt-palette-lightgrey);
border-radius: 2px;
background: var(--wikt-palette-white);
color: inherit;
font-size: inherit;
font-family: inherit;
transition: border-color 0.1s ease, box-shadow 0.1s ease;
}
input.wiktku-ac-input:focus {
border-color: var(--wikt-palette-blue-9);
box-shadow: inset 0 0 0 1px var(--wikt-palette-blue-9);
outline: 0;
}
input.wiktku-ac-input::placeholder {
color: var(--wikt-palette-grey-9);
opacity: 1;
}
/* Hide Safari/Chrome's built-in search decorations. */
input.wiktku-ac-input::-webkit-search-decoration,
input.wiktku-ac-input::-webkit-search-cancel-button,
input.wiktku-ac-input::-webkit-search-results-button {
-webkit-appearance: none;
appearance: none;
}
/* ── Result list ── */
/* top/bottom/max-height are overridden inline by showResults() when it
flips the list above the box; these are just its defaults. */
ul.wiktku-ac-results {
position: absolute;
z-index: 9999;
top: 100%;
bottom: auto;
left: 0;
margin: 0;
padding: 0;
list-style: none;
width: 20em;
max-width: 90vw;
max-height: 13em;
overflow-y: auto;
overscroll-behavior: contain;
-webkit-overflow-scrolling: touch;
background: var(--wikt-palette-white);
border: 1px solid var(--wikt-palette-lightgrey);
border-radius: 3px;
box-shadow: 0 3px 10px rgba(0, 0, 0, 0.15);
}
ul.wiktku-ac-results li {
margin: 0;
padding: 4px 8px;
cursor: pointer;
font-size: 0.92em;
display: flex;
align-items: center;
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
}
/* .wiktku-ac-active is the keyboard cursor; hover mirrors it; :active
covers the touch press state. */
ul.wiktku-ac-results li.wiktku-ac-active,
ul.wiktku-ac-results li:hover {
background: var(--wikt-palette-lightblue);
}
ul.wiktku-ac-results li:active {
background: var(--wikt-palette-blue-9);
color: var(--wikt-palette-white);
}
/* Touch devices: bigger tap targets, no sticky hover. */
@media (pointer: coarse) {
ul.wiktku-ac-results li {
padding: 6px 10px;
min-height: 2.2em;
font-size: 1em;
}
ul.wiktku-ac-results li:hover {
background: transparent;
}
ul.wiktku-ac-results li.wiktku-ac-active {
background: var(--wikt-palette-lightblue);
}
input.wiktku-ac-input {
/* >=16px stops iOS Safari zooming the page when the box is focused. */
font-size: 16px;
min-height: 2.2em;
}
}
/* Item 5 (Wikihez, 14 Tebax 2026): inline preview + confirm panel shown
before inserting an auto-content pronunciation template (ku-IPA,
ku-kîte, …) — deliberately part of the form's own layout rather than a
browser confirm()/prompt() dialog, per "dont use userinput use
something more advanced". */
.wiktku-pron-preview {
margin: 6px 0;
padding: 8px 10px;
border: 1px solid var(--wikt-palette-blue-9, #3366cc);
border-radius: 6px;
background: var(--wikt-palette-paleblue, #eaf3ff);
}
.wiktku-pron-preview-label {
font-size: 0.88em;
font-weight: 600;
color: var(--wikt-palette-grey-9, #555);
margin-bottom: 3px;
}
.wiktku-pron-preview-body {
font-family: monospace;
font-size: 1em;
white-space: pre-wrap;
word-break: break-word;
margin-bottom: 6px;
}
.wiktku-pron-preview-actions {
display: flex;
gap: 6px;
}
.wiktku-pron-preview-confirm,
.wiktku-pron-preview-cancel {
font-size: 0.88em;
padding: 3px 10px;
border-radius: 4px;
cursor: pointer;
border: 1px solid var(--wikt-palette-lightgrey, #a2a9b1);
background: var(--wikt-palette-white, #fff);
}
.wiktku-pron-preview-confirm {
border-color: var(--wikt-palette-blue-9, #3366cc);
color: var(--wikt-palette-blue-9, #3366cc);
font-weight: 600;
}
.wiktku-pron-preview-confirm:disabled {
opacity: 0.5;
cursor: wait;
}
.wiktku-pron-preview-cancel:hover {
background: var(--wikt-palette-grey-0, #f8f9fa);
}
/* Template pickers fill their container since the search box, not the
<select>, is what the user sees. */
.wiktku-pron-wrap .wiktku-native-select-wrap,
.wiktku-etym-wrap .wiktku-native-select-wrap,
.wiktku-pron-wrap .wiktku-native-select-wrap input.wiktku-ac-input,
.wiktku-etym-wrap .wiktku-native-select-wrap input.wiktku-ac-input {
width: 100%;
}
.wiktku-pron-wrap .wiktku-native-select-wrap input.wiktku-ac-input,
.wiktku-etym-wrap .wiktku-native-select-wrap input.wiktku-ac-input {
font-size: 0.88em;
}
.wiktku-cavkani-wrap .wiktku-native-select-wrap,
.wiktku-cavkani-wrap .wiktku-native-select-wrap input.wiktku-ac-input {
width: 100%;
}
/* Template selector inside a sense block. */
.wiktku-dfn-tpl-row .wiktku-native-select-wrap input.wiktku-ac-input {
font-size: 0.88em;
}
/* Language/dialect rows: picker must line up with the word field beside it. */
.wiktku-lang-row .wiktku-native-select-wrap {
flex: 0 0 auto;
}
#wiktku-start-form textarea.wiktku-dfn-mane,
#wiktku-start-form textarea.wiktku-dfn-nimune-text,
#wiktku-start-form .wiktku-dfn-jeder-group textarea.wiktku-dfn-nimune-quote,
#wiktku-start-form .wiktku-dfn-nimune-sub textarea.wiktku-dfn-nimune-tr,
#wiktku-start-form .wiktku-dfn-nimune-sub textarea.wiktku-dfn-nimune-t,
#wiktku-start-form .wiktku-dfn-quote-sub textarea.wiktku-dfn-nimune-quote-tr,
#wiktku-start-form .wiktku-dfn-quote-sub textarea.wiktku-dfn-nimune-quote-t,
#wiktku-start-form textarea.wiktku-dfn-quote-src-manual,
#wiktku-start-form .wiktku-pron-wrap textarea.wiktku-pron-text,
#wiktku-start-form .wiktku-etym-wrap textarea.wiktku-etym-text,
#wiktku-start-form .wiktku-tewandin-wrap textarea.wiktku-tewandin-text,
#wiktku-start-form textarea.wiktku-cavkani-text,
#wiktku-start-form textarea.wiktku-dfn-tercime,
#wiktku-start-form textarea.wiktku-dfn-izah {
--wiktku-ta-rows: 2;
height: calc(var(--wiktku-ta-rows) * 1.35em + 6px);
min-height: calc(var(--wiktku-ta-rows) * 1.35em + 6px);
}
#wiktku-start-form .wiktku-pron-wrap textarea.wiktku-pron-text,
#wiktku-start-form .wiktku-etym-wrap textarea.wiktku-etym-text,
#wiktku-start-form textarea.wiktku-dfn-izah {
--wiktku-ta-rows: 3;
}
#wiktku-start-form textarea.wiktku-cavkani-text {
--wiktku-ta-rows: 4;
}
/* Nimûne + Jêgirtin (citation) boxes, and their tr/t sub-fields: at
least 4 rows so there's room to actually write an example/quote. */
#wiktku-start-form textarea.wiktku-dfn-nimune-text,
#wiktku-start-form .wiktku-dfn-nimune-sub textarea.wiktku-dfn-nimune-tr,
#wiktku-start-form .wiktku-dfn-nimune-sub textarea.wiktku-dfn-nimune-t,
#wiktku-start-form .wiktku-dfn-jeder-group textarea.wiktku-dfn-nimune-quote,
#wiktku-start-form .wiktku-dfn-quote-sub textarea.wiktku-dfn-nimune-quote-tr,
#wiktku-start-form .wiktku-dfn-quote-sub textarea.wiktku-dfn-nimune-quote-t,
#wiktku-start-form textarea.wiktku-dfn-quote-src-manual {
--wiktku-ta-rows: 4;
}
/* Nimûne/jêgirtin box currently contains a typed/pasted linebreak —
the border is nudged so the user notices before it's silently turned
into <br> on output. The break itself is marked precisely, not the
whole box, via a mirrored backdrop layer (see below and
highlightLinebreak()/buildLinebreakBackdropHtml() in start.js). */
#wiktku-start-form textarea.wiktku-has-linebreak {
border-color: var(--wikt-palette-yellow6, #ac6600) !important;
}
/* Backdrop layer: sits behind the textarea showing the same text, with
a highlighted marker at each line that's followed by a break. Its
font/padding/box-sizing/line-height are copied from the textarea via
computed style (see syncLinebreakBackdropMetrics() in start.js), not
shared CSS classes — most of this box's own rules are written as
"textarea.foo", which a <div> with the same class wouldn't match.
Only created lazily, the first time a given textarea actually has a
break — see ensureLinebreakBackdrop(). */
.wiktku-linebreak-backdrop {
position: absolute;
inset: 0;
z-index: 0;
margin: 0;
overflow: hidden;
white-space: pre-wrap;
word-wrap: break-word;
color: transparent;
background: transparent !important;
border-color: transparent !important;
box-shadow: none !important;
resize: none !important;
pointer-events: none;
}
/* Raise the real textarea above its backdrop so typing/selection/caret
behave completely normally; the backdrop's mark shows through only
where the real textarea's own background is transparent. */
#wiktku-start-form textarea.wiktku-has-linebreak-source {
position: relative;
z-index: 1;
background-color: transparent;
}
.wiktku-linebreak-mark {
background-color: var(--wikt-palette-yellow6, #ac6600);
color: var(--wikt-palette-white, #fff);
border-radius: 2px;
}
/* ── Tercime + Îzah boxes ── */
.wiktku-dfn-nonku-wrap {
display: flex;
flex-direction: column;
gap: 3px;
}
.wiktku-dfn-nimune-sub,
.wiktku-dfn-quote-sub {
margin-top: 3px;
margin-left: 1em;
padding-left: 0.6em;
border-left: 2px solid var(--wikt-palette-lightgrey);
display: flex;
flex-direction: column;
gap: 3px;
}
.wiktku-dfn-nimune-sub textarea.wiktku-dfn-nimune-tr,
.wiktku-dfn-nimune-sub textarea.wiktku-dfn-nimune-t {
min-width: 8em;
padding-top: 2px !important;
padding-bottom: 2px !important;
line-height: 1.35 !important;
font-size: 0.88em;
}
/* ── Sense list (Mane step) — numbered badges instead of the browser's
default flat "1." marker, so each sense reads as a distinct block. ── */
ol.wiktku-dfn-list {
list-style: none;
margin: 0;
padding: 0;
counter-reset: wiktku-dfn-sense;
}
ol.wiktku-dfn-list > li.wiktku-dfn-sense {
position: relative;
counter-increment: wiktku-dfn-sense;
padding-left: 2.1em;
margin-bottom: 0.9em;
}
ol.wiktku-dfn-list > li.wiktku-dfn-sense:not(:last-child) {
padding-bottom: 0.9em;
border-bottom: 1px dashed var(--wikt-palette-grey-3, #e0e0e0);
}
ol.wiktku-dfn-list > li.wiktku-dfn-sense::before {
content: counter(wiktku-dfn-sense);
position: absolute;
left: 0;
top: 1px;
width: 1.6em;
height: 1.6em;
border-radius: 50%;
background: var(--wikt-palette-blue-9, #3366cc);
color: var(--wikt-palette-white);
font-size: 0.85em;
font-weight: 700;
display: flex;
align-items: center;
justify-content: center;
}
/* Template selector row inside a sense block */
.wiktku-dfn-tpl-row {
margin-bottom: 3px;
}
/* ── Sub-field titles (Etîket, Kategorî, Hevmane, Dijmane, Nimûne,
Jêgirtin, …) — previously plain unstyled run-on text. Each group
now reads as a small labelled field: the term stands out, the
izah hint stays quiet, and the block gets its own breathing room. ── */
.wiktku-dfn-subgroup {
margin-top: 0.5em;
padding-top: 0.4em;
border-top: 1px dashed var(--wikt-palette-grey-3, #e0e0e0);
}
.wiktku-dfn-subgroup:first-of-type {
margin-top: 0.3em;
padding-top: 0;
border-top: none;
}
.wiktku-dfn-sublabel {
display: block;
margin-bottom: 3px;
font-size: 0.88em;
}
.wiktku-dfn-sublabel-term {
font-weight: 600;
color: var(--wikt-palette-blue-9, #3366cc);
letter-spacing: 0.03em;
font-size: 0.92em;
}
.wiktku-dfn-sublabel-hint {
color: var(--wikt-palette-grey-9, #767676);
font-style: italic;
}
.wiktku-pron-wrap,
.wiktku-etym-wrap,
.wiktku-tewandin-wrap,
.wiktku-cavkani-wrap {
display: flex;
flex-direction: column;
gap: 3px;
}
/* ── POS section tabs ──
Modernized into rounded pills instead of flat file-folder tabs. */
#wiktku-section-tabs {
display: flex;
flex-wrap: wrap;
gap: 4px;
margin-bottom: 0.6em;
align-items: center;
}
#wiktku-section-tabs .wiktku-section-tab {
padding: 3px 12px;
border: 1px solid var(--wikt-palette-lightgrey);
border-radius: 999px;
background: var(--wikt-palette-dullcyan);
cursor: pointer;
font-size: 0.86em;
user-select: none;
transition: background 0.12s ease, border-color 0.12s ease;
}
#wiktku-section-tabs .wiktku-section-tab:hover {
border-color: var(--wikt-palette-blue-9, #3366cc);
}
#wiktku-section-tabs .wiktku-section-tab.wiktku-tab-active {
background: var(--wikt-palette-blue-9, #3366cc);
border-color: var(--wikt-palette-blue-9, #3366cc);
color: var(--wikt-palette-white);
font-weight: 600;
}
/* ── Step-group tabs (Mane / Bilêvkirin / Beşên din — see STEP_GROUPS in
start.js) ── Sits directly under the pill-style section tabs above;
styled as an underlined secondary nav so the two bars stay visually
distinct. */
#wiktku-group-tabs {
display: flex;
flex-wrap: wrap;
gap: 4px;
margin-bottom: 0.8em;
border-bottom: 2px solid var(--wikt-palette-lightgrey);
}
#wiktku-group-tabs .wiktku-group-tab {
position: relative;
padding: 7px 14px 8px;
margin-bottom: -2px;
border-bottom: 3px solid transparent;
border-radius: 3px 3px 0 0;
cursor: pointer;
font-size: 0.95em;
font-weight: 600;
color: var(--wikt-palette-grey-9, #333);
background: var(--wikt-palette-grey-0, #f8f9fa);
user-select: none;
transition: color 0.12s ease, border-color 0.12s ease, background 0.12s ease;
}
#wiktku-group-tabs .wiktku-group-tab:hover {
color: var(--wikt-palette-blue-9, #3366cc);
background: var(--wikt-palette-paleblue, #eaf3ff);
}
#wiktku-group-tabs .wiktku-group-tab.wiktku-tab-active {
border-bottom-color: var(--wikt-palette-blue-9, #3366cc);
color: var(--wikt-palette-white);
background: var(--wikt-palette-blue-9, #3366cc);
font-weight: 700;
}
/* Small dot marking a tab that still has an unfilled required field
hidden inside it (see updateGroupTabIndicators in start.js). Cleared
automatically once that tab becomes the active one. */
#wiktku-group-tabs .wiktku-group-tab.wiktku-tab-missing::after {
content: "";
position: absolute;
top: 4px;
right: -1px;
width: 6px;
height: 6px;
border-radius: 50%;
background: var(--wikt-palette-red-9, #d33);
}
.wiktku-lang-row-list {
margin: 0;
padding: 0;
list-style: none;
}
.wiktku-lang-row {
display: flex;
align-items: flex-start;
gap: 6px;
margin-bottom: 3px;
flex-wrap: wrap;
}
.wiktku-lang-row-words {
margin: 0;
padding: 0;
list-style: none;
display: flex;
flex-direction: column;
gap: 3px;
}
/* Dûnde/Werger/Zarava rows: align the picker's height with the adjacent
word textarea (see .wiktku-start-narrow above). */
.wiktku-lang-row .wiktku-native-select-wrap input.wiktku-ac-input {
height: calc(1.7em + 10px);
min-height: calc(1.7em + 10px);
padding-top: 4px;
padding-bottom: 4px;
}
/* ── Werger / Bi zaravayên din groups: one per gloss, shared spacing ── */
#wiktku-start-trans .wiktku-trans-group,
#wiktku-start-zarava .wiktku-zarava-group {
margin-bottom: 0.6em;
}
#wiktku-start-trans .wiktku-trans-group:last-child,
#wiktku-start-zarava .wiktku-zarava-group:last-child {
margin-bottom: 0;
}
#wiktku-start-trans .wiktku-trans-group-label,
#wiktku-start-zarava .wiktku-zarava-group-label {
font-weight: 600;
font-size: 0.88em;
margin-bottom: 3px;
}
.wiktku-dfn-jeder-group {
margin-top: 3px;
}
.wiktku-dfn-quote-src-sel {
font-size: 0.88em;
margin-top: 3px;
display: block;
}
.wiktku-dfn-quote-src-fields {
display: flex;
flex-direction: column;
gap: 3px;
margin-top: 3px;
}
/* Stacked layout: textarea gets its own full-width row, button + status
sit below it on their own row. Simpler and more robust than sharing a
row with the button — that required the textarea's own resize-wrap
div (added by wiktkuMakeManualResizable in start.js) to correctly
inherit flex-grow, which kept being fragile across breakpoints. */
.wiktku-dfn-quote-citoid {
display: flex;
flex-direction: column;
align-items: stretch;
gap: 0.4em;
margin-top: 3px;
margin-bottom: 3px;
}
.wiktku-dfn-quote-citoid-input {
width: 100%;
max-width: 100%;
box-sizing: border-box;
}
/* Column flex + align-items:stretch (above) is what makes the textarea's
.wiktku-resize-wrap (see wiktkuMakeManualResizable in start.js) reach
full width automatically — stretch fills the cross axis for any block
child, no flex-grow needed on the wrap itself. The button and status
text, right below the textarea, opt back out of that stretch so they
stay their natural (small) size instead of also going full width. */
.wiktku-dfn-quote-citoid-btn,
.wiktku-dfn-quote-citoid-status {
align-self: flex-start;
}
.wiktku-dfn-quote-src-cat-status {
display: block;
font-size: 0.82em;
color: var(--wikt-palette-lightgrey, #767676);
margin-top: 2px;
}
.wiktku-dfn-quote-src-row {
display: flex;
align-items: baseline;
gap: 4px;
flex-wrap: wrap;
}
.wiktku-dfn-quote-src-row label {
font-size: 0.82em;
white-space: nowrap;
min-width: 8em;
}
textarea.wiktku-dfn-quote-src-input {
flex: 1 1 12em;
max-width: 100%;
box-sizing: border-box;
}
@media (max-width: 720px) {
.wiktku-lang-row {
flex-direction: column;
}
/* Re-assert against the wiki's own mobile skin heading styles,
which can apply their own mobile-breakpoint rules to this real
<h3> and load after ours in the cascade — see the rule itself,
above, for why this needs guarding at all. */
#wiktku-start-form .wiktku-start-step-name {
font-size: 1.05em !important;
margin: 0 0 0.2em !important;
line-height: 1.2 !important;
border: 0 !important;
padding: 0 !important;
}
/* Single column: search box and list use the full width. Narrow
textareas (Etîket, Hevmane, Dûnde/Jê/Têkildar/Binêre herwiha word
boxes, citation source fields, …) join them here too — at a fixed
20em width they used to poke out past the step card on narrow
screens. */
.wiktku-native-select-wrap,
input.wiktku-ac-input,
ul.wiktku-ac-results,
#wiktku-start-form textarea.wiktku-start-narrow,
#wiktku-start-form textarea.wiktku-dfn-subfield.wiktku-start-narrow {
width: 100%;
max-width: 100%;
}
.wiktku-mod-val-input {
flex: 1 1 auto;
max-width: 100%;
}
#wiktku-start-form textarea.wiktku-dfn-mane,
#wiktku-start-form .wiktku-pron-wrap textarea.wiktku-pron-text,
#wiktku-start-form .wiktku-etym-wrap textarea.wiktku-etym-text {
--wiktku-ta-rows: 3;
font-size: 1em;
}
#wiktku-start-form .wiktku-tewandin-wrap textarea.wiktku-tewandin-text,
#wiktku-start-form textarea.wiktku-cavkani-text {
--wiktku-ta-rows: 4;
font-size: 1em;
}
/* Nimûne + Jêgirtin and their tr/t sub-fields: keep at least 4 rows
on mobile too, rather than shrinking further than the desktop size. */
#wiktku-start-form textarea.wiktku-dfn-nimune-text,
#wiktku-start-form .wiktku-dfn-nimune-sub textarea.wiktku-dfn-nimune-tr,
#wiktku-start-form .wiktku-dfn-nimune-sub textarea.wiktku-dfn-nimune-t,
#wiktku-start-form .wiktku-dfn-jeder-group textarea.wiktku-dfn-nimune-quote,
#wiktku-start-form .wiktku-dfn-quote-sub textarea.wiktku-dfn-nimune-quote-tr,
#wiktku-start-form .wiktku-dfn-quote-sub textarea.wiktku-dfn-nimune-quote-t {
--wiktku-ta-rows: 4;
font-size: 1em;
}
/* Citoid URL/DOI/ISBN box: taller tap target (~2 lines) on mobile,
and now that this field is a <textarea> (see start.js) its
placeholder can actually wrap into that space — a plain <input>'s
placeholder can never wrap, no matter its height. */
.wiktku-dfn-quote-citoid-input {
min-height: calc(2 * 1.35em + 10px);
font-size: 1em;
}
.wiktku-dfn-nimune-sub,
.wiktku-dfn-quote-sub {
margin-left: 0.5em;
padding-left: 0.4em;
}
.wiktku-pron-wrap .wiktku-native-select-wrap input.wiktku-ac-input,
.wiktku-etym-wrap .wiktku-native-select-wrap input.wiktku-ac-input {
font-size: 1em;
min-height: 2.2em;
}
.wiktku-dfn-quote-src-row label {
min-width: 6em;
}
#wiktku-start-form textarea.wiktku-dfn-quote-src-input {
width: 100%;
flex: 1 1 100%;
}
.wiktku-start-step {
padding: 0.5em 0.6em;
}
}
/* ===================================================================
Night mode
Palette.css already flips every --wikt-palette-* var for night mode,
so rules built from those vars need nothing here. This hook is only
for real colours that can't be a palette var — here, the panel border,
since a drop shadow is invisible against an equally dark page.
Not needed: li:active's white text already flips to a dark colour at
night via --wikt-palette-white, so it stays legible on its own.
=================================================================== */
@media screen {
html.skin-theme-clientpref-night .wiktku-ac-results {
/* Border stands in for the shadow, invisible on a dark page. */
border-color: var(--wikt-palette-grey-5);
box-shadow: 0 3px 10px rgba(0, 0, 0, 0.6);
}
html.skin-theme-clientpref-night .wiktku-start-step,
html.skin-theme-clientpref-night .wiktku-start-step:hover,
html.skin-theme-clientpref-night .wiktku-start-step:focus-within {
box-shadow: none;
}
}
@media screen and (prefers-color-scheme: dark) {
html.skin-theme-clientpref-os .wiktku-ac-results {
border-color: var(--wikt-palette-grey-5);
box-shadow: 0 3px 10px rgba(0, 0, 0, 0.6);
}
html.skin-theme-clientpref-os .wiktku-start-step,
html.skin-theme-clientpref-os .wiktku-start-step:hover,
html.skin-theme-clientpref-os .wiktku-start-step:focus-within {
box-shadow: none;
}
}
/* "Zimanek lê zêde bike" portlet icon (Minerva/mobile) — Feather-core-edit.svg
via CSS mask, matching Minerva's own icon pattern. */
.minerva-icon-portletlink-ca-wiktku-addlang {
-webkit-mask-image: url("https://upload.wikimedia.org/wikipedia/commons/d/d7/Feather-core-edit.svg");
mask-image: url("https://upload.wikimedia.org/wikipedia/commons/d/d7/Feather-core-edit.svg");
-webkit-mask-repeat: no-repeat;
mask-repeat: no-repeat;
-webkit-mask-position: center;
mask-position: center;
-webkit-mask-size: 20px;
mask-size: 20px;
background-color: currentColor;
background-image: none;
}
/* ── posparams step (live wikitext + helper widgets) ── */
.wiktku-posparams-wrap {
display: flex;
flex-direction: column;
gap: 6px;
}
.wiktku-posparams-helpers {
display: flex;
flex-direction: column;
gap: 4px;
}
.wiktku-posparams-row {
display: flex;
align-items: center;
gap: 6px;
flex-wrap: wrap;
}
.wiktku-posparams-row label {
/* Rewiye tine, 14 Tebax 2026: these were the smallest labels on the whole
card (0.9em, one step below everything else) — the mobile breakpoint
already bumps this to 1em below; matching that on desktop too instead
of only fixing it for mobile. */
font-size: 1em;
min-width: 10em;
padding-right: 0;
}
.wiktku-posparams-text {
width: 100%;
box-sizing: border-box;
font-family: monospace;
font-size: 0.9em;
}
.wiktku-posparams-opt-toggle {
font-size: 0.85em;
margin-top: 2px;
display: inline-block;
}
.wiktku-posparams-opt-panel {
display: flex;
flex-direction: column;
gap: 2px;
padding: 4px 0 2px 1em;
}
.wiktku-posparams-opt-row {
display: flex;
align-items: center;
gap: 4px;
font-size: 0.85em;
}
/* ── resim step (one or more images) ── */
.wiktku-resim-list {
display: flex;
flex-direction: column;
gap: 6px;
}
.wiktku-resim-item {
display: flex;
flex-direction: column;
gap: 4px;
}
.wiktku-resim-item .wiktku-posparams-row {
flex-direction: column;
align-items: flex-start;
gap: 2px;
}
.wiktku-resim-item .wiktku-posparams-row label {
min-width: 0;
font-size: 0.9em;
}
/* ── dfn: "hide/show all subsections" link ──
Same show/hide-link pattern as "Tercîhên pêşketî" (posparams), but
toggles a class on the whole dfn stepDiv rather than one panel, so
a single click hides the etîket/kategorî/hevmane/dijmane/nimûne/
jêgirtin/etc. subgroups across every sense block at once (see
steps.dfn.build in start.js). */
.wiktku-dfn-subs-toggle {
font-size: 0.85em;
font-weight: 500;
display: inline-block;
margin: 2px 0 8px;
color: var(--wikt-palette-blue-9, #3366cc);
text-decoration: none;
}
.wiktku-dfn-subs-toggle:hover {
text-decoration: underline;
}
/* Only the ADVANCED subgroups collapse now (Ghybu, 14 Tebax 2026): Nimûne,
Jêgirtin, Hevmane and Dijmane stay open because they are what people
actually come here to fill in — see steps.dfn.allGroups, whose adv: flag
is what puts this class on a group. */
#wiktku-start-form li.wiktku-sense-adv-hidden .wiktku-dfn-subgroup-adv {
display: none !important;
}
/* The toggle sits between the primary groups and the advanced ones, so it
needs no rule of its own beyond a little breathing room. */
#wiktku-start-form .wiktku-sense-adv-row {
margin-top: 14px;
}
/* ===================================================================
Desktop text bump
The modifier pills/buttons and posparams helper text (labels,
"Tercîhên pêşketî" opt panel) use fairly small font-sizes that read
fine on mobile — narrow-viewport rendering effectively scales them
up — but look too small on a full desktop screen at their literal
em size. Bump them up past the 720px breakpoint only; mobile keeps
the original sizing above.
=================================================================== */
@media (min-width: 721px) {
.wiktku-mod-btn,
.wiktku-mod-confirm,
.wiktku-mod-cancel {
width: 1.8em;
height: 1.8em;
font-size: 1.1em;
}
.wiktku-mod-pill {
font-size: 0.95em;
padding: 3px 10px;
}
.wiktku-mod-val-input {
font-size: 0.95em;
}
.wiktku-posparams-row label {
font-size: 1em;
}
.wiktku-posparams-text {
font-size: 1em;
}
.wiktku-posparams-opt-toggle {
font-size: 0.95em;
}
.wiktku-posparams-opt-row {
font-size: 0.95em;
}
.wiktku-dfn-subs-toggle {
font-size: 0.95em;
}
/* Item 2 (Wikihez, 14 Tebax 2026): "sê-stûnî" — the same side-by-side,
multi-column card layout Ghybu asked for on POS/Cîns/Jimar now
applies to every posparams helper field (transliteration, gendered
forms, comparative/superlative, hanja, verb-tense roots, …), not
just those first two. Desktop-only per Wikihez's note that this isn't
supported on mobile — the plain stacked list above stays as-is
below this breakpoint. Rows are toggled via jQuery .show()/.hide()
(inline display:block/none) same as before; the grid only changes
how visible rows are arranged, not which ones are visible. */
.wiktku-posparams-helpers {
display: grid;
grid-template-columns: repeat(auto-fill, minmax(180px, 1fr));
gap: 10px 16px;
align-items: start;
}
.wiktku-posparams-helpers > .wiktku-posparams-row {
flex-direction: column;
align-items: stretch;
flex-wrap: nowrap;
gap: 3px;
}
.wiktku-posparams-helpers > .wiktku-posparams-row label {
min-width: 0;
}
.wiktku-posparams-helpers > .wiktku-posparams-row .wiktku-posparams-field,
.wiktku-posparams-helpers > .wiktku-posparams-row select.wiktku-posparams-cinsiyet-sel,
.wiktku-posparams-helpers > .wiktku-posparams-row select.wiktku-posparams-lektur-sel {
width: 100%;
max-width: 100%;
box-sizing: border-box;
}
/* The "Jimar" row added for item 1 lives here too (see start.js) — no
extra CSS needed, it's just another .wiktku-posparams-row. */
/* These two aren't per-field rows — span the full card width so the
collapsed toggle and its checkbox list don't get squeezed into one
narrow column. */
.wiktku-posparams-helpers > .wiktku-posparams-opt-toggle,
.wiktku-posparams-helpers > .wiktku-posparams-opt-panel {
grid-column: 1 / -1;
}
}
/* ===================================================================
SÊWIRANA NÛ — design system layer
===================================================================
From the "Cerdevanê ketanê — sêwirana nû" spec (15 Tebax 2026).
Appended rather than merged into the rules above on purpose: everything
before this point is layout (what sits next to what, which row wraps
where) and still does its job. This block is purely the visual skin —
colour, type, weight, radius, spacing — so it comes last and wins, and
so a future revert is a delete of one contiguous section.
Two deliberate deviations from the spec document:
1. No @import of Spectral / IBM Plex from Google Fonts. Wikimedia wikis
send a Content-Security-Policy that blocks third-party font hosts,
so the import would fail silently and we would ship a broken-looking
fallback nobody chose. The stacks below name the spec's faces first
(so they are used if the wiki ever installs them locally) and then
fall back to faces with the same feel: a transitional serif for
headings, the UI sans for body, the platform mono for wikitext.
2. Blue is spent, not sprayed. Ghybu, 14 Tebax 2026: "hemû bi rengê şîn
hatine çêkirin, nizanim beşên din (===) bi rengê gewr an reş çito
dibe?" — so section headings are near-black now and the accent is
reserved for things you can act on: focus, links, the active tab,
the primary button, chips.
=================================================================== */
#wiktku-start-form {
/* Surfaces */
--wikt-page: #f4efe5;
--wikt-card: #fffdf8;
--wikt-card-sunken: #fbf8f1;
--wikt-rule: #ded6c8; /* structural hairline */
--wikt-rule-soft: #efe8db; /* inside a card */
--wikt-field-edge: #cfc7b8;
--wikt-field-bg: #fff;
--wikt-code-bg: #f7f4ec;
--wikt-card-edge: #e6dfd2;
/* Ink */
--wikt-ink: #1c1a17;
--wikt-ink-2: #3d3830;
--wikt-ink-3: #57514a;
--wikt-muted: #8a8378;
--wikt-placeholder: #b3ab9e;
/* Accent + status */
--wikt-accent: #2a5db0;
--wikt-accent-deep: #22406f;
--wikt-accent-tint: #eef2fa;
--wikt-accent-edge: #d5def0;
--wikt-danger: #9c3a28;
--wikt-on-accent: #fff; /* text on a filled accent button */
--wikt-link-under: rgba(42, 93, 176, 0.35);
/* Shape */
--wikt-r-field: 10px;
--wikt-r-card: 14px;
--wikt-r-pill: 999px;
--wikt-tap: 44px; /* minimum field height */
--wikt-serif: Spectral, "Iowan Old Style", Georgia, "Times New Roman", serif;
--wikt-sans: "IBM Plex Sans", system-ui, -apple-system, "Segoe UI", sans-serif;
--wikt-mono: "IBM Plex Mono", ui-monospace, SFMono-Regular, Menlo, Consolas, monospace;
font-family: var(--wikt-sans);
font-size: 15px;
line-height: 1.55;
color: var(--wikt-ink);
background: var(--wikt-page);
padding: 24px;
border-radius: var(--wikt-r-card);
}
/* ── Cards ───────────────────────────────────────────────────────────
The old card had a 4px blue left bar and two shadows. The spec is
explicit — "Ti sî (shadow) tune; tenê xetên 1px" — so the card is
now a flat cream panel held by a single hairline. */
#wiktku-start-form .wiktku-start-step {
background: var(--wikt-card);
border: 1px solid var(--wikt-card-edge);
border-left: 1px solid var(--wikt-card-edge);
border-radius: var(--wikt-r-card);
box-shadow: none;
padding: 24px 24px 20px;
margin-bottom: 16px;
transition: border-color 0.12s ease;
}
#wiktku-start-form .wiktku-start-step:hover,
#wiktku-start-form .wiktku-start-step:focus-within {
box-shadow: none;
border-color: var(--wikt-rule);
}
/* The fused pos + posparams pair keeps reading as one card. */
#wiktku-start-form #wiktku-start-pos {
border-radius: var(--wikt-r-card) var(--wikt-r-card) 0 0;
border-bottom: none;
padding-bottom: 8px;
}
#wiktku-start-form #wiktku-start-posparams {
border-radius: 0 0 var(--wikt-r-card) var(--wikt-r-card);
border-top: none;
padding-top: 4px;
}
/* ── Type ────────────────────────────────────────────────────────────
Step headings: serif, regular weight, near-black. Previously bold,
letterspaced and blue — three signals doing one job. */
#wiktku-start-form .wiktku-start-step-name {
font-family: var(--wikt-serif);
font-size: 24px !important;
font-weight: 400;
letter-spacing: -0.01em;
line-height: 1.15;
color: var(--wikt-ink);
margin: 0 0 12px;
}
/* display:block matters: this is a <label>, so it was sharing a line with
the control it introduces wherever start.js didn't emit a <br>. */
#wiktku-start-form .wiktku-start-step-question {
display: block;
font-size: 15px;
font-weight: 400;
color: var(--wikt-ink-3);
margin: 0 0 12px;
line-height: 1.6;
max-width: 62ch;
}
/* Same reason — a field label belongs above its field, not beside it. */
#wiktku-start-form .wiktku-posparams-row label,
#wiktku-start-form .wiktku-dfn-sublabel {
display: block;
margin-bottom: 6px;
padding-right: 0;
}
/* Field labels: small, medium weight, full-strength ink — they label a
control, so they should not read as body copy. */
#wiktku-start-form .wiktku-start-step label,
#wiktku-start-form .wiktku-posparams-row label,
#wiktku-start-form .wiktku-dfn-sublabel {
font-size: 13px;
font-weight: 500;
color: var(--wikt-ink);
letter-spacing: 0.01em;
}
/* The parenthetical/example half of a label is supporting text. */
#wiktku-start-form .wiktku-dfn-sublabel-hint,
#wiktku-start-form .wiktku-step-hint {
font-weight: 400;
font-style: italic;
color: var(--wikt-muted);
font-size: 12.5px;
}
/* ── Fields ──────────────────────────────────────────────────────────
One shape for every control: 1px edge, 10px radius, 44px tall. */
#wiktku-start-form input[type="text"],
#wiktku-start-form input[type="search"],
#wiktku-start-form input.wiktku-ac-input,
#wiktku-start-form textarea,
#wiktku-start-form select {
font-family: var(--wikt-sans);
font-size: 15px;
color: var(--wikt-ink);
background: var(--wikt-field-bg);
border: 1px solid var(--wikt-field-edge);
border-radius: var(--wikt-r-field);
padding: 10px 14px;
box-shadow: none;
transition: border-color 0.12s ease, box-shadow 0.12s ease;
}
#wiktku-start-form input[type="text"],
#wiktku-start-form input[type="search"],
#wiktku-start-form select {
min-height: var(--wikt-tap);
}
#wiktku-start-form textarea {
line-height: 1.6;
}
/* Wikitext and anything template-shaped reads as code. */
#wiktku-start-form .wiktku-posparams-text,
#wiktku-start-form .wiktku-pron-text,
#wiktku-start-form .wiktku-etym-text,
#wiktku-start-form .wiktku-cavkani-text,
#wiktku-start-form .wiktku-tewandin-text,
#wiktku-start-form .wiktku-pron-preview-body {
font-family: var(--wikt-mono);
font-size: 13.5px;
background: var(--wikt-code-bg);
border-color: var(--wikt-card-edge);
}
#wiktku-start-form ::placeholder {
color: var(--wikt-placeholder);
opacity: 1;
}
/* Focus: accent edge + 3px tint halo. The only "elevation" in the design. */
#wiktku-start-form input[type="text"]:focus,
#wiktku-start-form input[type="search"]:focus,
#wiktku-start-form textarea:focus,
#wiktku-start-form select:focus,
#wiktku-start-form input.wiktku-ac-input:focus {
border-color: var(--wikt-accent);
box-shadow: 0 0 0 3px var(--wikt-accent-tint);
outline: 0;
}
/* The searchable picker's visible input is the field, so it takes the
field shape too (it otherwise inherits an older, boxier rule). */
#wiktku-start-form input.wiktku-ac-input {
min-height: var(--wikt-tap);
border-radius: var(--wikt-r-field);
border-color: var(--wikt-field-edge);
font-size: 15px;
}
#wiktku-start-form .wiktku-ac-results {
border: 1px solid var(--wikt-rule);
border-radius: var(--wikt-r-field);
background: var(--wikt-card);
box-shadow: none;
}
#wiktku-start-form .wiktku-ac-results li.wiktku-ac-active,
#wiktku-start-form .wiktku-ac-results li:hover {
background: var(--wikt-accent-tint);
color: var(--wikt-accent-deep);
}
/* ── Tabs → the accent's main job ────────────────────────────────────
Active tab: tint fill + 3px accent underline, per the spec's
"xala hûrgulî" note. Inactive tabs are plain text. */
#wiktku-start-form #wiktku-group-tabs,
#wiktku-start-form #wiktku-section-tabs {
display: flex;
flex-wrap: wrap;
gap: 4px;
align-items: center;
border-bottom: 1px solid var(--wikt-rule);
margin-bottom: 16px;
padding-bottom: 0;
}
#wiktku-start-form .wiktku-group-tab,
#wiktku-start-form .wiktku-section-tab {
font-size: 13.5px;
font-weight: 500;
color: var(--wikt-ink-3);
background: transparent;
border: 0;
border-bottom: 3px solid transparent;
border-radius: var(--wikt-r-pill) var(--wikt-r-pill) 0 0;
padding: 9px 14px 11px;
cursor: pointer;
transition: background 0.12s ease, color 0.12s ease;
}
#wiktku-start-form .wiktku-group-tab:hover,
#wiktku-start-form .wiktku-section-tab:hover {
background: var(--wikt-card-sunken);
color: var(--wikt-ink);
}
#wiktku-start-form .wiktku-group-tab.wiktku-tab-active,
#wiktku-start-form .wiktku-section-tab.wiktku-tab-active {
background: var(--wikt-accent-tint);
color: var(--wikt-accent);
border-bottom-color: var(--wikt-accent);
}
/* ── Progressive-disclosure toggles ──────────────────────────────────
Shared by "Tercîhên pêşketî" (posparams) and "Malûmatên pêşketî"
(Mane). Both are now the main way the form stays short, so they get a
real affordance — a rotating chevron and a count of what is behind
them — instead of a small blue link. */
#wiktku-start-form .wiktku-adv-toggle-row {
display: flex;
align-items: center;
justify-content: space-between;
gap: 16px;
flex-wrap: wrap;
margin: 4px 0 12px;
padding-top: 16px;
border-top: 1px solid var(--wikt-rule-soft);
}
#wiktku-start-form .wiktku-adv-toggle {
display: inline-flex;
align-items: center;
gap: 10px;
font-size: 14px;
font-weight: 500;
color: var(--wikt-accent);
text-decoration: none;
cursor: pointer;
}
#wiktku-start-form .wiktku-adv-toggle:hover .wiktku-adv-toggle-text {
text-decoration: underline;
}
#wiktku-start-form .wiktku-adv-toggle-chevron {
width: 22px;
height: 22px;
flex: 0 0 22px;
display: grid;
place-items: center;
font-size: 11px;
border: 1px solid var(--wikt-accent-edge);
background: var(--wikt-accent-tint);
border-radius: 6px;
transform: rotate(-90deg);
transition: transform 0.15s ease;
}
/* Open state: dfn flips the class on the step, posparams on the link. */
#wiktku-start-form .wiktku-adv-toggle.wiktku-adv-open .wiktku-adv-toggle-chevron,
#wiktku-start-dfn:not(.wiktku-dfn-subs-hidden) .wiktku-adv-toggle-chevron {
transform: rotate(0deg);
}
#wiktku-start-form .wiktku-adv-toggle-count {
font-family: var(--wikt-mono);
font-size: 12px;
color: var(--wikt-muted);
white-space: nowrap;
}
#wiktku-start-form .wiktku-posparams-adv-panel {
border: 1px solid var(--wikt-rule-soft);
border-radius: 12px;
background: var(--wikt-card-sunken);
padding: 20px 18px;
margin-bottom: 4px;
}
/* ── posparams grid ──────────────────────────────────────────────────
"Tor, ne rêz" — two columns, nothing narrower than 220px, so the six
gender/number fields stop being a six-across scanline. */
@media (min-width: 721px) {
#wiktku-start-form .wiktku-posparams-helpers,
#wiktku-start-form .wiktku-posparams-adv-panel {
display: grid;
grid-template-columns: repeat(auto-fill, minmax(220px, 1fr));
gap: 18px 22px;
align-items: start;
}
#wiktku-start-form .wiktku-posparams-adv-panel > .wiktku-posparams-row,
#wiktku-start-form .wiktku-posparams-helpers > .wiktku-posparams-row {
flex-direction: column;
align-items: stretch;
flex-wrap: nowrap;
gap: 7px;
}
#wiktku-start-form .wiktku-posparams-helpers > .wiktku-adv-toggle-row,
#wiktku-start-form .wiktku-posparams-helpers > .wiktku-posparams-adv-panel,
#wiktku-start-form .wiktku-posparams-adv-panel > .wiktku-posparams-opt-panel {
grid-column: 1 / -1;
}
}
#wiktku-start-form .wiktku-posparams-opt-panel {
border-top: 1px solid var(--wikt-rule-soft);
padding-top: 14px;
margin-top: 4px;
}
#wiktku-start-form .wiktku-posparams-opt-row {
font-size: 13px;
color: var(--wikt-ink-3);
}
/* ── Sense blocks ────────────────────────────────────────────────────
Each sense is a sunken panel inside the Mane card, with its number as
an accent counter — so "how many meanings am I writing" is legible at
a glance. */
#wiktku-start-form .wiktku-dfn-subgroup {
margin: 14px 0 0;
padding-top: 14px;
border-top: 1px solid var(--wikt-rule-soft);
}
/* Nimûne leads the list now, and a divider above the first item would be
a rule against the sense's own text. (Needed explicitly: the older
:first-of-type rule further up is a class selector and loses to the
id-scoped one above.) */
#wiktku-start-form .wiktku-dfn-subgroup:first-of-type {
margin-top: 8px;
padding-top: 0;
border-top: none;
}
#wiktku-start-form .wiktku-dfn-sublabel-term {
color: var(--wikt-ink);
}
/* Every sense sub-field is a plain white field like any other. Older rules
gave several of them a tinted fill, which read as "disabled" next to the
white Mane box directly above them. */
#wiktku-start-form .wiktku-dfn-subfield,
#wiktku-start-form textarea.wiktku-dfn-mane {
background: var(--wikt-field-bg);
border: 1px solid var(--wikt-field-edge);
border-radius: var(--wikt-r-field);
}
/* No "1." "2." markers on the sub-lists. Ghybu, 14 Tebax 2026, on exactly
this: numbered rows read as a form you must fill from the top down, when
really each row is just "another one if you have another one" — and with
a block-level textarea per row the marker also lands on its own line
above the field, which looks like a stray character. */
#wiktku-start-form .wiktku-dfn-sublist {
margin: 0;
padding-left: 0;
list-style: none;
}
#wiktku-start-form .wiktku-dfn-sublist > li {
margin-bottom: 6px;
}
/* ── Chips: tags, modifiers, template pills ──────────────────────────── */
#wiktku-start-form .wiktku-mod-pill,
#wiktku-start-form .wiktku-besendin-select + .wiktku-chip {
background: var(--wikt-accent-tint);
color: var(--wikt-accent-deep);
border: 1px solid var(--wikt-accent-edge);
border-radius: var(--wikt-r-pill);
font-size: 13px;
padding: 6px 12px;
}
#wiktku-start-form .wiktku-mod-btn,
#wiktku-start-form .wiktku-mod-confirm,
#wiktku-start-form .wiktku-mod-cancel {
border: 1px solid var(--wikt-accent-edge);
background: var(--wikt-accent-tint);
color: var(--wikt-accent);
border-radius: 8px;
}
/* ── Footer + buttons ────────────────────────────────────────────────
Spec: one primary pill, everything else quiet. The two red buttons
sitting next to it are the loudest thing on the old screen for no
reason — they become outline buttons in the danger colour instead of
filled ones. */
#wiktku-start-form #wiktku-start-footer {
background: var(--wikt-card-sunken);
border-top: 1px solid var(--wikt-rule);
border-radius: 0 0 var(--wikt-r-card) var(--wikt-r-card);
padding: 16px 20px;
gap: 10px;
}
#wiktku-start-form #wiktku-start-footer .oo-ui-buttonElement-button {
border-radius: var(--wikt-r-pill) !important;
font-family: var(--wikt-sans);
font-size: 14px;
font-weight: 500;
padding: 11px 22px;
box-shadow: none !important;
min-height: var(--wikt-tap);
}
#wiktku-start-form #wiktku-unhide-editform .oo-ui-buttonElement-button {
background: var(--wikt-accent) !important;
border-color: var(--wikt-accent) !important;
color: var(--wikt-on-accent) !important;
}
/* Destructive actions: outline, not fill. */
#wiktku-start-form #wiktku-start-footer .oo-ui-flaggedElement-destructive .oo-ui-buttonElement-button {
background: var(--wikt-card) !important;
border-color: var(--wikt-danger) !important;
color: var(--wikt-danger) !important;
}
#wiktku-start-form #wiktku-last-saved {
font-family: var(--wikt-mono);
font-size: 12px;
color: var(--wikt-muted);
}
/* ── Beşên din picker ────────────────────────────────────────────────
This dropdown is now the entry point to eighteen sections, so it gets
room and a label rather than sitting flush under the tab bar. */
#wiktku-start-form .wiktku-besendin-picker {
margin: 0 0 20px;
padding: 16px 18px;
background: var(--wikt-card);
border: 1px solid var(--wikt-card-edge);
border-radius: 12px;
}
#wiktku-start-form .wiktku-besendin-picker .wiktku-native-select-wrap,
#wiktku-start-form .wiktku-besendin-picker input.wiktku-ac-input {
width: 100%;
max-width: 28em;
}
/* ── Notices ─────────────────────────────────────────────────────────── */
#wiktku-start-form .wiktku-addlang-notice {
background: var(--wikt-accent-tint);
border: 1px solid var(--wikt-accent-edge);
border-radius: var(--wikt-r-field);
color: var(--wikt-ink-2);
padding: 12px 16px;
margin-bottom: 16px;
}
#wiktku-start-form .wiktku-pron-preview {
background: var(--wikt-accent-tint);
border-color: var(--wikt-accent-edge);
border-radius: 12px;
}
#wiktku-start-form .wiktku-pron-preview-confirm,
#wiktku-start-form .wiktku-pron-preview-cancel {
border-radius: var(--wikt-r-pill);
padding: 8px 16px;
min-height: 36px;
}
/* Links carry the accent and a soft underline, per the spec's `a` rule. */
#wiktku-start-form a {
color: var(--wikt-accent);
text-decoration: none;
border-bottom: 1px solid var(--wikt-link-under);
}
#wiktku-start-form a:hover {
color: var(--wikt-accent-deep);
}
#wiktku-start-form .wiktku-adv-toggle,
#wiktku-start-form .wiktku-group-tab,
#wiktku-start-form .wiktku-section-tab {
border-bottom-style: solid;
}
#wiktku-start-form .wiktku-adv-toggle {
border-bottom: 0;
}
/* ===================================================================
Dark mode
===================================================================
Every colour above is a token on #wiktku-start-form, so night mode is
a swap of that one block — no rule is duplicated.
Three selectors, because MediaWiki has three states and guessing wrong
is worse than not supporting it: an explicit night choice, "follow my
OS" plus an OS that says dark, and skins old enough to set no theme
class at all (older mobile output), where prefers-color-scheme is the
only signal available. The :not() chain on the last one keeps it from
overriding someone who explicitly asked for day mode.
The palette is warm, not neutral grey — a straight inversion of a cream
design lands on blue-grey and loses the character of it. Accent lightens
to #7ba7e8: #2a5db0 on a dark card is around 2.4:1, which fails contrast
and reads as near-black.
=================================================================== */
html.skin-theme-clientpref-night #wiktku-start-form,
html.skin-nightmode #wiktku-start-form {
--wikt-page: #171613;
--wikt-card: #201e1a;
--wikt-card-sunken: #1a1916;
--wikt-card-edge: #322e28;
--wikt-rule: #3a3630;
--wikt-rule-soft: #2c2924;
--wikt-field-edge: #4a453d;
--wikt-field-bg: #191815;
--wikt-code-bg: #14130f;
--wikt-ink: #ece7dd;
--wikt-ink-2: #d5cfc4;
--wikt-ink-3: #b3aca1;
--wikt-muted: #8f887c;
--wikt-placeholder: #6d675e;
--wikt-accent: #7ba7e8;
--wikt-accent-deep: #cfe0f8;
--wikt-accent-tint: #1c2839;
--wikt-accent-edge: #35496b;
--wikt-danger: #e5907c;
--wikt-on-accent: #14213a;
--wikt-link-under: rgba(123, 167, 232, 0.4);
}
@media screen and (prefers-color-scheme: dark) {
html.skin-theme-clientpref-os #wiktku-start-form,
html:not(.skin-theme-clientpref-day):not(.skin-theme-clientpref-night):not(.skin-theme-clientpref-os) #wiktku-start-form {
--wikt-page: #171613;
--wikt-card: #201e1a;
--wikt-card-sunken: #1a1916;
--wikt-card-edge: #322e28;
--wikt-rule: #3a3630;
--wikt-rule-soft: #2c2924;
--wikt-field-edge: #4a453d;
--wikt-field-bg: #191815;
--wikt-code-bg: #14130f;
--wikt-ink: #ece7dd;
--wikt-ink-2: #d5cfc4;
--wikt-ink-3: #b3aca1;
--wikt-muted: #8f887c;
--wikt-placeholder: #6d675e;
--wikt-accent: #7ba7e8;
--wikt-accent-deep: #cfe0f8;
--wikt-accent-tint: #1c2839;
--wikt-accent-edge: #35496b;
--wikt-danger: #e5907c;
--wikt-on-accent: #14213a;
--wikt-link-under: rgba(123, 167, 232, 0.4);
}
}
/* A handful of pre-design-layer rules still name literal light colours
(they predate the tokens). Rather than hunt every one, neutralise the
ones that actually show through in night mode. */
html.skin-theme-clientpref-night #wiktku-start-form .wiktku-ac-results,
html.skin-nightmode #wiktku-start-form .wiktku-ac-results {
background: var(--wikt-card);
border-color: var(--wikt-rule);
color: var(--wikt-ink);
}
@media screen and (prefers-color-scheme: dark) {
html.skin-theme-clientpref-os #wiktku-start-form .wiktku-ac-results,
html:not(.skin-theme-clientpref-day):not(.skin-theme-clientpref-night):not(.skin-theme-clientpref-os) #wiktku-start-form .wiktku-ac-results {
background: var(--wikt-card);
border-color: var(--wikt-rule);
color: var(--wikt-ink);
}
}
/* ===================================================================
Autocomplete list: stop it escaping its card
===================================================================
ul.wiktku-ac-results carried a hard `width: 20em` regardless of the
field it belongs to. On the full-width pickers — "Çavkanî hilbijêre" is
the obvious one — the list is absolutely positioned at the wrapper's
left edge, so a fixed 20em runs straight past the card's right border
whenever the card is narrower than that.
The wrapper is shrink-to-fit around its input, so `width: 100%` here
means "exactly as wide as the field I belong to" — which is what a
combobox should do — while min-width keeps the short pickers readable
and max-width stops either from leaving the viewport. */
#wiktku-start-form ul.wiktku-ac-results {
width: 100%;
min-width: min(18em, 100%);
max-width: min(92vw, 34em);
box-sizing: border-box;
border-radius: var(--wikt-r-field);
box-shadow: none;
}
/* And the wrapper itself must not exceed the card it sits in. */
#wiktku-start-form .wiktku-native-select-wrap {
max-width: 100%;
}
#wiktku-start-form .wiktku-cavkani-wrap .wiktku-native-select-wrap,
#wiktku-start-form .wiktku-cavkani-wrap input.wiktku-ac-input,
#wiktku-start-form .wiktku-pron-wrap .wiktku-native-select-wrap,
#wiktku-start-form .wiktku-etym-wrap .wiktku-native-select-wrap {
width: 100%;
max-width: 100%;
box-sizing: border-box;
}
/* ===================================================================
Mobile: the footer was the loudest thing on a small screen
===================================================================
Four 44px-tall pills with 22px of side padding wrap into three rows and
eat most of a phone viewport — and the footer is sticky, so that stays
on screen the whole time. Below 720px the primary button keeps its full
size (it is the one you press) and everything else shrinks to a
secondary scale.
=================================================================== */
@media (max-width: 720px) {
#wiktku-start-form {
padding: 12px;
font-size: 14px;
}
#wiktku-start-form .wiktku-start-step {
padding: 16px 14px 14px;
border-radius: 12px;
}
#wiktku-start-form .wiktku-start-step-name {
font-size: 20px !important;
}
#wiktku-start-form #wiktku-start-footer {
padding: 10px 12px;
gap: 6px;
row-gap: 8px;
}
#wiktku-start-form #wiktku-start-footer .oo-ui-buttonElement-button {
font-size: 13px;
padding: 8px 14px;
min-height: 38px;
}
/* The one you actually press stays thumb-sized. */
#wiktku-start-form #wiktku-unhide-editform .oo-ui-buttonElement-button {
font-size: 14px;
padding: 10px 20px;
min-height: var(--wikt-tap);
}
/* Secondary actions share a row instead of each claiming a full one. */
#wiktku-start-form #wiktku-start-footer .oo-ui-buttonElement {
flex: 0 1 auto;
}
#wiktku-start-form #wiktku-last-saved {
flex: 1 0 100%;
order: 10;
font-size: 11px;
white-space: normal;
}
#wiktku-start-form .wiktku-adv-toggle-row {
gap: 8px;
}
#wiktku-start-form .wiktku-adv-toggle-count {
font-size: 11px;
}
}
/* ===================================================================
IPA character palette (v3 spec)
===================================================================
Click-to-insert chart under Bilêvkirin, after fr.wiktionary's. Two
sub-tabs — a short Kurmancî set that opens by default, and the full
chart — because ~20 of the ~180 IPA symbols ever occur in Kurmancî
and showing all of them first is the same "wall of fields" problem
this redesign exists to fix.
=================================================================== */
#wiktku-start-form .wiktku-ipa-panel {
border: 1px solid var(--wikt-card-edge);
border-radius: 12px;
background: var(--wikt-card-sunken);
padding: 0 0 12px;
margin-bottom: 8px;
overflow: hidden;
}
#wiktku-start-form .wiktku-ipa-subtabs {
display: flex;
align-items: center;
gap: 4px;
padding: 8px 12px 0;
border-bottom: 1px solid var(--wikt-rule-soft);
margin-bottom: 12px;
flex-wrap: wrap;
}
#wiktku-start-form .wiktku-ipa-subtab {
font-size: 13px;
font-weight: 500;
color: var(--wikt-ink-3);
padding: 7px 12px 9px;
border-bottom: 3px solid transparent;
border-radius: 8px 8px 0 0;
cursor: pointer;
}
#wiktku-start-form .wiktku-ipa-subtab:hover {
background: var(--wikt-card);
color: var(--wikt-ink);
}
#wiktku-start-form .wiktku-ipa-subtab.wiktku-tab-active {
background: var(--wikt-accent-tint);
color: var(--wikt-accent);
border-bottom-color: var(--wikt-accent);
}
/* Templates are not characters, so they sit apart from the chart —
pinned to the right of the sub-tab row. */
#wiktku-start-form .wiktku-ipa-tplbtns {
margin-left: auto;
display: flex;
gap: 6px;
padding-bottom: 6px;
}
#wiktku-start-form .wiktku-ipa-tplbtn {
font-family: var(--wikt-mono);
font-size: 12px;
padding: 6px 10px;
border-radius: 7px;
border: 1px solid var(--wikt-accent-edge);
background: var(--wikt-accent-tint);
color: var(--wikt-accent);
cursor: pointer;
white-space: nowrap;
}
#wiktku-start-form .wiktku-ipa-tplbtn:hover {
border-color: var(--wikt-accent);
}
#wiktku-start-form .wiktku-ipa-grid {
display: flex;
flex-direction: column;
gap: 8px;
padding: 0 12px;
}
#wiktku-start-form .wiktku-ipa-row {
display: flex;
align-items: flex-start;
gap: 10px;
}
#wiktku-start-form .wiktku-ipa-rowlabel {
flex: 0 0 74px;
font-size: 11.5px;
color: var(--wikt-muted);
padding-top: 8px;
line-height: 1.3;
}
#wiktku-start-form .wiktku-ipa-keys {
display: flex;
flex-wrap: wrap;
gap: 4px;
flex: 1 1 auto;
}
#wiktku-start-form .wiktku-ipa-key {
width: 30px;
height: 30px;
padding: 0;
border-radius: 8px;
border: 1px solid var(--wikt-field-edge);
background: var(--wikt-field-bg);
color: var(--wikt-ink);
font-family: var(--wikt-mono);
font-size: 14px;
line-height: 1;
cursor: pointer;
display: grid;
place-items: center;
transition: background 0.1s ease, border-color 0.1s ease;
}
#wiktku-start-form .wiktku-ipa-key:hover {
background: var(--wikt-accent-tint);
border-color: var(--wikt-accent);
color: var(--wikt-accent-deep);
}
#wiktku-start-form .wiktku-ipa-key:active {
transform: translateY(1px);
}
/* Ligatures like d͡ʒ and long vowels need a little more room than one
glyph; let those keys grow instead of clipping. */
#wiktku-start-form .wiktku-ipa-key {
width: auto;
min-width: 30px;
padding: 0 5px;
}
/* A combining mark is shown on a dotted circle so it has something to
attach to; only the mark itself is inserted. */
#wiktku-start-form .wiktku-ipa-key-combining {
color: var(--wikt-ink-2);
}
@media (max-width: 720px) {
#wiktku-start-form .wiktku-ipa-row {
flex-direction: column;
gap: 3px;
}
#wiktku-start-form .wiktku-ipa-rowlabel {
flex: 0 0 auto;
padding-top: 0;
}
#wiktku-start-form .wiktku-ipa-key {
min-width: 34px;
height: 34px;
}
}
/* ── "+ Beş zêde bike" menu ──────────────────────────────────────────
Adding a part of speech and adding Bilêvkirin are different actions,
so the button opens a small menu instead of doing one of them. */
#wiktku-start-form .wiktku-addsection-menu {
position: absolute;
z-index: 60;
margin-top: 6px;
min-width: 15em;
background: var(--wikt-card);
border: 1px solid var(--wikt-rule);
border-radius: 10px;
padding: 4px;
display: flex;
flex-direction: column;
}
#wiktku-start-form .wiktku-addsection-item {
display: flex;
flex-direction: column;
gap: 1px;
padding: 8px 10px;
border-radius: 7px;
border-bottom: 0;
text-decoration: none;
color: var(--wikt-ink);
}
#wiktku-start-form .wiktku-addsection-item:hover {
background: var(--wikt-accent-tint);
}
#wiktku-start-form .wiktku-addsection-item-label {
font-size: 13.5px;
font-weight: 500;
}
#wiktku-start-form .wiktku-addsection-item-hint {
font-size: 11.5px;
color: var(--wikt-muted);
}
#wiktku-start-form #wiktku-section-tabs .oo-ui-buttonElement {
position: relative;
}
/* Bilêvkirin is a peer of the POS sections but not a part of speech —
a hairline before it marks the boundary. */
#wiktku-start-form .wiktku-section-tab-pron {
margin-left: 6px;
border-left: 1px solid var(--wikt-rule);
padding-left: 14px;
border-radius: 0;
}
/* ===================================================================
Per-sense accordion (v3 spec)
===================================================================
"Tenê maneya ku tê nivîsandin vekirî ye" — each meaning is a closed
box showing its own text, so a four-sense entry fits on one screen
instead of scrolling for a minute. A sense with nothing in it is
never collapsed: the trailing empty one is how you add the next
meaning, so hiding it would hide the only way forward.
=================================================================== */
#wiktku-start-form li.wiktku-dfn-sense {
border: 1px solid var(--wikt-card-edge);
border-radius: 12px;
background: var(--wikt-card);
margin-bottom: 10px;
padding: 0;
list-style: none;
overflow: visible;
}
#wiktku-start-form .wiktku-dfn-sense-header {
display: flex;
align-items: center;
gap: 10px;
padding: 12px 14px;
cursor: pointer;
border-radius: 12px;
user-select: none;
}
#wiktku-start-form li.wiktku-dfn-sense:not(.wiktku-sense-collapsed) .wiktku-dfn-sense-header {
border-bottom: 1px solid var(--wikt-rule-soft);
border-radius: 12px 12px 0 0;
}
#wiktku-start-form .wiktku-dfn-sense-header:hover {
background: var(--wikt-card-sunken);
}
#wiktku-start-form .wiktku-dfn-sense-num {
flex: 0 0 22px;
height: 22px;
border-radius: 999px;
background: var(--wikt-accent);
color: var(--wikt-on-accent);
font-family: var(--wikt-mono);
font-size: 12px;
display: grid;
place-items: center;
}
#wiktku-start-form .wiktku-dfn-sense-title {
font-size: 13.5px;
font-weight: 500;
white-space: nowrap;
}
/* The summary is the point of a collapsed row, so it only shows there. */
#wiktku-start-form .wiktku-dfn-sense-summary {
flex: 1 1 auto;
min-width: 0;
font-size: 13px;
color: var(--wikt-muted);
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
display: none;
}
#wiktku-start-form li.wiktku-sense-collapsed .wiktku-dfn-sense-summary {
display: block;
}
#wiktku-start-form .wiktku-dfn-sense-chevron {
margin-left: auto;
color: var(--wikt-muted);
font-size: 12px;
transition: transform 0.15s ease;
}
#wiktku-start-form li.wiktku-sense-collapsed .wiktku-dfn-sense-chevron {
transform: rotate(-90deg);
}
#wiktku-start-form .wiktku-dfn-sense-body {
padding: 14px;
}
#wiktku-start-form li.wiktku-sense-collapsed .wiktku-dfn-sense-body {
display: none;
}
/* ===================================================================
Template rows in the pickers (v3 spec)
===================================================================
"Ti cihê ku şablon tê hilbijartin bêyî 🔗 û i namîne" — one row shape
everywhere a template is chosen. Rewiye tine's original complaint was
that "guharto? kevnbûyî? ku-Latn? şaşnivîs?" mean nothing to a
newcomer; the ⓘ answers that without leaving the form, and the 🔗 is
there for when it doesn't.
=================================================================== */
#wiktku-start-form ul.wiktku-ac-results li.wiktku-ac-tplrow {
display: flex;
align-items: center;
gap: 8px;
min-height: 44px;
white-space: normal;
padding: 6px 10px;
}
#wiktku-start-form .wiktku-ac-tpltext {
flex: 1 1 auto;
min-width: 0;
font-family: var(--wikt-mono);
font-size: 13px;
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
}
/* Status, not category: green is the one to reach for, yellow means
"only if you specifically need it" (kevnbûyî, şaşnivîs, kêmpeyda). */
#wiktku-start-form .wiktku-tpl-dot {
flex: 0 0 8px;
width: 8px;
height: 8px;
border-radius: 999px;
}
#wiktku-start-form .wiktku-tpl-dot-ok { background: #3d8a55; }
#wiktku-start-form .wiktku-tpl-dot-special { background: #c9971f; }
#wiktku-start-form .wiktku-tpl-icons {
flex: 0 0 auto;
display: flex;
gap: 5px;
align-items: center;
}
#wiktku-start-form .wiktku-tpl-icon {
width: 26px;
height: 26px;
display: grid;
place-items: center;
font-size: 12px;
line-height: 1;
cursor: pointer;
border: 1px solid var(--wikt-accent-edge);
background: var(--wikt-accent-tint);
color: var(--wikt-accent);
border-bottom: 1px solid var(--wikt-accent-edge);
text-decoration: none;
padding: 0;
}
#wiktku-start-form .wiktku-tpl-icon-link { border-radius: 7px; }
#wiktku-start-form .wiktku-tpl-icon-info {
border-radius: 999px;
font-family: var(--wikt-serif);
font-style: italic;
font-weight: 600;
background: transparent;
border-color: var(--wikt-field-edge);
color: var(--wikt-muted);
}
#wiktku-start-form .wiktku-tpl-icon:hover {
border-color: var(--wikt-accent);
color: var(--wikt-accent);
background: var(--wikt-accent-tint);
}
/* ── The ⓘ panel ─────────────────────────────────────────────────────
Three parts, in the spec's order: what it does, its parameters, and a
way out to the template page. */
#wiktku-start-form .wiktku-tpl-info {
position: relative;
margin: 8px 0 4px;
padding: 14px 16px;
border: 1px solid var(--wikt-accent-edge);
background: var(--wikt-accent-tint);
border-radius: 12px;
font-size: 13.5px;
line-height: 1.6;
color: var(--wikt-ink-2);
}
#wiktku-start-form .wiktku-tpl-info-name {
font-family: var(--wikt-mono);
font-size: 13px;
color: var(--wikt-accent-deep);
margin-bottom: 6px;
}
#wiktku-start-form .wiktku-tpl-info-params {
margin-top: 8px;
}
#wiktku-start-form .wiktku-tpl-info-params-title {
font-size: 12px;
color: var(--wikt-muted);
margin-bottom: 2px;
}
#wiktku-start-form .wiktku-tpl-info-params ul {
margin: 0;
padding-left: 18px;
font-family: var(--wikt-mono);
font-size: 12.5px;
}
#wiktku-start-form .wiktku-tpl-info-link {
display: inline-block;
margin-top: 10px;
font-size: 13px;
}
#wiktku-start-form .wiktku-tpl-info-close {
position: absolute;
top: 8px;
right: 8px;
width: 24px;
height: 24px;
border-radius: 999px;
border: 0;
background: transparent;
color: var(--wikt-muted);
cursor: pointer;
font-size: 13px;
line-height: 1;
}
#wiktku-start-form .wiktku-tpl-info-close:hover {
background: var(--wikt-card);
color: var(--wikt-ink);
}
/* ===================================================================
Footer overflow "⋯" (v3 spec)
===================================================================
Bişîne and "Edîtora çavkaniyê veke" stay on the bar; the two cache
actions, the saved-at note and Tercîh move in here. Four equal-weight
buttons (two of them red) made the destructive ones as loud as the
one you actually want, and on a phone the sticky footer wrapped to
three rows.
=================================================================== */
#wiktku-start-form .wiktku-more-wrap {
position: relative;
margin-left: auto;
flex: 0 0 auto;
}
#wiktku-start-form .wiktku-more-btn {
width: 36px;
height: 36px;
border-radius: 999px;
border: 1px solid var(--wikt-field-edge);
background: var(--wikt-card);
color: var(--wikt-muted);
font-size: 16px;
line-height: 1;
cursor: pointer;
display: grid;
place-items: center;
}
#wiktku-start-form .wiktku-more-btn:hover {
border-color: var(--wikt-accent);
color: var(--wikt-accent);
}
#wiktku-start-form .wiktku-more-menu {
position: absolute;
right: 0;
bottom: calc(100% + 8px);
z-index: 70;
min-width: 17em;
background: var(--wikt-card);
border: 1px solid var(--wikt-rule);
border-radius: 12px;
padding: 6px;
display: flex;
flex-direction: column;
gap: 2px;
}
#wiktku-start-form .wiktku-more-item {
display: flex;
align-items: center;
gap: 8px;
}
/* The buttons inside the menu are menu rows, not buttons on a bar. */
#wiktku-start-form .wiktku-more-item .oo-ui-buttonElement {
flex: 1 1 auto;
}
#wiktku-start-form .wiktku-more-item .oo-ui-buttonElement-button {
display: block;
width: 100%;
text-align: left;
border: 0 !important;
background: transparent !important;
border-radius: 7px !important;
padding: 9px 10px;
min-height: 0;
font-weight: 400;
color: var(--wikt-ink) !important;
}
#wiktku-start-form .wiktku-more-item .oo-ui-buttonElement-button:hover {
background: var(--wikt-accent-tint) !important;
}
#wiktku-start-form .wiktku-more-item-danger .oo-ui-buttonElement-button {
color: var(--wikt-danger) !important;
}
#wiktku-start-form .wiktku-more-item-prefs .wiktku-prefs-btn {
width: 26px;
height: 26px;
flex: 0 0 26px;
border: 0;
background-color: transparent;
}
#wiktku-start-form .wiktku-more-item-label {
font-size: 13.5px;
}
#wiktku-start-form .wiktku-more-sep {
height: 1px;
background: var(--wikt-rule-soft);
margin: 4px 2px;
}
#wiktku-start-form .wiktku-more-note {
padding: 4px 10px 2px;
}
#wiktku-start-form .wiktku-more-note #wiktku-last-saved {
white-space: normal;
}
/* The accordion header carries the sense number now, so the older CSS
counter badge on the <li> would draw a second one behind it. Retire the
counter and its indent — the header owns this. */
#wiktku-start-form ol.wiktku-dfn-list > li.wiktku-dfn-sense::before {
content: none;
}
#wiktku-start-form ol.wiktku-dfn-list > li.wiktku-dfn-sense {
padding-left: 0;
padding-bottom: 0;
border-bottom: 0;
margin-bottom: 10px;
}
#wiktku-start-form ol.wiktku-dfn-list > li.wiktku-dfn-sense:not(:last-child) {
padding-bottom: 0;
border-bottom: 0;
}
/* ── "+ Mane zêde bike" ──────────────────────────────────────────────
Senses are added deliberately now instead of appearing the moment you
type. An always-present empty second sense read as an unfinished form
on entries that only ever have one meaning. */
#wiktku-start-form .wiktku-add-sense {
display: inline-flex;
align-items: center;
gap: 8px;
margin-top: 4px;
padding: 10px 18px;
border: 1px solid var(--wikt-field-edge);
border-radius: var(--wikt-r-pill);
background: var(--wikt-card);
color: var(--wikt-ink-2);
font-family: var(--wikt-sans);
font-size: 13.5px;
cursor: pointer;
min-height: 40px;
}
#wiktku-start-form .wiktku-add-sense:hover {
border-color: var(--wikt-accent);
color: var(--wikt-accent);
background: var(--wikt-accent-tint);
}
#wiktku-start-form .wiktku-add-sense-plus {
color: var(--wikt-accent);
font-size: 15px;
line-height: 1;
}
/* ── Şablon picker, demoted to a link ────────────────────────────────
Picking a template replaces the definition rather than adding to it,
so it is an alternative route, not the first control in the sense.
Hidden behind one line of text until it is actually wanted. */
#wiktku-start-form .wiktku-dfn-tpl-link {
display: inline-block;
margin-top: 8px;
font-size: 12.5px;
color: var(--wikt-muted);
border-bottom: 1px solid transparent;
}
#wiktku-start-form .wiktku-dfn-tpl-link:hover {
color: var(--wikt-accent);
border-bottom-color: var(--wikt-link-under);
}
#wiktku-start-form .wiktku-dfn-tpl-row {
margin-top: 10px;
padding-top: 12px;
border-top: 1px solid var(--wikt-rule-soft);
}
4px4d5ozobivkz5wnb996gt6ikigeq8
6333780
6333776
2026-08-15T11:03:39Z
Wikihez
7344
6333780
css
text/css
/* ===================================================================
#editform while the wizard is active
=================================================================== */
/* Keeps #editform genuinely laid out instead of display:none*/
.wiktku-offscreen {
position: absolute !important;
left: -9999px !important;
top: 0 !important;
width: 100%;
max-width: 100%;
visibility: hidden;
}
/* ===================================================================
Base scale
=================================================================== */
#wiktku-start-form {
font-size: 0.92em;
line-height: 1.35;
}
#wiktku-start-form * {
box-sizing: border-box;
}
.wiktku-addlang-notice {
margin: 0 0 0.8em;
padding: 0.6em 0.8em;
background: var(--wikt-palette-paleblue);
border: 1px solid var(--wikt-palette-lightgrey);
border-radius: 4px;
}
/* ===================================================================
Step cards
a compact card with a left accent bar, so each step reads as
a distinct unit
=================================================================== */
.wiktku-start-step {
padding: 0.7em 0.9em;
margin-bottom: 0.6em;
border: 1px solid var(--wikt-palette-grey-3, #e0e0e0);
border-left: 4px solid var(--wikt-palette-blue-9, #3366cc);
border-radius: 6px;
background: var(--wikt-palette-white);
box-shadow: 0 1px 2px rgba(0, 0, 0, 0.04);
transition: border-left-color 0.15s ease, box-shadow 0.15s ease;
}
.wiktku-start-step:hover {
box-shadow: 0 2px 6px rgba(0, 0, 0, 0.08);
}
.wiktku-start-step:focus-within {
border-left-color: var(--wikt-palette-blue-9, #3366cc);
box-shadow: 0 2px 6px rgba(0, 0, 0, 0.1);
}
/* Ghybu, 14 Tebax 2026: "Cureyê rêzimanî" and "Parametreyên cureyê
rêzimanî" should read as one question, not two. Fuse the posparams
card onto the bottom of the pos card (shared left accent bar, no
border/gap between them) and drop its own big heading in favor of
the smaller, pos-specific label start.js now sets via question_fmt
("Cins/zayend" / "Cureyê lêkerê" / "Taybetmendî"). posparams.visible
only turns this div on once a pos is chosen, and it always renders
immediately after #wiktku-start-pos in the DOM, so this pairing is safe. */
#wiktku-start-pos {
border-radius: 6px 6px 0 0;
margin-bottom: 0;
border-bottom: none;
}
#wiktku-start-posparams {
border-radius: 0 0 6px 6px;
border-top: none;
padding-top: 0.3em;
}
#wiktku-start-posparams .wiktku-start-step-name {
display: none;
}
/* Scoped to #wiktku-start-form (not just .wiktku-start-step-name) and
!important on font-size: this is a real <h3> tag (see start.js), so
the wiki skin's own default heading styles can otherwise win over a
plain class rule and render it unpredictably (varies by skin/
viewport — this was previously landing at a different effective
size on desktop Vector vs. mobile Minerva purely by skin-default
accident, not by design). The heading now leads the visual hierarchy
through both size AND colour (tinted to match the card's accent
bar), while .wiktku-start-step-question below is deliberately
lighter-weight and muted so the two never compete for attention. */
#wiktku-start-form .wiktku-start-step-name {
font-size: 1.1em !important;
font-weight: 700;
letter-spacing: 0.03em;
margin: 0 0 0.3em;
line-height: 1.2;
color: var(--wikt-palette-blue-9, #3366cc);
border: 0;
padding: 0;
}
/* Rewiye tine, 14 Tebax 2026: "pûnto jî biçûk in, xwendina wan hinek zehmet
e" — the question text and the many small per-field labels (Cinsiyet:,
Rehê dema niha:, …) were sized noticeably smaller than the heading above
them; bumped both a step so the whole card reads at a more consistent,
comfortable size instead of the heading standing out and everything
under it feeling like fine print. */
.wiktku-start-step-question {
font-size: 1em;
font-weight: 400;
color: var(--wikt-palette-grey-9, #555);
margin: 0 0 0.5em;
line-height: 1.45;
}
.wiktku-start-step label {
padding-right: 1.2em;
font-size: 1em;
}
/* Rewiye tine, 14 Tebax 2026: short reassurance notes next to the fields
that most confused a first-time user (Bilêvkirin's template dropdown,
Mane's per-sense template dropdown) — muted so they read as a hint, not
another question competing with .wiktku-start-step-question. */
.wiktku-step-hint {
font-size: 0.88em;
font-style: italic;
color: var(--wikt-palette-grey-8, #72777d);
margin: 0 0 0.5em;
line-height: 1.4;
}
/* Same specificity as the rule just above, so it must come after to
actually win: the name label isn't a field label needing right
padding or the form's base label size, it's a heading. */
#wiktku-start-form .wiktku-start-step-name label {
padding-right: 0;
font-size: inherit !important;
color: inherit;
}
input[type="text"].wiktku-start-step-field {
width: 100%;
padding: 5px 8px;
border: 1px solid var(--wikt-palette-lightgrey);
border-radius: 4px;
transition: border-color 0.12s ease, box-shadow 0.12s ease;
}
input[type="text"].wiktku-start-step-field:focus {
border-color: var(--wikt-palette-blue-9, #3366cc);
box-shadow: inset 0 0 0 1px var(--wikt-palette-blue-9, #3366cc);
outline: 0;
}
input[type="text"].wiktku-start-step-field.wiktku-start-narrow {
width: 20em;
}
/* Only used by selects that opt out via .wiktku-plain-select; other
selects get their width from the searchable picker instead (see
input.wiktku-ac-input). */
select.wiktku-start-narrow,
input.wiktku-dfn-tpl-title {
width: 20em;
max-width: 100%;
box-sizing: border-box;
}
#wiktku-start-spinner {
float: right;
margin-left: 1em;
}
#wiktku-start-footer {
display: flex;
flex-wrap: wrap;
align-items: center;
gap: 0.5em;
padding: 0.6em 0.2em;
position: sticky;
bottom: 0;
background: var(--wikt-palette-white);
border-top: 1px solid var(--wikt-palette-grey-3, #e0e0e0);
z-index: 5;
}
/* Quiet, non-competing text — sits next to the cache buttons so the
person can tell at a glance whether their latest edits are backed
up, without it fighting the buttons for attention. */
#wiktku-last-saved {
font-size: 0.85em;
color: var(--wikt-palette-grey-9, #767676);
white-space: nowrap;
}
/* ── Tercîh (settings) icon button — sits in the footer next to the
cache buttons. Uses the Codex "settings" (color-subtle) icon from
Commons directly rather than an OOUI icon-pack module, so it renders
the exact requested glyph without pulling in an extra dependency. */
.wiktku-prefs-btn {
width: 2.2em;
height: 2.2em;
flex: 0 0 auto;
padding: 0;
border: 1px solid var(--wikt-palette-grey-3, #e0e0e0);
border-radius: 2px;
background-color: var(--wikt-palette-white);
background-image: url(//upload.wikimedia.org/wikipedia/commons/e/e0/Codex_icon_settings_color-subtle.svg);
background-repeat: no-repeat;
background-position: center;
background-size: 1.2em 1.2em;
cursor: pointer;
}
.wiktku-prefs-btn:hover {
background-color: var(--wikt-palette-grey-0, #f8f9fa);
}
.wiktku-prefs-btn:active {
background-color: var(--wikt-palette-grey-1, #eaecf0);
}
/* Tercîh dialog body — OOUI's bare ProcessDialog body has no inset of
its own, so text/fields otherwise sit flush against the window edges. */
.wiktku-prefs-dialog-body {
padding: 1em 1.2em;
}
/* ── "Bişîne" click feedback ── */
@keyframes wiktku-btn-flash-pulse {
0% { box-shadow: 0 0 0 0 rgba(51, 102, 204, 0.55); }
70% { box-shadow: 0 0 0 9px rgba(51, 102, 204, 0); }
100% { box-shadow: 0 0 0 0 rgba(51, 102, 204, 0); }
}
#wiktku-unhide-editform.wiktku-btn-flash {
animation: wiktku-btn-flash-pulse 0.5s ease-out;
}
/* Persistent state while the wikitext is being built/submitted, set
alongside OOUI's own setDisabled(true) so it reads clearly even if
the skin's default disabled style is subtle. */
#wiktku-unhide-editform.wiktku-btn-sending .oo-ui-buttonElement-button {
background-color: var(--wikt-palette-grey-9, #767676) !important;
border-color: var(--wikt-palette-grey-9, #767676) !important;
cursor: progress;
opacity: 1 !important;
}
/* Wikihez, 14 Tebax 2026 (item 7): looks exactly like OOUI's own disabled
state, but ISN'T one — the button stays a real, clickable widget so its
click handler can still run and explain why (see wiktkuNotify call next
to wiktkuContentGateOk in start.js). A true setDisabled(true) here would
swallow the click before that message could ever show. */
#wiktku-unhide-editform.wiktku-btn-soft-disabled .oo-ui-buttonElement-button {
opacity: 0.5;
cursor: not-allowed;
}
/* ── "Beşên din" picker (item 3) ── */
.wiktku-besendin-picker {
margin: 0.6em 0 1em;
}
.wiktku-besendin-picker .wiktku-besendin-select {
width: 100%;
max-width: 24em;
}
#wiktku-start-form textarea.wiktku-start-step-field,
#wiktku-start-form textarea.wiktku-start-narrow,
#wiktku-start-form textarea.wiktku-dfn-subfield {
resize: vertical !important;
overflow: auto !important;
box-sizing: border-box !important;
vertical-align: top;
border: 1px solid var(--wikt-palette-lightgrey);
border-radius: 3px;
transition: border-color 0.1s ease, box-shadow 0.1s ease;
}
/* Modern focus state to match the searchable-picker inputs. */
#wiktku-start-form textarea.wiktku-start-step-field:focus,
#wiktku-start-form textarea.wiktku-start-narrow:focus,
#wiktku-start-form textarea.wiktku-dfn-subfield:focus {
border-color: var(--wikt-palette-blue-9, #3366cc);
box-shadow: inset 0 0 0 1px var(--wikt-palette-blue-9, #3366cc);
outline: 0;
}
/* Standard: every textarea in the form is full width by default */
#wiktku-start-form textarea:not(.wiktku-start-narrow) {
width: 100%;
max-width: 100%;
box-sizing: border-box;
}
#wiktku-start-form textarea.wiktku-start-narrow,
#wiktku-start-form textarea.wiktku-dfn-subfield.wiktku-start-narrow {
width: 20em;
max-width: 100%;
min-width: 8em;
height: calc(1.7em + 10px);
min-height: calc(1.7em + 10px);
padding-top: 4px !important;
padding-bottom: 4px !important;
line-height: 1.35 !important;
resize: none !important;
}
/* Exception: "Sernav" / "Sernavê orjînal" citation-source fields (kitêb,
kovar, malper, …) — long enough to be worth 2 rows and manual resizing. */
#wiktku-start-form textarea.wiktku-dfn-quote-src-input.wiktku-dfn-quote-src-input--title {
height: calc(2 * 1.35em + 10px);
min-height: calc(2 * 1.35em + 10px);
}
/* ── Manual drag-to-resize handle ── */
#wiktku-start-form textarea:not(.wiktku-start-narrow) {
resize: none !important;
}
/* Inline modifier button (⊕) */
.wiktku-word-li {
display: flex;
align-items: flex-start;
flex-wrap: wrap;
gap: 0.3em;
}
.wiktku-mod-btn {
flex: 0 0 auto;
width: 1.6em;
height: 1.6em;
padding: 0;
line-height: 1;
border: 1px solid var(--wikt-palette-lightgrey);
border-radius: 2px;
background: var(--wikt-palette-white);
color: var(--wikt-palette-blue-9, #3366cc);
font-size: 1em;
cursor: pointer;
}
.wiktku-mod-btn:hover {
border-color: var(--wikt-palette-blue-9, #3366cc);
background: var(--wikt-palette-paleblue, #eaf3ff);
}
.wiktku-mod-picker {
display: flex;
flex-wrap: wrap;
gap: 0.25em;
width: 100%;
margin-top: 0.15em;
padding: 0.35em;
border: 1px solid var(--wikt-palette-lightgrey);
border-radius: 3px;
background: var(--wikt-palette-white);
box-shadow: 0 1px 3px rgba(0, 0, 0, 0.08);
}
.wiktku-mod-pill {
padding: 2px 8px;
border: 1px solid var(--wikt-palette-grey-3, #e0e0e0);
border-radius: 12px;
background: var(--wikt-palette-paleblue, #eaf3ff);
font-size: 0.85em;
white-space: nowrap;
cursor: pointer;
}
.wiktku-mod-pill:hover {
border-color: var(--wikt-palette-blue-9, #3366cc);
background: var(--wikt-palette-blue-9, #3366cc);
color: var(--wikt-palette-white);
}
.wiktku-mod-pill:disabled,
.wiktku-mod-pill.wiktku-mod-pill-used {
border-color: var(--wikt-palette-grey-3, #e0e0e0);
background: var(--wikt-palette-lightgrey);
color: var(--wikt-palette-grey-3, #999);
cursor: not-allowed;
opacity: 0.6;
}
.wiktku-mod-pill:disabled:hover,
.wiktku-mod-pill.wiktku-mod-pill-used:hover {
border-color: var(--wikt-palette-grey-3, #e0e0e0);
background: var(--wikt-palette-lightgrey);
color: var(--wikt-palette-grey-3, #999);
}
.wiktku-mod-val-wrap {
display: flex;
align-items: center;
gap: 0.25em;
width: 100%;
margin-top: 0.15em;
}
.wiktku-mod-val-input {
flex: 0 1 14em;
max-width: 14em;
padding: 3px 6px;
border: 1px solid var(--wikt-palette-lightgrey);
border-radius: 2px;
}
.wiktku-mod-confirm,
.wiktku-mod-cancel {
flex: 0 0 auto;
width: 1.6em;
height: 1.6em;
padding: 0;
line-height: 1;
border: 1px solid var(--wikt-palette-lightgrey);
border-radius: 2px;
background: var(--wikt-palette-white);
cursor: pointer;
}
.wiktku-mod-confirm {
color: #178a17;
border-color: #178a17;
}
.wiktku-mod-cancel {
color: var(--wikt-palette-red-9, #d33);
border-color: var(--wikt-palette-red-9, #d33);
}
.wiktku-resize-wrap {
position: relative;
display: block;
}
/* Independent of .wiktku-resize-wrap (created separately by
ensureLinebreakBackdrop() in start.js, only for textareas that ever
get flagged with a linebreak) so it doesn't depend on load order
relative to wiktkuMakeManualResizable(). Plain block, no size of its
own — purely a position:relative anchor for the backdrop. */
.wiktku-linebreak-wrap {
position: relative;
display: block;
}
.wiktku-resize-grip {
position: absolute;
right: 2px;
bottom: 2px;
width: 14px;
height: 14px;
cursor: ns-resize;
touch-action: none;
opacity: 0.5;
z-index: 2;
background-image: linear-gradient(135deg, transparent 0 50%, var(--wikt-palette-grey-9, #767676) 50% 100%);
background-repeat: no-repeat;
}
.wiktku-resize-grip:hover,
.wiktku-resize-grip:active {
opacity: 0.9;
}
/* ===================================================================
Searchable dropdown (wrapNativeSelect in start.js)
.wiktku-native-select-wrap > input.wiktku-ac-input (search box)
> ul.wiktku-ac-results (result list)
> select (hidden, holds the value)
=================================================================== */
.wiktku-native-select-wrap {
display: inline-block;
position: relative;
vertical-align: top;
}
/* Matches the width the native select would have had (see
select.wiktku-start-narrow). */
.wiktku-native-select-wrap input[type="search"],
input.wiktku-ac-input {
display: block;
width: 20em;
max-width: 100%;
box-sizing: border-box;
padding: 3px 6px;
border: 1px solid var(--wikt-palette-lightgrey);
border-radius: 2px;
background: var(--wikt-palette-white);
color: inherit;
font-size: inherit;
font-family: inherit;
transition: border-color 0.1s ease, box-shadow 0.1s ease;
}
input.wiktku-ac-input:focus {
border-color: var(--wikt-palette-blue-9);
box-shadow: inset 0 0 0 1px var(--wikt-palette-blue-9);
outline: 0;
}
input.wiktku-ac-input::placeholder {
color: var(--wikt-palette-grey-9);
opacity: 1;
}
/* Hide Safari/Chrome's built-in search decorations. */
input.wiktku-ac-input::-webkit-search-decoration,
input.wiktku-ac-input::-webkit-search-cancel-button,
input.wiktku-ac-input::-webkit-search-results-button {
-webkit-appearance: none;
appearance: none;
}
/* ── Result list ── */
/* top/bottom/max-height are overridden inline by showResults() when it
flips the list above the box; these are just its defaults. */
ul.wiktku-ac-results {
position: absolute;
z-index: 9999;
top: 100%;
bottom: auto;
left: 0;
margin: 0;
padding: 0;
list-style: none;
width: 20em;
max-width: 90vw;
max-height: 13em;
overflow-y: auto;
overscroll-behavior: contain;
-webkit-overflow-scrolling: touch;
background: var(--wikt-palette-white);
border: 1px solid var(--wikt-palette-lightgrey);
border-radius: 3px;
box-shadow: 0 3px 10px rgba(0, 0, 0, 0.15);
}
ul.wiktku-ac-results li {
margin: 0;
padding: 4px 8px;
cursor: pointer;
font-size: 0.92em;
display: flex;
align-items: center;
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
}
/* .wiktku-ac-active is the keyboard cursor; hover mirrors it; :active
covers the touch press state. */
ul.wiktku-ac-results li.wiktku-ac-active,
ul.wiktku-ac-results li:hover {
background: var(--wikt-palette-lightblue);
}
ul.wiktku-ac-results li:active {
background: var(--wikt-palette-blue-9);
color: var(--wikt-palette-white);
}
/* Touch devices: bigger tap targets, no sticky hover. */
@media (pointer: coarse) {
ul.wiktku-ac-results li {
padding: 6px 10px;
min-height: 2.2em;
font-size: 1em;
}
ul.wiktku-ac-results li:hover {
background: transparent;
}
ul.wiktku-ac-results li.wiktku-ac-active {
background: var(--wikt-palette-lightblue);
}
input.wiktku-ac-input {
/* >=16px stops iOS Safari zooming the page when the box is focused. */
font-size: 16px;
min-height: 2.2em;
}
}
/* Item 5 (Wikihez, 14 Tebax 2026): inline preview + confirm panel shown
before inserting an auto-content pronunciation template (ku-IPA,
ku-kîte, …) — deliberately part of the form's own layout rather than a
browser confirm()/prompt() dialog, per "dont use userinput use
something more advanced". */
.wiktku-pron-preview {
margin: 6px 0;
padding: 8px 10px;
border: 1px solid var(--wikt-palette-blue-9, #3366cc);
border-radius: 6px;
background: var(--wikt-palette-paleblue, #eaf3ff);
}
.wiktku-pron-preview-label {
font-size: 0.88em;
font-weight: 600;
color: var(--wikt-palette-grey-9, #555);
margin-bottom: 3px;
}
.wiktku-pron-preview-body {
font-family: monospace;
font-size: 1em;
white-space: pre-wrap;
word-break: break-word;
margin-bottom: 6px;
}
.wiktku-pron-preview-actions {
display: flex;
gap: 6px;
}
.wiktku-pron-preview-confirm,
.wiktku-pron-preview-cancel {
font-size: 0.88em;
padding: 3px 10px;
border-radius: 4px;
cursor: pointer;
border: 1px solid var(--wikt-palette-lightgrey, #a2a9b1);
background: var(--wikt-palette-white, #fff);
}
.wiktku-pron-preview-confirm {
border-color: var(--wikt-palette-blue-9, #3366cc);
color: var(--wikt-palette-blue-9, #3366cc);
font-weight: 600;
}
.wiktku-pron-preview-confirm:disabled {
opacity: 0.5;
cursor: wait;
}
.wiktku-pron-preview-cancel:hover {
background: var(--wikt-palette-grey-0, #f8f9fa);
}
/* Template pickers fill their container since the search box, not the
<select>, is what the user sees. */
.wiktku-pron-wrap .wiktku-native-select-wrap,
.wiktku-etym-wrap .wiktku-native-select-wrap,
.wiktku-pron-wrap .wiktku-native-select-wrap input.wiktku-ac-input,
.wiktku-etym-wrap .wiktku-native-select-wrap input.wiktku-ac-input {
width: 100%;
}
.wiktku-pron-wrap .wiktku-native-select-wrap input.wiktku-ac-input,
.wiktku-etym-wrap .wiktku-native-select-wrap input.wiktku-ac-input {
font-size: 0.88em;
}
.wiktku-cavkani-wrap .wiktku-native-select-wrap,
.wiktku-cavkani-wrap .wiktku-native-select-wrap input.wiktku-ac-input {
width: 100%;
}
/* Template selector inside a sense block. */
.wiktku-dfn-tpl-row .wiktku-native-select-wrap input.wiktku-ac-input {
font-size: 0.88em;
}
/* Language/dialect rows: picker must line up with the word field beside it. */
.wiktku-lang-row .wiktku-native-select-wrap {
flex: 0 0 auto;
}
#wiktku-start-form textarea.wiktku-dfn-mane,
#wiktku-start-form textarea.wiktku-dfn-nimune-text,
#wiktku-start-form .wiktku-dfn-jeder-group textarea.wiktku-dfn-nimune-quote,
#wiktku-start-form .wiktku-dfn-nimune-sub textarea.wiktku-dfn-nimune-tr,
#wiktku-start-form .wiktku-dfn-nimune-sub textarea.wiktku-dfn-nimune-t,
#wiktku-start-form .wiktku-dfn-quote-sub textarea.wiktku-dfn-nimune-quote-tr,
#wiktku-start-form .wiktku-dfn-quote-sub textarea.wiktku-dfn-nimune-quote-t,
#wiktku-start-form textarea.wiktku-dfn-quote-src-manual,
#wiktku-start-form .wiktku-pron-wrap textarea.wiktku-pron-text,
#wiktku-start-form .wiktku-etym-wrap textarea.wiktku-etym-text,
#wiktku-start-form .wiktku-tewandin-wrap textarea.wiktku-tewandin-text,
#wiktku-start-form textarea.wiktku-cavkani-text,
#wiktku-start-form textarea.wiktku-dfn-tercime,
#wiktku-start-form textarea.wiktku-dfn-izah {
--wiktku-ta-rows: 2;
height: calc(var(--wiktku-ta-rows) * 1.35em + 6px);
min-height: calc(var(--wiktku-ta-rows) * 1.35em + 6px);
}
#wiktku-start-form .wiktku-pron-wrap textarea.wiktku-pron-text,
#wiktku-start-form .wiktku-etym-wrap textarea.wiktku-etym-text,
#wiktku-start-form textarea.wiktku-dfn-izah {
--wiktku-ta-rows: 3;
}
#wiktku-start-form textarea.wiktku-cavkani-text {
--wiktku-ta-rows: 4;
}
/* Nimûne + Jêgirtin (citation) boxes, and their tr/t sub-fields: at
least 4 rows so there's room to actually write an example/quote. */
#wiktku-start-form textarea.wiktku-dfn-nimune-text,
#wiktku-start-form .wiktku-dfn-nimune-sub textarea.wiktku-dfn-nimune-tr,
#wiktku-start-form .wiktku-dfn-nimune-sub textarea.wiktku-dfn-nimune-t,
#wiktku-start-form .wiktku-dfn-jeder-group textarea.wiktku-dfn-nimune-quote,
#wiktku-start-form .wiktku-dfn-quote-sub textarea.wiktku-dfn-nimune-quote-tr,
#wiktku-start-form .wiktku-dfn-quote-sub textarea.wiktku-dfn-nimune-quote-t,
#wiktku-start-form textarea.wiktku-dfn-quote-src-manual {
--wiktku-ta-rows: 4;
}
/* Nimûne/jêgirtin box currently contains a typed/pasted linebreak —
the border is nudged so the user notices before it's silently turned
into <br> on output. The break itself is marked precisely, not the
whole box, via a mirrored backdrop layer (see below and
highlightLinebreak()/buildLinebreakBackdropHtml() in start.js). */
#wiktku-start-form textarea.wiktku-has-linebreak {
border-color: var(--wikt-palette-yellow6, #ac6600) !important;
}
/* Backdrop layer: sits behind the textarea showing the same text, with
a highlighted marker at each line that's followed by a break. Its
font/padding/box-sizing/line-height are copied from the textarea via
computed style (see syncLinebreakBackdropMetrics() in start.js), not
shared CSS classes — most of this box's own rules are written as
"textarea.foo", which a <div> with the same class wouldn't match.
Only created lazily, the first time a given textarea actually has a
break — see ensureLinebreakBackdrop(). */
.wiktku-linebreak-backdrop {
position: absolute;
inset: 0;
z-index: 0;
margin: 0;
overflow: hidden;
white-space: pre-wrap;
word-wrap: break-word;
color: transparent;
background: transparent !important;
border-color: transparent !important;
box-shadow: none !important;
resize: none !important;
pointer-events: none;
}
/* Raise the real textarea above its backdrop so typing/selection/caret
behave completely normally; the backdrop's mark shows through only
where the real textarea's own background is transparent. */
#wiktku-start-form textarea.wiktku-has-linebreak-source {
position: relative;
z-index: 1;
background-color: transparent;
}
.wiktku-linebreak-mark {
background-color: var(--wikt-palette-yellow6, #ac6600);
color: var(--wikt-palette-white, #fff);
border-radius: 2px;
}
/* ── Tercime + Îzah boxes ── */
.wiktku-dfn-nonku-wrap {
display: flex;
flex-direction: column;
gap: 3px;
}
.wiktku-dfn-nimune-sub,
.wiktku-dfn-quote-sub {
margin-top: 3px;
margin-left: 1em;
padding-left: 0.6em;
border-left: 2px solid var(--wikt-palette-lightgrey);
display: flex;
flex-direction: column;
gap: 3px;
}
.wiktku-dfn-nimune-sub textarea.wiktku-dfn-nimune-tr,
.wiktku-dfn-nimune-sub textarea.wiktku-dfn-nimune-t {
min-width: 8em;
padding-top: 2px !important;
padding-bottom: 2px !important;
line-height: 1.35 !important;
font-size: 0.88em;
}
/* ── Sense list (Mane step) — numbered badges instead of the browser's
default flat "1." marker, so each sense reads as a distinct block. ── */
ol.wiktku-dfn-list {
list-style: none;
margin: 0;
padding: 0;
counter-reset: wiktku-dfn-sense;
}
ol.wiktku-dfn-list > li.wiktku-dfn-sense {
position: relative;
counter-increment: wiktku-dfn-sense;
padding-left: 2.1em;
margin-bottom: 0.9em;
}
ol.wiktku-dfn-list > li.wiktku-dfn-sense:not(:last-child) {
padding-bottom: 0.9em;
border-bottom: 1px dashed var(--wikt-palette-grey-3, #e0e0e0);
}
ol.wiktku-dfn-list > li.wiktku-dfn-sense::before {
content: counter(wiktku-dfn-sense);
position: absolute;
left: 0;
top: 1px;
width: 1.6em;
height: 1.6em;
border-radius: 50%;
background: var(--wikt-palette-blue-9, #3366cc);
color: var(--wikt-palette-white);
font-size: 0.85em;
font-weight: 700;
display: flex;
align-items: center;
justify-content: center;
}
/* Template selector row inside a sense block */
.wiktku-dfn-tpl-row {
margin-bottom: 3px;
}
/* ── Sub-field titles (Etîket, Kategorî, Hevmane, Dijmane, Nimûne,
Jêgirtin, …) — previously plain unstyled run-on text. Each group
now reads as a small labelled field: the term stands out, the
izah hint stays quiet, and the block gets its own breathing room. ── */
.wiktku-dfn-subgroup {
margin-top: 0.5em;
padding-top: 0.4em;
border-top: 1px dashed var(--wikt-palette-grey-3, #e0e0e0);
}
.wiktku-dfn-subgroup:first-of-type {
margin-top: 0.3em;
padding-top: 0;
border-top: none;
}
.wiktku-dfn-sublabel {
display: block;
margin-bottom: 3px;
font-size: 0.88em;
}
.wiktku-dfn-sublabel-term {
font-weight: 600;
color: var(--wikt-palette-blue-9, #3366cc);
letter-spacing: 0.03em;
font-size: 0.92em;
}
.wiktku-dfn-sublabel-hint {
color: var(--wikt-palette-grey-9, #767676);
font-style: italic;
}
.wiktku-pron-wrap,
.wiktku-etym-wrap,
.wiktku-tewandin-wrap,
.wiktku-cavkani-wrap {
display: flex;
flex-direction: column;
gap: 3px;
}
/* ── POS section tabs ──
Modernized into rounded pills instead of flat file-folder tabs. */
#wiktku-section-tabs {
display: flex;
flex-wrap: wrap;
gap: 4px;
margin-bottom: 0.6em;
align-items: center;
}
#wiktku-section-tabs .wiktku-section-tab {
padding: 3px 12px;
border: 1px solid var(--wikt-palette-lightgrey);
border-radius: 999px;
background: var(--wikt-palette-dullcyan);
cursor: pointer;
font-size: 0.86em;
user-select: none;
transition: background 0.12s ease, border-color 0.12s ease;
}
#wiktku-section-tabs .wiktku-section-tab:hover {
border-color: var(--wikt-palette-blue-9, #3366cc);
}
#wiktku-section-tabs .wiktku-section-tab.wiktku-tab-active {
background: var(--wikt-palette-blue-9, #3366cc);
border-color: var(--wikt-palette-blue-9, #3366cc);
color: var(--wikt-palette-white);
font-weight: 600;
}
/* ── Step-group tabs (Mane / Bilêvkirin / Beşên din — see STEP_GROUPS in
start.js) ── Sits directly under the pill-style section tabs above;
styled as an underlined secondary nav so the two bars stay visually
distinct. */
#wiktku-group-tabs {
display: flex;
flex-wrap: wrap;
gap: 4px;
margin-bottom: 0.8em;
border-bottom: 2px solid var(--wikt-palette-lightgrey);
}
#wiktku-group-tabs .wiktku-group-tab {
position: relative;
padding: 7px 14px 8px;
margin-bottom: -2px;
border-bottom: 3px solid transparent;
border-radius: 3px 3px 0 0;
cursor: pointer;
font-size: 0.95em;
font-weight: 600;
color: var(--wikt-palette-grey-9, #333);
background: var(--wikt-palette-grey-0, #f8f9fa);
user-select: none;
transition: color 0.12s ease, border-color 0.12s ease, background 0.12s ease;
}
#wiktku-group-tabs .wiktku-group-tab:hover {
color: var(--wikt-palette-blue-9, #3366cc);
background: var(--wikt-palette-paleblue, #eaf3ff);
}
#wiktku-group-tabs .wiktku-group-tab.wiktku-tab-active {
border-bottom-color: var(--wikt-palette-blue-9, #3366cc);
color: var(--wikt-palette-white);
background: var(--wikt-palette-blue-9, #3366cc);
font-weight: 700;
}
/* Small dot marking a tab that still has an unfilled required field
hidden inside it (see updateGroupTabIndicators in start.js). Cleared
automatically once that tab becomes the active one. */
#wiktku-group-tabs .wiktku-group-tab.wiktku-tab-missing::after {
content: "";
position: absolute;
top: 4px;
right: -1px;
width: 6px;
height: 6px;
border-radius: 50%;
background: var(--wikt-palette-red-9, #d33);
}
.wiktku-lang-row-list {
margin: 0;
padding: 0;
list-style: none;
}
.wiktku-lang-row {
display: flex;
align-items: flex-start;
gap: 6px;
margin-bottom: 3px;
flex-wrap: wrap;
}
.wiktku-lang-row-words {
margin: 0;
padding: 0;
list-style: none;
display: flex;
flex-direction: column;
gap: 3px;
}
/* Dûnde/Werger/Zarava rows: align the picker's height with the adjacent
word textarea (see .wiktku-start-narrow above). */
.wiktku-lang-row .wiktku-native-select-wrap input.wiktku-ac-input {
height: calc(1.7em + 10px);
min-height: calc(1.7em + 10px);
padding-top: 4px;
padding-bottom: 4px;
}
/* ── Werger / Bi zaravayên din groups: one per gloss, shared spacing ── */
#wiktku-start-trans .wiktku-trans-group,
#wiktku-start-zarava .wiktku-zarava-group {
margin-bottom: 0.6em;
}
#wiktku-start-trans .wiktku-trans-group:last-child,
#wiktku-start-zarava .wiktku-zarava-group:last-child {
margin-bottom: 0;
}
#wiktku-start-trans .wiktku-trans-group-label,
#wiktku-start-zarava .wiktku-zarava-group-label {
font-weight: 600;
font-size: 0.88em;
margin-bottom: 3px;
}
.wiktku-dfn-jeder-group {
margin-top: 3px;
}
.wiktku-dfn-quote-src-sel {
font-size: 0.88em;
margin-top: 3px;
display: block;
}
.wiktku-dfn-quote-src-fields {
display: flex;
flex-direction: column;
gap: 3px;
margin-top: 3px;
}
/* Stacked layout: textarea gets its own full-width row, button + status
sit below it on their own row. Simpler and more robust than sharing a
row with the button — that required the textarea's own resize-wrap
div (added by wiktkuMakeManualResizable in start.js) to correctly
inherit flex-grow, which kept being fragile across breakpoints. */
.wiktku-dfn-quote-citoid {
display: flex;
flex-direction: column;
align-items: stretch;
gap: 0.4em;
margin-top: 3px;
margin-bottom: 3px;
}
.wiktku-dfn-quote-citoid-input {
width: 100%;
max-width: 100%;
box-sizing: border-box;
}
/* Column flex + align-items:stretch (above) is what makes the textarea's
.wiktku-resize-wrap (see wiktkuMakeManualResizable in start.js) reach
full width automatically — stretch fills the cross axis for any block
child, no flex-grow needed on the wrap itself. The button and status
text, right below the textarea, opt back out of that stretch so they
stay their natural (small) size instead of also going full width. */
.wiktku-dfn-quote-citoid-btn,
.wiktku-dfn-quote-citoid-status {
align-self: flex-start;
}
.wiktku-dfn-quote-src-cat-status {
display: block;
font-size: 0.82em;
color: var(--wikt-palette-lightgrey, #767676);
margin-top: 2px;
}
.wiktku-dfn-quote-src-row {
display: flex;
align-items: baseline;
gap: 4px;
flex-wrap: wrap;
}
.wiktku-dfn-quote-src-row label {
font-size: 0.82em;
white-space: nowrap;
min-width: 8em;
}
textarea.wiktku-dfn-quote-src-input {
flex: 1 1 12em;
max-width: 100%;
box-sizing: border-box;
}
@media (max-width: 720px) {
.wiktku-lang-row {
flex-direction: column;
}
/* Re-assert against the wiki's own mobile skin heading styles,
which can apply their own mobile-breakpoint rules to this real
<h3> and load after ours in the cascade — see the rule itself,
above, for why this needs guarding at all. */
#wiktku-start-form .wiktku-start-step-name {
font-size: 1.05em !important;
margin: 0 0 0.2em !important;
line-height: 1.2 !important;
border: 0 !important;
padding: 0 !important;
}
/* Single column: search box and list use the full width. Narrow
textareas (Etîket, Hevmane, Dûnde/Jê/Têkildar/Binêre herwiha word
boxes, citation source fields, …) join them here too — at a fixed
20em width they used to poke out past the step card on narrow
screens. */
.wiktku-native-select-wrap,
input.wiktku-ac-input,
ul.wiktku-ac-results,
#wiktku-start-form textarea.wiktku-start-narrow,
#wiktku-start-form textarea.wiktku-dfn-subfield.wiktku-start-narrow {
width: 100%;
max-width: 100%;
}
.wiktku-mod-val-input {
flex: 1 1 auto;
max-width: 100%;
}
#wiktku-start-form textarea.wiktku-dfn-mane,
#wiktku-start-form .wiktku-pron-wrap textarea.wiktku-pron-text,
#wiktku-start-form .wiktku-etym-wrap textarea.wiktku-etym-text {
--wiktku-ta-rows: 3;
font-size: 1em;
}
#wiktku-start-form .wiktku-tewandin-wrap textarea.wiktku-tewandin-text,
#wiktku-start-form textarea.wiktku-cavkani-text {
--wiktku-ta-rows: 4;
font-size: 1em;
}
/* Nimûne + Jêgirtin and their tr/t sub-fields: keep at least 4 rows
on mobile too, rather than shrinking further than the desktop size. */
#wiktku-start-form textarea.wiktku-dfn-nimune-text,
#wiktku-start-form .wiktku-dfn-nimune-sub textarea.wiktku-dfn-nimune-tr,
#wiktku-start-form .wiktku-dfn-nimune-sub textarea.wiktku-dfn-nimune-t,
#wiktku-start-form .wiktku-dfn-jeder-group textarea.wiktku-dfn-nimune-quote,
#wiktku-start-form .wiktku-dfn-quote-sub textarea.wiktku-dfn-nimune-quote-tr,
#wiktku-start-form .wiktku-dfn-quote-sub textarea.wiktku-dfn-nimune-quote-t {
--wiktku-ta-rows: 4;
font-size: 1em;
}
/* Citoid URL/DOI/ISBN box: taller tap target (~2 lines) on mobile,
and now that this field is a <textarea> (see start.js) its
placeholder can actually wrap into that space — a plain <input>'s
placeholder can never wrap, no matter its height. */
.wiktku-dfn-quote-citoid-input {
min-height: calc(2 * 1.35em + 10px);
font-size: 1em;
}
.wiktku-dfn-nimune-sub,
.wiktku-dfn-quote-sub {
margin-left: 0.5em;
padding-left: 0.4em;
}
.wiktku-pron-wrap .wiktku-native-select-wrap input.wiktku-ac-input,
.wiktku-etym-wrap .wiktku-native-select-wrap input.wiktku-ac-input {
font-size: 1em;
min-height: 2.2em;
}
.wiktku-dfn-quote-src-row label {
min-width: 6em;
}
#wiktku-start-form textarea.wiktku-dfn-quote-src-input {
width: 100%;
flex: 1 1 100%;
}
.wiktku-start-step {
padding: 0.5em 0.6em;
}
}
/* ===================================================================
Night mode
Palette.css already flips every --wikt-palette-* var for night mode,
so rules built from those vars need nothing here. This hook is only
for real colours that can't be a palette var — here, the panel border,
since a drop shadow is invisible against an equally dark page.
Not needed: li:active's white text already flips to a dark colour at
night via --wikt-palette-white, so it stays legible on its own.
=================================================================== */
@media screen {
html.skin-theme-clientpref-night .wiktku-ac-results {
/* Border stands in for the shadow, invisible on a dark page. */
border-color: var(--wikt-palette-grey-5);
box-shadow: 0 3px 10px rgba(0, 0, 0, 0.6);
}
html.skin-theme-clientpref-night .wiktku-start-step,
html.skin-theme-clientpref-night .wiktku-start-step:hover,
html.skin-theme-clientpref-night .wiktku-start-step:focus-within {
box-shadow: none;
}
}
@media screen and (prefers-color-scheme: dark) {
html.skin-theme-clientpref-os .wiktku-ac-results {
border-color: var(--wikt-palette-grey-5);
box-shadow: 0 3px 10px rgba(0, 0, 0, 0.6);
}
html.skin-theme-clientpref-os .wiktku-start-step,
html.skin-theme-clientpref-os .wiktku-start-step:hover,
html.skin-theme-clientpref-os .wiktku-start-step:focus-within {
box-shadow: none;
}
}
/* "Zimanek lê zêde bike" portlet icon (Minerva/mobile) — Feather-core-edit.svg
via CSS mask, matching Minerva's own icon pattern. */
.minerva-icon-portletlink-ca-wiktku-addlang {
-webkit-mask-image: url("https://upload.wikimedia.org/wikipedia/commons/d/d7/Feather-core-edit.svg");
mask-image: url("https://upload.wikimedia.org/wikipedia/commons/d/d7/Feather-core-edit.svg");
-webkit-mask-repeat: no-repeat;
mask-repeat: no-repeat;
-webkit-mask-position: center;
mask-position: center;
-webkit-mask-size: 20px;
mask-size: 20px;
background-color: currentColor;
background-image: none;
}
/* ── posparams step (live wikitext + helper widgets) ── */
.wiktku-posparams-wrap {
display: flex;
flex-direction: column;
gap: 6px;
}
.wiktku-posparams-helpers {
display: flex;
flex-direction: column;
gap: 4px;
}
.wiktku-posparams-row {
display: flex;
align-items: center;
gap: 6px;
flex-wrap: wrap;
}
.wiktku-posparams-row label {
/* Rewiye tine, 14 Tebax 2026: these were the smallest labels on the whole
card (0.9em, one step below everything else) — the mobile breakpoint
already bumps this to 1em below; matching that on desktop too instead
of only fixing it for mobile. */
font-size: 1em;
min-width: 10em;
padding-right: 0;
}
.wiktku-posparams-text {
width: 100%;
box-sizing: border-box;
font-family: monospace;
font-size: 0.9em;
}
.wiktku-posparams-opt-toggle {
font-size: 0.85em;
margin-top: 2px;
display: inline-block;
}
.wiktku-posparams-opt-panel {
display: flex;
flex-direction: column;
gap: 2px;
padding: 4px 0 2px 1em;
}
.wiktku-posparams-opt-row {
display: flex;
align-items: center;
gap: 4px;
font-size: 0.85em;
}
/* ── resim step (one or more images) ── */
.wiktku-resim-list {
display: flex;
flex-direction: column;
gap: 6px;
}
.wiktku-resim-item {
display: flex;
flex-direction: column;
gap: 4px;
}
.wiktku-resim-item .wiktku-posparams-row {
flex-direction: column;
align-items: flex-start;
gap: 2px;
}
.wiktku-resim-item .wiktku-posparams-row label {
min-width: 0;
font-size: 0.9em;
}
/* ── dfn: "hide/show all subsections" link ──
Same show/hide-link pattern as "Tercîhên pêşketî" (posparams), but
toggles a class on the whole dfn stepDiv rather than one panel, so
a single click hides the etîket/kategorî/hevmane/dijmane/nimûne/
jêgirtin/etc. subgroups across every sense block at once (see
steps.dfn.build in start.js). */
.wiktku-dfn-subs-toggle {
font-size: 0.85em;
font-weight: 500;
display: inline-block;
margin: 2px 0 8px;
color: var(--wikt-palette-blue-9, #3366cc);
text-decoration: none;
}
.wiktku-dfn-subs-toggle:hover {
text-decoration: underline;
}
/* Only the ADVANCED subgroups collapse now (Ghybu, 14 Tebax 2026): Nimûne,
Jêgirtin, Hevmane and Dijmane stay open because they are what people
actually come here to fill in — see steps.dfn.allGroups, whose adv: flag
is what puts this class on a group. */
#wiktku-start-form li.wiktku-sense-adv-hidden .wiktku-dfn-subgroup-adv {
display: none !important;
}
/* The toggle sits between the primary groups and the advanced ones, so it
needs no rule of its own beyond a little breathing room. */
#wiktku-start-form .wiktku-sense-adv-row {
margin-top: 14px;
}
/* ===================================================================
Desktop text bump
The modifier pills/buttons and posparams helper text (labels,
"Tercîhên pêşketî" opt panel) use fairly small font-sizes that read
fine on mobile — narrow-viewport rendering effectively scales them
up — but look too small on a full desktop screen at their literal
em size. Bump them up past the 720px breakpoint only; mobile keeps
the original sizing above.
=================================================================== */
@media (min-width: 721px) {
.wiktku-mod-btn,
.wiktku-mod-confirm,
.wiktku-mod-cancel {
width: 1.8em;
height: 1.8em;
font-size: 1.1em;
}
.wiktku-mod-pill {
font-size: 0.95em;
padding: 3px 10px;
}
.wiktku-mod-val-input {
font-size: 0.95em;
}
.wiktku-posparams-row label {
font-size: 1em;
}
.wiktku-posparams-text {
font-size: 1em;
}
.wiktku-posparams-opt-toggle {
font-size: 0.95em;
}
.wiktku-posparams-opt-row {
font-size: 0.95em;
}
.wiktku-dfn-subs-toggle {
font-size: 0.95em;
}
/* Item 2 (Wikihez, 14 Tebax 2026): "sê-stûnî" — the same side-by-side,
multi-column card layout Ghybu asked for on POS/Cîns/Jimar now
applies to every posparams helper field (transliteration, gendered
forms, comparative/superlative, hanja, verb-tense roots, …), not
just those first two. Desktop-only per Wikihez's note that this isn't
supported on mobile — the plain stacked list above stays as-is
below this breakpoint. Rows are toggled via jQuery .show()/.hide()
(inline display:block/none) same as before; the grid only changes
how visible rows are arranged, not which ones are visible. */
.wiktku-posparams-helpers {
display: grid;
grid-template-columns: repeat(auto-fill, minmax(180px, 1fr));
gap: 10px 16px;
align-items: start;
}
.wiktku-posparams-helpers > .wiktku-posparams-row {
flex-direction: column;
align-items: stretch;
flex-wrap: nowrap;
gap: 3px;
}
.wiktku-posparams-helpers > .wiktku-posparams-row label {
min-width: 0;
}
.wiktku-posparams-helpers > .wiktku-posparams-row .wiktku-posparams-field,
.wiktku-posparams-helpers > .wiktku-posparams-row select.wiktku-posparams-cinsiyet-sel,
.wiktku-posparams-helpers > .wiktku-posparams-row select.wiktku-posparams-lektur-sel {
width: 100%;
max-width: 100%;
box-sizing: border-box;
}
/* The "Jimar" row added for item 1 lives here too (see start.js) — no
extra CSS needed, it's just another .wiktku-posparams-row. */
/* These two aren't per-field rows — span the full card width so the
collapsed toggle and its checkbox list don't get squeezed into one
narrow column. */
.wiktku-posparams-helpers > .wiktku-posparams-opt-toggle,
.wiktku-posparams-helpers > .wiktku-posparams-opt-panel {
grid-column: 1 / -1;
}
}
/* ===================================================================
SÊWIRANA NÛ — design system layer
===================================================================
From the "Cerdevanê ketanê — sêwirana nû" spec (15 Tebax 2026).
Appended rather than merged into the rules above on purpose: everything
before this point is layout (what sits next to what, which row wraps
where) and still does its job. This block is purely the visual skin —
colour, type, weight, radius, spacing — so it comes last and wins, and
so a future revert is a delete of one contiguous section.
Two deliberate deviations from the spec document:
1. No @import of Spectral / IBM Plex from Google Fonts. Wikimedia wikis
send a Content-Security-Policy that blocks third-party font hosts,
so the import would fail silently and we would ship a broken-looking
fallback nobody chose. The stacks below name the spec's faces first
(so they are used if the wiki ever installs them locally) and then
fall back to faces with the same feel: a transitional serif for
headings, the UI sans for body, the platform mono for wikitext.
2. Blue is spent, not sprayed. Ghybu, 14 Tebax 2026: "hemû bi rengê şîn
hatine çêkirin, nizanim beşên din (===) bi rengê gewr an reş çito
dibe?" — so section headings are near-black now and the accent is
reserved for things you can act on: focus, links, the active tab,
the primary button, chips.
=================================================================== */
#wiktku-start-form {
/* Surfaces */
--wikt-page: #f4efe5;
--wikt-card: #fffdf8;
--wikt-card-sunken: #fbf8f1;
--wikt-rule: #ded6c8; /* structural hairline */
--wikt-rule-soft: #efe8db; /* inside a card */
--wikt-field-edge: #cfc7b8;
--wikt-field-bg: #fff;
--wikt-code-bg: #f7f4ec;
--wikt-card-edge: #e6dfd2;
/* Ink */
--wikt-ink: #1c1a17;
--wikt-ink-2: #3d3830;
--wikt-ink-3: #57514a;
--wikt-muted: #8a8378;
--wikt-placeholder: #b3ab9e;
/* Accent + status */
--wikt-accent: #2a5db0;
--wikt-accent-deep: #22406f;
--wikt-accent-tint: #eef2fa;
--wikt-accent-edge: #d5def0;
--wikt-danger: #9c3a28;
--wikt-on-accent: #fff; /* text on a filled accent button */
--wikt-link-under: rgba(42, 93, 176, 0.35);
/* Shape */
--wikt-r-field: 10px;
--wikt-r-card: 14px;
--wikt-r-pill: 999px;
--wikt-tap: 44px; /* minimum field height */
--wikt-serif: Spectral, "Iowan Old Style", Georgia, "Times New Roman", serif;
--wikt-sans: "IBM Plex Sans", system-ui, -apple-system, "Segoe UI", sans-serif;
--wikt-mono: "IBM Plex Mono", ui-monospace, SFMono-Regular, Menlo, Consolas, monospace;
font-family: var(--wikt-sans);
font-size: 15px;
line-height: 1.55;
color: var(--wikt-ink);
background: var(--wikt-page);
padding: 24px;
border-radius: var(--wikt-r-card);
}
/* ── Cards ───────────────────────────────────────────────────────────
The old card had a 4px blue left bar and two shadows. The spec is
explicit — "Ti sî (shadow) tune; tenê xetên 1px" — so the card is
now a flat cream panel held by a single hairline. */
#wiktku-start-form .wiktku-start-step {
background: var(--wikt-card);
border: 1px solid var(--wikt-card-edge);
border-left: 1px solid var(--wikt-card-edge);
border-radius: var(--wikt-r-card);
box-shadow: none;
padding: 24px 24px 20px;
margin-bottom: 16px;
transition: border-color 0.12s ease;
}
#wiktku-start-form .wiktku-start-step:hover,
#wiktku-start-form .wiktku-start-step:focus-within {
box-shadow: none;
border-color: var(--wikt-rule);
}
/* The fused pos + posparams pair keeps reading as one card. */
#wiktku-start-form #wiktku-start-pos {
border-radius: var(--wikt-r-card) var(--wikt-r-card) 0 0;
border-bottom: none;
padding-bottom: 8px;
}
#wiktku-start-form #wiktku-start-posparams {
border-radius: 0 0 var(--wikt-r-card) var(--wikt-r-card);
border-top: none;
padding-top: 4px;
}
/* ── Type ────────────────────────────────────────────────────────────
Step headings: serif, regular weight, near-black. Previously bold,
letterspaced and blue — three signals doing one job. */
#wiktku-start-form .wiktku-start-step-name {
font-family: var(--wikt-serif);
font-size: 24px !important;
font-weight: 400;
letter-spacing: -0.01em;
line-height: 1.15;
color: var(--wikt-ink);
margin: 0 0 12px;
}
/* display:block matters: this is a <label>, so it was sharing a line with
the control it introduces wherever start.js didn't emit a <br>. */
#wiktku-start-form .wiktku-start-step-question {
display: block;
font-size: 15px;
font-weight: 400;
color: var(--wikt-ink-3);
margin: 0 0 12px;
line-height: 1.6;
max-width: 62ch;
}
/* Same reason — a field label belongs above its field, not beside it. */
#wiktku-start-form .wiktku-posparams-row label,
#wiktku-start-form .wiktku-dfn-sublabel {
display: block;
margin-bottom: 6px;
padding-right: 0;
}
/* Field labels: small, medium weight, full-strength ink — they label a
control, so they should not read as body copy. */
#wiktku-start-form .wiktku-start-step label,
#wiktku-start-form .wiktku-posparams-row label,
#wiktku-start-form .wiktku-dfn-sublabel {
font-size: 13px;
font-weight: 500;
color: var(--wikt-ink);
letter-spacing: 0.01em;
}
/* The parenthetical/example half of a label is supporting text. */
#wiktku-start-form .wiktku-dfn-sublabel-hint,
#wiktku-start-form .wiktku-step-hint {
font-weight: 400;
font-style: italic;
color: var(--wikt-muted);
font-size: 12.5px;
}
/* ── Fields ──────────────────────────────────────────────────────────
One shape for every control: 1px edge, 10px radius, 44px tall. */
#wiktku-start-form input[type="text"],
#wiktku-start-form input[type="search"],
#wiktku-start-form input.wiktku-ac-input,
#wiktku-start-form textarea,
#wiktku-start-form select {
font-family: var(--wikt-sans);
font-size: 15px;
color: var(--wikt-ink);
background: var(--wikt-field-bg);
border: 1px solid var(--wikt-field-edge);
border-radius: var(--wikt-r-field);
padding: 10px 14px;
box-shadow: none;
transition: border-color 0.12s ease, box-shadow 0.12s ease;
}
#wiktku-start-form input[type="text"],
#wiktku-start-form input[type="search"],
#wiktku-start-form select {
min-height: var(--wikt-tap);
}
#wiktku-start-form textarea {
line-height: 1.6;
}
/* Wikitext and anything template-shaped reads as code. */
#wiktku-start-form .wiktku-posparams-text,
#wiktku-start-form .wiktku-pron-text,
#wiktku-start-form .wiktku-etym-text,
#wiktku-start-form .wiktku-cavkani-text,
#wiktku-start-form .wiktku-tewandin-text,
#wiktku-start-form .wiktku-pron-preview-body {
font-family: var(--wikt-mono);
font-size: 13.5px;
background: var(--wikt-code-bg);
border-color: var(--wikt-card-edge);
}
#wiktku-start-form ::placeholder {
color: var(--wikt-placeholder);
opacity: 1;
}
/* Focus: accent edge + 3px tint halo. The only "elevation" in the design. */
#wiktku-start-form input[type="text"]:focus,
#wiktku-start-form input[type="search"]:focus,
#wiktku-start-form textarea:focus,
#wiktku-start-form select:focus,
#wiktku-start-form input.wiktku-ac-input:focus {
border-color: var(--wikt-accent);
box-shadow: 0 0 0 3px var(--wikt-accent-tint);
outline: 0;
}
/* The searchable picker's visible input is the field, so it takes the
field shape too (it otherwise inherits an older, boxier rule). */
#wiktku-start-form input.wiktku-ac-input {
min-height: var(--wikt-tap);
border-radius: var(--wikt-r-field);
border-color: var(--wikt-field-edge);
font-size: 15px;
}
#wiktku-start-form .wiktku-ac-results {
border: 1px solid var(--wikt-rule);
border-radius: var(--wikt-r-field);
background: var(--wikt-card);
box-shadow: none;
}
#wiktku-start-form .wiktku-ac-results li.wiktku-ac-active,
#wiktku-start-form .wiktku-ac-results li:hover {
background: var(--wikt-accent-tint);
color: var(--wikt-accent-deep);
}
/* ── Tabs → the accent's main job ────────────────────────────────────
Active tab: tint fill + 3px accent underline, per the spec's
"xala hûrgulî" note. Inactive tabs are plain text. */
#wiktku-start-form #wiktku-group-tabs,
#wiktku-start-form #wiktku-section-tabs {
display: flex;
flex-wrap: wrap;
gap: 4px;
align-items: center;
border-bottom: 1px solid var(--wikt-rule);
margin-bottom: 16px;
padding-bottom: 0;
}
#wiktku-start-form .wiktku-group-tab,
#wiktku-start-form .wiktku-section-tab {
font-size: 13.5px;
font-weight: 500;
color: var(--wikt-ink-3);
background: transparent;
border: 0;
border-bottom: 3px solid transparent;
border-radius: var(--wikt-r-pill) var(--wikt-r-pill) 0 0;
padding: 9px 14px 11px;
cursor: pointer;
transition: background 0.12s ease, color 0.12s ease;
}
#wiktku-start-form .wiktku-group-tab:hover,
#wiktku-start-form .wiktku-section-tab:hover {
background: var(--wikt-card-sunken);
color: var(--wikt-ink);
}
#wiktku-start-form .wiktku-group-tab.wiktku-tab-active,
#wiktku-start-form .wiktku-section-tab.wiktku-tab-active {
background: var(--wikt-accent-tint);
color: var(--wikt-accent);
border-bottom-color: var(--wikt-accent);
}
/* ── Progressive-disclosure toggles ──────────────────────────────────
Shared by "Tercîhên pêşketî" (posparams) and "Malûmatên pêşketî"
(Mane). Both are now the main way the form stays short, so they get a
real affordance — a rotating chevron and a count of what is behind
them — instead of a small blue link. */
#wiktku-start-form .wiktku-adv-toggle-row {
display: flex;
align-items: center;
justify-content: space-between;
gap: 16px;
flex-wrap: wrap;
margin: 4px 0 12px;
padding-top: 16px;
border-top: 1px solid var(--wikt-rule-soft);
}
#wiktku-start-form .wiktku-adv-toggle {
display: inline-flex;
align-items: center;
gap: 10px;
font-size: 14px;
font-weight: 500;
color: var(--wikt-accent);
text-decoration: none;
cursor: pointer;
}
#wiktku-start-form .wiktku-adv-toggle:hover .wiktku-adv-toggle-text {
text-decoration: underline;
}
#wiktku-start-form .wiktku-adv-toggle-chevron {
width: 22px;
height: 22px;
flex: 0 0 22px;
display: grid;
place-items: center;
font-size: 11px;
border: 1px solid var(--wikt-accent-edge);
background: var(--wikt-accent-tint);
border-radius: 6px;
transform: rotate(-90deg);
transition: transform 0.15s ease;
}
/* Open state: dfn flips the class on the step, posparams on the link. */
#wiktku-start-form .wiktku-adv-toggle.wiktku-adv-open .wiktku-adv-toggle-chevron,
#wiktku-start-dfn:not(.wiktku-dfn-subs-hidden) .wiktku-adv-toggle-chevron {
transform: rotate(0deg);
}
#wiktku-start-form .wiktku-adv-toggle-count {
font-family: var(--wikt-mono);
font-size: 12px;
color: var(--wikt-muted);
white-space: nowrap;
}
#wiktku-start-form .wiktku-posparams-adv-panel {
border: 1px solid var(--wikt-rule-soft);
border-radius: 12px;
background: var(--wikt-card-sunken);
padding: 20px 18px;
margin-bottom: 4px;
}
/* ── posparams grid ──────────────────────────────────────────────────
"Tor, ne rêz" — two columns, nothing narrower than 220px, so the six
gender/number fields stop being a six-across scanline. */
@media (min-width: 721px) {
#wiktku-start-form .wiktku-posparams-helpers,
#wiktku-start-form .wiktku-posparams-adv-panel {
display: grid;
grid-template-columns: repeat(auto-fill, minmax(220px, 1fr));
gap: 18px 22px;
align-items: start;
}
#wiktku-start-form .wiktku-posparams-adv-panel > .wiktku-posparams-row,
#wiktku-start-form .wiktku-posparams-helpers > .wiktku-posparams-row {
flex-direction: column;
align-items: stretch;
flex-wrap: nowrap;
gap: 7px;
}
#wiktku-start-form .wiktku-posparams-helpers > .wiktku-adv-toggle-row,
#wiktku-start-form .wiktku-posparams-helpers > .wiktku-posparams-adv-panel,
#wiktku-start-form .wiktku-posparams-adv-panel > .wiktku-posparams-opt-panel {
grid-column: 1 / -1;
}
}
#wiktku-start-form .wiktku-posparams-opt-panel {
border-top: 1px solid var(--wikt-rule-soft);
padding-top: 14px;
margin-top: 4px;
}
#wiktku-start-form .wiktku-posparams-opt-row {
font-size: 13px;
color: var(--wikt-ink-3);
}
/* ── Sense blocks ────────────────────────────────────────────────────
Each sense is a sunken panel inside the Mane card, with its number as
an accent counter — so "how many meanings am I writing" is legible at
a glance. */
#wiktku-start-form .wiktku-dfn-subgroup {
margin: 14px 0 0;
padding-top: 14px;
border-top: 1px solid var(--wikt-rule-soft);
}
/* Nimûne leads the list now, and a divider above the first item would be
a rule against the sense's own text. (Needed explicitly: the older
:first-of-type rule further up is a class selector and loses to the
id-scoped one above.) */
#wiktku-start-form .wiktku-dfn-subgroup:first-of-type {
margin-top: 8px;
padding-top: 0;
border-top: none;
}
#wiktku-start-form .wiktku-dfn-sublabel-term {
color: var(--wikt-ink);
}
/* Every sense sub-field is a plain white field like any other. Older rules
gave several of them a tinted fill, which read as "disabled" next to the
white Mane box directly above them. */
#wiktku-start-form .wiktku-dfn-subfield,
#wiktku-start-form textarea.wiktku-dfn-mane {
background: var(--wikt-field-bg);
border: 1px solid var(--wikt-field-edge);
border-radius: var(--wikt-r-field);
}
/* No "1." "2." markers on the sub-lists. Ghybu, 14 Tebax 2026, on exactly
this: numbered rows read as a form you must fill from the top down, when
really each row is just "another one if you have another one" — and with
a block-level textarea per row the marker also lands on its own line
above the field, which looks like a stray character. */
#wiktku-start-form .wiktku-dfn-sublist {
margin: 0;
padding-left: 0;
list-style: none;
}
#wiktku-start-form .wiktku-dfn-sublist > li {
margin-bottom: 6px;
}
/* ── Chips: tags, modifiers, template pills ──────────────────────────── */
#wiktku-start-form .wiktku-mod-pill,
#wiktku-start-form .wiktku-besendin-select + .wiktku-chip {
background: var(--wikt-accent-tint);
color: var(--wikt-accent-deep);
border: 1px solid var(--wikt-accent-edge);
border-radius: var(--wikt-r-pill);
font-size: 13px;
padding: 6px 12px;
}
#wiktku-start-form .wiktku-mod-btn,
#wiktku-start-form .wiktku-mod-confirm,
#wiktku-start-form .wiktku-mod-cancel {
border: 1px solid var(--wikt-accent-edge);
background: var(--wikt-accent-tint);
color: var(--wikt-accent);
border-radius: 8px;
}
/* ── Footer + buttons ────────────────────────────────────────────────
Spec: one primary pill, everything else quiet. The two red buttons
sitting next to it are the loudest thing on the old screen for no
reason — they become outline buttons in the danger colour instead of
filled ones. */
#wiktku-start-form #wiktku-start-footer {
background: var(--wikt-card-sunken);
border-top: 1px solid var(--wikt-rule);
border-radius: 0 0 var(--wikt-r-card) var(--wikt-r-card);
padding: 16px 20px;
gap: 10px;
}
#wiktku-start-form #wiktku-start-footer .oo-ui-buttonElement-button {
border-radius: var(--wikt-r-pill) !important;
font-family: var(--wikt-sans);
font-size: 14px;
font-weight: 500;
padding: 11px 22px;
box-shadow: none !important;
min-height: var(--wikt-tap);
}
#wiktku-start-form #wiktku-unhide-editform .oo-ui-buttonElement-button {
background: var(--wikt-accent) !important;
border-color: var(--wikt-accent) !important;
color: var(--wikt-on-accent) !important;
}
/* Destructive actions: outline, not fill. */
#wiktku-start-form #wiktku-start-footer .oo-ui-flaggedElement-destructive .oo-ui-buttonElement-button {
background: var(--wikt-card) !important;
border-color: var(--wikt-danger) !important;
color: var(--wikt-danger) !important;
}
#wiktku-start-form #wiktku-last-saved {
font-family: var(--wikt-mono);
font-size: 12px;
color: var(--wikt-muted);
}
/* ── Beşên din picker ────────────────────────────────────────────────
This dropdown is now the entry point to eighteen sections, so it gets
room and a label rather than sitting flush under the tab bar. */
#wiktku-start-form .wiktku-besendin-picker {
margin: 0 0 20px;
padding: 16px 18px;
background: var(--wikt-card);
border: 1px solid var(--wikt-card-edge);
border-radius: 12px;
}
#wiktku-start-form .wiktku-besendin-picker .wiktku-native-select-wrap,
#wiktku-start-form .wiktku-besendin-picker input.wiktku-ac-input {
width: 100%;
max-width: 28em;
}
/* ── Notices ─────────────────────────────────────────────────────────── */
#wiktku-start-form .wiktku-addlang-notice {
background: var(--wikt-accent-tint);
border: 1px solid var(--wikt-accent-edge);
border-radius: var(--wikt-r-field);
color: var(--wikt-ink-2);
padding: 12px 16px;
margin-bottom: 16px;
}
#wiktku-start-form .wiktku-pron-preview {
background: var(--wikt-accent-tint);
border-color: var(--wikt-accent-edge);
border-radius: 12px;
}
#wiktku-start-form .wiktku-pron-preview-confirm,
#wiktku-start-form .wiktku-pron-preview-cancel {
border-radius: var(--wikt-r-pill);
padding: 8px 16px;
min-height: 36px;
}
/* Links carry the accent and a soft underline, per the spec's `a` rule. */
#wiktku-start-form a {
color: var(--wikt-accent);
text-decoration: none;
border-bottom: 1px solid var(--wikt-link-under);
}
#wiktku-start-form a:hover {
color: var(--wikt-accent-deep);
}
#wiktku-start-form .wiktku-adv-toggle,
#wiktku-start-form .wiktku-group-tab,
#wiktku-start-form .wiktku-section-tab {
border-bottom-style: solid;
}
#wiktku-start-form .wiktku-adv-toggle {
border-bottom: 0;
}
/* ===================================================================
Dark mode
===================================================================
Every colour above is a token on #wiktku-start-form, so night mode is
a swap of that one block — no rule is duplicated.
Three selectors, because MediaWiki has three states and guessing wrong
is worse than not supporting it: an explicit night choice, "follow my
OS" plus an OS that says dark, and skins old enough to set no theme
class at all (older mobile output), where prefers-color-scheme is the
only signal available. The :not() chain on the last one keeps it from
overriding someone who explicitly asked for day mode.
The palette is warm, not neutral grey — a straight inversion of a cream
design lands on blue-grey and loses the character of it. Accent lightens
to #7ba7e8: #2a5db0 on a dark card is around 2.4:1, which fails contrast
and reads as near-black.
=================================================================== */
html.skin-theme-clientpref-night #wiktku-start-form,
html.skin-nightmode #wiktku-start-form {
--wikt-page: #171613;
--wikt-card: #201e1a;
--wikt-card-sunken: #1a1916;
--wikt-card-edge: #322e28;
--wikt-rule: #3a3630;
--wikt-rule-soft: #2c2924;
--wikt-field-edge: #4a453d;
--wikt-field-bg: #191815;
--wikt-code-bg: #14130f;
--wikt-ink: #ece7dd;
--wikt-ink-2: #d5cfc4;
--wikt-ink-3: #b3aca1;
--wikt-muted: #8f887c;
--wikt-placeholder: #6d675e;
--wikt-accent: #7ba7e8;
--wikt-accent-deep: #cfe0f8;
--wikt-accent-tint: #1c2839;
--wikt-accent-edge: #35496b;
--wikt-danger: #e5907c;
--wikt-on-accent: #14213a;
--wikt-link-under: rgba(123, 167, 232, 0.4);
}
@media screen and (prefers-color-scheme: dark) {
html.skin-theme-clientpref-os #wiktku-start-form,
html:not(.skin-theme-clientpref-day):not(.skin-theme-clientpref-night):not(.skin-theme-clientpref-os) #wiktku-start-form {
--wikt-page: #171613;
--wikt-card: #201e1a;
--wikt-card-sunken: #1a1916;
--wikt-card-edge: #322e28;
--wikt-rule: #3a3630;
--wikt-rule-soft: #2c2924;
--wikt-field-edge: #4a453d;
--wikt-field-bg: #191815;
--wikt-code-bg: #14130f;
--wikt-ink: #ece7dd;
--wikt-ink-2: #d5cfc4;
--wikt-ink-3: #b3aca1;
--wikt-muted: #8f887c;
--wikt-placeholder: #6d675e;
--wikt-accent: #7ba7e8;
--wikt-accent-deep: #cfe0f8;
--wikt-accent-tint: #1c2839;
--wikt-accent-edge: #35496b;
--wikt-danger: #e5907c;
--wikt-on-accent: #14213a;
--wikt-link-under: rgba(123, 167, 232, 0.4);
}
}
/* A handful of pre-design-layer rules still name literal light colours
(they predate the tokens). Rather than hunt every one, neutralise the
ones that actually show through in night mode. */
html.skin-theme-clientpref-night #wiktku-start-form .wiktku-ac-results,
html.skin-nightmode #wiktku-start-form .wiktku-ac-results {
background: var(--wikt-card);
border-color: var(--wikt-rule);
color: var(--wikt-ink);
}
@media screen and (prefers-color-scheme: dark) {
html.skin-theme-clientpref-os #wiktku-start-form .wiktku-ac-results,
html:not(.skin-theme-clientpref-day):not(.skin-theme-clientpref-night):not(.skin-theme-clientpref-os) #wiktku-start-form .wiktku-ac-results {
background: var(--wikt-card);
border-color: var(--wikt-rule);
color: var(--wikt-ink);
}
}
/* ===================================================================
Autocomplete list: stop it escaping its card
===================================================================
ul.wiktku-ac-results carried a hard `width: 20em` regardless of the
field it belongs to. On the full-width pickers — "Çavkanî hilbijêre" is
the obvious one — the list is absolutely positioned at the wrapper's
left edge, so a fixed 20em runs straight past the card's right border
whenever the card is narrower than that.
The wrapper is shrink-to-fit around its input, so `width: 100%` here
means "exactly as wide as the field I belong to" — which is what a
combobox should do — while min-width keeps the short pickers readable
and max-width stops either from leaving the viewport. */
#wiktku-start-form ul.wiktku-ac-results {
width: 100%;
min-width: min(18em, 100%);
max-width: min(92vw, 34em);
box-sizing: border-box;
border-radius: var(--wikt-r-field);
box-shadow: none;
}
/* And the wrapper itself must not exceed the card it sits in. */
#wiktku-start-form .wiktku-native-select-wrap {
max-width: 100%;
}
#wiktku-start-form .wiktku-cavkani-wrap .wiktku-native-select-wrap,
#wiktku-start-form .wiktku-cavkani-wrap input.wiktku-ac-input,
#wiktku-start-form .wiktku-pron-wrap .wiktku-native-select-wrap,
#wiktku-start-form .wiktku-etym-wrap .wiktku-native-select-wrap {
width: 100%;
max-width: 100%;
box-sizing: border-box;
}
/* ===================================================================
Mobile: the footer was the loudest thing on a small screen
===================================================================
Four 44px-tall pills with 22px of side padding wrap into three rows and
eat most of a phone viewport — and the footer is sticky, so that stays
on screen the whole time. Below 720px the primary button keeps its full
size (it is the one you press) and everything else shrinks to a
secondary scale.
=================================================================== */
@media (max-width: 720px) {
#wiktku-start-form {
padding: 12px;
font-size: 14px;
}
#wiktku-start-form .wiktku-start-step {
padding: 16px 14px 14px;
border-radius: 12px;
}
#wiktku-start-form .wiktku-start-step-name {
font-size: 20px !important;
}
#wiktku-start-form #wiktku-start-footer {
padding: 10px 12px;
gap: 6px;
row-gap: 8px;
}
#wiktku-start-form #wiktku-start-footer .oo-ui-buttonElement-button {
font-size: 13px;
padding: 8px 14px;
min-height: 38px;
}
/* The one you actually press stays thumb-sized. */
#wiktku-start-form #wiktku-unhide-editform .oo-ui-buttonElement-button {
font-size: 14px;
padding: 10px 20px;
min-height: var(--wikt-tap);
}
/* Secondary actions share a row instead of each claiming a full one. */
#wiktku-start-form #wiktku-start-footer .oo-ui-buttonElement {
flex: 0 1 auto;
}
#wiktku-start-form #wiktku-last-saved {
flex: 1 0 100%;
order: 10;
font-size: 11px;
white-space: normal;
}
#wiktku-start-form .wiktku-adv-toggle-row {
gap: 8px;
}
#wiktku-start-form .wiktku-adv-toggle-count {
font-size: 11px;
}
}
/* ===================================================================
IPA character palette (v3 spec)
===================================================================
Click-to-insert chart under Bilêvkirin, after fr.wiktionary's. Two
sub-tabs — a short Kurmancî set that opens by default, and the full
chart — because ~20 of the ~180 IPA symbols ever occur in Kurmancî
and showing all of them first is the same "wall of fields" problem
this redesign exists to fix.
=================================================================== */
#wiktku-start-form .wiktku-ipa-panel {
border: 1px solid var(--wikt-card-edge);
border-radius: 12px;
background: var(--wikt-card-sunken);
padding: 0 0 12px;
margin-bottom: 8px;
overflow: hidden;
}
#wiktku-start-form .wiktku-ipa-subtabs {
display: flex;
align-items: center;
gap: 4px;
padding: 8px 12px 0;
border-bottom: 1px solid var(--wikt-rule-soft);
margin-bottom: 12px;
flex-wrap: wrap;
}
#wiktku-start-form .wiktku-ipa-subtab {
font-size: 13px;
font-weight: 500;
color: var(--wikt-ink-3);
padding: 7px 12px 9px;
border-bottom: 3px solid transparent;
border-radius: 8px 8px 0 0;
cursor: pointer;
}
#wiktku-start-form .wiktku-ipa-subtab:hover {
background: var(--wikt-card);
color: var(--wikt-ink);
}
#wiktku-start-form .wiktku-ipa-subtab.wiktku-tab-active {
background: var(--wikt-accent-tint);
color: var(--wikt-accent);
border-bottom-color: var(--wikt-accent);
}
/* Templates are not characters, so they sit apart from the chart —
pinned to the right of the sub-tab row. */
#wiktku-start-form .wiktku-ipa-tplbtns {
margin-left: auto;
display: flex;
gap: 6px;
padding-bottom: 6px;
}
#wiktku-start-form .wiktku-ipa-tplbtn {
font-family: var(--wikt-mono);
font-size: 12px;
padding: 6px 10px;
border-radius: 7px;
border: 1px solid var(--wikt-accent-edge);
background: var(--wikt-accent-tint);
color: var(--wikt-accent);
cursor: pointer;
white-space: nowrap;
}
#wiktku-start-form .wiktku-ipa-tplbtn:hover {
border-color: var(--wikt-accent);
}
#wiktku-start-form .wiktku-ipa-grid {
display: flex;
flex-direction: column;
gap: 8px;
padding: 0 12px;
}
#wiktku-start-form .wiktku-ipa-row {
display: flex;
align-items: flex-start;
gap: 10px;
}
#wiktku-start-form .wiktku-ipa-rowlabel {
flex: 0 0 74px;
font-size: 11.5px;
color: var(--wikt-muted);
padding-top: 8px;
line-height: 1.3;
}
#wiktku-start-form .wiktku-ipa-keys {
display: flex;
flex-wrap: wrap;
gap: 4px;
flex: 1 1 auto;
}
#wiktku-start-form .wiktku-ipa-key {
width: 30px;
height: 30px;
padding: 0;
border-radius: 8px;
border: 1px solid var(--wikt-field-edge);
background: var(--wikt-field-bg);
color: var(--wikt-ink);
font-family: var(--wikt-mono);
font-size: 14px;
line-height: 1;
cursor: pointer;
display: grid;
place-items: center;
transition: background 0.1s ease, border-color 0.1s ease;
}
#wiktku-start-form .wiktku-ipa-key:hover {
background: var(--wikt-accent-tint);
border-color: var(--wikt-accent);
color: var(--wikt-accent-deep);
}
#wiktku-start-form .wiktku-ipa-key:active {
transform: translateY(1px);
}
/* Ligatures like d͡ʒ and long vowels need a little more room than one
glyph; let those keys grow instead of clipping. */
#wiktku-start-form .wiktku-ipa-key {
width: auto;
min-width: 30px;
padding: 0 5px;
}
/* A combining mark is shown on a dotted circle so it has something to
attach to; only the mark itself is inserted. */
#wiktku-start-form .wiktku-ipa-key-combining {
color: var(--wikt-ink-2);
}
@media (max-width: 720px) {
#wiktku-start-form .wiktku-ipa-row {
flex-direction: column;
gap: 3px;
}
#wiktku-start-form .wiktku-ipa-rowlabel {
flex: 0 0 auto;
padding-top: 0;
}
#wiktku-start-form .wiktku-ipa-key {
min-width: 34px;
height: 34px;
}
}
/* ── "+ Beş zêde bike" menu ──────────────────────────────────────────
Adding a part of speech and adding Bilêvkirin are different actions,
so the button opens a small menu instead of doing one of them. */
#wiktku-start-form .wiktku-addsection-menu {
position: absolute;
z-index: 60;
margin-top: 6px;
min-width: 15em;
background: var(--wikt-card);
border: 1px solid var(--wikt-rule);
border-radius: 10px;
padding: 4px;
display: flex;
flex-direction: column;
}
#wiktku-start-form .wiktku-addsection-item {
display: flex;
flex-direction: column;
gap: 1px;
padding: 8px 10px;
border-radius: 7px;
border-bottom: 0;
text-decoration: none;
color: var(--wikt-ink);
}
#wiktku-start-form .wiktku-addsection-item:hover {
background: var(--wikt-accent-tint);
}
#wiktku-start-form .wiktku-addsection-item-label {
font-size: 13.5px;
font-weight: 500;
}
#wiktku-start-form .wiktku-addsection-item-hint {
font-size: 11.5px;
color: var(--wikt-muted);
}
#wiktku-start-form #wiktku-section-tabs .oo-ui-buttonElement {
position: relative;
}
/* Bilêvkirin is a peer of the POS sections but not a part of speech —
a hairline before it marks the boundary. */
#wiktku-start-form .wiktku-section-tab-pron {
margin-left: 6px;
border-left: 1px solid var(--wikt-rule);
padding-left: 14px;
border-radius: 0;
}
/* ===================================================================
Per-sense accordion (v3 spec)
===================================================================
"Tenê maneya ku tê nivîsandin vekirî ye" — each meaning is a closed
box showing its own text, so a four-sense entry fits on one screen
instead of scrolling for a minute. A sense with nothing in it is
never collapsed: the trailing empty one is how you add the next
meaning, so hiding it would hide the only way forward.
=================================================================== */
#wiktku-start-form li.wiktku-dfn-sense {
border: 1px solid var(--wikt-card-edge);
border-radius: 12px;
background: var(--wikt-card);
margin-bottom: 10px;
padding: 0;
list-style: none;
overflow: visible;
}
#wiktku-start-form .wiktku-dfn-sense-header {
display: flex;
align-items: center;
gap: 10px;
padding: 12px 14px;
cursor: pointer;
border-radius: 12px;
user-select: none;
}
#wiktku-start-form li.wiktku-dfn-sense:not(.wiktku-sense-collapsed) .wiktku-dfn-sense-header {
border-bottom: 1px solid var(--wikt-rule-soft);
border-radius: 12px 12px 0 0;
}
#wiktku-start-form .wiktku-dfn-sense-header:hover {
background: var(--wikt-card-sunken);
}
#wiktku-start-form .wiktku-dfn-sense-num {
flex: 0 0 22px;
height: 22px;
border-radius: 999px;
background: var(--wikt-accent);
color: var(--wikt-on-accent);
font-family: var(--wikt-mono);
font-size: 12px;
display: grid;
place-items: center;
}
#wiktku-start-form .wiktku-dfn-sense-title {
font-size: 13.5px;
font-weight: 500;
white-space: nowrap;
}
/* The summary is the point of a collapsed row, so it only shows there. */
#wiktku-start-form .wiktku-dfn-sense-summary {
flex: 1 1 auto;
min-width: 0;
font-size: 13px;
color: var(--wikt-muted);
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
display: none;
}
#wiktku-start-form li.wiktku-sense-collapsed .wiktku-dfn-sense-summary {
display: block;
}
#wiktku-start-form .wiktku-dfn-sense-chevron {
margin-left: auto;
color: var(--wikt-muted);
font-size: 12px;
transition: transform 0.15s ease;
}
#wiktku-start-form li.wiktku-sense-collapsed .wiktku-dfn-sense-chevron {
transform: rotate(-90deg);
}
#wiktku-start-form .wiktku-dfn-sense-body {
padding: 14px;
}
#wiktku-start-form li.wiktku-sense-collapsed .wiktku-dfn-sense-body {
display: none;
}
/* ===================================================================
Template rows in the pickers (v3 spec)
===================================================================
"Ti cihê ku şablon tê hilbijartin bêyî 🔗 û i namîne" — one row shape
everywhere a template is chosen. Rewiye tine's original complaint was
that "guharto? kevnbûyî? ku-Latn? şaşnivîs?" mean nothing to a
newcomer; the ⓘ answers that without leaving the form, and the 🔗 is
there for when it doesn't.
=================================================================== */
#wiktku-start-form ul.wiktku-ac-results li.wiktku-ac-tplrow {
display: flex;
align-items: center;
gap: 8px;
min-height: 44px;
white-space: normal;
padding: 6px 10px;
}
#wiktku-start-form .wiktku-ac-tpltext {
flex: 1 1 auto;
min-width: 0;
font-family: var(--wikt-mono);
font-size: 13px;
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
}
/* Status, not category: green is the one to reach for, yellow means
"only if you specifically need it" (kevnbûyî, şaşnivîs, kêmpeyda). */
#wiktku-start-form .wiktku-tpl-dot {
flex: 0 0 8px;
width: 8px;
height: 8px;
border-radius: 999px;
}
#wiktku-start-form .wiktku-tpl-dot-ok { background: #3d8a55; }
#wiktku-start-form .wiktku-tpl-dot-special { background: #c9971f; }
#wiktku-start-form .wiktku-tpl-icons {
flex: 0 0 auto;
display: flex;
gap: 5px;
align-items: center;
}
#wiktku-start-form .wiktku-tpl-icon {
width: 26px;
height: 26px;
display: grid;
place-items: center;
font-size: 12px;
line-height: 1;
cursor: pointer;
border: 1px solid var(--wikt-accent-edge);
background: var(--wikt-accent-tint);
color: var(--wikt-accent);
border-bottom: 1px solid var(--wikt-accent-edge);
text-decoration: none;
padding: 0;
}
#wiktku-start-form .wiktku-tpl-icon-link { border-radius: 7px; }
#wiktku-start-form .wiktku-tpl-icon-info {
border-radius: 999px;
font-family: var(--wikt-serif);
font-style: italic;
font-weight: 600;
background: transparent;
border-color: var(--wikt-field-edge);
color: var(--wikt-muted);
}
#wiktku-start-form .wiktku-tpl-icon:hover {
border-color: var(--wikt-accent);
color: var(--wikt-accent);
background: var(--wikt-accent-tint);
}
/* ── The ⓘ panel ─────────────────────────────────────────────────────
Three parts, in the spec's order: what it does, its parameters, and a
way out to the template page. */
#wiktku-start-form .wiktku-tpl-info {
position: relative;
margin: 8px 0 4px;
padding: 14px 16px;
border: 1px solid var(--wikt-accent-edge);
background: var(--wikt-accent-tint);
border-radius: 12px;
font-size: 13.5px;
line-height: 1.6;
color: var(--wikt-ink-2);
}
#wiktku-start-form .wiktku-tpl-info-name {
font-family: var(--wikt-mono);
font-size: 13px;
color: var(--wikt-accent-deep);
margin-bottom: 6px;
}
#wiktku-start-form .wiktku-tpl-info-params {
margin-top: 8px;
}
#wiktku-start-form .wiktku-tpl-info-params-title {
font-size: 12px;
color: var(--wikt-muted);
margin-bottom: 2px;
}
#wiktku-start-form .wiktku-tpl-info-params ul {
margin: 0;
padding-left: 18px;
font-family: var(--wikt-mono);
font-size: 12.5px;
}
#wiktku-start-form .wiktku-tpl-info-link {
display: inline-block;
margin-top: 10px;
font-size: 13px;
}
#wiktku-start-form .wiktku-tpl-info-close {
position: absolute;
top: 8px;
right: 8px;
width: 24px;
height: 24px;
border-radius: 999px;
border: 0;
background: transparent;
color: var(--wikt-muted);
cursor: pointer;
font-size: 13px;
line-height: 1;
}
#wiktku-start-form .wiktku-tpl-info-close:hover {
background: var(--wikt-card);
color: var(--wikt-ink);
}
/* ===================================================================
Footer overflow "⋯" (v3 spec)
===================================================================
Bişîne and "Edîtora çavkaniyê veke" stay on the bar; the two cache
actions, the saved-at note and Tercîh move in here. Four equal-weight
buttons (two of them red) made the destructive ones as loud as the
one you actually want, and on a phone the sticky footer wrapped to
three rows.
=================================================================== */
#wiktku-start-form .wiktku-more-wrap {
position: relative;
margin-left: auto;
flex: 0 0 auto;
}
#wiktku-start-form .wiktku-more-btn {
width: 36px;
height: 36px;
border-radius: 999px;
border: 1px solid var(--wikt-field-edge);
background: var(--wikt-card);
color: var(--wikt-muted);
font-size: 16px;
line-height: 1;
cursor: pointer;
display: grid;
place-items: center;
}
#wiktku-start-form .wiktku-more-btn:hover {
border-color: var(--wikt-accent);
color: var(--wikt-accent);
}
#wiktku-start-form .wiktku-more-menu {
position: absolute;
right: 0;
bottom: calc(100% + 8px);
z-index: 70;
min-width: 17em;
background: var(--wikt-card);
border: 1px solid var(--wikt-rule);
border-radius: 12px;
padding: 6px;
display: flex;
flex-direction: column;
gap: 2px;
}
#wiktku-start-form .wiktku-more-item {
display: flex;
align-items: center;
gap: 8px;
}
/* The buttons inside the menu are menu rows, not buttons on a bar. */
#wiktku-start-form .wiktku-more-item .oo-ui-buttonElement {
flex: 1 1 auto;
}
#wiktku-start-form .wiktku-more-item .oo-ui-buttonElement-button {
display: block;
width: 100%;
text-align: left;
border: 0 !important;
background: transparent !important;
border-radius: 7px !important;
padding: 9px 10px;
min-height: 0;
font-weight: 400;
color: var(--wikt-ink) !important;
}
#wiktku-start-form .wiktku-more-item .oo-ui-buttonElement-button:hover {
background: var(--wikt-accent-tint) !important;
}
#wiktku-start-form .wiktku-more-item-danger .oo-ui-buttonElement-button {
color: var(--wikt-danger) !important;
}
#wiktku-start-form .wiktku-more-item-prefs .wiktku-prefs-btn {
width: 26px;
height: 26px;
flex: 0 0 26px;
border: 0;
background-color: transparent;
}
#wiktku-start-form .wiktku-more-item-label {
font-size: 13.5px;
}
#wiktku-start-form .wiktku-more-sep {
height: 1px;
background: var(--wikt-rule-soft);
margin: 4px 2px;
}
#wiktku-start-form .wiktku-more-note {
padding: 4px 10px 2px;
}
#wiktku-start-form .wiktku-more-note #wiktku-last-saved {
white-space: normal;
}
/* The accordion header carries the sense number now, so the older CSS
counter badge on the <li> would draw a second one behind it. Retire the
counter and its indent — the header owns this. */
#wiktku-start-form ol.wiktku-dfn-list > li.wiktku-dfn-sense::before {
content: none;
}
#wiktku-start-form ol.wiktku-dfn-list > li.wiktku-dfn-sense {
padding-left: 0;
padding-bottom: 0;
border-bottom: 0;
margin-bottom: 10px;
}
#wiktku-start-form ol.wiktku-dfn-list > li.wiktku-dfn-sense:not(:last-child) {
padding-bottom: 0;
border-bottom: 0;
}
/* ── "+ Mane zêde bike" ──────────────────────────────────────────────
Senses are added deliberately now instead of appearing the moment you
type. An always-present empty second sense read as an unfinished form
on entries that only ever have one meaning. */
#wiktku-start-form .wiktku-add-sense {
display: inline-flex;
align-items: center;
gap: 8px;
margin-top: 4px;
padding: 10px 18px;
border: 1px solid var(--wikt-field-edge);
border-radius: var(--wikt-r-pill);
background: var(--wikt-card);
color: var(--wikt-ink-2);
font-family: var(--wikt-sans);
font-size: 13.5px;
cursor: pointer;
min-height: 40px;
}
#wiktku-start-form .wiktku-add-sense:hover {
border-color: var(--wikt-accent);
color: var(--wikt-accent);
background: var(--wikt-accent-tint);
}
#wiktku-start-form .wiktku-add-sense-plus {
color: var(--wikt-accent);
font-size: 15px;
line-height: 1;
}
/* ── Şablon picker, demoted to a link ────────────────────────────────
Picking a template replaces the definition rather than adding to it,
so it is an alternative route, not the first control in the sense.
Hidden behind one line of text until it is actually wanted. */
#wiktku-start-form .wiktku-dfn-tpl-link {
display: inline-block;
margin-top: 8px;
font-size: 12.5px;
color: var(--wikt-muted);
border-bottom: 1px solid transparent;
}
#wiktku-start-form .wiktku-dfn-tpl-link:hover {
color: var(--wikt-accent);
border-bottom-color: var(--wikt-link-under);
}
#wiktku-start-form .wiktku-dfn-tpl-row {
margin-top: 10px;
padding-top: 12px;
border-top: 1px solid var(--wikt-rule-soft);
}
/* ── Template-row icons on touch screens ─────────────────────────────
26px is fine for a mouse and too small for a thumb, and these two sit
right next to each other at the end of a row you can also tap to
select. Give them real targets and some separation on small screens. */
@media (max-width: 720px), (pointer: coarse) {
#wiktku-start-form .wiktku-tpl-icon {
width: 34px;
height: 34px;
font-size: 14px;
}
#wiktku-start-form .wiktku-tpl-icons {
gap: 8px;
padding-left: 4px;
}
#wiktku-start-form ul.wiktku-ac-results li.wiktku-ac-tplrow {
min-height: 50px;
}
}
/* The rendered pronunciation preview is real parser output, so it needs
to sit as content rather than in the monospace wikitext treatment the
panel inherits. */
#wiktku-start-form .wiktku-pron-preview-body {
font-family: var(--wikt-sans);
font-size: 15px;
background: var(--wikt-card);
border: 1px solid var(--wikt-accent-edge);
border-radius: 8px;
padding: 10px 12px;
white-space: normal;
}
#wiktku-start-form .wiktku-pron-preview-body .IPA,
#wiktku-start-form .wiktku-pron-preview-body code,
#wiktku-start-form .wiktku-pron-preview-body tt {
font-family: var(--wikt-mono);
}
/* Parser output brings its own margins; strip the outer ones so the
preview box doesn't gain a blank first line. */
#wiktku-start-form .wiktku-pron-preview-body > *:first-child { margin-top: 0; }
#wiktku-start-form .wiktku-pron-preview-body > *:last-child { margin-bottom: 0; }
5doy4uz6uq8ab2knnecmk2s55z66719
Bikarhêner:Wikihez/Gadget-test.js
2
1358395
6333691
6327635
2026-08-14T18:55:06Z
Wikihez
7344
6333691
javascript
text/javascript
6333706
6333691
2026-08-14T19:28:41Z
Wikihez
7344
6333706
javascript
text/javascript
6333709
6333706
2026-08-14T19:36:28Z
Wikihez
7344
6333709
javascript
text/javascript
6333712
6333709
2026-08-14T19:46:51Z
Wikihez
7344
6333712
javascript
text/javascript
6333731
6333712
2026-08-14T21:10:38Z
Wikihez
7344
6333731
javascript
text/javascript
6333749
6333731
2026-08-14T22:42:30Z
Wikihez
7344
6333749
javascript
text/javascript
// Li ser [[vi:MediaWiki:Gadget-start.js]] hatiye refaktorkirin.
// implicit dependencies: StorageUtils (ObjectStorage)
//<nowiki>
$(function () {
if (window.location.href.includes("editintro=User:Wikihez/creation/intro")) {
return; // Do not run the script wextê WF:Bilez dişuxile
}
var ns = mw.config.get("wgNamespaceNumber");
if (ns &&
!(ns === 2 && mw.config.get("wgPageName").match(/\/ceribandin$|\/test$/))) {
return;
}
var addLangMode = mw.util.getParamValue("wiktkuaddlang") === "1";
// ── Testing mode ──────────────────────────────────────────────────────
var Testing = false;
var WIKTKU_DATA_JSON_TITLE = "MediaWiki:Gadget-start/data.json";
// ── Tercîh (user settings) panel stored via mw.storage (localStorage), globally
var WIKTKU_PREFS_KEY = "wiktku_start_prefs";
var WIKTKU_PREFS_DEFAULTS = {
// [] = show the full language list in the "ziman" step; otherwise
// only these codes are shown there (data.json codes, not names).
langCodes: [],
// true = never auto-open on a new/empty page — only via the
// "+Ziman/beşeke din" portlet link.
onlyOnClick: false,
// "auto" | "p-cactions" | "p-tb" | "p-views" — where the
// "+Ziman/beşeke din" portlet link is added.
portlet: "auto",
// true = suppress routine/informational mw.notify toasts (page
// loading, cache auto-restored, cache saved/cleared, "tê şandin…").
// Errors and direct results of an explicit action (like saving
// Tercîh itself) always show regardless of this setting.
quiet: false
};
function wiktkuLoadPrefs() {
if (!(window.mw && mw.storage)) return $.extend({}, WIKTKU_PREFS_DEFAULTS);
var raw;
try { raw = mw.storage.get(WIKTKU_PREFS_KEY); } catch (e) { raw = null; }
if (!raw) return $.extend({}, WIKTKU_PREFS_DEFAULTS);
var parsed;
try { parsed = JSON.parse(raw); } catch (e) { parsed = {}; }
return $.extend({}, WIKTKU_PREFS_DEFAULTS, parsed);
}
function wiktkuSavePrefs(prefs) {
if (!(window.mw && mw.storage)) return false;
try {
mw.storage.set(WIKTKU_PREFS_KEY, JSON.stringify(prefs));
return true;
} catch (e) { return false; }
}
var wiktkuPrefs = wiktkuLoadPrefs();
// Routine/informational notices go through here so "quiet mode" can
// suppress them; errors and explicit-action confirmations (like the
// Tercîh save toast) call mw.notify directly instead, and always show.
function wiktkuNotify(message, options) {
if (wiktkuPrefs.quiet) return;
mw.notify(message, options);
}
// Lazily built the first time it's opened; reused after that (see
// wiktkuOpenPrefsDialog below, defined once we know OOUI is available).
var wiktkuPrefsWindowManager = null;
var wiktkuPrefsDialog = null;
function wiktkuOpenPrefsDialog() {
mw.loader.using(["oojs-ui-core", "oojs-ui-windows"], function () {
function WiktkuPrefsDialog(config) {
WiktkuPrefsDialog.super.call(this, config);
}
if (!wiktkuPrefsDialog) {
OO.inheritClass(WiktkuPrefsDialog, OO.ui.ProcessDialog);
WiktkuPrefsDialog.static.name = "wiktkuPrefsDialog";
WiktkuPrefsDialog.static.title = "Tercîhên min";
WiktkuPrefsDialog.static.actions = [
{ action: "save", label: "Qeyd bike", flags: ["primary", "progressive"] },
{ action: "cancel", label: "Betal bike", flags: "safe" }
];
WiktkuPrefsDialog.prototype.initialize = function () {
WiktkuPrefsDialog.super.prototype.initialize.call(this);
this.langCodesInput = new OO.ui.TextInputWidget({
placeholder: "ku, zza, ckb (vala bihêle ji bo hemû zimanan)"
});
this.onlyOnClickCheckbox = new OO.ui.CheckboxInputWidget({});
this.quietCheckbox = new OO.ui.CheckboxInputWidget({});
this.portletDropdown = new OO.ui.DropdownInputWidget({
options: [
{ data: "auto", label: "Otomatîk (li gorî rûyê wîkiyê)" },
{ data: "p-cactions", label: "p-cactions - Li qismê Amûran" },
{ data: "left-navigation", label: "left-navigation - Li qismê Gotar-Gotûbêj" },
{ data: "p-tb", label: "p-tb - Li qismê Giştî" },
{ data: "p-views", label: "p-views - Li qismê Bixwîne" }
]
});
var fieldset = new OO.ui.FieldsetLayout({ label: "Eyar" });
fieldset.addItems([
new OO.ui.FieldLayout(this.langCodesInput, {
label: "Kodên zimanan ku tê xuyakirin li qismê \"ziman\"",
align: "top",
help: "Kodan bi virgulê (,) ji hev veqetîne. Vala bihêle da ku hemû ziman were nîşandan.",
helpInline: true
}),
new OO.ui.FieldLayout(this.onlyOnClickCheckbox, {
label: "Tenê veke wextê \"+Ziman/beşeke din\" were tikandin",
align: "inline",
help: "Eger were hilbijartin, ev amûr êdî otomatîk li ser rûpelên nû/vala dest pê nake — divê meriv her carê pêl \"+Ziman/beşeke din\" bike.",
helpInline: true
}),
new OO.ui.FieldLayout(this.portletDropdown, {
label: "Cihê lînka \"+Ziman/beşeke din\"",
align: "top",
help: "\"Otomatîk\" li gorî rûyê wîkiyê hildibijêre.",
helpInline: true
}),
new OO.ui.FieldLayout(this.quietCheckbox, {
label: "Moda bêdeng (kêmtir agahdarî nîşan bide)",
align: "inline",
help: "Agahdariyên normal nîşan nede. Xeta her tim tên xuyakirin.",
helpInline: true
})
]);
this.$body.addClass("wiktku-prefs-dialog-body").append(fieldset.$element);
};
WiktkuPrefsDialog.prototype.getSetupProcess = function (data) {
return WiktkuPrefsDialog.super.prototype.getSetupProcess.call(this, data)
.next(function () {
this.langCodesInput.setValue(wiktkuPrefs.langCodes.join(", "));
this.onlyOnClickCheckbox.setSelected(!!wiktkuPrefs.onlyOnClick);
this.portletDropdown.setValue(wiktkuPrefs.portlet || "auto");
this.quietCheckbox.setSelected(!!wiktkuPrefs.quiet);
}, this);
};
WiktkuPrefsDialog.prototype.getActionProcess = function (action) {
var dialog = this;
if (action === "save") {
return new OO.ui.Process(function () {
var codes = dialog.langCodesInput.getValue()
.split(/[,\s]+/)
.map(function (c) { return c.trim().toLowerCase(); })
.filter(function (c) { return !!c; });
wiktkuPrefs = {
langCodes: codes,
onlyOnClick: dialog.onlyOnClickCheckbox.isSelected(),
portlet: dialog.portletDropdown.getValue() || "auto",
quiet: dialog.quietCheckbox.isSelected()
};
wiktkuSavePrefs(wiktkuPrefs);
mw.notify(
"Tercîh hatin qeydkirin. Rûpelê ji nû ve bar bike (F5).",
{ type: "success", tag: "wiktku-prefs-save" }
);
dialog.close({ action: "save" });
});
}
if (action === "cancel") {
return new OO.ui.Process(function () {
dialog.close({ action: "cancel" });
});
}
return WiktkuPrefsDialog.super.prototype.getActionProcess.call(this, action);
};
wiktkuPrefsWindowManager = new OO.ui.WindowManager();
$(document.body).append(wiktkuPrefsWindowManager.$element);
wiktkuPrefsDialog = new WiktkuPrefsDialog();
wiktkuPrefsWindowManager.addWindows([wiktkuPrefsDialog]);
}
wiktkuPrefsWindowManager.openWindow(wiktkuPrefsDialog);
});
}
var targetContainer;
var skin = mw.config.get('skin');
if (wiktkuPrefs.portlet && wiktkuPrefs.portlet !== "auto") {
targetContainer = wiktkuPrefs.portlet;
} else if (skin === 'vector-2022') {
targetContainer = 'p-cactions';
} else if (skin === 'vector') {
targetContainer = 'p-tb';
} else {
targetContainer = 'p-views';
}
mw.util.addPortletLink(targetContainer,
mw.util.getUrl(mw.config.get("wgPageName"), { action: "submit", wiktkuaddlang: "1" }),
"+Ziman/beşeke din", "ca-wiktku-addlang",
"Li vê rûpelê, ziman an jî beşeke nû zêde bike");
// If "onlyOnClick" is set, the wizard should ONLY ever open via the
// "+Ziman/beşeke din" link — never automatically
var wiktkuNewPageDetected = $(".mw-newarticletext, .mw-newarticletextanon").length > 0;
if (wiktkuPrefs.onlyOnClick ? !addLangMode : (!addLangMode && !wiktkuNewPageDetected)) {
return;
}
function capitalize(str) {
if (!str) return str;
return str[0].toUpperCase() + str.substr(1);
}
function decapitalize(str) {
if (!str) return str;
return str[0].toLowerCase() + str.substr(1);
}
function escapeRegExp(str) {
return str.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
}
function langHeaderSource(codePattern) {
return "\n?==\\s*\\{\\{\\s*ziman\\s*\\|\\s*(" + codePattern + ")\\s*\\}\\}\\s*==";
}
function findLangHeader(text, code) {
var m = new RegExp(langHeaderSource(escapeRegExp(code))).exec(text);
return m ? { index: m.index, match: m[0] } : null;
}
function stripWikilinks(str) {
return str.replace(/\[\[([^\]|]+)(?:\|([^\]]+))?\]\]/g, function (m, target, display) {
return display || target;
});
}
function splitTercimeIzah(mane) {
var m = /^([\s\S]*?)\s*\{\{îzah\|([\s\S]*)\}\}\s*$/.exec(mane || "");
return m ? { tercime: m[1], izah: m[2] } : null;
}
function insertAtCursor(el, text) {
var start = el.selectionStart;
var end = el.selectionEnd;
var val = el.value;
el.value = val.slice(0, start) + text + val.slice(end);
var pos = start + text.length;
el.selectionStart = el.selectionEnd = pos;
}
var catSrcTemplates = null;
var catSrcTemplatesPromise = null;
function fetchCatSrcTemplates() {
if (catSrcTemplatesPromise) return catSrcTemplatesPromise;
catSrcTemplatesPromise = new mw.Api().get({
action: "query",
list: "categorymembers",
cmtitle: "Kategorî:Çavkanî",
cmnamespace: 10,
cmlimit: "max",
formatversion: 2
}).then(function (data) {
var members = (data.query && data.query.categorymembers) || [];
catSrcTemplates = $.map(members, function (m) {
// Pêşgira navî ya "Şablon:" rake.
return m.title.replace(/^[^:]+:/, "");
});
catSrcTemplates.sort(function (a, b) { return a.localeCompare(b, userLang); });
return catSrcTemplates;
}, function () {
catSrcTemplates = [];
return catSrcTemplates;
});
return catSrcTemplatesPromise;
}
var pageName = mw.config.get("wgPageName").replaceAll(/_/g, " ");
if (ns) pageName = pageName.replace(/.*\//, "");
var pageNameRe = escapeRegExp(pageName);
var userLang = mw.config.get("wgUserLanguage");
var formCache = new ObjectStorage("wiktku_start_draft_" + mw.config.get("wgPageName"), 1);
var FOLD_EXTRA ={
"ı":"i", "ø":"o","đ":"d","ð":"d","ə":"e","ħ":"h","ł":"l","ŋ":"n","ʉ":"u", "ɨ":"i","ʒ":"z","ɛ":"e","ɔ":"o","æ":"ae", "œ":"oe","ß":"ss","þ":"th"
};
function foldDiacritics(str) {
if (str === null || str === undefined) return "";
var s = String(str).toLowerCase();
if (typeof s.normalize === "function") {
// Split "î" into "i" + combining circumflex, then drop the accent.
s = s.normalize("NFD").replace(/[\u0300-\u036f]/g, "");
}
return s.replace(/[^\u0000-\u007f]/g, function (ch) {
return Object.prototype.hasOwnProperty.call(FOLD_EXTRA, ch) ? FOLD_EXTRA[ch] : ch;
});
}
var WIKTKU_RESIZE_STORAGE_PREFIX = "wiktku_resize_height_";
function wiktkuResizeStorageKey(textarea) {
var cls = (textarea.attr("class") || "").trim().replace(/\s+/g, "_");
return WIKTKU_RESIZE_STORAGE_PREFIX + cls;
}
function wiktkuSaveResizeHeight(textarea, height) {
if (!(window.mw && mw.storage)) return;
try {
mw.storage.set(wiktkuResizeStorageKey(textarea), String(Math.round(height)));
} catch (e) { /* localStorage unavailable (private mode, quota, …) — skip caching */ }
}
function wiktkuLoadResizeHeight(textarea) {
if (!(window.mw && mw.storage)) return null;
try {
var v = mw.storage.get(wiktkuResizeStorageKey(textarea));
return v ? parseFloat(v) : null;
} catch (e) {
return null;
}
}
function wiktkuMakeManualResizable(textarea) {
textarea = $(textarea);
if (!textarea.is("textarea") || textarea.hasClass("wiktku-start-narrow")) return;
if (textarea.data("wiktkuResizableDone")) return;
textarea.data("wiktkuResizableDone", true);
textarea.wrap("<div class='wiktku-resize-wrap'></div>");
var grip = $("<div class='wiktku-resize-grip'></div>");
textarea.after(grip);
// Restore a previously chosen height for this kind of field, if any.
var cachedHeight = wiktkuLoadResizeHeight(textarea);
if (cachedHeight) {
var minHeightInit = parseFloat(textarea.css("min-height")) || 0;
textarea.css("height", Math.max(cachedHeight, minHeightInit) + "px");
}
var dragging = false, startY = 0, startHeight = 0;
function onPointerMove(e) {
if (!dragging) return;
var oe = e.originalEvent || e;
var minHeight = parseFloat(textarea.css("min-height")) || 0;
var newHeight = startHeight + (oe.clientY - startY);
textarea.css("height", Math.max(newHeight, minHeight) + "px");
}
function onPointerUp(e) {
if (!dragging) return;
dragging = false;
var oe = e.originalEvent || e;
try { grip[0].releasePointerCapture(oe.pointerId); } catch (err) { /* ignore */ }
$(document).off("pointermove", onPointerMove);
$(document).off("pointerup pointercancel", onPointerUp);
wiktkuSaveResizeHeight(textarea, textarea.outerHeight());
}
grip.on("pointerdown", function (e) {
var oe = e.originalEvent || e;
if (oe.button !== undefined && oe.button !== 0) return; // primary contact only
e.preventDefault();
dragging = true;
startY = oe.clientY;
startHeight = textarea.outerHeight();
try { grip[0].setPointerCapture(oe.pointerId); } catch (err) { /* ignore */ }
$(document).on("pointermove", onPointerMove);
$(document).on("pointerup pointercancel", onPointerUp);
});
}
/** Applies wiktkuMakeManualResizable to every eligible textarea already
* inside `context` (context itself, if it is a textarea, or any of its
* descendants). Used both for the initial form render and, via the
* MutationObserver set up in build(), for textareas added later on
* (new sense blocks, quote-source fields, nimûne rows, …). */
function wiktkuInitManualResize(context) {
var $context = $(context);
var $textareas = $context.is("textarea") ? $context : $context.find("textarea");
$textareas.each(function () {
wiktkuMakeManualResizable(this);
});
}
function wrapNativeSelect(select) {
var wrapper = $("<span class='wiktku-native-select-wrap'></span>");
if (select.prop("multiple")) {
return wrapper.append(select);
}
var placeholder = select.attr("data-placeholder") || "Lê bigere...";
select.hide();
var textInput = $("<input type='search' autocomplete='off'>")
.attr("placeholder", placeholder)
.attr("role", "combobox")
.attr("aria-autocomplete", "list")
.attr("aria-expanded", "false")
.addClass("wiktku-start-narrow wiktku-ac-input");
var resultsList = $("<ul class='wiktku-ac-results' role='listbox'></ul>").hide();
var allOptions = [];
var shown = [];
var activeIndex = -1;
function cacheOptions() {
allOptions = [];
select.find("option").each(function () {
var v = $(this).val();
var text = $(this).text();
// A blank value with no label (most selects' placeholder) is
// never a real choice, so skip it. But a blank value WITH a
// label -- e.g. tplSelect's "— yan jî şablonek hilbijêre —" --
// is a meaningful "clear the selection" choice, so keep it
// searchable/selectable like any other option.
if (!v && !text) return;
// Language options read "Name (code)" -- score the name on its own
// so the trailing code doesn't also count as a name match.
var name = text.replace(/\s*\([^()]*\)\s*$/, "");
allOptions.push({
value: v,
text: text,
disabled: $(this).prop("disabled"),
foldCode: foldDiacritics(v),
foldName: foldDiacritics(name),
foldText: foldDiacritics(text)
});
});
}
cacheOptions();
// True if `q` starts a word inside `name` ("kevn" in "ingiliziya kevn").
function startsWord(name, q) {
var from = 0, at;
while ((at = name.indexOf(q, from)) !== -1) {
if (at === 0 || /[\s\-\u2013\u2014(/,.]/.test(name.charAt(at - 1))) return true;
from = at + 1;
}
return false;
}
// Lower rank = better match.
// a code that *is* the query, or begins with it, always outranks a name
// that merely contains it -- so "ang" lists "Îngilîziya kevn (ang)"
// first instead of burying it among every name containing "ang".
var RANK_NONE = 99;
function rankOption(o, q) {
var code = o.foldCode, name = o.foldName;
if (code === q) return 0; // exact code
if (code.indexOf(q) === 0) return 1; // code prefix
if (name === q) return 2; // exact name
if (name.indexOf(q) === 0) return 3; // name prefix
if (startsWord(name, q)) return 4; // starts a word in the name
if (name.indexOf(q) !== -1) return 5; // name substring
if (code.indexOf(q) !== -1) return 6; // code substring
if (o.foldText.indexOf(q) !== -1) return 7; // anywhere else in the label
return RANK_NONE;
}
function positionList() {
// Position the list above or below depending on viewport space.
var inputRect = textInput[0].getBoundingClientRect();
var viewportH = window.innerHeight;
var spaceBelow = viewportH - inputRect.bottom - 8;
var spaceAbove = inputRect.top - 8;
var maxH = Math.min(224, Math.max(spaceBelow, spaceAbove)); // 224px = 14em
resultsList.css({
"max-height": maxH + "px",
"top": spaceBelow >= spaceAbove ? "100%" : "auto",
"bottom": spaceBelow >= spaceAbove ? "auto" : "100%"
});
}
function closeList() {
resultsList.hide();
textInput.attr("aria-expanded", "false");
activeIndex = -1;
}
function showResults(query) {
var q = foldDiacritics($.trim(query || ""));
resultsList.empty();
activeIndex = -1;
var matched = [];
if (q) {
$.each(allOptions, function (i, o) {
if (o.disabled) return;
var rank = rankOption(o, q);
if (rank !== RANK_NONE) matched.push({ opt: o, rank: rank, i: i });
});
if (!matched.length && q.indexOf(" ") !== -1) {
var tokens = q.split(/\s+/);
$.each(allOptions, function (i, o) {
if (o.disabled) return;
var all = true;
$.each(tokens, function (_, t) {
if (o.foldText.indexOf(t) === -1) { all = false; return false; }
});
if (all) matched.push({ opt: o, rank: 8, i: i });
});
}
matched.sort(function (a, b) {
if (a.rank !== b.rank) return a.rank - b.rank;
// Inside the code tiers the shorter code is the better hit:
// "an" -> "an" before "ang" before "ang-x-...".
if (a.rank <= 1 && a.opt.foldCode.length !== b.opt.foldCode.length) {
return a.opt.foldCode.length - b.opt.foldCode.length;
}
// Otherwise keep the menu's own order (pinned languages first).
return a.i - b.i;
});
} else {
$.each(allOptions, function (i, o) {
if (!o.disabled) matched.push({ opt: o, rank: 0, i: i });
});
}
shown = $.map(matched.slice(0, 50), function (m) { return m.opt; });
if (!shown.length) {
closeList();
return;
}
$.each(shown, function (idx, opt) {
var li = $("<li role='option'></li>")
.text(opt.text)
.attr("data-value", opt.value)
.attr("aria-selected", "false");
// touchend (not touchstart) so a scroll doesn't trigger a select.
var touchMoved = false;
li.on("touchstart", function () {
touchMoved = false;
});
li.on("touchmove", function () {
touchMoved = true;
});
li.on("touchend", function (e) {
if (touchMoved) return; // was a scroll, not a tap
e.preventDefault();
selectOption(opt.value, opt.text);
});
// mousedown (not click) so it beats the input's blur handler.
li.on("mousedown", function (e) {
e.preventDefault();
selectOption(opt.value, opt.text);
});
li.on("mouseenter", function () {
// Hovered items are already in view -- don't scroll the list
// under the mouse, or the shift can trigger the next item's
// mouseenter and cascade into a runaway scroll.
setActive(idx, /* scrollIntoView */ false);
});
resultsList.append(li);
});
positionList();
resultsList.show();
resultsList[0].scrollTop = 0;
textInput.attr("aria-expanded", "true");
}
function setActive(idx, scrollIntoView) {
var items = resultsList.children("li");
if (!items.length) return;
if (idx < 0) idx = items.length - 1;
if (idx >= items.length) idx = 0;
activeIndex = idx;
items.removeClass("wiktku-ac-active").attr("aria-selected", "false");
var li = items.eq(idx).addClass("wiktku-ac-active").attr("aria-selected", "true");
if (scrollIntoView === false) return;
// Keep the cursor visible inside the scrollable list -- only for
// keyboard navigation. A mouse-hovered item is already visible, so
// scrolling here would shift the list under a stationary pointer
// and cascade into further mouseenter events.
var ul = resultsList[0], el = li[0];
if (el.offsetTop < ul.scrollTop) {
ul.scrollTop = el.offsetTop;
} else if (el.offsetTop + el.offsetHeight > ul.scrollTop + ul.clientHeight) {
ul.scrollTop = el.offsetTop + el.offsetHeight - ul.clientHeight;
}
}
/** Puts the currently selected option's label back in the text box. */
function syncInputToSelect() {
var cur = select.val();
var match = null;
if (cur) {
$.each(allOptions, function (_, o) {
if (o.value === cur) { match = o; return false; }
});
}
textInput.val(match ? match.text : "");
}
function selectOption(value, text) {
textInput.val(text);
select.val(value);
closeList();
select.trigger("change");
}
textInput.on("input", function () {
showResults($(this).val());
});
textInput.on("focus", function () {
// Select the current label so typing replaces it, and open the full list
this.select();
showResults("");
});
textInput.on("click", function () {
if (!resultsList.is(":visible")) showResults($(this).val());
});
textInput.on("keydown", function (e) {
var open = resultsList.is(":visible");
switch (e.which) {
case 40: // Down
e.preventDefault();
if (!open) { showResults($(this).val()); setActive(0); }
else setActive(activeIndex + 1);
break;
case 38: // Up
e.preventDefault();
if (!open) { showResults($(this).val()); setActive(-1); }
else setActive(activeIndex - 1);
break;
case 13: // Enter -- must never submit the form while the list is open
if (open) {
e.preventDefault();
if (activeIndex >= 0 && shown[activeIndex]) {
selectOption(shown[activeIndex].value, shown[activeIndex].text);
} else if (shown.length === 1) {
selectOption(shown[0].value, shown[0].text);
}
}
break;
case 27: // Esc -- abandon the search, restore the real value
if (open) {
e.preventDefault();
closeList();
syncInputToSelect();
}
break;
case 9: // Tab -- commit the highlighted row on the way out
if (open && activeIndex >= 0 && shown[activeIndex]) {
selectOption(shown[activeIndex].value, shown[activeIndex].text);
}
closeList();
break;
}
});
textInput.on("blur", function () {
// Short delay so a touchstart/mousedown on a result fires first.
setTimeout(function () {
closeList();
// Half-typed text that never became a selection would otherwise sit
// in the box looking like a choice -- put the real value back.
syncInputToSelect();
}, 200);
});
// Re-caches the option list. Fired after the full language list loads, after
// options are enabled/disabled, and after programmatic .val() changes.
select.on("wiktku:refresh", function () {
cacheOptions();
syncInputToSelect();
if (resultsList.is(":visible")) showResults(textInput.val());
});
wrapper.append(textInput).append(resultsList).append(select);
return wrapper;
}
/**
* Gives every plain <select> under `root` the searchable picker. Selects
* marked .wiktku-plain-select opt out, and the call is idempotent, so it is
* safe to re-run after new rows or sense blocks are inserted.
*/
function initSelects(root) {
$(root).find("select").addBack("select").not(".wiktku-plain-select").each(function () {
var sel = $(this);
if (sel.prop("multiple")) return;
if (sel.closest(".wiktku-native-select-wrap").length) return; // already wrapped
var marker = $("<span></span>").insertBefore(sel);
marker.replaceWith(wrapNativeSelect(sel));
});
}
var langsByCode = {};
// Looks up the display label for a language code, falling back to the
// code itself if it isn't known yet (e.g. langsByCode not loaded).
function getLangLabel(code) {
var entry = langsByCode[code];
return entry ? entry.label : code;
}
// Populated from [[MediaWiki:Gadget-start.js/data.json]] at runtime.
var metadata = {};
var ZARAVA_LANG_CODES = ["ckb", "sdh", "lki", "hac", "zza"];
// Converts a {code: label} object (langChoices/posChoices in data.json)
// into the {code, label[, sortKey]} array the rest of the script uses.
// isLang: true adds a sortKey and shows "(code)" after the label —
// language choices only.
function choicesFromObject(obj, isLang) {
var result = [];
$.each(obj || {}, function (code, label) {
var choice = { code: code, label: label };
if (isLang) choice.sortKey = label;
result.push(choice);
});
return result;
}
function getZaravaKeys(choices) {
var byCode = {};
$.each(choices || [], function (_, c) { byCode[c.code] = c; });
var result = [];
$.each(ZARAVA_LANG_CODES, function (_, code) {
if (byCode[code]) result.push(byCode[code]);
});
return result;
}
function needsTransliteration(langCode) {
var meta = metadata[langCode];
if (!meta || !meta.sc) return false;
var scripts = Array.isArray(meta.sc) ? meta.sc : [meta.sc];
return scripts.length > 0 && scripts[0] !== "Latn";
}
// Kodên cinsiyetê yên di metadata.g de — ji data.json tê dagirtin
var GENDER_BASE_LABELS = {};
// Item 1 (Wikihez, 14 Tebax 2026): kodên jimarê (y, s, d, p, p+, tp, j, j+,
// j/nj, nj, nj+, hj!, hj?) — ji data.json's "numberLabels" tê dagirtin.
// Same {code: {cat, display[, req]}} shape as the wiki's own Lua
// number-type table; "display" can contain HTML (<abbr>) or wikilinks
// ([[...]]), so it's only used as-is inside the wikitext output — never
// dropped straight into an <option>, which can't render either (see
// stripMarkupForOption below).
var NUMBER_LABELS = {};
// metadata[lang].g used to list gender AND number codes together (see
// cinsiyet/posparams below) — this tells the two dropdowns apart: any
// code that's a key in NUMBER_LABELS is a number code (goes in the new
// Jimar dropdown / j= param), everything else is a gender code (stays
// in the existing Cîns dropdown / c= param). Compound codes like "m-p"
// or "n-p" are gender+plural pairs, not plain "p" — they don't match a
// NUMBER_LABELS key, so they correctly stay on the gender side.
function isNumberCode(code) {
return Object.prototype.hasOwnProperty.call(NUMBER_LABELS, code);
}
// Strips the bit of markup "display" is allowed to contain so it's safe
// to use as plain <option> text (options can't render HTML or wikilinks):
// <abbr title="X">Y</abbr> -> "Y (X)", [[a|b]] -> "b", [[a]] -> "a".
function stripMarkupForOption(html) {
if (!html) return "";
return $.trim(
String(html)
.replace(/<abbr[^>]*title="([^"]*)"[^>]*>([\s\S]*?)<\/abbr>/gi, "$2 ($1)")
.replace(/\[\[[^\]|]*\|([^\]]*)\]\]/g, "$1")
.replace(/\[\[([^\]]*)\]\]/g, "$1")
.replace(/<[^>]+>/g, "")
);
}
// Builds the Jimar dropdown's <option> text for one code: "j — jimarbar".
function numberOptionLabel(code) {
var def = NUMBER_LABELS[code];
if (!def) return code;
var text = stripMarkupForOption(def.display);
return text ? (code + " — " + text) : code;
}
// Sub-lists that only make sense for a plain (non-şablon) sense — hidden
// when a şablon (e.g. {{guharto|…}}) is chosen for that sense
var HIDDEN_ON_TPL_GROUPS = [
"wiktku-dfn-alternativ",
"wiktku-dfn-hevmane",
"wiktku-dfn-dijmane",
"wiktku-dfn-koordine",
"wiktku-dfn-jornav",
"wiktku-dfn-jernav"
];
function genderLabel(code) {
if (code === "p") return "Pirjimar";
var pluralMatch = code.match(/^(.+)-p$/);
if (pluralMatch && GENDER_BASE_LABELS[pluralMatch[1]]) {
return GENDER_BASE_LABELS[pluralMatch[1]] + " (pirjimar)";
}
return GENDER_BASE_LABELS[code] || code;
}
// True if a sense has content beyond mane worth keeping (etîket, word
// lists, nimûne, jêder) — so it's still emitted with {{mane?}} if empty.
function senseHasExtraContent(s) {
if (s.etiket && $.grep(s.etiket, function (e) { return $.trim(e) !== ""; }).length) return true;
if (s.kategori && $.grep(s.kategori, function (k) { return $.trim(k) !== ""; }).length) return true;
if (s.alternativ.length || s.hevmane.length || s.dijmane.length ||
s.koordine.length || s.jornav.length || s.jernav.length) return true;
if (s.nimune && $.grep(s.nimune, function (n) {
return (typeof n === "object" ? n.text : n) !== "";
}).length > 0) return true;
if (senseHasJeder(s)) return true;
return false;
}
// Wikihez, 14 Tebax 2026 (item 7): the real submit-blocking requirement
// (Ziman + Cureyê rêzimanî, via step.required/canContinue) is already
// obvious since Bişîne stays visibly disabled until it's met. What
// wasn't obvious is that a technically-"complete" entry with nothing
// in Mane, Bi zaravayên din or Werger is still empty in any meaningful
// sense — so this is checked separately, at click time, with its own
// message, instead of another star/legend marker on the page.
function hasMinRequiredContent(values) {
var dfnSenses = steps.dfn.getSenses($("#wiktku-start-dfn"));
var hasMane = dfnSenses.some(function (s) {
return (s.tpl && s.tplTitle) || (!s.tpl && (s.mane !== "" || senseHasExtraContent(s)));
});
if (hasMane) return true;
if (values.lang === "ku") {
var hasWerger = false;
$("#wiktku-start-trans .wiktku-trans-group").each(function () {
if (steps.trans.getGroupTranslations($(this)).length) hasWerger = true;
});
if (hasWerger) return true;
var hasZarava = false;
$("#wiktku-start-zarava .wiktku-zarava-group").each(function () {
if (steps.zarava.getGroupTranslations($(this)).length) hasZarava = true;
});
if (hasZarava) return true;
}
return false;
}
// Bolds the *first* occurrence of the page name
function boldPageNameOnce(text) {
if (!text || !pageNameRe) return text;
var re = new RegExp("(" + pageNameRe + "([^( |,|;|\\?|\\.|\\!)]+)?)", "i");
return text.replace(re, "'''$1'''");
}
// Converts literal line breaks typed into a nimûne/jêgirtin box into
// wikitext <br> tags,
function nlToBr(text) {
return text ? text.replace(/\r\n|\r|\n/g, "<br>") : text;
}
function escapeHtmlForBackdrop(str) {
return String(str)
.replace(/&/g, "&")
.replace(/</g, "<")
.replace(/>/g, ">");
}
// Mirrors a textarea's text, with a small highlighted marker placed
// right after each line that's followed by an actual typed/pasted
// linebreak. Rendered into a transparent backdrop layer behind the
// textarea (see ensureLinebreakBackdrop()), so only the point of the
// break is marked instead of the whole box.
function buildLinebreakBackdropHtml(text) {
var lines = text.split(/\r\n|\r|\n/);
return $.map(lines, function (line, i) {
var isLast = i === lines.length - 1;
return escapeHtmlForBackdrop(line) +
(isLast ? "" : "<mark class='wiktku-linebreak-mark'>↵</mark>\n");
}).join("");
}
// Copies the metrics that affect where text wraps/lands (font, line
// height, padding, border) from the real textarea onto its backdrop,
// via computed style rather than shared CSS classes — most of the
// box's own rules are written as "textarea.foo", which a <div> with
// the same class wouldn't match. Re-run on every update in case a
// responsive breakpoint changed the textarea's own font-size.
function syncLinebreakBackdropMetrics(textarea, backdrop) {
var cs = window.getComputedStyle(textarea[0]);
backdrop.css({
"box-sizing": cs.boxSizing,
"padding-top": cs.paddingTop,
"padding-right": cs.paddingRight,
"padding-bottom": cs.paddingBottom,
"padding-left": cs.paddingLeft,
"border-width": cs.borderWidth,
"border-style": "solid",
"font-family": cs.fontFamily,
"font-size": cs.fontSize,
"font-weight": cs.fontWeight,
"line-height": cs.lineHeight,
"letter-spacing": cs.letterSpacing
});
}
// Lazily wraps a textarea in its own positioning anchor (independent
// of .wiktku-resize-wrap, so this doesn't depend on load order versus
// wiktkuMakeManualResizable) and inserts the transparent backdrop
// layer used to mark the exact point of a linebreak. Safe to call
// more than once on the same textarea — the backdrop is cached.
function ensureLinebreakBackdrop(textarea) {
var existing = textarea.data("wiktkuLinebreakBackdrop");
if (existing) return existing;
textarea.wrap("<div class='wiktku-linebreak-wrap'></div>");
var backdrop = $("<div aria-hidden='true'></div>").addClass("wiktku-linebreak-backdrop");
textarea.before(backdrop);
textarea.data("wiktkuLinebreakBackdrop", backdrop);
textarea.on("scroll.wiktkuLinebreak", function () {
backdrop.scrollTop(textarea.scrollTop()).scrollLeft(textarea.scrollLeft());
});
return backdrop;
}
// Flags a nimûne/jêgirtin textarea (via CSS class, for the border
// tint + tooltip) while it contains a typed/pasted linebreak, so the
// user notices before it's silently turned into <br> on output.
// Marks only the exact point of the break via a mirrored backdrop,
// rather than tinting the whole box.
function highlightLinebreak(el) {
var textarea = $(el);
var text = textarea.val();
var hasBreak = /\r|\n/.test(text);
textarea
.toggleClass("wiktku-has-linebreak", hasBreak)
.attr("title", hasBreak ? "Xeta nû dê wek <br> bê nivîsandin" : "");
if (!hasBreak) {
var cached = textarea.data("wiktkuLinebreakBackdrop");
if (cached) cached.hide();
textarea.removeClass("wiktku-has-linebreak-source");
return;
}
var backdrop = ensureLinebreakBackdrop(textarea);
textarea.addClass("wiktku-has-linebreak-source");
syncLinebreakBackdropMetrics(textarea, backdrop);
backdrop.html(buildLinebreakBackdropHtml(text)).show();
backdrop.scrollTop(textarea.scrollTop()).scrollLeft(textarea.scrollLeft());
}
// Each nimûne item can be { text, tr, t }: text, transliteration, translation.
function formatNimune(nimunes, lang, hasJeder) {
var hasNimune = nimunes && $.grep(nimunes, function (n) {
return (typeof n === "object" ? n.text : n) !== "";
}).length > 0;
if (!hasNimune) {
return hasJeder ? "" : "\n#* {{nimûne?|" + lang + "}}";
}
return $.map(nimunes, function (n) {
var text = typeof n === "object" ? n.text : n;
if (!text) return undefined;
var bolded = nlToBr(boldPageNameOnce(text));
var tpl = "\n#: {{nm|" + lang + "|" + bolded;
if (typeof n === "object") {
if (n.tr) tpl += "|tr=" + nlToBr(n.tr);
// Translation as third positional param (no key needed).
if (n.t) tpl += "|" + nlToBr(n.t);
}
// Short examples fit on one line together with their translation.
// rêz=1 is not used for ku — definitions are shown on separate lines there.
if (text.length < 60 && lang !== "ku") tpl += "|rêz=1";
tpl += "}}";
return tpl;
}).join("");
}
// Formats jêder (citation) entries into "#* {{jêder…|…}}" lines; skips
// entries with no quote text. Falls back to the generic {{jêder}}
// template when no specific template was chosen.
function formatJeder(jederList, lang) {
if (!jederList || !jederList.length) return "";
return $.map(jederList, function (jeder) {
if (!jeder || !jeder.quote) return undefined;
var quote = nlToBr(boldPageNameOnce(jeder.quote));
var quoteTr = nlToBr(jeder.quoteTr);
var quoteT = nlToBr(jeder.quoteT);
if (jeder.jederTpl) {
var cite = "\n#* {{" + jeder.jederTpl + "|" + lang;
cite += "|jêgirtin=" + quote;
if (quoteTr) cite += "|tr=" + quoteTr;
if (quoteT) cite += "|tercime=" + quoteT;
$.each(jeder.jêderFields || {}, function (key, val) {
if (val) cite += "|" + key + "=" + val;
});
cite += "}}";
return cite;
}
var out = "\n#* {{jêder|" + lang + "|jêgirtin=" + quote;
if (quoteTr) out += "|tr=" + quoteTr;
if (quoteT) out += "|tercime=" + quoteT;
// A şablon picked from Kategorî:Çavkanî is transcluded as the
// source param (e.g. |{{Kovara X}}); manual text is used as-is.
var srcParam = jeder.jederCatTpl ? ("{{" + jeder.jederCatTpl + "}}") :
(jeder.jederManual ? jeder.jederManual : "çavkanî?");
// A positional param containing "=" gets parsed as its own key=value
// pair by MediaWiki and breaks the template, so force it to be
// explicitly named (|2=) whenever that's the case.
out += (srcParam.indexOf("=") !== -1 ? "|2=" : "|") + srcParam;
out += "}}";
return out;
}).join("");
}
// True if a sense has at least one jêder entry with quote text.
function senseHasJeder(sense) {
return !!(sense.jeder && $.grep(sense.jeder, function (j) {
return j && j.quote;
}).length > 0);
}
// Builds "{{tplName|lang|part1|part2|…}}" from a sense field (kategori,
// etiket), wrapped inline (" {{…}} ") or on its own line ("\n#: {{…}}").
function buildSenseTpl(sense, field, lang, tplName) {
if (!sense[field] || !sense[field].length) return "";
var parts = sense[field].map(function (p) { return $.trim(p); })
.filter(function (p) { return p !== ""; });
if (!parts.length) return "";
var call = "{{" + tplName + "|" + lang + "|" + parts.join("|") + "}}";
return call
}
/**
* Assembles the nimûne + jêder wikitext block for a sense. Shared by
* both the template-sense and normal-mane-sense branches below.
*/
function buildCite(sense, lang) {
return formatNimune(sense.nimune, lang, senseHasJeder(sense)) +
formatJeder(sense.jeder, lang);
}
// ── Inline modifier system ───────────────────────────────────────────────
// Appends a ⊕ button to a word input <li>. Clicking it shows a compact
// modifier picker; selecting one prompts for the value and appends
// <modifier:value> to the textarea's current content.
var WORD_MODIFIERS = [
{ key: "t", label: "t: tercime / îzah", hint: "Tercimeya kelîmeyê an îzaha wê" },
{ key: "cuda", label: "cuda: alt display", hint: "Forma nîşankirinê ya alternatîf" },
{ key: "c", label: "c: cinsiyet", hint: "Cinsiyeta kelîmeyê" },
{ key: "e", label: "e: etîket (li pêşiyê)", hint: "Etîketek li pêşiya kelîmeyê" },
{ key: "ee", label: "ee: etîket (li dawiyê)", hint: "Etîketek li dawiya kelîmeyê" },
{ key: "q", label: "q: qualifier (li pêşiyê)", hint: "Wesf li pêşiya kelîmeyê" },
{ key: "qq", label: "qq: qualifier (li dawiyê)", hint: "Wesf li dawiya kelîmeyê" },
{ key: "crz", label: "crz: cureyê rêzimanî", hint: "Cureyê rêzimanî yê kelîmeyê" },
{ key: "hrf", label: "hrf: herfiyen", hint: "Herfiyen, manaya rasterast" },
{ key: "ref", label: "ref: çavkanî", hint: "Çavkanî" }
];
// Sub-groups (inside a sense/definition block) that get the same ⊕
// modifier button as makeWordListStep fields.
var MODIFIER_SUBGROUPS = {
"wiktku-dfn-alternativ": true,
"wiktku-dfn-hevmane": true,
"wiktku-dfn-dijmane": true,
"wiktku-dfn-koordine": true,
"wiktku-dfn-jornav": true,
"wiktku-dfn-jernav": true
};
/**
* Wraps a freshly-created textarea in a <li> with a ⊕ modifier button.
* `ta` — the jQuery textarea element.
* Returns the <li>.
*/
function makeModifierLi(ta) {
var li = $("<li class='wiktku-word-li'></li>");
var btn = $("<button type='button' class='wiktku-mod-btn' title='Modifiyerê lê zêde bike'>⊕</button>");
var picker = $("<div class='wiktku-mod-picker'></div>").hide();
// Which modifier keys are already present in the textarea's current
// text — e.g. "<t:...>" → "t" used. Each modifier can only be
// applied once per word, so its pill gets disabled once used.
function usedKeys() {
var used = {};
var re = /<([a-zA-Z]+):/g;
var val = ta.val() || "";
var m;
while ((m = re.exec(val)) !== null) used[m[1]] = true;
return used;
}
$.each(WORD_MODIFIERS, function (_, mod) {
var pill = $("<button type='button' class='wiktku-mod-pill'></button>").text(mod.label);
pill.attr("title", mod.hint);
pill.data("mod-key", mod.key);
pill.on("click", function (e) {
e.preventDefault();
if (pill.prop("disabled")) return; // already used on this word
picker.hide();
// Show a tiny inline input for the modifier value.
var valWrap = $("<span class='wiktku-mod-val-wrap'></span>");
var valInp = $("<input type='text' class='wiktku-mod-val-input'>")
.attr("placeholder", mod.hint + "…")
.attr("size", 20);
var confirm = $("<button type='button' class='wiktku-mod-confirm'>✓</button>");
var cancel = $("<button type='button' class='wiktku-mod-cancel'>✕</button>");
function applyModifier() {
var v = $.trim(valInp.val());
if (v) {
ta.val(ta.val() + "<" + mod.key + ":" + v + ">");
ta.trigger("input");
}
valWrap.remove();
ta.focus();
}
confirm.on("click", applyModifier);
cancel.on("click", function () { valWrap.remove(); ta.focus(); });
valInp.on("keydown", function (e) {
if (e.which === 13) { e.preventDefault(); applyModifier(); }
if (e.which === 27) { valWrap.remove(); ta.focus(); }
});
valWrap.append(valInp).append(confirm).append(cancel);
li.append(valWrap);
valInp.focus();
});
picker.append(pill);
});
btn.on("click", function (e) {
e.preventDefault();
// Close any other open pickers in the same list.
li.closest("ol, ul").find(".wiktku-mod-picker").not(picker).hide();
// Grey out modifiers already used on this word — refreshed on
// every open since the text (and thus what's "used") can change.
var used = usedKeys();
picker.find(".wiktku-mod-pill").each(function () {
var isUsed = !!used[$(this).data("mod-key")];
$(this).prop("disabled", isUsed).toggleClass("wiktku-mod-pill-used", isUsed);
});
picker.toggle();
});
// Close picker when focus leaves the li entirely.
li.on("focusout", function () {
setTimeout(function () {
if (!$.contains(li[0], document.activeElement)) picker.hide();
}, 150);
});
li.append(ta).append(btn).append(picker);
return li;
}
function makeWordListStep(id, name, question_fmt) {
return {
id: id,
name: name,
question_fmt: question_fmt,
multiple: true,
narrow: true,
modifiers: true,
// Function instead of a plain string so it can name the current
// language — computed fresh at build time and re-applied by
// refresh() whenever the language changes.
placeholder: function () {
var lang = getValues().lang || "";
var langLabel = lang ? getLangLabel(lang) : "";
return "Kelîme" + (langLabel ? " bi " + langLabel : "") + "…";
},
visible: function (values) {
return values.lang && values.pos;
},
output: function (values) {
var words = $.grep(values[id] || [], function (w) { return !!w; });
var header = capitalize(name);
if (!words.length) return "";
var lang = values.lang;
var section = "\n==== " + header + " ====\n";
var params = "cure=" + header + "\n" +
$.map(words, function (w) {
return "|" + w;
}).join("\n");
return section +
"{{kol3|" + lang + "|" + params + "\n}}\n";
} };
}
var steps = {
lang: {
id: "lang",
required: true,
name: "ziman",
question_fmt: '"' + pageName + '" bi çi zimanî ye?',
question_br: true,
// Populated from [[MediaWiki:Gadget-start.js/data.json]] (langChoices).
choices: [],
output: function (values) {
return "== {{ziman|" + values.lang + "}} ==\n";
}
},
pron: {
id: "pron",
name: "bilêvkirin",
question_fmt: '"' + pageName + '" çawa tê telafûzkirin?',
// pronTpls populated from data.json
pronTpls: {},
visible: function (values) {
if (!values.lang) return false;
// addLangMode: skip pron only if this lang already has a section.
if (addLangMode) {
// Clearing the page makes existing content irrelevant.
var clearPageCheck = $("#wiktku-clear-page-check");
if (clearPageCheck.length && clearPageCheck.prop("checked")) {
return true;
}
var existing = $("#wpTextbox1").val() || "";
return !findLangHeader(existing, values.lang);
}
return true;
},
// Fills the insert-dropdown from pronTpls, filtered by language.
refreshTplSelect: function () {
var sel = $("#wiktku-start-pron .wiktku-tpl-insert-select");
if (!sel.length) return;
var lang = getValues().lang || "";
sel.find("option[value!='']").remove();
$.each(steps.pron.pronTpls, function (name, tpl) {
// Filter: if tpl.langs exists, only show if lang is in that list; otherwise show always
var allowed = !tpl.langs || tpl.langs.indexOf(lang) !== -1;
if (allowed) {
sel.append($("<option></option>")
.val(tpl.snippet)
.text(name + " — " + tpl.desc)
.attr("data-nolang", tpl.noLang ? "1" : ""));
}
});
// Tell the picker the option list changed.
sel.trigger("wiktku:refresh");
},
build: function (stepDiv) {
if (stepDiv.find(".wiktku-pron-wrap").length) return null;
var wrap = $("<div class='wiktku-pron-wrap'></div>");
// Rewiye tine, 14 Tebax 2026: "berê bilêvkirin otomatîk
// çêdibû, niha zehmettir e ji bo yekî nezan — gelek şablon
// hene, kîjan were hilbijartin?" A one-line reassurance:
// this field is optional, and the dropdown below writes the
// template for you — no need to know the syntax up front.
wrap.append(
$("<p class='wiktku-step-hint'></p>").text(
"Ev qad ne mecbûrî ye. Heke tu nizanî kîjan şablonî hilbijêrî, vale bihêle — an ji pêşkêşkariya jêrîn şablonekî hilbijêre, ew ê bixweber li vir were nivîsandin."
)
);
var ta = $("<textarea></textarea>")
.attr("name", "wiktku-pron-" + $.now())
.attr("class", "wiktku-start-step-field wiktku-pron-text")
.attr("rows", 4)
.attr("placeholder", "Nimûne: {{IPA|ku|/pɛɪ̯n/}} yan {{kîte|ku|he|ce|ki|rin}}");
// Template insert dropdown — filtered by language.
var sel = $("<select class='wiktku-tpl-insert-select'></select>");
sel.attr("data-placeholder", "Şablonek lê zêde bike ");
sel.append($("<option value=''>— şablonek lê zêde bike —</option>"));
var lang = getValues().lang || "";
$.each(steps.pron.pronTpls, function (name, tpl) {
// Filter: if tpl.langs exists, only show if lang is in that list; otherwise show always
var allowed = !tpl.langs || tpl.langs.indexOf(lang) !== -1;
if (allowed) {
sel.append($("<option></option>")
.val(tpl.snippet)
.text(name + " — " + tpl.desc)
.attr("data-nolang", tpl.noLang ? "1" : ""));
}
});
sel.on("change", function () {
var snippet = $(this).val();
if (!snippet) return;
var lang = getValues().lang || "";
// Check if the selected option has noLang flag
var selectedOption = sel.find("option:selected");
var hasNoLang = selectedOption.attr("data-nolang") === "1";
if (!hasNoLang) {
snippet = snippet.replace(/CODE/g, lang).replace(/SOURCELANG/g, "?");
insertAtCursor(ta[0], snippet);
$(this).val("");
// Clear the picker's search box
sel.trigger("wiktku:refresh");
ta.focus();
return;
}
// Item 5 (Wikihez, 14 Tebax 2026): the noLang templates
// (ku-IPA, ku-kîte, zza-IPA, zza-kîte) auto-generate
// their actual content from a Lua module reading the
// page title — "{{ku-IPA}}" alone gives no hint what
// that'll render as, so show a live preview and require
// confirmation before inserting, instead of an inline
// prompt()/confirm() dialog.
var tplLabel = selectedOption.text();
$(this).val("");
sel.trigger("wiktku:refresh");
steps.pron.showTplPreview(stepDiv, ta, snippet, tplLabel);
});
wrap.append(sel).append(ta);
stepDiv.append(wrap);
initSelects(wrap);
return ta;
},
/** Item 5: inline preview + confirm panel for a "noLang" (auto-
* content) pronunciation template — fetches what the snippet
* actually expands to for this page (via action=expandtemplates,
* so the preview is exactly what {{ku-IPA}} etc. would produce)
* and only inserts it into the textarea if the user confirms. */
showTplPreview: function (stepDiv, ta, snippet, tplLabel) {
// Only one preview panel open at a time.
stepDiv.find(".wiktku-pron-preview").remove();
var panel = $("<div class='wiktku-pron-preview'></div>");
panel.append($("<div class='wiktku-pron-preview-label'></div>")
.text("Pêşdîtina " + tplLabel + ":"));
var body = $("<div class='wiktku-pron-preview-body'></div>").text("Tê barkirin…");
panel.append(body);
var actions = $("<div class='wiktku-pron-preview-actions'></div>");
var confirmBtn = $("<button type='button' class='wiktku-pron-preview-confirm'>✓ Tevlî bike</button>")
.prop("disabled", true);
var cancelBtn = $("<button type='button' class='wiktku-pron-preview-cancel'>✕ Betal bike</button>");
actions.append(confirmBtn).append(cancelBtn);
panel.append(actions);
ta.before(panel);
confirmBtn.on("click", function () {
insertAtCursor(ta[0], snippet);
panel.remove();
ta.focus();
});
cancelBtn.on("click", function () {
panel.remove();
});
new mw.Api().post({
action: "expandtemplates",
text: snippet,
title: pageName,
prop: "wikitext",
formatversion: 2
}).done(function (data) {
var wikitext = $.trim((data && data.expandtemplates && data.expandtemplates.wikitext) || "");
// Drop the leading "* " bullet (part of the wikitext
// list-item syntax, not the template's own output) so
// the preview shows just what the template rendered.
wikitext = wikitext.replace(/^\*\s*/, "");
body.text(wikitext || "(vala — vê rûpelê re tiştek nehate afirandin)");
confirmBtn.prop("disabled", false);
}).fail(function () {
body.text("Pêşdîtin nehate barkirin — tu dikarî hîn jî wê tevlî bikî.");
confirmBtn.prop("disabled", false);
});
},
output: function () {
var text = $.trim($("#wiktku-start-pron .wiktku-pron-text").val());
if (!text) return "";
var lines = text.split("\n");
var out = $.map(lines, function (line) {
line = $.trim(line);
if (!line) return undefined;
return line;
}).join("\n");
// Ghybu, 14 Tebax 2026: this used to print at "===" (the same
// level as the POS header itself), directly under Ziman and
// above Cureyê rêzimanî. Nested one level deeper ("====") so
// it prints as a subsection of the POS section instead — see
// getWikitextForCurrentSection(), which now calls this per
// section rather than getWikitext() calling it once up top.
return "\n==== Bilêvkirin ====\n" + out + "\n";
} },
pos: {
id: "pos",
required: true,
name: "Cureyê rêzimanî",
question_fmt: 'Cureyê rêzimanî yê "' + pageName + '" çi ye?',
visible: function (values) {
return values.lang;
},
question_br: true,
// Populated from [[MediaWiki:Gadget-start.js/data.json]] (posChoices).
choices: [],
output: function (values) {
var pos = values.pos || "";
var capitalizedPos = capitalize(pos);
// "form" opt-param (checked in posparams) marks this as a
// form-of/inflected entry — the section title becomes
// "Formeke <pos>ê" instead of the plain pos name. The
// template call itself still uses the unchanged pos name.
var isForm = $("#wiktku-posparams-opt-form").is(":checked");
var header = isForm
? "\n=== Formeke " + pos + "ê ===\n"
: "\n=== " + capitalizedPos + " ===\n";
// Image line (between header and template call)
var imageLine = steps.resim.output(values);
// Read the live wikitext from the posparams textarea.
// Fall back to a plain {{pos|lang}} if the step hasn't been built yet.
var tplLine = $.trim($("#wiktku-start-posparams .wiktku-posparams-text").val());
if (!tplLine) {
tplLine = "{{" + pos + "|" + (values.lang || "") + "}}";
}
return header + imageLine + tplLine + "\n";
}
},
// cinsiyet (gender) — shown for navdêr/serenav only, with choices built
// from metadata[lang].g since not every language has grammatical gender.
cinsiyet: {
id: "cinsiyet",
name: "cinsiyet",
question_fmt: 'Cinsiyeta "' + pageName + '" çi ye?',
question_br: true,
visible: function () { return false; }, // handled inside posparams
// Single source of truth for the selected gender code. The visible
// dropdown lives inside the posparams step (see steps.posparams),
// but it must always read/write THIS hidden field — not a field of
// its own — since getValuesForStep("cinsiyet") reads from here.
build: function (stepDiv) {
var field = stepDiv.find(".wiktku-start-step-field");
if (field.length) return field;
field = $("<input type='hidden'>")
.addClass("wiktku-start-step-field")
.attr("id", "wiktku-start-cinsiyet-field")
.val("");
stepDiv.append(field);
return field;
},
output: function () { return ""; } // consumed by posparams/pos.output
},
// Item 1 (Wikihez, 14 Tebax 2026): jimar (grammatical number) — same
// hidden-field pattern as cinsiyet just above, but writes into its
// own j= template parameter instead of sharing c=. Shown for
// navdêr/serenav only, with choices built from whichever of
// metadata[lang].g are number codes (see isNumberCode) — mirrors
// cinsiyet exactly, just filtered to the other half of that list.
jimar: {
id: "jimar",
name: "jimar",
question_fmt: 'Jimara "' + pageName + '" çi ye?',
question_br: true,
visible: function () { return false; }, // handled inside posparams
build: function (stepDiv) {
var field = stepDiv.find(".wiktku-start-step-field");
if (field.length) return field;
field = $("<input type='hidden'>")
.addClass("wiktku-start-step-field")
.attr("id", "wiktku-start-jimar-field")
.val("");
stepDiv.append(field);
return field;
},
output: function () { return ""; } // consumed by posparams/pos.output
},
// Lêker transitivity — hidden step, handled inside posparams
lektur: {
id: "lektur",
name: "Cureyê lêkerê (fiîlê)",
question_fmt: "Cureyê lêkerê (fiîlê) çi ye?",
question_br: true,
visible: function () { return false; },
choices: [
{ code: "gh", label: "gerguhêz" },
{ code: "x-gh", label: "xwerû-gerguhêz" },
{ code: "p-gh", label: "pêkhatî-gerguhêz" },
{ code: "h-gh", label: "hevedudanî-gerguhêz" },
{ code: "b-gh", label: "biwêjî-gerguhêz" },
{ code: "ngh", label: "negerguhêz" },
{ code: "x-ngh", label: "xwerû-negerguhêz" },
{ code: "p-ngh", label: "pêkhatî-negerguhêz" },
{ code: "h-ngh", label: "hevedudanî-negerguhêz" },
{ code: "b-ngh", label: "biwêjî-negerguhêz" } ],
output: function () { return ""; }
},
// tr — hidden step, handled inside posparams
tr: {
id: "tr",
name: "transliterasyon",
question_fmt: "Transliterasyona vê kelîmeyê",
multiple: false,
narrow: true,
visible: function () { return false; }
},
posparams: {
id: "posparams",
// Fused onto the "pos" card visually (see #wiktku-start-posparams
// in styles.css) so the two read as ONE question, per Ghybu's
// 14 Tebax 2026 feedback — this name is only a no-CSS/no-JS
// fallback, since the h3 that would show it is hidden by CSS.
name: "taybetmendî",
// The old static "Parametreyên cureyê rêzimanî" label named the
// mechanism, not the content. Show what's actually being asked
// for instead: gender for nouns, verb type for verbs, a generic
// fallback (transliteration/forms etc. still apply) otherwise.
question_fmt: function (values) {
var pos = values.pos || "";
if (pos === "navdêr" || pos === "serenav") return "Cins/zayend";
if (/^lêker/.test(pos)) return "Cureyê lêkerê";
return "Taybetmendî";
},
visible: function (values) {
return !!(values.lang && values.pos);
},
build: function (stepDiv) {
if (stepDiv.find(".wiktku-posparams-wrap").length) return null;
var wrap = $("<div class='wiktku-posparams-wrap'></div>");
var helpers = $("<div class='wiktku-posparams-helpers'></div>");
var ta = $("<textarea></textarea>")
.attr("name", "wiktku-posparams-" + $.now())
.attr("class", "wiktku-start-step-field wiktku-posparams-text")
.attr("rows", 2);
var _rebuilding = false;
function safeRebuild() {
if (_rebuilding) return;
_rebuilding = true;
steps.posparams.rebuildTa(stepDiv);
_rebuilding = false;
refresh();
}
// Generic text-input row factory
function makeTextRow(key, labelText, placeholder) {
var row = $("<div class='wiktku-posparams-row'></div>")
.attr("id", "wiktku-posparams-row-" + key).hide();
var inp = $("<input type='text'>")
.addClass("wiktku-start-narrow wiktku-posparams-field")
.attr("data-pp-key", key)
.attr("placeholder", placeholder || "");
inp.on("input", safeRebuild);
row.append($("<label></label>").text(labelText + ": ")).append(inp);
return row;
}
// cinsiyet
var cinsiyetRow = $("<div class='wiktku-posparams-row' id='wiktku-posparams-row-c'></div>")
.append($("<label></label>").text("Cinsiyet: ")).hide();
var cinsiyetSel = $("<select></select>")
.addClass("wiktku-plain-select wiktku-start-narrow wiktku-posparams-cinsiyet-sel")
.append($("<option value=''>— hilbijêre —</option>"));
// Writes into the real, shared #wiktku-start-cinsiyet-field (owned by
// steps.cinsiyet) rather than a field of its own — see the comment
// on steps.cinsiyet.build for why that matters.
cinsiyetSel.on("change", function () {
$("#wiktku-start-cinsiyet-field").val($(this).val()).trigger("change");
safeRebuild();
});
cinsiyetRow.append(cinsiyetSel);
// Item 1 (Wikihez, 14 Tebax 2026): jimar (number) — a second
// dropdown next to Cinsiyet, same pattern (writes into the
// shared hidden #wiktku-start-jimar-field), but into its own
// j= param instead of sharing c=. Options + the title
// tooltip (explanation) are built in syncHelpers, once the
// language's number codes are known.
var jimarRow = $("<div class='wiktku-posparams-row' id='wiktku-posparams-row-jimar'></div>")
.append($("<label></label>").text("Jimar: ")).hide();
var jimarSel = $("<select></select>")
.addClass("wiktku-plain-select wiktku-start-narrow wiktku-posparams-jimar-sel")
.append($("<option value=''>— hilbijêre —</option>"));
jimarSel.on("change", function () {
$("#wiktku-start-jimar-field").val($(this).val()).trigger("change");
safeRebuild();
});
jimarRow.append(jimarSel);
// lektur
var lekturRow = $("<div class='wiktku-posparams-row' id='wiktku-posparams-row-lektur'></div>")
.append($("<label></label>").text("Cureyê lêkerê: ")).hide();
var lekturSel = $("<select></select>")
.addClass("wiktku-plain-select wiktku-start-narrow wiktku-posparams-lektur-sel")
.append($("<option value=''>— hilbijêre —</option>"));
$.each(steps.lektur.choices, function (_, c) {
lekturSel.append($("<option></option>").val(c.code).text(c.label));
});
lekturSel.on("change", safeRebuild);
lekturRow.append(lekturSel);
helpers.append(cinsiyetRow).append(jimarRow).append(lekturRow)
.append(makeTextRow("cuda", "nîşankirina alternatîv", "cuda…"))
.append(makeTextRow("tr", "Transliterasyon (tr)", "Transliterasyon…"))
.append(makeTextRow("ts", "Transkrîpsiyon (ts)", "Transkrîpsiyon…"))
.append(makeTextRow("m", "Forma mê (m)", "Forma mê…"))
.append(makeTextRow("mtr", "Translit. mê (mtr)", "Transliterasyona mê…"))
.append(makeTextRow("n", "Forma nêr (n)", "Forma nêr…"))
.append(makeTextRow("ntr", "Translit. nêr (ntr)", "Transliterasyona nêr…"))
.append(makeTextRow("p", "Forma pirjimar (p)", "Forma pirjimar…"))
.append(makeTextRow("ptr", "Translit. pirjimar", "Transliterasyona pirjimar…"))
.append(makeTextRow("y", "Forma yekjimar (y)", "Forma yekjimar…"))
.append(makeTextRow("ytr", "Translit. yekjimar", "Transliterasyona yekjimar…"))
.append(makeTextRow("sûp", "Forma sûperlatîv (sûp)", "Forma sûperlatîv…"))
.append(makeTextRow("sûptr", "Translit. sûperlatîv", "Transliterasyona sûperlatîv…"))
.append(makeTextRow("komp", "Forma komparatîv (komp)", "Forma komparatîv…"))
.append(makeTextRow("komptr", "Translit. komparatîv", "Transliterasyona komparatîv…"))
.append(makeTextRow("gir", "Forma girdêk (gir)", "gir=…"))
.append(makeTextRow("girtr", "Translit. gir", "girtr=…"))
.append(makeTextRow("hûr", "Forma hûrek (hûr)", "hûr=…"))
.append(makeTextRow("hûrtr", "Translit. hûr", "hûrtr=…"))
.append(makeTextRow("hanja", "Forma hanja", "hanja=…"))
.append(makeTextRow("hanjaTr","Translit. hanja", "hanjaTr=…"))
// Lêker rehên demê (only shown when pos is lêker — see syncHelpers)
.append(makeTextRow("niha", "Rehê dema niha (niha)", "Rehê dema niha…"))
.append(makeTextRow("nihatr", "Translit. rehê dema niha", "Transliterasyona rehê dema niha…"))
.append(makeTextRow("borî", "Rehê dema borî (borî)", "Rehê dema borî…"))
.append(makeTextRow("borîtr", "Translit. rehê dema borî", "Transliterasyona rehê dema borî…"))
.append(makeTextRow("subj", "Rehê dema bilanî (subj)", "Rehê dema bilanî…"))
.append(makeTextRow("subjtr", "Translit. rehê dema bilanî", "Transliterasyona rehê dema bilanî…"));
// Optional boolean params (collapsed)
var optToggle = $("<a href='#' class='wiktku-posparams-opt-toggle'></a>").text("▸ Tercîhên pêşketî");
var optPanel = $("<div class='wiktku-posparams-opt-panel'></div>").hide();
$.each([
{ key: "form", label: "form — ev made forma tewandî ye" },
{ key: "formaalt", label: "formaalt — vê madeyê bike forma alternatîv" },
{ key: "nekatcure", label: "nekatcure — sinifa rêzimanî kategorîze neke" },
{ key: "nekatcins", label: "nekatcins — kategoriya cinsiyetê neyîne" },
{ key: "nekatçendterm", label: "nekatçendterm — kategoriya çend-term neyîne" },
{ key: "serlînkneke", label: "serlînkneke — sernavê madeyê lînk neke" },
{ key: "nekatpalîndrom", label: "nekatpalîndrom — kategoriya palîndromê neyîne" },
{ key: "neformtr", label: "neformtr — transliterasyona forman neyîne" }
], function (_, p) {
var cb = $("<input type='checkbox'>")
.attr("id", "wiktku-posparams-opt-" + p.key).val(p.key).on("change", safeRebuild);
var lbl = $("<label></label>").attr("for", "wiktku-posparams-opt-" + p.key).text(" " + p.label);
optPanel.append($("<div class='wiktku-posparams-opt-row'></div>").append(cb).append(lbl));
});
optToggle.on("click", function (e) {
e.preventDefault();
var open = optPanel.is(":visible");
optPanel.toggle(!open);
$(this).text((open ? "▸" : "▾") + " Tercîhên pêşketî");
});
helpers.append(optToggle).append(optPanel);
wrap.append(helpers).append(ta);
// Typing directly in textarea keeps cinsiyet/jimar hidden
// fields in sync, but does NOT call refresh() — preserves
// manual edits.
ta.on("input", function () {
var text = $(this).val();
var cMatch = text.match(/\|c=([^|}\s]+)/);
$("#wiktku-start-cinsiyet-field").val(cMatch ? cMatch[1] : "");
var jMatch = text.match(/\|j=([^|}\s]+)/);
$("#wiktku-start-jimar-field").val(jMatch ? jMatch[1] : "");
});
stepDiv.append(wrap);
return null;
},
/** Reads all helper widget values and rewrites the textarea.
* Called only by safeRebuild (user interaction) — never by syncHelpers,
* so manual textarea edits are never overwritten by a refresh cycle. */
rebuildTa: function (stepDiv) {
var values = getValues();
var pos = values.pos || "";
var lang = values.lang || "";
if (!pos || !lang) return;
var cinsiyet = stepDiv.find(".wiktku-posparams-cinsiyet-sel").val() || "";
var jimar = stepDiv.find(".wiktku-posparams-jimar-sel").val() || "";
var lektur = stepDiv.find(".wiktku-posparams-lektur-sel").val() || "";
function v(key) {
return $.trim(stepDiv.find(".wiktku-posparams-field[data-pp-key='" + key + "']").val());
}
var out = "{{" + pos + "|" + lang;
if (pos === "navdêr" || pos === "serenav") {
out += cinsiyet ? "|c=" + cinsiyet : (lang === "ku" ? "|c=?" : "");
// Item 1: number is its own j= param now, separate from
// c= — c= keeps holding gender (and gender+plural
// compounds like m-p/n-p, unaffected by this change).
if (jimar) out += "|j=" + jimar;
} else if (/^lêker/.test(pos) && lektur) {
out += "|c=" + lektur;
}
if (v("cuda")) out += "|" + v("cuda");
if (v("tr")) out += "|tr=" + v("tr");
if (v("ts")) out += "|ts=" + v("ts");
$.each(["m","n","p","y"], function (_, k) {
if (v(k)) out += "|" + k + "=" + v(k);
if (v(k+"tr")) out += "|" + k + "tr=" + v(k+"tr");
});
if (v("sûp")) out += "|sûp=" + v("sûp");
if (v("sûptr")) out += "|sûptr=" + v("sûptr");
if (v("komp")) out += "|komp=" + v("komp");
if (v("komptr")) out += "|komptr=" + v("komptr");
if (v("gir")) out += "|gir=" + v("gir");
if (v("girtr")) out += "|girtr=" + v("girtr");
if (v("hûr")) out += "|hûr=" + v("hûr");
if (v("hûrtr")) out += "|hûrtr=" + v("hûrtr");
if (v("hanja")) out += "|hanja=" + v("hanja");
if (v("hanjaTr")) out += "|hanjaTr=" + v("hanjaTr");
if (v("niha")) out += "|niha=" + v("niha");
if (v("nihatr")) out += "|nihatr=" + v("nihatr");
if (v("borî")) out += "|borî=" + v("borî");
if (v("borîtr")) out += "|borîtr=" + v("borîtr");
if (v("subj")) out += "|subj=" + v("subj");
if (v("subjtr")) out += "|subjtr=" + v("subjtr");
stepDiv.find(".wiktku-posparams-opt-panel input:checked").each(function () {
var key = $(this).val();
// "form" marks this entry as a form-of/inflected entry — it
// takes "erê" rather than the plain "1" the other boolean
// opt params use.
out += "|" + key + "=" + (key === "form" ? "erê" : "1");
});
out += "}}";
stepDiv.find(".wiktku-posparams-text").val(out);
$("#wiktku-start-cinsiyet-field").val(cinsiyet);
$("#wiktku-start-jimar-field").val(jimar);
},
/** Called from refresh() — controls row visibility only.
* Does NOT rewrite textarea so user edits are preserved.
* Rebuilds only when textarea is empty (first pos selection). */
syncHelpers: function (stepDiv) {
var values = getValues();
var pos = values.pos || "";
var lang = values.lang || "";
var needsTr = needsTransliteration(lang);
var isNom = pos === "navdêr" || pos === "serenav" || pos === "rengdêr";
var isAdj = pos === "rengdêr";
var isTîp = pos === "tîp";
var isJa = lang === "ja";
var isLeker = /^lêker/.test(pos);
// Item 1: metadata[lang].g used to list gender AND number
// codes together — split them here (see isNumberCode) so
// Cîns only ever offers gender codes (and gender+plural
// compounds like m-p/n-p, which aren't NUMBER_LABELS keys)
// and the new Jimar dropdown only offers number codes.
var meta = metadata[lang];
var allCodes = (meta && meta.g) || [];
var genderCodes = $.grep(allCodes, function (c) { return !isNumberCode(c); });
var jimarCodes = $.grep(allCodes, function (c) { return isNumberCode(c); });
var showC = (pos === "navdêr" || pos === "serenav") && genderCodes.length > 0;
var cRow = stepDiv.find("#wiktku-posparams-row-c");
cRow.toggle(showC);
if (showC) {
var sel = cRow.find(".wiktku-posparams-cinsiyet-sel");
// Prefer the select's own current value (normal in-session
// use); fall back to the shared hidden field, which is how
// a cache/section restore communicates a saved gender
// before this select has any <option>s to hold it.
var prev = sel.val() || $("#wiktku-start-cinsiyet-field").val() || "";
sel.find("option[value!='']").remove();
$.each(genderCodes, function (_, code) {
sel.append($("<option></option>").val(code).text(genderLabel(code)));
});
if (prev) sel.val(prev);
}
var showJimar = (pos === "navdêr" || pos === "serenav") && jimarCodes.length > 0;
var jimarRowEl = stepDiv.find("#wiktku-posparams-row-jimar");
jimarRowEl.toggle(showJimar);
if (showJimar) {
var jimarSelEl = jimarRowEl.find(".wiktku-posparams-jimar-sel");
var prevJimar = jimarSelEl.val() || $("#wiktku-start-jimar-field").val() || "";
jimarSelEl.find("option[value!='']").remove();
$.each(jimarCodes, function (_, code) {
var def = NUMBER_LABELS[code] || {};
var opt = $("<option></option>").val(code).text(numberOptionLabel(code));
// The explanation (cat, e.g. "dualia tantum") shows as a
// hover tooltip — <option> can't hold richer markup.
if (def.cat) opt.attr("title", def.cat);
jimarSelEl.append(opt);
});
if (prevJimar) jimarSelEl.val(prevJimar);
}
stepDiv.find("#wiktku-posparams-row-lektur").toggle(isLeker);
stepDiv.find("#wiktku-posparams-row-tr").toggle(needsTr);
stepDiv.find("#wiktku-posparams-row-ts").toggle(needsTr);
stepDiv.find("#wiktku-posparams-row-m").toggle(isNom);
stepDiv.find("#wiktku-posparams-row-mtr").toggle(isNom && needsTr);
stepDiv.find("#wiktku-posparams-row-n").toggle(isNom);
stepDiv.find("#wiktku-posparams-row-ntr").toggle(isNom && needsTr);
stepDiv.find("#wiktku-posparams-row-p").toggle(isNom);
stepDiv.find("#wiktku-posparams-row-ptr").toggle(isNom && needsTr);
stepDiv.find("#wiktku-posparams-row-y").toggle(isNom);
stepDiv.find("#wiktku-posparams-row-ytr").toggle(isNom && needsTr);
stepDiv.find("#wiktku-posparams-row-sûp").toggle(isAdj);
stepDiv.find("#wiktku-posparams-row-sûptr").toggle(isAdj && needsTr);
stepDiv.find("#wiktku-posparams-row-komp").toggle(isAdj);
stepDiv.find("#wiktku-posparams-row-komptr").toggle(isAdj && needsTr);
stepDiv.find("#wiktku-posparams-row-gir").toggle(isTîp);
stepDiv.find("#wiktku-posparams-row-girtr").toggle(isTîp && needsTr);
stepDiv.find("#wiktku-posparams-row-hûr").toggle(isTîp);
stepDiv.find("#wiktku-posparams-row-hûrtr").toggle(isTîp && needsTr);
stepDiv.find("#wiktku-posparams-row-hanja").toggle(isJa);
stepDiv.find("#wiktku-posparams-row-hanjaTr").toggle(isJa);
stepDiv.find("#wiktku-posparams-row-niha").toggle(isLeker);
stepDiv.find("#wiktku-posparams-row-nihatr").toggle(isLeker && needsTr);
stepDiv.find("#wiktku-posparams-row-borî").toggle(isLeker);
stepDiv.find("#wiktku-posparams-row-borîtr").toggle(isLeker && needsTr);
stepDiv.find("#wiktku-posparams-row-subj").toggle(isLeker);
stepDiv.find("#wiktku-posparams-row-subjtr").toggle(isLeker && needsTr);
if (!$.trim(stepDiv.find(".wiktku-posparams-text").val())) {
steps.posparams.rebuildTa(stepDiv);
}
},
output: function () { return ""; } // pos.output reads the textarea directly
},
dfn: {
id: "dfn",
name: "Mane",
question_fmt: function (values) {
var base = "Maneya kelîmeyê binivîse. Mane otomatîk tê lînkkirin!";
if (values.lang === "ku") {
return base + " Ji bo tercimeyan beşa 'Werger' bi kar bîne!";
}
return base;
},
multiple: true,
ordered: true,
rows: 3,
visible: function (values) {
return values.lang && values.pos;
},
example: function (values) {
// posExamples loaded from [[MediaWiki:Gadget-start.js/data.json]].
var examples = steps.dfn.posExamples || {};
var full = values.pos || "";
return examples[full] || "";
},
// Builds one sense block (<li>): mane textarea, nimûne list, and
// sub-lists for alternatîv/hevmane/dijmane/etc.
buildSenseBlock: function (stepDiv) {
var block = $("<li class='wiktku-dfn-sense'></li>");
// — Mane textarea (declared first so the template handler can reference it) —
var dfnArea = $("<textarea></textarea>")
.attr("name", "wiktku-dfn-mane-" + $.now() + "-" + Math.random().toString(36).substr(2, 9))
.attr("class", "wiktku-start-step-field wiktku-dfn-mane")
.attr("rows", 6)
.attr("placeholder", "Mane…");
dfnArea.on("input", function () {
steps.dfn.onDfnInput(stepDiv, block, this);
});
// — Tercime + Îzah boxes (non-ku alternative to the plain mane box) —
// Non-ku entries get a direct translation plus a {{îzah|…}}-wrapped
// gloss instead of a Kurdish-style gloss. Rather than teach every
// consumer (getSenses/getOutput/linkify) a second data shape, these
// boxes just write their combined text into dfnArea and re-fire its
// "input" event, so dfnArea stays the single source of truth.
var tercimeArea = $("<textarea></textarea>")
.attr("name", "wiktku-dfn-tercime-" + $.now() + "-" + Math.random().toString(36).substr(2, 9))
.attr("class", "wiktku-dfn-subfield wiktku-dfn-tercime")
.attr("rows", 2)
.attr("placeholder", "Tercimeyên rasterast ên kurmancî… Ji bo school-a îngilîzî li vir 'mekteb, medrese' binivîse");
var izahArea = $("<textarea></textarea>")
.attr("name", "wiktku-dfn-izah-" + $.now() + "-" + Math.random().toString(36).substr(2, 9))
.attr("class", "wiktku-dfn-subfield wiktku-dfn-izah")
.attr("rows", 3)
.attr("placeholder", "Îzaha kurmancî… Ji bo school-a îngilîzî li vir 'cihê tehsîlgirtinê' binivîse");
var nonKuWrap = $("<div class='wiktku-dfn-nonku-wrap'></div>")
.append(tercimeArea).append(izahArea)
.hide();
function syncNonKuToMane() {
var t = $.trim(tercimeArea.val());
var iz = $.trim(izahArea.val());
// if tercime is blank, use îzah as definition
var combined = t ? (iz ? t + " {{îzah|" + iz + "}}" : t) : iz;
dfnArea.val(combined);
// Re-fires onDfnInput so the sense list still grows and
// refresh() still runs, exactly as if this were typed
// directly into the mane textarea.
dfnArea.trigger("input");
}
tercimeArea.on("input", syncNonKuToMane);
izahArea.on("input", syncNonKuToMane);
// Switches between the plain mane box and the tercime+îzah pair —
// only for non-ku entries with no tplSelect selected.
function updateManeMode() {
var lang = getValues().lang || "";
var isTpl = !!tplSelect.val();
if (lang && lang !== "ku" && !isTpl) {
dfnArea.hide();
nonKuWrap.show();
} else {
nonKuWrap.hide();
if (!isTpl) dfnArea.show();
}
}
// Store on the block so refresh() can re-sync every block when
// lang changes, and restoreDfn() can re-sync after restoring.
block.data("updateManeMode", updateManeMode);
// — Template selector (optional — replaces mane when chosen) —
// Template definitions loaded from [[MediaWiki:Gadget-start.js/data.json]].
var tplDefs = steps.dfn.tplDefs || {};
// Cache of all non-placeholder option elements, so updateTplOptions
// can detach/re-attach them without losing the full list.
var _allTplOptions = [];
var tplSelect = $(mw.html.element("select", { "class": "wiktku-dfn-tpl-select" }));
tplSelect.attr("data-placeholder", "Li şablonekê bigere");
tplSelect.append($("<option value=''>— yan jî şablonek hilbijêre —</option>"));
$.each(tplDefs, function (name, tpl) {
// Rewiye tine, 14 Tebax 2026: "guharto? kevnbûyî? ku-Latn?
// şaşnivîs? famkirina van zehmet e" — these 13 names had
// zero explanation in the dropdown (unlike steps.pron's
// template picker, which already shows "name — tpl.desc").
// Mirrors that same pattern here: if tpl.desc is ever
// added to a tplDefs entry in data.json, it'll show up
// automatically. It's optional per-entry, not required,
// since data.json doesn't have desc text for these yet —
// writing accurate one-line explanations for each needs
// someone who actually knows what each template does.
var opt = $("<option></option>")
.val(name)
.text(tpl.desc ? name + " — " + tpl.desc : name)
.attr("data-langs", tpl.langs ? tpl.langs.join(",") : "")
.attr("data-nolang", tpl.noLang ? "1" : "");
tplSelect.append(opt);
_allTplOptions.push(opt[0]);
});
function updateTplOptions() {
var lang = getValues().lang || "";
var currentVal = tplSelect.val();
var currentStillValid = false;
// Detach all non-placeholder options, then re-attach only the visible
// ones — native <select> won't reliably hide options any other way.
tplSelect.find("option[value!='']").detach();
$.each(_allTplOptions, function (_, opt) {
var allowed = $(opt).attr("data-langs");
var visible = !allowed || allowed.split(",").indexOf(lang) !== -1;
if (visible) {
tplSelect.append(opt);
if ($(opt).val() === currentVal) currentStillValid = true;
}
});
tplSelect.trigger("wiktku:refresh");
if (currentVal && !currentStillValid) {
tplSelect.val("");
tplTitleInput.hide().val("");
updateManeMode();
}
}
// Store updater on the element so refresh() can call it for all blocks.
tplSelect.data("updateOptions", updateTplOptions);
var tplTitleInput = $("<input type='text'>")
.addClass("wiktku-dfn-tpl-title wiktku-start-narrow")
.attr("placeholder", "Navê rûpela hedefê…")
.hide();
// Grow the sense list when the title field of the last block gets content,
// mirroring what onDfnInput does for the plain mane textarea.
tplTitleInput.on("input", function () {
steps.dfn.onDfnInput(stepDiv, block, this);
});
// Şablon senses have no plain gloss, so hide alternatîv/hevmane/
// dijmane/etc. Etîket, Nimûne and Jêgirtin stay visible either way.
function updateFieldVisibility() {
var isTpl = !!tplSelect.val();
$.each(HIDDEN_ON_TPL_GROUPS, function (_, cls) {
block.find("." + cls + "-group").toggle(!isTpl);
});
}
// Store on the block so restoreDfn() can re-sync visibility
// after setting tplSelect's value.
block.data("updateFieldVisibility", updateFieldVisibility);
tplSelect.on("change", function () {
var chosen = $(this).val();
if (chosen) {
dfnArea.hide();
nonKuWrap.hide();
tplTitleInput.show().focus();
} else {
tplTitleInput.hide().val("");
updateManeMode();
}
updateFieldVisibility();
// Re-run refresh so the Werger step visibility updates.
refresh();
});
var tplRow = $("<div></div>").addClass("wiktku-dfn-tpl-row")
.append(tplSelect).append(" ").append(tplTitleInput);
block.append(tplRow);
block.append(dfnArea);
block.append(nonKuWrap);
// Apply lang filter on initial build.
updateTplOptions();
updateManeMode();
// — Sub-field groups are always visible with a placeholder textarea.
var allGroups = [
{ cls: "wiktku-dfn-etiket", label: "Etîket", rows: 1, narrow: true, izah: "xisûsen, Mêrdîn, anatomî, Badînî", noLangSuffix: true },
{ cls: "wiktku-dfn-kategori", label: "Kategorî", rows: 1, narrow: true, izah: "wekî etîket lê xuya nabe tenê kategorîze dike", noLangSuffix: true },
{ cls: "wiktku-dfn-alternativ", label: "Formên alternatîv", rows: 1, narrow: true, izah: "Varyantên vê kelîmeyê" },
{ cls: "wiktku-dfn-hevmane", label: "Hevmane", rows: 1, narrow: true, izah: "Spehî hevmaneya Bedew e." },
{ cls: "wiktku-dfn-dijmane", label: "Dijmane", rows: 1, narrow: true, izah: "Zengîn dijmaneya feqîr e." },
{ cls: "wiktku-dfn-koordine", label: "Termên koordîne", rows: 1, narrow: true, izah: "Pisîk û kûçik termên koordîne ne çunkî Jornavên wan gelek in" },
{ cls: "wiktku-dfn-jornav", label: "Jornav", rows: 1, narrow: true, izah: "Heywan jornavê guhandar e" },
{ cls: "wiktku-dfn-jernav", label: "Jêrnav", rows: 1, narrow: true, izah: "Guhandar jêrnavê heywan e" },
{ cls: "wiktku-dfn-nimune", label: "Nimûne", rows: 2, narrow: false }
];
$.each(allGroups, function (_, g) {
var groupDiv = $("<div></div>").addClass("wiktku-dfn-subgroup " + g.cls + "-group");
function buildNimuneLi() {
var lang = getValues().lang || "";
var li = $("<li></li>").addClass("wiktku-dfn-nimune-li");
var mainTa = $("<textarea></textarea>")
.attr("name", "wiktku-dfn-nimune-text-" + $.now() + "-" + Math.random().toString(36).substr(2, 9))
.attr("rows", g.rows)
.attr("class", "wiktku-dfn-subfield wiktku-dfn-nimune-text")
.attr("placeholder", "Nimûneya emilandina kelîmeyê tu bi xwe binivîse…");
mainTa.on("input", function () {
highlightLinebreak(this);
var val = $.trim($(this).val());
var isLast = li.is(list.children("li:last-child"));
if (val && isLast) {
list.append(buildNimuneLi());
}
});
li.append(mainTa);
var subWrap = $("<div></div>").addClass("wiktku-dfn-nimune-sub");
if (needsTransliteration(lang)) {
subWrap.append(
$("<textarea></textarea>")
.attr("name", "wiktku-dfn-nimune-tr-" + $.now() + "-" + Math.random().toString(36).substr(2, 9))
.attr("rows", 5)
.attr("class", "wiktku-dfn-subfield wiktku-dfn-nimune-tr")
.attr("placeholder", "Transliterasyona bi alfabeya latînî")
);
}
if (lang && lang !== "ku") {
subWrap.append(
$("<textarea></textarea>")
.attr("name", "wiktku-dfn-nimune-t-" + $.now() + "-" + Math.random().toString(36).substr(2, 9))
.attr("rows", 5)
.attr("class", "wiktku-dfn-subfield wiktku-dfn-nimune-t")
.attr("placeholder", "Tercimeya nimûneyê bi kurmancî")
);
}
if (subWrap.children().length) li.append(subWrap);
return li;
}
// The placeholder names the current language, but that's
// often not chosen yet when this block is first built —
// so keep a function around that refresh() (and onSubInput,
// for newly-grown fields) can call again once lang is set
// or changes.
function subPlaceholder() {
if (g.noLangSuffix) return g.label + "…";
var lang = getValues().lang || "";
var langLabel = lang ? getLangLabel(lang) : "";
return g.label + (langLabel ? " bi " + langLabel : "") + "…";
}
function updateSubPlaceholders() {
list.find("> li > textarea.wiktku-dfn-subfield").attr("placeholder", subPlaceholder());
}
if (g.cls === "wiktku-dfn-nimune") {
// Nimûne — compound widget with tr/t sub-fields.
var lbl = $("<span></span>").addClass("wiktku-dfn-sublabel")
.append($("<span></span>").addClass("wiktku-dfn-sublabel-term").text(g.label))
.append(": ");
var list = $("<ol></ol>").addClass("wiktku-dfn-sublist " + g.cls + "-list");
groupDiv.data("buildNimuneLi", buildNimuneLi);
list.append(buildNimuneLi());
groupDiv.append(lbl).append(list);
block.append(groupDiv);
} else {
// Regular always-visible group — label + growing textarea list.
var lbl = $("<span></span>").addClass("wiktku-dfn-sublabel")
.append($("<span></span>").addClass("wiktku-dfn-sublabel-term").text(g.label))
.append(": ")
.append($("<span></span>").addClass("wiktku-dfn-sublabel-hint").text(g.izah));
var list = $("<ol></ol>").addClass("wiktku-dfn-sublist " + g.cls + "-list");
var useModifiers = !!MODIFIER_SUBGROUPS[g.cls];
list.data("updatePlaceholders", updateSubPlaceholders);
var firstInput = $("<textarea></textarea>")
.attr("name", g.cls + "-" + $.now() + "-" + Math.random().toString(36).substr(2, 9))
.attr("rows", g.rows)
.attr("class", "wiktku-dfn-subfield" + (g.narrow ? " wiktku-start-narrow" : ""))
.attr("placeholder", subPlaceholder());
firstInput.on("input", function () {
steps.dfn.onSubInput(list, this, g.rows, g.narrow, useModifiers);
});
list.append(useModifiers ? makeModifierLi(firstInput) : $("<li></li>").append(firstInput));
groupDiv.append(lbl).append(list);
block.append(groupDiv);
}
});
// — Jêder group — growing list, same structure as Nimûne. —
(function () {
var jederGroupDiv = $("<div></div>").addClass("wiktku-dfn-subgroup wiktku-dfn-jeder-group");
var jederLbl = $("<span></span>").addClass("wiktku-dfn-sublabel")
.append($("<span></span>").addClass("wiktku-dfn-sublabel-term").text("Jêgirtin"))
.append(": ");
var jederList = $("<ol></ol>").addClass("wiktku-dfn-sublist wiktku-dfn-jeder-list");
function buildJederLi() {
var lang = getValues().lang || "";
var li = $("<li></li>").addClass("wiktku-dfn-jeder-li");
// Quote text textarea
var quoteTa = $("<textarea></textarea>")
.attr("name", "wiktku-dfn-nimune-quote-" + $.now() + "-" + Math.random().toString(36).substr(2, 9))
.attr("rows", 2)
.attr("class", "wiktku-dfn-subfield wiktku-dfn-nimune-quote")
.attr("placeholder", "Nimûneya emilandinê ji kitêb an çavkaniyeke din binivîse");
quoteTa.on("input", function () {
highlightLinebreak(this);
var val = $.trim($(this).val());
var isLast = li.is(jederList.children("li:last-child"));
if (val && isLast) {
jederList.append(buildJederLi());
}
});
li.append(quoteTa);
// tr/t sub-fields for the quote — shown as needed for the language.
var quoteSubWrap = $("<div></div>").addClass("wiktku-dfn-quote-sub");
if (needsTransliteration(lang)) {
quoteSubWrap.append(
$("<textarea></textarea>")
.attr("name", "wiktku-dfn-nimune-quote-tr-" + $.now() + "-" + Math.random().toString(36).substr(2, 9))
.attr("rows", 2)
.attr("class", "wiktku-dfn-subfield wiktku-dfn-nimune-quote-tr")
.attr("placeholder", "Transliterasyona jêgirtinê…")
);
}
if (lang && lang !== "ku") {
quoteSubWrap.append(
$("<textarea></textarea>")
.attr("name", "wiktku-dfn-nimune-quote-t-" + $.now() + "-" + Math.random().toString(36).substr(2, 9))
.attr("rows", 2)
.attr("class", "wiktku-dfn-subfield wiktku-dfn-nimune-quote-t")
.attr("placeholder", "Tercimeya jêgirtinê bi kurmancî")
);
}
if (quoteSubWrap.children().length) li.append(quoteSubWrap);
// Citoid auto-fill: fetch citation data from a URL, DOI or ISBN and
// prefill the source şablon + fields below (see Gadget-citoid-helper.js).
var citoidWrap = $("<div></div>").addClass("wiktku-dfn-quote-citoid");
var citoidInput = $("<textarea></textarea>")
.addClass("wiktku-dfn-subfield wiktku-dfn-quote-citoid-input")
.attr("rows", 1)
.attr("placeholder", "URL, DOI an ISBN binivîse ku otomatîk were tijekirin…");
var citoidBtn = new OO.ui.ButtonWidget({
label: "Bi otomatîk tijî bike",
classes: [ "wiktku-dfn-quote-citoid-btn" ]
});
var citoidStatus = $("<span></span>").addClass("wiktku-dfn-quote-citoid-status");
// Fetches citation data from Citoid and fills this citation's
// şablon + fields — only rebuilds fields on template change,
// and never overwrites values the user already typed.
function runCitoidFetch() {
var query = $.trim(citoidInput.val());
if (!query) {
mw.notify("Ji kerema xwe re pêşî URL, DOI an ISBNyekê binivîse.");
return;
}
citoidBtn.setDisabled(true);
citoidStatus.text("Tê anîn…");
wikt.citoid.fetchJederFields(query).then(function (result) {
var jederKey = result.jederKey;
var hasTpl = !!jederKey && srcSel.find("option[value='" + jederKey + "']").length > 0;
var targetVal = hasTpl ? jederKey : "__manual__";
// Only rebuild if switching şablon, so a repeat fetch
// doesn't clear fields already filled in by hand.
if (srcSel.val() !== targetVal) {
srcSel.val(targetVal).trigger("change");
}
if (hasTpl) {
// Tenê qadên vala tijî bike.
$.each(result.fields, function (key, val) {
var input = srcFields.find("[data-field-key='" + key + "']");
if (input.length && !$.trim(input.val())) {
input.val(val);
}
});
} else {
// Şablonek nehat naskirin ji bo vê itemType — rêzikeke
// çavkaniyê ya bi destan a ji qadên Citoid tê çêkirin,
// lê tenê ger qada destan vala be.
var manualField = srcFields.find(".wiktku-dfn-quote-src-manual");
if (!$.trim(manualField.val())) {
var parts = [];
$.each(["nivîskar", "sernav", "websîte", "kovar", "weşanxane", "sal", "url"], function (_, k) {
if (result.fields[k]) parts.push(result.fields[k]);
});
manualField.val(parts.join(", "));
}
}
citoidStatus.text("");
}, function (errorMsg) {
citoidStatus.text(typeof errorMsg === "string" ? errorMsg : "Nehat dîtin. Kontrol bike ka URL/DOI/ISBN rast e.");
}).always(function () {
citoidBtn.setDisabled(false);
});
}
citoidBtn.on("click", runCitoidFetch);
citoidInput.on("keydown", function (e) {
if (e.which === 13) { // Enter
e.preventDefault();
runCitoidFetch();
}
});
citoidWrap.append(citoidInput).append(citoidBtn.$element).append(citoidStatus);
// Source template selector, specific to this citation.
var srcSel = $("<select></select>").addClass("wiktku-dfn-quote-src-sel wiktku-plain-select");
srcSel.append($("<option value=''>— Çavkaniyê hilbijêre —</option>"));
srcSel.append($("<option></option>").val("__manual__").text("Bi destê xwe binivîsim"));
srcSel.append($("<option></option>").val("__category__").text("Ji Kategorî:Çavkanî şablonekê hilbijêre"));
var jederDefs = steps.dfn.jederDefs || {};
$.each(jederDefs, function (tplName, def) {
srcSel.append($("<option></option>").val(tplName).text(def.label));
});
// Dynamic source fields container.
var srcFields = $("<div></div>").addClass("wiktku-dfn-quote-src-fields");
srcSel.on("change", function () {
srcFields.empty();
var chosen = $(this).val();
// Citoid is only useful before a source is chosen —
// hide it once a selection is made, restore on reset.
if (chosen) {
citoidWrap.hide();
} else {
citoidWrap.show();
return;
}
if (chosen === "__manual__") {
// Freeform source, written by the user — becomes the 2nd
// positional param of {{jêder|lang|…}} instead of çavkanî?.
srcFields.append(
$("<textarea></textarea>")
.attr("rows", 4)
.addClass("wiktku-dfn-subfield wiktku-dfn-quote-src-manual")
.attr("placeholder", "Çavkaniyê bi destê xwe binivîse…")
);
return;
}
if (chosen === "__category__") {
// Search widget over the members of [[Kategorî:Çavkanî]].
// Picking a şablon here immediately switches the row to
// "Bi destê xwe binivîsim" mode with {{Şablon}} pre-filled,
var catWrap = $("<span></span>").addClass("wiktku-native-select-wrap wiktku-dfn-quote-src-cat");
var catInput = $("<input type='search' autocomplete='off'>")
.addClass("wiktku-start-narrow wiktku-dfn-quote-src-cat-input")
.attr("placeholder", "Li navê şablonê bigere…");
var catResults = $("<ul></ul>").addClass("wiktku-ac-results wiktku-dfn-quote-src-cat-results").hide();
var catStatus = $("<span></span>").addClass("wiktku-dfn-quote-src-cat-status").text("Şablon tên barkirin…");
var showCatResults = function (query) {
var q = $.trim(query).toLowerCase();
catResults.empty();
var list = catSrcTemplates || [];
var matched = q ?
$.grep(list, function (name) { return name.toLowerCase().indexOf(q) !== -1; }) :
list;
if (!matched.length) {
catResults.hide();
return;
}
$.each(matched.slice(0, 50), function (_, name) {
var li = $("<li></li>").text(name).attr("data-value", name);
var touchMoved = false;
li.on("touchstart", function () { touchMoved = false; });
li.on("touchmove", function () { touchMoved = true; });
li.on("touchend", function (e) {
if (touchMoved) return;
e.preventDefault();
selectCatTpl(name);
});
li.on("mousedown", function (e) {
e.preventDefault();
selectCatTpl(name);
});
catResults.append(li);
});
catResults.show();
};
// Wraps the chosen şablon as {{Name}}, drops it into the
// manual textarea, and switches the row into manual mode
// so the user can keep editing it (add params, etc.).
var selectCatTpl = function (name) {
catResults.hide();
srcSel.val("__manual__");
srcSel.trigger("change");
srcFields.find(".wiktku-dfn-quote-src-manual")
.val("{{" + name + "}}")
.trigger("focus");
};
catInput.on("input", function () {
showCatResults($(this).val());
});
catInput.on("focus", function () {
showCatResults($(this).val());
});
catInput.on("blur", function () {
setTimeout(function () { catResults.hide(); }, 200);
});
catWrap.append(catInput).append(catResults).append(catStatus);
srcFields.append(catWrap);
fetchCatSrcTemplates().then(function () {
catStatus.text("");
}, function () {
catStatus.text("Şablon nehatin barkirin.");
});
return;
}
var def = (steps.dfn.jederDefs || {})[chosen];
if (!def) return;
$.each(def.fields, function (key, label) {
var row = $("<div></div>").addClass("wiktku-dfn-quote-src-row");
var fieldLbl = $("<label></label>").text(label + ": ");
var inp = $("<textarea></textarea>")
.attr("rows", 2)
.addClass("wiktku-dfn-quote-src-input wiktku-start-narrow")
.attr("data-field-key", key)
.attr("placeholder", label + "…");
// "Sernav" / "Sernavê orjînal" (title fields, e.g. for
// kitêb/kovar/malper) get a taller, draggable box; every
// other field in the template stays as-is. Field labels
// come from the on-wiki jederDefs data, so match on the
// (diacritic-folded) label text rather than a fixed key.
var foldedLabel = foldDiacritics(label);
if (/^sernav$/.test(foldedLabel) || /orjin/.test(foldedLabel)) {
inp.addClass("wiktku-dfn-quote-src-input--title");
}
row.append(fieldLbl).append(inp);
srcFields.append(row);
});
});
li.append(citoidWrap).append(srcSel).append(srcFields);
return li;
}
jederGroupDiv.data("buildJederLi", buildJederLi);
jederList.append(buildJederLi());
jederGroupDiv.append(jederLbl).append(jederList);
block.append(jederGroupDiv);
}());
// Apply the initial hide/show state for the sub-groups (matches
// tplSelect's starting value, which is normally empty).
updateFieldVisibility();
return block;
},
/** Grows the sense list when the last mane textarea gets content. */
onDfnInput: function (stepDiv, block, textarea) {
var val = $.trim($(textarea).val());
var list = stepDiv.find("ol.wiktku-dfn-list");
var isLast = block.is(list.children("li:last-child"));
if (val && isLast) {
var newBlock = steps.dfn.buildSenseBlock(stepDiv);
list.append(newBlock);
// Give the new block's template selector the searchable picker.
initSelects(newBlock);
}
refresh();
},
/** Grows a sub-list (nimûne/formên alternatîv/hevmane/dijmane/termên koordîne) on input. */
onSubInput: function (list, input, rows, narrow, modifiers) {
var val = $.trim($(input).val());
var item = $(input).parent();
var isLast = item.is(list.children("li:last-child"));
if (val && isLast) {
var next = $("<textarea></textarea>")
.attr("name", "wiktku-dfn-sub-" + $.now() + "-" + Math.random().toString(36).substr(2, 9))
.attr("rows", rows)
.attr("class", "wiktku-dfn-subfield" + (narrow ? " wiktku-start-narrow" : ""));
next.on("input", function () {
steps.dfn.onSubInput(list, this, rows, narrow, modifiers);
});
list.append(modifiers ? makeModifierLi(next) : $("<li></li>").append(next));
// New field starts with no placeholder — give it (and any
// others in the list) the current one.
var updatePlaceholders = list.data("updatePlaceholders");
if (typeof updatePlaceholders === "function") updatePlaceholders();
}
},
// Populated from [[MediaWiki:Gadget-start.js/data.json]] (tplDefs, posExamples, jederDefs).
tplDefs: {},
posExamples: {},
jederDefs: {},
build: function (stepDiv) {
if (stepDiv.find("ol.wiktku-dfn-list").length) return null;
// Rewiye tine, 14 Tebax 2026: "şablonên mana jî dikare serê
// yekî tevlîhev bike... famkirina van zehmet e" — the "an jî
// şablonek hilbijêre" dropdown inside each sense (guharto,
// kevnbûyî, ku-Latn, şaşnivîs, …) had no explanation at all.
// One reassurance, shown once for the whole Mane step rather
// than repeated per sense: it's optional, plain text is the
// normal path.
if (!stepDiv.find(".wiktku-dfn-tpl-hint").length) {
stepDiv.append(
$("<p class='wiktku-step-hint wiktku-dfn-tpl-hint'></p>").text(
"Ji bo her maneyekê, dropdown-a \"an jî şablonek hilbijêre\" ne mecbûrî ye — bi gelemperî tu tenê maneyê bi tîpên asayî dinivîsî. Ew şablon tenê ji bo rewşên taybet in (mînak: guherto, kevnbûyî, şaşnivîs); heke tu nizanî kîjan divê, vale bihêle."
)
);
}
// One-time "hide/show all" link for the etîket/kategorî/hevmane/…/
// nimûne/jêgirtin subgroups. Wikihez, 14 Tebax 2026: starts
// collapsed now (was expanded by default) — this is "malûmatên
// pêşketî" in the Mane tab's new Mane → malûmatên pêşketî →
// Wêne → Bi zaravayên din → Werger ordering.
if (!stepDiv.find(".wiktku-dfn-subs-toggle").length) {
stepDiv.addClass("wiktku-dfn-subs-hidden");
var subsToggle = $("<a href='#' class='wiktku-dfn-subs-toggle'></a>").text("▸ Malûmatên pêşketî nîşan bide");
subsToggle.on("click", function (e) {
e.preventDefault();
var hidden = stepDiv.toggleClass("wiktku-dfn-subs-hidden").hasClass("wiktku-dfn-subs-hidden");
$(this).text((hidden ? "▸ Malûmatên pêşketî nîşan bide" : "▾ Malûmatên pêşketî veşêre"));
});
stepDiv.append(subsToggle);
}
var list = $("<ol class='wiktku-dfn-list'></ol>");
list.append(steps.dfn.buildSenseBlock(stepDiv));
stepDiv.append(list);
return null;
},
/** Reads all sense blocks from the DOM and returns an array of sense objects. */
getSenses: function (stepDiv) {
var senses = [];
stepDiv.find("li.wiktku-dfn-sense").each(function () {
var block = $(this);
var tplSel = block.find("select.wiktku-dfn-tpl-select");
var tpl = tplSel.val() || "";
// noLang: template already encodes the language — don't add |lang| param.
var tplNoLang = tpl
? tplSel.find("option[value='" + tpl + "']").attr("data-nolang") === "1"
: false;
var tplTitle = $.trim(block.find("input.wiktku-dfn-tpl-title").val());
var mane = $.trim(block.find("textarea.wiktku-dfn-mane").val());
function readList(cls) {
var vals = [];
block.find("." + cls + "-list textarea").each(function () {
var v = $.trim($(this).val());
if (v) vals.push(v);
});
return vals;
}
// Nimûne items are compound: { text, tr?, t? }
function readNimuneList() {
var items = [];
block.find(".wiktku-dfn-nimune-list li.wiktku-dfn-nimune-li").each(function () {
var text = $.trim($(this).find(".wiktku-dfn-nimune-text").val());
if (!text) return;
var obj = { text: text };
var tr = $.trim($(this).find(".wiktku-dfn-nimune-tr").val());
var t = $.trim($(this).find(".wiktku-dfn-nimune-t").val());
if (tr) obj.tr = tr;
if (t) obj.t = t;
items.push(obj);
});
return items;
}
// Jêder is a growing list of citations, one per li — mirrors readNimuneList().
function readJederList() {
var items = [];
block.find(".wiktku-dfn-jeder-list li.wiktku-dfn-jeder-li").each(function () {
var li = $(this);
var quote = $.trim(li.find(".wiktku-dfn-nimune-quote").val());
if (!quote) return;
var obj = { quote: quote };
var qtr = $.trim(li.find(".wiktku-dfn-nimune-quote-tr").val());
var qt = $.trim(li.find(".wiktku-dfn-nimune-quote-t").val());
if (qtr) obj.quoteTr = qtr;
if (qt) obj.quoteT = qt;
var tplName = li.find(".wiktku-dfn-quote-src-sel").val();
if (tplName === "__manual__") {
var manual = $.trim(li.find(".wiktku-dfn-quote-src-manual").val());
if (manual) obj.jederManual = manual;
} else if (tplName === "__category__") {
// Reachable only if the user opened the category search but
// never picked a şablon — picking one switches the row to
// __manual__ (see selectCatTpl above), so there's nothing
// meaningful to save here.
} else if (tplName) {
obj.jederTpl = tplName;
var fields = {};
li.find(".wiktku-dfn-quote-src-input").each(function () {
var k = $(this).attr("data-field-key");
var v = $.trim($(this).val());
if (k && v) fields[k] = v;
});
obj.jêderFields = fields;
}
items.push(obj);
});
return items;
}
senses.push({
tpl: tpl,
tplNoLang: tplNoLang,
tplTitle: tplTitle,
mane: mane,
etiket: readList("wiktku-dfn-etiket"),
kategori: readList("wiktku-dfn-kategori"),
nimune: readNimuneList(),
jeder: readJederList(),
alternativ: readList("wiktku-dfn-alternativ"),
hevmane: readList("wiktku-dfn-hevmane"),
dijmane: readList("wiktku-dfn-dijmane"),
koordine: readList("wiktku-dfn-koordine"),
jornav: readList("wiktku-dfn-jornav"),
jernav: readList("wiktku-dfn-jernav")
});
});
return senses;
},
getOutput: function (values, callback) {
var stepDiv = $("#wiktku-start-dfn");
var senses = steps.dfn.getSenses(stepDiv);
var lang = values.lang;
// A sense counts as "filled" if it has a mane, a chosen template + title,
// or any other content (etîket/hevmane/nimûne/jêder…) worth keeping.
var hasMane = senses.some(function (s) {
return s.mane !== "" || (s.tpl && s.tplTitle) || senseHasExtraContent(s);
});
var defLines = []; // one entry per kept sense (goes to linkify)
var citeLines = []; // parallel — nimûne+jêder for that same sense
var izahLines = []; // parallel — raw îzah gloss for that same sense
// True only once some sense's *actual* dfn text (post tercime/îzah
// split) is non-empty.
var hasLinkableMane = false;
$.each(senses, function (_, sense) {
// — Template sense (e.g. {{guharto|ku|somepage}}) —
if (sense.tpl) {
if (!sense.tplTitle) return; // skip empty template senses
var tplKatTpl = buildSenseTpl(sense, "kategori", lang, "K");
var tplLabelTpl = buildSenseTpl(sense, "etiket", lang, "e");
var tplCall = sense.tplNoLang
? "{{" + sense.tpl + "|" + sense.tplTitle + "}}"
: "{{" + sense.tpl + "|" + lang + "|" + sense.tplTitle + "}}";
var idx = defLines.length;
var cite = buildCite(sense, lang);
defLines.push("# " + (tplKatTpl ? tplKatTpl + " " : "") + (tplLabelTpl ? tplLabelTpl + " " : "") + tplCall +
(cite ? "{{wiktku-cite-" + idx + "}}" : ""));
citeLines.push(cite);
izahLines.push(""); // template senses have no îzah
return;
}
// — Normal mane sense —
var dfn = sense.mane;
if (!dfn && !senseHasExtraContent(sense)) return; // truly empty
// Pull the îzah gloss (if any) out of the combined tercime+îzah
// string — it's spliced back in separately below, after its
// own linkify pass (see izahLines / the second linkifyText call).
var izahRaw = null;
var tercimeIzah = splitTercimeIzah(dfn);
if (tercimeIzah) {
dfn = tercimeIzah.tercime;
izahRaw = stripWikilinks(tercimeIzah.izah);
}
if (dfn) {
dfn = stripWikilinks(dfn);
// Sentence-case + trailing period are for ku definitions,
// which are written as full glosses.
if (lang === "ku") {
if (dfn[0] !== dfn[0].toUpperCase()) dfn = capitalize(dfn);
if (!dfn.match(/[.…?!)\]]$/)) dfn += ".";
}
// Real prose — this is what makes the sense worth running
// through the main linkify pass.
hasLinkableMane = true;
} else if (izahRaw === null) {
// No mane at all — this is just the "{{mane?|lang}}"
// placeholder, a bare template call with no plain words
// in it. Do NOT count it as linkable: sending nothing but
// bracketed templates through the main linkify pass hangs
// the linkify gadget (see the hasLinkableMane/hasIzah
// check below).
dfn = lang === "ku" ? "{{mane?|" + lang + "}}" : "";
}
var katTpl = buildSenseTpl(sense, "kategori", lang, "K");
var labelTpl = buildSenseTpl(sense, "etiket", lang, "e");
var out = "# " + (katTpl ? katTpl + " " : "") + (labelTpl ? labelTpl + " " : "") + dfn;
var idx = defLines.length;
var hasThisIzah = izahRaw !== null && $.trim(izahRaw) !== "";
// Bare {{...}} token — like {{wiktku-cite-N}}, this survives
// linkify's first pass untouched (it treats template calls as
// opaque), then gets swapped for {{îzah|…}} once the actual
// gloss text has been linkified in its own separate pass.
if (hasThisIzah) {
out += (dfn ? " " : "") + "{{wiktku-izah-" + idx + "}}";
}
function wordLine(tpl, words) {
if (!words.length) return "";
return "\n#: {{" + tpl + "|" + lang + "|" + words.join("|") + "}}";
}
out += wordLine("alt-r", sense.alternativ);
out += wordLine("hevmane", sense.hevmane);
out += wordLine("dijmane", sense.dijmane);
out += wordLine("koordîne", sense.koordine);
out += wordLine("jornav", sense.jornav);
out += wordLine("jêrnav", sense.jernav);
var cite = buildCite(sense, lang);
defLines.push(out + (cite ? "{{wiktku-cite-" + idx + "}}" : ""));
citeLines.push(cite);
izahLines.push(hasThisIzah ? izahRaw : "");
});
// Splice citeLines back into a linkified string, replacing each
// {{wiktku-cite-N}} token with its stored nimûne/jêder block.
function restoreCites(t) {
return t.replace(/\{\{wiktku-cite-(\d+)\}\}/g, function (_, n) {
return citeLines[parseInt(n, 10)] || "";
});
}
// Runs text through the linkify gadget if it's loaded, otherwise
// just passes it through unchanged. Shared by both linkify passes
// below (main mane text, and — separately — îzah glosses).
function linkifyText(t, cb) {
if (typeof $.kuLinkify === "function") {
$.kuLinkify(t, cb);
} else {
cb(t);
}
}
var hasIzah = izahLines.some(function (t) { return t && $.trim(t) !== ""; });
var text = defLines.join("\n") + "\n";
if (!hasMane) {
// No definitions entered — emit {{mane?}} with nimûne?.
text = "# {{mane?|" + lang + "}}\n#* {{nimûne?|" + lang + "}}\n";
callback(text);
return;
}
// Runs the îzah-only linkify pass against `base` (either the raw
// text, when there's no linkable mane to run the main pass on
// first, or the already-linkified main text). Shared by both
// branches below so the token-splice logic only lives once.
function runIzahPass(base) {
var izahJoined = $.map(izahLines, function (raw, idx) {
if (!raw) return undefined;
return "{{wiktku-izah-open-" + idx + "}}" + raw + "{{wiktku-izah-close-" + idx + "}}";
}).join("\n");
linkifyText(izahJoined, function (izahLinked) {
var izahByIdx = {};
var re = /\{\{wiktku-izah-open-(\d+)\}\}([\s\S]*?)\{\{wiktku-izah-close-\1\}\}/g;
var m;
while ((m = re.exec(izahLinked)) !== null) {
izahByIdx[parseInt(m[1], 10)] = m[2];
}
var withIzah = base.replace(/\{\{wiktku-izah-(\d+)\}\}/g, function (_, n) {
var linked = izahByIdx[parseInt(n, 10)];
return linked !== undefined ? "{{îzah|" + linked + "}}" : "";
});
callback(restoreCites(withIzah));
});
}
if (!hasLinkableMane) {
if (!hasIzah) {
// All filled senses are template senses (or otherwise have
// no plain text at all) — nothing here needs linkify.
callback(restoreCites(text));
return;
}
// There's no plain mane text anywhere (e.g. tercime left blank
// with only îzah filled in), so every defLine is just a bare
// template call with nothing to word-link. Sending a line
// like "# {{wiktku-izah-0}}" through the main linkify pass
// gives it no plain words to work with, makes the linkify
// gadget hang — so skip that pass entirely and run only
// the îzah pass, splicing straight into the unlinkified text.
var loadIzahOnly = function () { runIzahPass(text); };
mw.loader.using("ext.gadget.linkify", loadIzahOnly, loadIzahOnly);
return;
}
var didTryToLoad = function () {
// First pass: the main definition text (mane), same as before.
linkifyText(text, function (mainLinked) {
if (!hasIzah) {
callback(restoreCites(mainLinked));
return;
}
// Second pass: îzah glosses, linkified via their own
// separate call. Each gloss is wrapped in its own
// {{wiktku-izah-open/close-N}} pair; like the existing
// {{wiktku-cite-N}} tokens, these sit inside double
// braces so linkify leaves the tokens themselves alone —
// only the raw gloss text between each pair gets linked.
runIzahPass(mainLinked);
});
};
mw.loader.using("ext.gadget.linkify", didTryToLoad, didTryToLoad);
}
},
tewandin: {
id: "tewandin",
name: "tewandin",
question_fmt: 'Tewandina "' + pageName + '" binivîse',
visible: function (values) {
return values.lang && values.pos;
},
build: function (stepDiv) {
if (stepDiv.find(".wiktku-tewandin-wrap").length) return null;
var wrap = $("<div class='wiktku-tewandin-wrap'></div>");
var ta = $("<textarea></textarea>")
.attr("name", "wiktku-tewandin-" + $.now())
.attr("class", "wiktku-start-step-field wiktku-tewandin-text")
.attr("rows", 4)
.attr("placeholder", "{{ku-tewîn-nav|nêr}}");
wrap.append(ta);
stepDiv.append(wrap);
function autoPopulate() {
if (!ta.length) return;
var vals = getValues();
var c = vals.cinsiyet || "";
var p = vals.pos || "";
if (!pageName.includes(" ") && c && GENDER_BASE_LABELS[c] &&
(p === "navdêr" || p === "serenav") && vals.lang === "ku" &&
c !== "mndudil") {
var label = (c === "mnmane") ? "mê û nêr" : GENDER_BASE_LABELS[c];
var out = "{{ku-tewîn-nav|" + label;
if (p === "serenav") out += "|y";
out += "}}";
if (!$.trim(ta.val())) ta.val(out);
}
}
setTimeout(function () {
autoPopulate();
$("#wiktku-start-form").on("change.tewandin",
"#wiktku-start-lang-field, #wiktku-start-cinsiyet-field, #wiktku-start-pos-field",
autoPopulate);
}, 0);
return ta;
},
output: function () {
var manualText = $.trim($("#wiktku-start-tewandin .wiktku-tewandin-text").val());
if (manualText) {
return "\n==== Tewandin ====\n" + manualText + "\n";
}
return "";
}
},
// resim — one or more images
resim: {
id: "resim",
name: "resim",
question_fmt: "Resmekê lê zêde bike",
visible: function (values) { return !!(values.lang && values.pos); },
/** Builds one image row: filename + caption + alt text. */
buildItem: function (stepDiv) {
var item = $("<li class='wiktku-resim-item'></li>");
var fileRow = $("<div class='wiktku-posparams-row'></div>");
var fileInp = $("<input type='text'>")
.addClass("wiktku-start-step-field wiktku-start-narrow wiktku-resim-file")
.attr("placeholder", "navê_dosyayê.jpg");
fileRow.append($("<label></label>").text("Navê dosyayê: ")).append(fileInp);
var capRow = $("<div class='wiktku-posparams-row'></div>");
var capInp = $("<input type='text'>")
.addClass("wiktku-start-step-field wiktku-start-narrow wiktku-resim-caption")
.attr("placeholder", "Danasîna resimê…");
capRow.append($("<label></label>").text("Danasîn: ")).append(capInp);
// Alt text: what a screen reader announces for this image
var altRow = $("<div class='wiktku-posparams-row'></div>");
var altInp = $("<input type='text'>")
.addClass("wiktku-start-step-field wiktku-start-narrow wiktku-resim-alt")
.attr("placeholder", "Ji bo kesên nabînin, çi tê dîtin? (ne mecbûrî)");
altRow.append($("<label></label>").text("Nivîsa alternatîf: ")).append(altInp);
// Auto-fill the caption with the plain page name when a filename
// is typed
fileInp.on("input", function () {
var file = $.trim($(this).val());
var curCap = $.trim(capInp.val());
var isDefault = !curCap || curCap === pageName;
if (file && isDefault) {
capInp.val(pageName);
} else if (!file && isDefault) {
capInp.val("");
}
steps.resim.onFileInput(stepDiv, item, this);
});
item.append(fileRow).append(capRow).append(altRow);
return item;
},
/** Grows the image list when the last row's filename gets content. */
onFileInput: function (stepDiv, item, input) {
var val = $.trim($(input).val());
var list = stepDiv.find("ol.wiktku-resim-list");
var isLast = item.is(list.children("li:last-child"));
if (val && isLast) {
list.append(steps.resim.buildItem(stepDiv));
}
},
build: function (stepDiv) {
if (stepDiv.find(".wiktku-resim-wrap").length) return null;
var wrap = $("<div class='wiktku-resim-wrap'></div>");
var list = $("<ol class='wiktku-resim-list'></ol>");
list.append(steps.resim.buildItem(stepDiv));
wrap.append(list);
stepDiv.append(wrap);
return null;
},
/** Reads every filled row from the DOM into an array of {file, caption, alt}
* objects — blank rows (missing filename or caption) are skipped.
* Non-Kurdish captions get wrapped in {{zim|lang|…}} here, unless
* the user already typed their own {{zim|…}} template. Alt text is
* optional and left as plain text either way. */
getImages: function (values) {
var lang = (values && values.lang) || getValues().lang || "";
var images = [];
$("#wiktku-start-resim li.wiktku-resim-item").each(function () {
var file = $.trim($(this).find(".wiktku-resim-file").val());
var caption = $.trim($(this).find(".wiktku-resim-caption").val());
var alt = $.trim($(this).find(".wiktku-resim-alt").val());
if (!file || !caption) return;
// Strip leading "Wêne:" or "File:" if the user typed it — we add it ourselves.
file = file.replace(/^(wêne|file|image)\s*:\s*/i, "");
if (lang && lang !== "ku" && !/^\{\{zim\s*\|/i.test(caption)) {
caption = "{{zim|" + lang + "|" + caption + "}}";
}
images.push({ file: file, caption: caption, alt: alt });
});
return images;
},
output: function (values) {
var images = steps.resim.getImages(values);
if (!images.length) return "";
return images.map(function (img) {
var altPart = img.alt ? "|alt=" + img.alt : "";
return "[[Wêne:" + img.file + "|thumb" + altPart + "|" + img.caption + "]]";
}).join("\n") + "\n";
}
},
// bnr-h — {{bnr-h|Page1|Page2|…}} prepended before the lang section (shared, not per-section)
bnrh: {
id: "bnrh",
name: "binêre herwiha (bnr-h)",
question_fmt: "Şablona bnr-h li qismê herî jor a rûpelê",
//visible: function (values) { return !!values.lang; },
multiple: true,
narrow: true,
placeholder: "Ji bo 'test' bnr 'Test', 'teşt'",
output: function (values) {
var pages = $.grep(values.bnrh || [], function (p) { return !!$.trim(p); });
if (!pages.length) return "";
return "{{bnr-h|" + pages.map(function (p) { return $.trim(p); }).join("|") + "}}\n";
}
},
bikaranin: {
id: "bikaranin",
name: "Notên bikaranînê",
question_fmt: "Notên bikaranînê yên li ser vê kelîmeyê",
visible: function (values) {
return values.lang && values.pos;
},
multiple: false,
narrow: false,
output: function (values) {
var text = $.trim(values.bikaranin || "");
if (!text) return "";
return "\n==== Notên bikaranînê ====\n" + text + "\n";
},
},
xwendin: {
id: "xwendin",
name: "Bêhtir bixwîne",
question_fmt: "Lînkên derveyî eleqedarî vê madeyê",
visible: function (values) {
return values.lang && values.pos;
},
multiple: false,
narrow: false,
placeholder: function (values) {
if (!values || !values.lang) {
return `* {{wpedî}} ji bo ku meqaleya Wîkîpediyayê lînk bidî`;
}
const ziman = values.lang === "ku" ? "" : `|ziman=${values.lang}`;
return `* {{wpedî${ziman}}} ji bo ku meqaleya Wîkîpediyayê lînk bidî`;
},
output: function (values) {
var text = $.trim(values.xwendin || "");
if (!text) return "";
return "\n==== Bêhtir bixwîne ====\n" + text + "\n";
},
},
alfabeyendin: {
id: "alfabeyendin",
name: "Bi alfabeyên din",
question_fmt: function (values) {
var base = "Nivîsîna vê kelîmeyê bi alfabeyên din"
var langLabel = values.lang ? getLangLabel(values.lang) : "";
if (langLabel) {
return base + " ên " + langLabel;
}
return base;
},
visible: function (values) {
return values.lang && values.pos;
},
multiple: false,
narrow: false,
placeholder: "Ji bo kurmancî: * {{ku-ar|şiklê alfaba erebî}}",
output: function (values) {
var text = $.trim(values.alfabeyendin || "");
if (!text) return "";
return "\n==== Bi alfabeyên din ====\n" + text + "\n";
},
},
formalt: makeWordListStep("formalt", "formên alternatîv", "Formên alternatîv ên vê kelîmeyê ji bo hemû maneyan eger te li binê maneyê nenivîsandibe"),
hevmane: makeWordListStep("hevmane", "hevmane", "Hevmaneyên vê kelîmeyê ji bo hemû maneyan eger te li binê maneyê nenivîsandibe"),
dijmane: makeWordListStep("dijmane", "dijmane", "Dijmaneyên vê kelîmeyê ji bo hemû maneyan eger te li binê maneyê nenivîsandibe"),
jornav: makeWordListStep("jornav", "jornav", "Jornavên vê kelîmeyê ji bo hemû maneyan eger te li binê maneyê nenivîsandibe"),
jernav: makeWordListStep("jernav", "jêrnav", "Jêrnavên vê kelîmeyê ji bo hemû maneyan eger te li binê maneyê nenivîsandibe"),
je: makeWordListStep("je", "jê", "Kelîmeyên jê çêbûyî binivîse"),
tekildar: makeWordListStep("tekildar", "têkildar", "Kelîmeyên ji aliyê etîmolojiyê ve têkildarî vê kelîmeyê binivîse"),
binereherwiha: makeWordListStep("binereherwiha", "herwiha binêre", "Kelîmeyên din ên eleqedar binivîse"),
etym: {
id: "etym",
name: "etîmolojî",
question_fmt: "Etîmolojiya kelîmeyê binivîse",
// etymTpls populated from data.json
etymTpls: {},
visible: function (values) {
return values.lang && values.pos;
},
// Fills the insert-dropdown from the current etymTpls object.
refreshTplSelect: function () {
var sel = $("#wiktku-start-etym .wiktku-tpl-insert-select");
if (!sel.length) return;
sel.find("option[value!='']").remove();
$.each(steps.etym.etymTpls, function (name, tpl) {
sel.append($("<option></option>").val(tpl.snippet).text(name + " — " + tpl.desc));
});
// Tell the picker the option list changed.
sel.trigger("wiktku:refresh");
},
build: function (stepDiv) {
if (stepDiv.find(".wiktku-etym-wrap").length) return null;
var wrap = $("<div class='wiktku-etym-wrap'></div>");
var ta = $("<textarea></textarea>")
.attr("name", "wiktku-etym-" + $.now())
.attr("class", "wiktku-start-step-field wiktku-etym-text")
.attr("rows", 4)
.attr("placeholder", "Ji {{ji|en|ku|apple}}. yan rasterast binivîse…");
// Template insert dropdown — options also refreshed after data.json loads.
var sel = $("<select class='wiktku-tpl-insert-select'></select>");
sel.attr("data-placeholder", "Şablonek lê zêde bike…");
sel.append($("<option value=''>— şablonek lê zêde bike —</option>"));
$.each(steps.etym.etymTpls, function (name, tpl) {
sel.append($("<option></option>").val(tpl.snippet).text(name + " — " + tpl.desc));
});
sel.on("change", function () {
var snippet = $(this).val();
if (!snippet) return;
var lang = getValues().lang || "";
snippet = snippet.replace(/CODE/g, lang).replace(/SOURCELANG/g, "?");
insertAtCursor(ta[0], snippet);
$(this).val("");
sel.trigger("wiktku:refresh");
ta.focus();
});
wrap.append(sel);
wrap.append(ta);
stepDiv.append(wrap);
initSelects(wrap);
return ta;
},
output: function (values) {
var text = $.trim($("#wiktku-start-etym .wiktku-etym-text").val());
if (text) {
return "\n==== Etîmolojî ====\n" + text + "\n";
}
// No etymology entered — emit {{ji?|lang}} as a placeholder.
// Skip it only when every filled sense is a şablon sense
// a completely empty entry with no şablon chosen still gets the placeholder
var dfnSenses = steps.dfn.getSenses($("#wiktku-start-dfn"));
var hasFilledTplSense = dfnSenses.some(function (s) {
return !!s.tpl && !!s.tplTitle;
});
var hasRegularMane = dfnSenses.some(function (s) {
return !s.tpl && (s.mane !== "" || senseHasExtraContent(s));
});
if (hasFilledTplSense && !hasRegularMane) return "";
return "\n==== Etîmolojî ====\n{{ji?|" + values.lang + "}}\n";
} },
dunde: {
id: "dunde",
name: "dûnde",
question_fmt: "Eger ev kelîme ji vî zimanî ketibe zimanekî din, vî zimanî û kelîmeya wî binivîse",
visible: function (values) {
return !!values.pos;
},
disabledKeys: function (values) {
return {"navz": true, [values.lang]: true}
},
// Language dropdown + growing word-input list; a new row appends
// when the dropdown gets a value. Mirrors steps.trans, but flat.
buildRow: function (stepDiv) {
var row = $("<li class='wiktku-dunde-row wiktku-lang-row'></li>");
// Language selector — the searchable picker is applied after insertion into DOM.
var langSel = $(mw.html.element("select", {
"class": "wiktku-start-step-keyfield wiktku-start-narrow" }));
langSel.attr("data-placeholder", "Li zimanekî bigere");
populateMenus(langSel, steps.dunde.keys || [], steps.dunde.disabledKeys);
// When a language is chosen, ensure a next empty row exists.
langSel.on("change", function () {
steps.dunde.onLangChange(stepDiv, row);
});
// Word list for this language.
var wordList = $("<ul class='wiktku-dunde-words wiktku-lang-row-words'></ul>");
var firstWord = steps.dunde.makeWordInput();
wordList.append($("<li></li>").append(firstWord));
// The searchable picker is attached by initSelects() once the row
// is in the DOM (see onLangChange/build below).
row.append(langSel).append(wordList);
return row;
},
makeWordInput: function () {
var input = $("<textarea></textarea>")
.attr("name", "wiktku-dunde-word-" + $.now() + "-" + Math.random().toString(36).substr(2, 9))
.attr("rows", 1)
.attr("class", "wiktku-dfn-subfield wiktku-start-narrow")
.attr("placeholder", "Kelîme…");
input.on("input", function () {
var list = $(this).closest("ul.wiktku-dunde-words");
var item = $(this).parent();
var val = $.trim($(this).val());
if (val && item.is(list.children("li:last-child"))) {
var next = steps.dunde.makeWordInput();
list.append($("<li></li>").append(next));
}
});
return input;
},
onLangChange: function (stepDiv, row) {
var list = stepDiv.find("ul.wiktku-dunde-list");
var isLast = row.is(list.children("li.wiktku-dunde-row:last-child"));
if (isLast) {
var newRow = steps.dunde.buildRow(stepDiv);
list.append(newRow);
// Attach the searchable picker now the row is in the DOM.
initSelects(newRow);
}
// Keep disabled keys in sync across all lang selectors.
steps.dunde.syncDisabledKeys(stepDiv);
},
/** Disables already-selected languages in all other dropdowns. */
syncDisabledKeys: function (stepDiv) {
var taken = $.extend({}, steps.dunde.disabledKeys);
stepDiv.find("li.wiktku-dunde-row select").each(function () {
var v = $(this).val();
if (v) taken[v] = true;
});
stepDiv.find("li.wiktku-dunde-row select").each(function () {
var self = $(this);
var own = self.val();
self.find("option").each(function () {
var code = $(this).val();
if (!code) return;
$(this).prop("disabled", taken[code] && code !== own);
});
self.trigger("wiktku:refresh");
});
},
build: function (stepDiv) {
if (stepDiv.find("ul.wiktku-dunde-list").length) return null;
var list = $("<ul class='wiktku-dunde-list wiktku-lang-row-list'></ul>");
list.append(steps.dunde.buildRow(stepDiv));
stepDiv.append(list);
// Attach the searchable picker now the select is in the DOM.
initSelects(list);
return null;
},
/** Reads all [langcode, words[]] rows from the DOM. */
getRows: function (stepDiv) {
var result = [];
stepDiv.find("li.wiktku-dunde-row").each(function () {
var lang = $(this).find("select").val();
if (!lang) return;
var words = [];
$(this).find("ul.wiktku-dunde-words textarea").each(function () {
var v = $.trim($(this).val());
if (v) words.push(v);
});
if (words.length) result.push([lang, words]);
});
return result;
},
output: function () {
var stepDiv = $("#wiktku-start-dunde");
var rows = steps.dunde.getRows(stepDiv);
if (!rows.length) return "";
var lines = $.map(rows, function (row) {
var lang = row[0], words = row[1];
return "* {{dû|" + lang + "|" + words.join("|") + "}}";
});
return "\n==== Dûnde ====\n" + lines.join("\n") + "\n";
}
},
zarava: {
id: "zarava",
name: "bi zaravayên din",
question_fmt: "'"+ pageName + "' di zaravayên din de çawa tê gotin?",
visible: function (values) {
return steps.trans.visible(values);
},
disabledKeys: {},
buildRow: function (group) {
var row = $("<li class='wiktku-zarava-row wiktku-lang-row'></li>");
var langSel = $(mw.html.element("select", {
"class": "wiktku-start-step-keyfield wiktku-start-narrow" }));
langSel.attr("data-placeholder", "Li zaravayekî bigere");
populateMenus(langSel, steps.zarava.keys || [], steps.zarava.disabledKeys);
langSel.on("change", function () {
steps.zarava.onLangChange(group, row);
});
var wordList = $("<ul class='wiktku-zarava-words wiktku-lang-row-words'></ul>");
var firstWord = steps.zarava.makeWordInput();
wordList.append($("<li></li>").append(firstWord));
row.append(langSel).append(wordList);
return row;
},
makeWordInput: function () {
var input = $("<textarea></textarea>")
.attr("name", "wiktku-zarava-word-" + $.now() + "-" + Math.random().toString(36).substr(2, 9))
.attr("rows", 1)
.attr("class", "wiktku-dfn-subfield wiktku-start-narrow")
.attr("placeholder", "Tercime…");
input.on("input", function () {
var list = $(this).closest("ul.wiktku-zarava-words");
var item = $(this).parent();
var val = $.trim($(this).val());
if (val && item.is(list.children("li:last-child"))) {
var next = steps.zarava.makeWordInput();
list.append($("<li></li>").append(next));
}
});
return input;
},
onLangChange: function (group, row) {
var list = group.find("ul.wiktku-zarava-list");
var isLast = row.is(list.children("li.wiktku-zarava-row:last-child"));
if (isLast) {
var newRow = steps.zarava.buildRow(group);
list.append(newRow);
// Attach the searchable picker now the row is in the DOM.
initSelects(newRow);
}
steps.zarava.syncDisabledKeys(group);
},
/** Disables already-selected dialects in all other dropdowns within one group. */
syncDisabledKeys: function (group) {
var taken = $.extend({}, steps.zarava.disabledKeys);
group.find("li.wiktku-zarava-row select").each(function () {
var v = $(this).val();
if (v) taken[v] = true;
});
group.find("li.wiktku-zarava-row select").each(function () {
var self = $(this);
var own = self.val();
self.find("option").each(function () {
var code = $(this).val();
if (!code) return;
$(this).prop("disabled", taken[code] && code !== own);
});
self.trigger("wiktku:refresh");
});
},
/** Builds (or fetches) the .wiktku-zarava-group for one gloss. */
buildGroup: function (stepDiv, gi) {
var group = $("<div class='wiktku-zarava-group'></div>").attr("data-gloss-pos", gi);
var list = $("<ul class='wiktku-zarava-list wiktku-lang-row-list'></ul>");
list.append(steps.zarava.buildRow(group));
group.append(list);
stepDiv.append(group);
// Attach the searchable picker now the select is in the DOM.
initSelects(list);
return group;
},
/** Syncs one .wiktku-zarava-group per current gloss (same logic as steps.trans.build). */
build: function (stepDiv) {
var glosses = steps.trans.glossList();
if (!glosses.length) {
stepDiv.find(".wiktku-zarava-group").remove();
return null;
}
var existingGroups = stepDiv.find(".wiktku-zarava-group");
if (existingGroups.length > glosses.length) {
existingGroups.slice(glosses.length).remove();
}
$.each(glosses, function (gi, gloss) {
var group = stepDiv.find(".wiktku-zarava-group[data-gloss-pos='" + gi + "']");
if (!group.length) group = steps.zarava.buildGroup(stepDiv, gi);
var label = group.find(".wiktku-zarava-group-label");
if (glosses.length > 1) {
if (!label.length) {
label = $("<div class='wiktku-zarava-group-label'></div>");
group.prepend(label);
}
label.text(gloss.index + " " + gloss.text);
} else if (label.length) {
label.remove();
}
});
return null;
},
/** Reads the dialect rows for a single gloss group. */
getGroupTranslations: function (group) {
var result = [];
group.find("li.wiktku-zarava-row").each(function () {
var lang = $(this).find("select").val();
if (!lang) return;
var words = [];
$(this).find("ul.wiktku-zarava-words textarea").each(function () {
var v = $.trim($(this).val());
if (v) words.push(v);
});
if (words.length) result.push([lang, words]);
});
return result;
},
/** Reads all rows from the DOM, grouped by gloss position. */
getTranslations: function (stepDiv) {
var result = [];
stepDiv.find(".wiktku-zarava-group").each(function () {
result.push(steps.zarava.getGroupTranslations($(this)));
});
return result;
},
output: function (values) {
if (values.lang !== "ku") return "";
var stepDiv = $("#wiktku-start-zarava");
var glosses = steps.trans.glossList();
if (!glosses.length) return "";
// Item 6 (Wikihez, 14 Tebax 2026): "Bi zaravayên din" now
// auto-appears empty for lang=ku exactly like Werger
// already does (steps.trans.output, same rule below) —
// a completely empty entry still gets a placeholder
// section to fill in later; an individual placeholder
// gloss is only skipped once some other sense already has
// real content, making that particular one redundant.
var dfnSenses = steps.dfn.getSenses($("#wiktku-start-dfn"));
var hasRegularMane = dfnSenses.some(function (s) {
return !s.tpl && (s.mane !== "" || senseHasExtraContent(s));
});
var blocks = $.map(glosses, function (gloss, gi) {
var group = stepDiv.find(".wiktku-zarava-group[data-gloss-pos='" + gi + "']");
var rows = group.length ? steps.zarava.getGroupTranslations(group) : [];
if (!gloss.text && !rows.length && hasRegularMane) return undefined;
if (rows.length) {
rows.sort(function (a, b) {
var aLang = langsByCode[a[0]] || {};
var bLang = langsByCode[b[0]] || {};
return (aLang.sortKey || "").localeCompare(bLang.sortKey || "", "ku");
});
}
var wordLines = $.map(rows, function (row) {
var lang = row[0];
var words = row[1];
var wikiWords = words.map(function (w) {
return "{{W|" + lang + "|" + w + "}}";
}).join(", ");
return "* {{Z|" + lang + "}}: " + wikiWords;
}).join("\n");
var block = "{{werger-ser|" + (gloss.text || "?") + "|" + gloss.index + "}}";
if (wordLines) block += "\n" + wordLines;
block += "\n{{werger-bin}}";
return block;
});
if (!blocks.length) return "";
return "\n==== Bi zaravayên din ====\n" + blocks.join("\n") + "\n";
}
},
trans: {
id: "trans",
name: "werger",
question_fmt: "Tercimeyên vê maneyê bi zimanên din binivîse",
visible: function (values) {
if (!(values.lang === "ku" && values.pos)) return false;
// Hide only when every sense is a filled template sense (no plain
// gloss to attach translations to). A mix, or nothing filled in
// yet, still shows Werger.
var dfnSenses = steps.dfn.getSenses($("#wiktku-start-dfn"));
var hasRealSense = dfnSenses.some(function (s) {
return !s.tpl && (s.mane !== "" || senseHasExtraContent(s));
});
var hasFilledTplSense = dfnSenses.some(function (s) {
return s.tpl && s.tplTitle;
});
return hasRealSense || !hasFilledTplSense;
},
disabledKeys: {
"navz": true,
"ku": true,
"ckb": true,
"sdh": true,
"lki": true,
"hac": true,
"zza": true },
// Language dropdown + growing word-input list, scoped to one gloss's
// group (each gloss has its own group and row list).
buildRow: function (group) {
var row = $("<li class='wiktku-trans-row wiktku-lang-row'></li>");
// Language selector — the searchable picker is applied after insertion into DOM.
var langSel = $(mw.html.element("select", {
"class": "wiktku-start-step-keyfield wiktku-start-narrow" }));
langSel.attr("data-placeholder", "Li zimanekî bigere");
populateMenus(langSel, steps.trans.keys || [], steps.trans.disabledKeys);
// When a language is chosen, ensure a next empty row exists.
langSel.on("change", function () {
steps.trans.onLangChange(group, row);
});
// Word list for this language.
var wordList = $("<ul class='wiktku-trans-words wiktku-lang-row-words'></ul>");
var firstWord = steps.trans.makeWordInput();
wordList.append($("<li></li>").append(firstWord));
// The searchable picker is attached by initSelects() once the row
// is in the DOM (see onLangChange/buildGroup below).
row.append(langSel).append(wordList);
return row;
},
makeWordInput: function () {
var input = $("<textarea></textarea>")
.attr("name", "wiktku-trans-word-" + $.now() + "-" + Math.random().toString(36).substr(2, 9))
.attr("rows", 1)
.attr("class", "wiktku-dfn-subfield wiktku-start-narrow")
.attr("placeholder", "Tercime…");
input.on("input", function () {
var list = $(this).closest("ul.wiktku-trans-words");
var item = $(this).parent();
var val = $.trim($(this).val());
if (val && item.is(list.children("li:last-child"))) {
var next = steps.trans.makeWordInput();
list.append($("<li></li>").append(next));
}
});
return input;
},
onLangChange: function (group, row) {
var list = group.find("ul.wiktku-trans-list");
var isLast = row.is(list.children("li.wiktku-trans-row:last-child"));
if (isLast) {
var newRow = steps.trans.buildRow(group);
list.append(newRow);
// Attach the searchable picker now the row is in the DOM.
initSelects(newRow);
}
// Keep disabled keys in sync across this gloss's lang selectors
// only — the same language can be used for different senses.
steps.trans.syncDisabledKeys(group);
},
/** Disables already-selected languages in all other dropdowns within one group. */
syncDisabledKeys: function (group) {
var taken = $.extend({}, steps.trans.disabledKeys);
group.find("li.wiktku-trans-row select").each(function () {
var v = $(this).val();
if (v) taken[v] = true;
});
group.find("li.wiktku-trans-row select").each(function () {
var self = $(this);
var own = self.val();
self.find("option").each(function () {
var code = $(this).val();
if (!code) return;
$(this).prop("disabled", taken[code] && code !== own);
});
self.trigger("wiktku:refresh");
});
},
// Builds (or fetches) the .wiktku-trans-group for one gloss.
buildGroup: function (stepDiv, gi) {
var group = $("<div class='wiktku-trans-group'></div>").attr("data-gloss-pos", gi);
var list = $("<ul class='wiktku-trans-list wiktku-lang-row-list'></ul>");
list.append(steps.trans.buildRow(group));
group.append(list);
stepDiv.append(group);
// Attach the searchable picker now the select is in the DOM.
initSelects(list);
return group;
},
// Syncs one .wiktku-trans-group per current gloss, keyed by
// data-gloss-pos so groups stay matched across rebuilds.
build: function (stepDiv) {
var glosses = steps.trans.glossList();
if (!glosses.length) {
stepDiv.find(".wiktku-trans-group").remove();
return null;
}
// Drop groups for glosses that no longer exist (always from the
// tail — groups are only ever appended in gloss order below).
var existingGroups = stepDiv.find(".wiktku-trans-group");
if (existingGroups.length > glosses.length) {
existingGroups.slice(glosses.length).remove();
}
$.each(glosses, function (gi, gloss) {
var group = stepDiv.find(".wiktku-trans-group[data-gloss-pos='" + gi + "']");
if (!group.length) group = steps.trans.buildGroup(stepDiv, gi);
// Only label groups when there's more than one gloss to
// distinguish between — a single gloss needs no caption.
var label = group.find(".wiktku-trans-group-label");
if (glosses.length > 1) {
if (!label.length) {
label = $("<div class='wiktku-trans-group-label'></div>");
group.prepend(label);
}
label.text(gloss.index + " " + gloss.text);
} else if (label.length) {
label.remove();
}
});
return null;
},
/** Reads the translation rows for a single gloss group. */
getGroupTranslations: function (group) {
var result = [];
group.find("li.wiktku-trans-row").each(function () {
var lang = $(this).find("select").val();
if (!lang) return;
var words = [];
$(this).find("ul.wiktku-trans-words textarea").each(function () {
var v = $.trim($(this).val());
if (v) words.push(v);
});
if (words.length) result.push([lang, words]);
});
return result;
},
// Reads all translation rows, grouped by gloss position.
getTranslations: function (stepDiv) {
var result = [];
stepDiv.find(".wiktku-trans-group").each(function () {
result.push(steps.trans.getGroupTranslations($(this)));
});
return result;
},
// Builds the numbered "{ index, gloss }" list, one per dfn sense
// with a real mane (skips template senses). index is 1-based and
// matches the sense's position in the "#" definition list.
// When nothing's filled in, returns one placeholder entry so
// Werger still has a group to attach to; when every sense is a
// filled template sense, stays empty (matches trans.visible()).
glossList: function () {
var dfnSenses = steps.dfn.getSenses($("#wiktku-start-dfn"));
var glosses = [];
var hasFilledTplSense = false;
$.each(dfnSenses, function (i, s) {
if (s.tpl) {
if (s.tplTitle) hasFilledTplSense = true;
return; // template sense — no gloss to caption with
}
var dfn = s.mane;
if (!dfn) {
// No mane, but other fields are filled — still gets a
// gloss group since dfn.getOutput() emits {{mane?}} for it.
if (senseHasExtraContent(s)) glosses.push({ index: i + 1, text: "" });
return;
}
if (dfn[0] !== dfn[0].toLowerCase()) dfn = decapitalize(dfn);
dfn = stripWikilinks(dfn).replace(/[.…?!)\]،؟]+$/, "");
glosses.push({ index: i + 1, text: dfn });
});
if (!glosses.length && !hasFilledTplSense) {
glosses.push({ index: 1, text: "" });
}
return glosses;
},
output: function (values) {
if (values.lang !== "ku") return "";
var stepDiv = $("#wiktku-start-trans");
var glosses = steps.trans.glossList();
// Every sense is a template sense — there's no real gloss
// anywhere and no group in the DOM either (glossList() only
// returns empty in that case), so skip the section entirely.
if (!glosses.length) return "";
// A completely empty entry (nothing filled in dfn at all, no
// şablon chosen either) still gets a placeholder Werger section
// to fill in later. Only
// skip an individual placeholder gloss below when some other
// sense actually has real content, making that particular
// placeholder redundant.
var dfnSenses = steps.dfn.getSenses($("#wiktku-start-dfn"));
var hasRegularMane = dfnSenses.some(function (s) {
return !s.tpl && (s.mane !== "" || senseHasExtraContent(s));
});
// Each gloss now has its own group of translation rows —
// attach every gloss's own words under its own werger-ser/-bin
// pair instead of dumping everything under the first one.
var blocks = $.map(glosses, function (gloss, gi) {
var group = stepDiv.find(".wiktku-trans-group[data-gloss-pos='" + gi + "']");
var rows = group.length ? steps.trans.getGroupTranslations(group) : [];
// Placeholder gloss (no real mane entered yet) with nothing
// translated into it. If some other sense already has real
// content, this placeholder is redundant — skip it. If the
// whole entry is empty, keep it so Werger still gets a
// section to fill in.
if (!gloss.text && !rows.length && hasRegularMane) return undefined;
if (rows.length) {
// Sort by Kurdish sort key.
rows.sort(function (a, b) {
var aLang = langsByCode[a[0]] || {};
var bLang = langsByCode[b[0]] || {};
return (aLang.sortKey || "").localeCompare(bLang.sortKey || "", "ku");
});
}
var wordLines = $.map(rows, function (row) {
var lang = row[0];
var words = row[1];
var wikiWords = words.map(function (w) {
return "{{W|" + lang + "|" + w + "}}";
}).join(", ");
return "* {{Z|" + lang + "}}: " + wikiWords;
}).join("\n");
var block = "{{werger-ser|" + (gloss.text || "?") + "|" + gloss.index + "}}";
if (wordLines) block += "\n" + wordLines;
block += "\n{{werger-bin}}";
return block;
});
if (!blocks.length) return "";
return "\n==== Werger ====\n" + blocks.join("\n") + "\n";
}
},
cavkani: {
id: "cavkani",
name: "çavkanî",
question_fmt: "Çavkaniyên din (ne jêgirtin) lê zêde bike",
visible: function (values) {
return !!values.pos;
},
// Fills the insert-dropdown from the members of [[Kategorî:Çavkanî]].
refreshTplSelect: function () {
var sel = $("#wiktku-start-cavkani .wiktku-tpl-insert-select");
if (!sel.length) return;
sel.find("option[value!='']").remove();
$.each(catSrcTemplates || [], function (_, name) {
sel.append($("<option></option>").val(name).text(name));
});
// Tell the picker the option list changed.
sel.trigger("wiktku:refresh");
},
build: function (stepDiv) {
if (stepDiv.find(".wiktku-cavkani-wrap").length) return null;
var wrap = $("<div class='wiktku-cavkani-wrap'></div>");
var ta = $("<textarea></textarea>")
.attr("name", "wiktku-cavkani-" + $.now())
.attr("class", "wiktku-start-step-field wiktku-cavkani-text")
.attr("rows", 4)
.attr("placeholder", "Şablonekî ji lîsteyê hilbijêre an rasterast binivîse…");
// Template insert dropdown, populated from [[Kategorî:Çavkanî]] —
// options refreshed once the category members are fetched.
var sel = $("<select class='wiktku-tpl-insert-select'></select>");
sel.attr("data-placeholder", "Şablonek lê zêde bike…");
sel.append($("<option value=''>— şablonek lê zêde bike —</option>"));
var status = $("<span class='wiktku-cavkani-status'></span>");
sel.on("change", function () {
var name = $(this).val();
if (!name) return;
insertAtCursor(ta[0], "\n* {{" + name + "}}");
$(this).val("");
sel.trigger("wiktku:refresh");
ta.focus();
});
wrap.append(sel);
wrap.append(status).append(ta);
stepDiv.append(wrap);
// build() runs again for every new beş (see the "+ Beş zêde bike"
// handler), after the initial page-wide pass — so this select needs
// its own init or it stays a plain, unsearchable native <select>.
initSelects(wrap);
if (catSrcTemplates) {
steps.cavkani.refreshTplSelect();
} else {
status.text("Şablon tên barkirin…");
fetchCatSrcTemplates().then(function () {
steps.cavkani.refreshTplSelect();
status.text("");
}, function () {
status.text("Şablon nehatin barkirin.");
});
}
return ta;
},
output: function () {
var text = $.trim($("#wiktku-start-cavkani .wiktku-cavkani-text").val());
if (!text) return "";
return "\n==== Çavkanî ====\n" + text + "\n";
}
},
};
steps.trans.keys = steps.lang.choices;
steps.dunde.keys = steps.lang.choices;
steps.zarava.keys = getZaravaKeys(steps.lang.choices);
// Ghybu, 14 Tebax 2026: bnrh/resim/pron used to sit here, always visible,
// well above the tab bar (which starts right before "dfn"). They're now
// tab-gated (see STEP_GROUPS below), so their DOM position moves down to
// sit right next to it instead of rendering as always-open fields between
// Ziman and Cureyê rêzimanî. This array only controls DOM build order —
// nothing else keys off it (see the comment above stepIdToGroup).
// Wikihez, 14 Tebax 2026: Mane tab's internal order is now Mane → malûmatên
// pêşketî (nested inside dfn's own div, see steps.dfn.build) → Wêne →
// Bi zaravayên din → Werger, so dfn/resim/zarava/trans need to sit
// adjacent to each other, in that order, in the DOM. zarava/trans moved
// out of the "Beşên din" cluster entirely — see STEP_GROUPS below.
var ordered_steps = [
steps.lang, steps.pos, steps.posparams,
steps.cinsiyet, steps.jimar, steps.lektur, steps.tr,
steps.dfn, steps.resim, steps.zarava, steps.trans,
steps.pron,
steps.bnrh, steps.tewandin, steps.bikaranin, steps.alfabeyendin, steps.je, steps.tekildar, steps.binereherwiha, steps.formalt, steps.hevmane, steps.dijmane, steps.jornav, steps.jernav,
steps.etym, steps.dunde, steps.cavkani, steps.xwendin];
// ── Step-group tabs ──────────────────────────────────────────────────────
// Ghybu, 14 Tebax 2026 (revised): originally 5 tabs (Bingehîn/Bilêvkirin/
// Lînkkirin/Bikaranîn/Din), split by topic. Ghybu's follow-up flattened
// that to exactly 3: "Mane", "Bilêvkirin", "Beşên din" ("other
// sections") — with Wêne and Nimûne folded INTO "Mane" specifically
// (not left in a misc tab), and everything that isn't Mane/Bilêvkirin
// dumped into one single "Beşên din" catch-all rather than split across
// topic tabs. Nimûne doesn't appear below as its own entry because it's
// not a separate step — it's already rendered inside each dfn/Mane
// sense block (see buildSenseBlock's allGroups), so it's under "Mane"
// automatically. "mane" stays first (and so the default-active tab)
// since required content — Mane itself — has to be what's seen by
// default.
// Wikihez, 14 Tebax 2026: zarava/trans moved from "besendin" into "mane" —
// both are already gated to lang===ku (zarava.visible just delegates to
// trans.visible), so they show/hide automatically with no picker
// involvement, same as before; they just render inside the Mane tab
// now instead of behind the Beşên din picker (see openedOtherSections
// below, which only applies to "besendin" members).
var STEP_GROUPS = [
{ id: "mane", label: "Mane", steps: ["dfn", "resim", "zarava", "trans"] },
{ id: "bilevkirin", label: "Bilêvkirin", steps: ["pron"] },
{ id: "besendin", label: "Beşên din", steps: ["tewandin", "etym", "je", "tekildar", "binereherwiha", "formalt", "hevmane", "dijmane", "jornav", "jernav", "bikaranin", "alfabeyendin", "dunde", "cavkani", "xwendin", "bnrh"] },
];
// Steps that live behind the "Beşên din" picker (point 3) — only these
// need an explicit "open" before they're shown, even when their tab is
// active. Derived from the group above so it can't drift out of sync.
var BESENDIN_STEP_IDS = STEP_GROUPS[2].steps;
// Reverse lookup: step id -> index into STEP_GROUPS (undefined for
// ungrouped steps — now only lang/pos/posparams/cinsiyet/lektur/tr,
// which stay always-visible since they're required to get to everything
// else).
var stepIdToGroup = {};
$.each(STEP_GROUPS, function (gi, g) {
$.each(g.steps, function (_, sid) { stepIdToGroup[sid] = gi; });
});
// Step ids that belong to each section (not shared across sections).
var PER_SECTION_STEP_IDS = [
"pos", "posparams", "cinsiyet", "jimar", "lektur", "tr",
"resim", "dfn", "tewandin", "formalt", "bikaranin", "alfabeyendin", "hevmane", "dijmane", "jornav", "jernav", "je", "tekildar", "etym", "dunde", "binereherwiha", "zarava", "trans", "cavkani", "xwendin"
];
// ── Multi-section state ──────────────────────────────────────────────────
// Each entry is a plain snapshot: { pos, cinsiyet, lektur, tr, dfn (senses[]),
// je, tekildar, binereherwiha, trans (rows[]) }.
var sections = [{}]; // section 0 starts empty (DOM is the truth)
var activeSection = 0;
// Which STEP_GROUPS tab is currently shown. Lives out here (like
// activeSection above) so refresh() — which is not nested inside build()
// — can read it and so renderGroupTabs()/updateGroupTabIndicators() below
// can be called from refresh() too. Both operate on the tab bar via its
// #wiktku-group-tabs id rather than a closured element reference, for the
// same reason.
var activeGroup = 0;
// Unsaved-changes / autosave state. Lives out here (same reason as
// activeGroup above) so destroy() — which runs on final submit and on
// switching to the source editor, and is not nested inside build() —
// can clear the timers and the beforeunload warning. build() assigns
// into these; it doesn't re-declare them.
var formDirty = false;
var autosaveDebounceTimer = null;
var autosaveInterval = null;
/** Re-renders the step-group tab bar to reflect the current activeGroup. */
function renderGroupTabs() {
var groupTabsDiv = $("#wiktku-group-tabs");
if (!groupTabsDiv.length) return;
groupTabsDiv.empty();
$.each(STEP_GROUPS, function (i, g) {
var tab = $("<span></span>")
.addClass("wiktku-group-tab")
.attr("data-group-idx", i)
.text(g.label)
.toggleClass("wiktku-tab-active", i === activeGroup);
(function (idx) {
tab.on("click", function () {
if (idx === activeGroup) return;
activeGroup = idx;
renderGroupTabs();
if (idx === BESENDIN_GROUP_IDX) renderBesenDinPicker();
refresh();
});
}(i));
groupTabsDiv.append(tab);
});
}
/**
* Toggles a "needs attention" dot on any group tab that still has a
* required, unfilled field hidden inside it — so switching tabs doesn't
* leave the person wondering why "Bişîne" stays disabled.
*/
function updateGroupTabIndicators(values) {
var tabs = $("#wiktku-group-tabs .wiktku-group-tab");
if (!tabs.length) return;
$.each(STEP_GROUPS, function (i, g) {
var missing = false;
$.each(g.steps, function (_, sid) {
var step = steps[sid];
if (!step || !step.required) return;
var val = values[sid];
if (val === "" || (step.multiple && $.isArray(val) && val.join("") === "")) {
missing = true;
}
});
tabs.eq(i).toggleClass("wiktku-tab-missing", missing && i !== activeGroup);
});
}
// Wikihez, 14 Tebax 2026: "Beşên din" no longer shows all 16 fields
// stacked at once — a picker reveals one at a time instead. This is
// per-section state (like the field values themselves), snapshotted in
// saveCurrentSection() and restored in restoreSection() below, and
// auto-seeded from any field that already has content (so a returning
// draft, or an older cache saved before this existed, doesn't hide
// something the person already filled in).
var openedOtherSections = {};
var BESENDIN_SET = {};
$.each(BESENDIN_STEP_IDS, function (_, sid) { BESENDIN_SET[sid] = true; });
var BESENDIN_GROUP_IDX = 2; // "besendin"'s index in STEP_GROUPS above
/** Re-renders the "Beşên din" picker to list only the not-yet-opened sections. */
function renderBesenDinPicker() {
var wrap = $("#wiktku-besendin-picker");
if (!wrap.length) return;
wrap.empty();
var unopened = $.grep(BESENDIN_STEP_IDS, function (sid) { return !openedOtherSections[sid]; });
if (!unopened.length) return; // everything's open — nothing left to pick
var sel = $("<select class='wiktku-besendin-select'></select>");
sel.attr("data-placeholder", "— beşek hilbijêre —");
sel.append($("<option value=''>— beşek hilbijêre —</option>"));
$.each(unopened, function (_, sid) {
var step = steps[sid];
if (!step) return;
sel.append($("<option></option>").val(sid).text(capitalize(step.name)));
});
sel.on("change", function () {
var sid = $(this).val();
if (!sid) return;
openedOtherSections[sid] = true;
renderBesenDinPicker();
refresh();
});
wrap.append(sel);
initSelects(wrap);
}
/** Marks any BESENDIN_STEP_IDS field that already has real content as
* "opened", so restoring a draft doesn't bury filled-in sections behind
* the picker. Reuses each step's own output() as the emptiness check —
* it already knows what "empty" means per field, and it reads the DOM
* the restore just populated. Call this AFTER the DOM has the restored
* values in it. */
function seedOpenedFromContent() {
var values = getValues();
$.each(BESENDIN_STEP_IDS, function (_, sid) {
if (openedOtherSections[sid]) return;
var step = steps[sid];
if (!step || typeof step.output !== "function") return;
try {
if (step.output(values)) openedOtherSections[sid] = true;
} catch (e) { /* a step whose output() needs more state than we have yet — skip it */ }
});
}
function snapshotDfn() {
return steps.dfn.getSenses($("#wiktku-start-dfn"));
}
// Rebuilds the dfn DOM from a previously snapshotted senses array.
function restoreDfn(senses) {
var stepDiv = $("#wiktku-start-dfn");
// Tear down the existing list so build() recreates it cleanly.
stepDiv.find("ol.wiktku-dfn-list").remove();
steps.dfn.build(stepDiv);
var list = stepDiv.find("ol.wiktku-dfn-list");
$.each(senses, function (i, sense) {
// Ensure enough blocks exist (build() seeds one).
var blocks = list.find("li.wiktku-dfn-sense");
var block = blocks.eq(i);
if (!block.length) {
var nb = steps.dfn.buildSenseBlock(stepDiv);
list.append(nb);
block = list.find("li.wiktku-dfn-sense").last();
}
// Template selector.
block.find("select.wiktku-dfn-tpl-select").val(sense.tpl || "");
if (sense.tpl) {
block.find("textarea.wiktku-dfn-mane").hide();
block.find("input.wiktku-dfn-tpl-title").val(sense.tplTitle || "").show();
} else {
block.find("textarea.wiktku-dfn-mane").val(sense.mane || "").show();
block.find("input.wiktku-dfn-tpl-title").hide().val("");
}
// dfnArea is the only thing actually saved, so split it back into
// tercime/îzah for editing (mirrors syncNonKuToMane's join format).
var maneParts = splitTercimeIzah(sense.mane);
block.find(".wiktku-dfn-tercime").val(maneParts ? maneParts.tercime : (sense.mane || ""));
block.find(".wiktku-dfn-izah").val(maneParts ? maneParts.izah : "");
// Re-sync the formên alternatîv/hevmane/… hide state now that
// tplSelect's value was set (its own "change"
// handler doesn't fire from .val(), so this doesn't happen otherwise).
var updateVis = block.data("updateFieldVisibility");
if (updateVis) updateVis();
// Same for the mane-box mode (plain vs tercime+îzah), since this
// also depends on tplSelect's (and lang's) value.
var updateMane = block.data("updateManeMode");
if (updateMane) updateMane();
// Restore a sub-list (etiket, formên alternatîv, hevmane …) from a values array.
function restoreSubList(cls, values) {
if (!values || !values.length) return;
var groupDiv = block.find("." + cls + "-group");
var subList = groupDiv.find("ol, ul").first();
if (!subList.length) return; // group not found
var useModifiers = !!MODIFIER_SUBGROUPS[cls];
// Fill existing items, append new ones as needed.
$.each(values, function (j, val) {
var items = subList.find("li");
if (j < items.length) {
items.eq(j).find("textarea").val(val);
} else {
var ta = $("<textarea></textarea>")
.attr("name", "wiktku-dfn-restore-" + $.now() + "-" + Math.random().toString(36).substr(2, 9))
.attr("rows", 1)
.attr("class", "wiktku-dfn-subfield wiktku-start-narrow")
.val(val);
ta.on("input", function () {
steps.dfn.onSubInput(subList, this, 1, true, useModifiers);
});
subList.append(useModifiers ? makeModifierLi(ta) : $("<li></li>").append(ta));
}
});
}
// Reveal and populate lazy groups that have data.
var lazyMap = {
"wiktku-dfn-etiket": sense.etiket,
"wiktku-dfn-kategori": sense.kategori,
"wiktku-dfn-alternativ": sense.alternativ,
"wiktku-dfn-hevmane": sense.hevmane,
"wiktku-dfn-dijmane": sense.dijmane,
"wiktku-dfn-koordine": sense.koordine,
"wiktku-dfn-jornav": sense.jornav,
"wiktku-dfn-jernav": sense.jernav
};
$.each(lazyMap, function (cls, vals) {
if (vals && vals.length) restoreSubList(cls, vals);
});
// Nimûne items are objects { text, tr?, t? } — restore using the builder.
if (sense.nimune && sense.nimune.length) {
var nimuneGroupDiv = block.find(".wiktku-dfn-nimune-group");
var nimuneList = nimuneGroupDiv.find("ol.wiktku-dfn-nimune-list");
var buildFn = nimuneGroupDiv.data("buildNimuneLi");
nimuneList.empty();
$.each(sense.nimune, function (_, n) {
var text = typeof n === "object" ? (n.text || "") : n;
if (!text) return;
var li = buildFn ? buildFn() : $("<li class='wiktku-dfn-nimune-li'></li>");
li.find(".wiktku-dfn-nimune-text").val(text).each(function () { highlightLinebreak(this); });
if (n.tr) li.find(".wiktku-dfn-nimune-tr").val(n.tr);
if (n.t) li.find(".wiktku-dfn-nimune-t").val(n.t);
nimuneList.append(li);
});
// Always leave a blank trailing item.
if (buildFn) nimuneList.append(buildFn());
}
// Restore jêder entries — accepts current array shape or a legacy
// single object (older saved sections) for backwards compat.
var jederArr = $.isArray(sense.jeder) ? sense.jeder : (sense.jeder ? [sense.jeder] : []);
if (jederArr.length) {
var jederGroupDiv = block.find(".wiktku-dfn-jeder-group");
var jederList = jederGroupDiv.find("ol.wiktku-dfn-jeder-list");
var buildJederFn = jederGroupDiv.data("buildJederLi");
jederList.empty();
$.each(jederArr, function (_, j) {
if (!j || !j.quote) return;
var li = buildJederFn ? buildJederFn() : $("<li class='wiktku-dfn-jeder-li'></li>");
li.find(".wiktku-dfn-nimune-quote").val(j.quote).each(function () { highlightLinebreak(this); });
if (j.quoteTr) li.find(".wiktku-dfn-nimune-quote-tr").val(j.quoteTr);
if (j.quoteT) li.find(".wiktku-dfn-nimune-quote-t").val(j.quoteT);
if (j.jederManual) {
var manualSel = li.find(".wiktku-dfn-quote-src-sel");
manualSel.val("__manual__").trigger("change");
li.find(".wiktku-dfn-quote-src-manual").val(j.jederManual);
} else if (j.jederCatTpl) {
// Legacy format from before the şablon search switched rows to
// manual mode directly — convert it the same way now, so it's
// editable like any other free-form source.
var catSelEl = li.find(".wiktku-dfn-quote-src-sel");
catSelEl.val("__manual__").trigger("change");
li.find(".wiktku-dfn-quote-src-manual").val("{{" + j.jederCatTpl + "}}");
} else if (j.jederTpl) {
var srcSel = li.find(".wiktku-dfn-quote-src-sel");
srcSel.val(j.jederTpl).trigger("change");
if (j.jêderFields) {
$.each(j.jêderFields, function (key, val) {
li.find(".wiktku-dfn-quote-src-input[data-field-key='" + key + "']").val(val);
});
}
}
jederList.append(li);
});
// Always leave a blank trailing item, same as Nimûne.
if (buildJederFn) jederList.append(buildJederFn());
}
});
}
// Snapshots simple (non-dfn) per-section steps from the DOM into obj.
function saveCurrentSection() {
var snap = {};
$.each(PER_SECTION_STEP_IDS, function (_, id) {
if (id === "dfn") {
snap.dfn = snapshotDfn();
return;
}
if (id === "etym") {
snap.etym = $.trim($("#wiktku-start-etym .wiktku-etym-text").val());
return;
}
if (id === "cavkani") {
snap.cavkani = $.trim($("#wiktku-start-cavkani .wiktku-cavkani-text").val());
return;
}
if (id === "posparams") {
snap.posparams = $.trim($("#wiktku-start-posparams .wiktku-posparams-text").val());
return;
}
if (id === "resim") {
// One entry per row, including blank ones, so a mid-edit draft
// (e.g. a filename typed but no caption yet) survives a cache
// restore instead of being silently dropped.
snap.resim = $("#wiktku-start-resim li.wiktku-resim-item").map(function () {
return {
file: $.trim($(this).find(".wiktku-resim-file").val()),
caption: $.trim($(this).find(".wiktku-resim-caption").val()),
alt: $.trim($(this).find(".wiktku-resim-alt").val())
};
}).get();
return;
}
var step = steps[id];
if (!step) return;
var stepDiv = $("#wiktku-start-" + id);
if (id === "trans") {
snap.trans = steps.trans.getTranslations(stepDiv);
return;
}
if (id === "zarava") {
snap.zarava = steps.zarava.getTranslations(stepDiv);
return;
}
if (id === "dunde") {
snap.dunde = steps.dunde.getRows(stepDiv);
return;
}
// Generic: read all step fields.
var fields = stepDiv.find(".wiktku-start-step-field");
if (step.multiple) {
snap[id] = fields.map(function () { return $(this).val(); }).get();
} else {
snap[id] = fields.val();
}
});
// Item 3: which "Beşên din" sub-sections this section has already
// opened via the picker — per-section, like everything else here.
snap.openedOtherSections = $.extend({}, openedOtherSections);
sections[activeSection] = snap;
}
// Restores a previously saved snapshot into the form DOM.
function restoreSection(snap) {
$.each(PER_SECTION_STEP_IDS, function (_, id) {
if (id === "dfn") {
restoreDfn(snap.dfn || []);
return;
}
if (id === "etym") {
$("#wiktku-start-etym .wiktku-etym-wrap").remove();
steps.etym.build($("#wiktku-start-etym"));
$("#wiktku-start-etym .wiktku-etym-text").val(snap.etym || "");
return;
}
if (id === "cavkani") {
$("#wiktku-start-cavkani .wiktku-cavkani-wrap").remove();
steps.cavkani.build($("#wiktku-start-cavkani"));
$("#wiktku-start-cavkani .wiktku-cavkani-text").val(snap.cavkani || "");
return;
}
if (id === "posparams") {
var ppDiv = $("#wiktku-start-posparams");
ppDiv.find(".wiktku-posparams-wrap").remove();
steps.posparams.build(ppDiv);
var savedTa = snap.posparams || "";
ppDiv.find(".wiktku-posparams-text").val(savedTa);
// Re-parse saved textarea to restore helper widget states.
if (savedTa) {
var cMatch = savedTa.match(/\|c=([^|}\s]+)/);
var jMatch = savedTa.match(/\|j=([^|}\s]+)/);
var trMatch = savedTa.match(/\|tr=([^|}\s]+)/);
// Write into the shared hidden field (not the visible
// select, which has no <option>s yet) — syncHelpers()
// below reads it back to restore the dropdown once the
// gender/number options for this language are populated.
if (cMatch) $("#wiktku-start-cinsiyet-field").val(cMatch[1]);
if (jMatch) $("#wiktku-start-jimar-field").val(jMatch[1]);
if (trMatch) ppDiv.find(".wiktku-posparams-field[data-pp-key='tr']").val(trMatch[1]);
// Restore checked optional params. "form" is stored as
// "erê" rather than "1" (see rebuildTa), so it needs its
// own check here.
ppDiv.find(".wiktku-posparams-opt-panel input[type='checkbox']").each(function () {
var key = $(this).val();
var expected = key === "form" ? "erê" : "1";
$(this).prop("checked", savedTa.indexOf("|" + key + "=" + expected) !== -1);
});
}
steps.posparams.syncHelpers(ppDiv);
return;
}
if (id === "resim") {
var resimDiv = $("#wiktku-start-resim");
resimDiv.find(".wiktku-resim-wrap").remove();
steps.resim.build(resimDiv);
// Accept both the new array-of-rows format and the older
// single {file, caption} object saved before multi-image
// support existed.
var resimSnap = snap.resim;
var rows = $.isArray(resimSnap) ? resimSnap : (resimSnap ? [resimSnap] : []);
if (rows.length) {
var list = resimDiv.find("ol.wiktku-resim-list");
list.empty();
$.each(rows, function (_, r) {
var item = steps.resim.buildItem(resimDiv);
item.find(".wiktku-resim-file").val(r.file || "");
item.find(".wiktku-resim-caption").val(r.caption || "");
item.find(".wiktku-resim-alt").val(r.alt || "");
list.append(item);
});
// Always keep a blank trailing row, same as Nimûne/Dûnde.
var lastItem = list.children("li.wiktku-resim-item").last();
if ($.trim(lastItem.find(".wiktku-resim-file").val())) {
list.append(steps.resim.buildItem(resimDiv));
}
}
return;
}
if (id === "trans") {
// Rebuild trans groups (dfn must already be restored by this
// point in the $.each loop, so glossList() reflects it).
var transDiv = $("#wiktku-start-trans");
transDiv.find(".wiktku-trans-group").remove();
steps.trans.build(transDiv);
var groupsSnap = snap.trans || [];
$.each(groupsSnap, function (gi, rows) {
var group = transDiv.find(".wiktku-trans-group[data-gloss-pos='" + gi + "']");
if (!group.length) return; // gloss no longer exists — drop its rows
var list = group.find("ul.wiktku-trans-list");
$.each(rows, function (j, row) {
var lang = row[0], words = row[1];
var lastRow = list.find("li.wiktku-trans-row").last();
lastRow.find("select").val(lang).trigger("change");
var wordList = lastRow.find("ul.wiktku-trans-words");
$.each(words, function (k, word) {
var wordItems = wordList.find("li");
if (k < wordItems.length) {
wordItems.eq(k).find("textarea").val(word);
} else {
// .val() below doesn't fire "input", so the normal
// auto-grow never runs — append a matching item
// ourselves instead of silently dropping the word.
var extraInput = steps.trans.makeWordInput();
wordList.append($("<li></li>").append(extraInput));
extraInput.val(word);
}
});
// Leave one trailing empty field so the row can still grow
// when the user types, matching a freshly-built row.
if ($.trim(wordList.children("li").last().find("textarea").val())) {
wordList.append($("<li></li>").append(steps.trans.makeWordInput()));
}
});
});
return;
}
if (id === "zarava") {
// Rebuild zarava groups (dfn must already be restored by this
// point in the $.each loop, so glossList() reflects it).
var zaravaDiv = $("#wiktku-start-zarava");
zaravaDiv.find(".wiktku-zarava-group").remove();
steps.zarava.build(zaravaDiv);
var zaravaGroupsSnap = snap.zarava || [];
$.each(zaravaGroupsSnap, function (gi, rows) {
var group = zaravaDiv.find(".wiktku-zarava-group[data-gloss-pos='" + gi + "']");
if (!group.length) return; // gloss no longer exists — drop its rows
var list = group.find("ul.wiktku-zarava-list");
$.each(rows, function (j, row) {
var lang = row[0], words = row[1];
var lastRow = list.find("li.wiktku-zarava-row").last();
lastRow.find("select").val(lang).trigger("change");
var wordList = lastRow.find("ul.wiktku-zarava-words");
$.each(words, function (k, word) {
var wordItems = wordList.find("li");
if (k < wordItems.length) {
wordItems.eq(k).find("textarea").val(word);
} else {
var extraInput = steps.zarava.makeWordInput();
wordList.append($("<li></li>").append(extraInput));
extraInput.val(word);
}
});
if ($.trim(wordList.children("li").last().find("textarea").val())) {
wordList.append($("<li></li>").append(steps.zarava.makeWordInput()));
}
});
});
return;
}
if (id === "dunde") {
// Rebuild dunde rows.
var dundeDiv = $("#wiktku-start-dunde");
dundeDiv.find("ul.wiktku-dunde-list").remove();
steps.dunde.build(dundeDiv);
var dundeRows = snap.dunde || [];
$.each(dundeRows, function (i, row) {
var lang = row[0], words = row[1];
var list = dundeDiv.find("ul.wiktku-dunde-list");
var lastRow = list.find("li.wiktku-dunde-row").last();
lastRow.find("select").val(lang).trigger("change");
var wordList = lastRow.find("ul.wiktku-dunde-words");
$.each(words, function (j, word) {
var wordItems = wordList.find("li");
if (j < wordItems.length) {
wordItems.eq(j).find("textarea").val(word);
} else {
// .val() below doesn't fire "input", so the normal
// auto-grow never runs — append a matching item
// ourselves instead of silently dropping the word.
var extraInput = steps.dunde.makeWordInput();
wordList.append($("<li></li>").append(extraInput));
extraInput.val(word);
}
});
// Leave one trailing empty field so the row can still grow
// when the user types, matching a freshly-built row.
if ($.trim(wordList.children("li").last().find("textarea").val())) {
wordList.append($("<li></li>").append(steps.dunde.makeWordInput()));
}
});
return;
}
var step = steps[id];
if (!step) return;
var stepDiv = $("#wiktku-start-" + id);
var fields = stepDiv.find(".wiktku-start-step-field");
var val = snap[id];
if (val === undefined || val === null) return;
if (step.multiple) {
var arr = val;
fields.each(function (i) {
if (i < arr.length) $(this).val(arr[i]);
});
} else {
fields.val(val);
}
// Tell the pickers about the programmatic value change.
fields.filter("select").trigger("wiktku:refresh");
});
// Item 3: restore which "Beşên din" sub-sections were already opened
// for this section, then seed in anything the DOM restore above just
// filled in but that wasn't marked opened yet (e.g. an older cache
// saved before this existed).
openedOtherSections = $.extend({}, snap.openedOtherSections || {});
seedOpenedFromContent();
renderBesenDinPicker();
}
function getWikitextForCurrentSection(callback) {
var values = getValues();
var entry = steps.pos.output(values);
// Bilêvkirin now nests under the POS section (Ghybu, 14 Tebax 2026)
// instead of printing once, shared, above every POS section — see
// steps.pron.output's own comment for the header-level change this
// pairs with. steps.pron.output() reads the shared #wiktku-start-pron
// textarea directly (not the "values" arg), and that field isn't
// per-section, so calling it once per section prints the same text
// under each POS — the intended effect of nesting it "under Cureyê
// peyvê" rather than once under Ziman.
entry += steps.pron.output(values);
steps.dfn.getOutput(values, function (output) {
entry += output;
entry += steps.tewandin.output(values);
entry += steps.bikaranin.output(values);
entry += steps.alfabeyendin.output(values);
entry += steps.formalt.output(values);
entry += steps.hevmane.output(values);
entry += steps.dijmane.output(values);
entry += steps.jornav.output(values);
entry += steps.jernav.output(values);
entry += steps.je.output(values);
entry += steps.tekildar.output(values);
entry += steps.etym.output(values);
entry += steps.dunde.output(values);
entry += steps.binereherwiha.output(values);
entry += steps.zarava.output(values);
entry += steps.trans.output(values);
entry += steps.cavkani.output(values);
entry += steps.xwendin.output(values);
callback(entry, values);
});
}
function getWikitextAllSections(callback) {
saveCurrentSection();
var results = new Array(sections.length);
var sharedValues = getValues(); // lang/pron are shared
function processSection(i) {
if (i >= sections.length) {
// All done — restore original active section.
restoreSection(sections[activeSection]);
refresh();
callback(results, sharedValues);
return;
}
restoreSection(sections[i]);
refresh();
getWikitextForCurrentSection(function (sectionText) {
results[i] = sectionText;
processSection(i + 1);
});
}
processSection(0);
}
// Assembles wikitext for all sections plus the shared lang header.
// pron used to be prepended here too (shared, above every section) —
// it now nests inside each section instead, via getWikitextForCurrentSection.
function getWikitext(callback) {
getWikitextAllSections(function (sectionTexts, sharedValues) {
var bnrh = steps.bnrh.output(sharedValues);
var entry = steps.lang.output(sharedValues);
entry += sectionTexts.join("\n");
// bnr-h goes before the language section — only prepended when
// generating fresh wikitext (not addLangMode, which handles it separately).
if (!addLangMode && bnrh) entry = bnrh + entry;
// Edit summary uses section 0's values. Read from the saved snapshot
// (not the live DOM) so it doesn't mix section 0's pos with whichever
// section happens to be active/restored at this point.
var dfnSenses = (sections[0] && sections[0].dfn) || [];
var dfnSummary = dfnSenses.map(function (s) {
if (s.mane) return s.mane;
// Template sense (e.g. {{guharto|ku|somepage}}) — same
// construction as the tplCall built in getOutput, so the
// summary shows what actually gets written to the entry
// instead of going blank.
if (s.tpl && s.tplTitle) {
return s.tplNoLang
? "{{" + s.tpl + "|" + s.tplTitle + "}}"
: "{{" + s.tpl + "|" + sharedValues.lang + "|" + s.tplTitle + "}}";
}
return "";
}).filter(Boolean).join("; ");
var summary = "([[Mediawiki:Gadget-start.js|WF:NÛ]] v.2.0) +" +
sharedValues.lang + ":" + sections[0].pos + ":" + dfnSummary;
var summaryField = document.getElementById("wpSummary");
if (addLangMode && summaryField.value) {
summary = summaryField.value + " " + summary;
}
summaryField.value = summary;
callback(entry);
});
}
var continueBtn;
// Item 7: whether Mane/Bi zaravayên din/Werger has anything in it —
// kept outside refresh() so the click handler (defined separately,
// where continueBtn is built) can read the latest value.
var wiktkuContentGateOk = true;
function getValuesForStep(stepId) {
var fields = $("#wiktku-start-" + stepId + " .wiktku-start-step-field");
var step = steps[stepId];
if (step.keys) {
var values = {};
fields.each(function (i, field) {
var key = $(field).prevAll(".wiktku-start-step-keyfield").val();
if (key) values[key] = $(field).val();
});
return values;
}
else if (step.multiple) {
return fields.map(function () {
return $(this).val();
}).get();
}
return fields.val();
}
function getValues() {
var values = {};
$.each(steps, function (stepId) {
values[stepId] = getValuesForStep(stepId);
});
return values;
}
function populateMenus(inputs, choices, disabledValues, placeholderText) {
if (!disabledValues) disabledValues = {};
var vals = inputs.map(function (i, input) {
return $(input).val();
});
inputs.empty();
inputs.append($("<option></option>").text(placeholderText || ""));
$.each(choices, function (j, choice) {
// Append the language code in parentheses so that typing a code
// (e.g. "ku") in the search box still finds the language name.
var displayText = capitalize(choice.label);
if (choice.sortKey !== undefined) {
// This is a language choice {code, label, sortKey} — show code.
displayText = capitalize(choice.label) + " (" + choice.code + ")";
}
var option = $(mw.html.element("option", {
value: choice.code }, displayText));
if (disabledValues[choice.code]) option.prop("disabled", true);
inputs.append(option);
});
inputs.val(function (i) {
return vals[i];
});
}
// Keys to disable for a key menu: already-taken or explicitly disabled.
function getDisabledKeys(step) {
var occupiedKeys = {};
$("#wiktku-start-" + step.id + " .wiktku-start-step-keyfield").each(function () {
occupiedKeys[$(this).val()] = true;
});
if (step.disabledKeys) $.extend(occupiedKeys, step.disabledKeys);
return occupiedKeys;
}
function buildKeyInput(step) {
if (!step.keys) return undefined;
var input = $(mw.html.element("select", {
"class": "wiktku-start-step-keyfield wiktku-start-narrow" }));
input.attr("data-placeholder", "Hilbijêre " + step.keyName);
populateMenus(input, step.keys, getDisabledKeys(step));
// Keep the key menus mutually exclusive: whatever one row selects is
// disabled in every other row. Recomputed from the DOM on each change.
input.on("change", function () {
var all = $("#wiktku-start-" + step.id + " .wiktku-start-step-keyfield");
var taken = {};
all.each(function () {
var v = $(this).val();
if (v) taken[v] = true;
});
all.not(this).each(function () {
var self = $(this), own = self.val();
self.find("option").each(function () {
var code = $(this).val();
if (code) $(this).prop("disabled", !!taken[code] && code !== own);
});
self.trigger("wiktku:refresh");
});
});
// Return the wrapper; the select lives inside it and still fires change.
return wrapNativeSelect(input);
}
// Adds another text field to the list if the last one now has text.
function refreshForTextField(currentInput, step) {
currentInput = $(currentInput);
var value = currentInput.val();
var item = currentInput.parent();
if (value && !item.next("li").length) {
var nextInput = $("<textarea></textarea>")
.attr("name", "wiktku-field-" + $.now() + "-" + Math.random().toString(36).substr(2, 9))
.attr("class", currentInput.attr("class"))
.attr("rows", currentInput.attr("rows") || 1);
if (step.placeholder) {
nextInput.attr("placeholder", typeof step.placeholder === "function" ? step.placeholder() : step.placeholder);
}
nextInput.on("input", function (evt) {
refreshForTextField(evt.target, step);
});
var nextKeyInput = buildKeyInput(step);
var nextItem = step.modifiers
? makeModifierLi(nextInput).prepend(nextKeyInput || "")
: $("<li></li>").append(nextKeyInput).append(nextInput);
item.parent().append(nextItem);
if (nextKeyInput) initSelects(nextItem);
}
var canContinue = !continueBtn.isDisabled();
if ((value && !canContinue) || (!value && canContinue)) {
refresh(step);
}
}
function prepareInput(input, step) {
if (!input) return;
if (step.required) input.prop('required', true);
input.change(step, refresh);
}
// Shows/hides steps based on whether their prerequisites are met, and
// updates placeholders where applicable.
function refresh(evt) {
var values = getValues();
var changedStep = evt && evt.data;
var canContinue = true;
// Re-filter template options in every sense block whenever lang changes.
$("#wiktku-start-dfn .wiktku-dfn-tpl-select").each(function () {
var fn = $(this).data("updateOptions");
if (typeof fn === "function") fn();
});
// Re-filter pronunciation and etymology template dropdowns when language changes.
steps.pron.refreshTplSelect();
steps.etym.refreshTplSelect();
steps.cavkani.refreshTplSelect();
// Re-render any step's question label that depends on current values
// (e.g. dfn's Werger-section reminder, which only applies to ku).
$.each(steps, function (stepId, step) {
if (typeof step.question_fmt === "function") {
$("#wiktku-start-" + stepId + " .wiktku-start-step-question")
.text(step.question_fmt(values));
}
});
// Sync every sense block's mane-box mode (plain mane vs tercime+îzah)
// to the current language, in case lang changes after blocks exist.
$("#wiktku-start-dfn li.wiktku-dfn-sense").each(function () {
var updateMane = $(this).data("updateManeMode");
if (updateMane) updateMane();
});
// Sync tr/t sub-fields in every nimûne item to the current language.
// tr shown when language needs transliteration; t shown when lang !== "ku".
(function () {
var lang = values.lang || "";
var showTr = needsTransliteration(lang);
var showT = lang && lang !== "ku";
$("#wiktku-start-dfn .wiktku-dfn-nimune-list li.wiktku-dfn-nimune-li").each(function () {
var li = $(this);
// Ensure the sub-wrapper exists when we need it.
var subWrap = li.find(".wiktku-dfn-nimune-sub");
// tr field
var trTa = li.find(".wiktku-dfn-nimune-tr");
if (showTr && !trTa.length) {
if (!subWrap.length) {
subWrap = $("<div></div>").addClass("wiktku-dfn-nimune-sub");
li.append(subWrap);
}
trTa = $("<textarea></textarea>")
.attr("name", "wiktku-dfn-nimune-tr-" + $.now() + "-" + Math.random().toString(36).substr(2, 9))
.attr("rows", 5)
.attr("class", "wiktku-dfn-subfield wiktku-dfn-nimune-tr")
.attr("placeholder", "Transliterasyon…");
subWrap.prepend(trTa);
} else if (!showTr && trTa.length) {
trTa.remove();
}
// t field
var tTa = li.find(".wiktku-dfn-nimune-t");
if (showT && !tTa.length) {
if (!subWrap.length) {
subWrap = $("<div></div>").addClass("wiktku-dfn-nimune-sub");
li.append(subWrap);
}
tTa = $("<textarea></textarea>")
.attr("name", "wiktku-dfn-nimune-t-" + $.now() + "-" + Math.random().toString(36).substr(2, 9))
.attr("rows", 5)
.attr("class", "wiktku-dfn-subfield wiktku-dfn-nimune-t")
.attr("placeholder", "Tercimeya nimûneyê bi kurmancî…");
subWrap.append(tTa);
} else if (!showT && tTa.length) {
tTa.remove();
}
// Remove the wrapper if it ended up empty.
subWrap = li.find(".wiktku-dfn-nimune-sub");
if (subWrap.length && !subWrap.children().length) subWrap.remove();
});
}());
// Re-sync the "<label> bi <ziman>…" placeholder on every always-visible
// sub-field list (etîket, kategorî, hevmane, …), since the language may
// not have been chosen yet when these lists were first built, or may
// have changed since.
$("#wiktku-start-dfn .wiktku-dfn-sublist").each(function () {
var upd = $(this).data("updatePlaceholders");
if (typeof upd === "function") upd();
});
// Same idea for word-list steps (jê, têkildar, binêre herwiha, …)
// whose placeholder is a function of the current language.
$.each(steps, function (stepId, step) {
if (typeof step.placeholder === "function") {
$("#wiktku-start-" + stepId + " textarea.wiktku-start-step-field")
.attr("placeholder", step.placeholder());
}
});
// Sync tr/t sub-fields in every jêder citation to the current language.
// tr shown when language needs transliteration; t shown when lang !== "ku".
(function () {
var lang = values.lang || "";
var showTr = needsTransliteration(lang);
var showT = lang && lang !== "ku";
$("#wiktku-start-dfn .wiktku-dfn-jeder-list li.wiktku-dfn-jeder-li").each(function () {
var li = $(this);
// Ensure the sub-wrapper exists when we need it. It must sit right
// after the quote textarea and before the source selector.
var subWrap = li.find(".wiktku-dfn-quote-sub");
// tr field
var trTa = li.find(".wiktku-dfn-nimune-quote-tr");
if (showTr && !trTa.length) {
if (!subWrap.length) {
subWrap = $("<div></div>").addClass("wiktku-dfn-quote-sub");
// Insert after the quote textarea's resize-wrap (if the manual
// resize handle has already been attached to it), not after the
// bare textarea -- otherwise this lands *inside* that wrap,
// between the textarea and its own grip, breaking jêgirtin's
// handle and nesting the tr/t boxes inside it.
var quoteTa = li.find(".wiktku-dfn-nimune-quote");
var quoteResizeWrap = quoteTa.closest(".wiktku-resize-wrap");
(quoteResizeWrap.length ? quoteResizeWrap : quoteTa).after(subWrap);
}
trTa = $("<textarea></textarea>")
.attr("name", "wiktku-dfn-nimune-quote-tr-" + $.now() + "-" + Math.random().toString(36).substr(2, 9))
.attr("rows", 2)
.attr("class", "wiktku-dfn-subfield wiktku-dfn-nimune-quote-tr")
.attr("placeholder", "Transliterasyona jêgirtinê…");
subWrap.prepend(trTa);
} else if (!showTr && trTa.length) {
trTa.remove();
}
// t field
var tTa = li.find(".wiktku-dfn-nimune-quote-t");
if (showT && !tTa.length) {
if (!subWrap.length) {
subWrap = $("<div></div>").addClass("wiktku-dfn-quote-sub");
// See the tr-field branch above for why this targets the
// resize-wrap instead of the bare textarea.
var quoteTa2 = li.find(".wiktku-dfn-nimune-quote");
var quoteResizeWrap2 = quoteTa2.closest(".wiktku-resize-wrap");
(quoteResizeWrap2.length ? quoteResizeWrap2 : quoteTa2).after(subWrap);
}
tTa = $("<textarea></textarea>")
.attr("name", "wiktku-dfn-nimune-quote-t-" + $.now() + "-" + Math.random().toString(36).substr(2, 9))
.attr("rows", 2)
.attr("class", "wiktku-dfn-subfield wiktku-dfn-nimune-quote-t")
.attr("placeholder", "Tercimeya jêgirtinê bi kurmancî…");
subWrap.append(tTa);
} else if (!showT && tTa.length) {
tTa.remove();
}
// Remove the wrapper if it ended up empty.
subWrap = li.find(".wiktku-dfn-quote-sub");
if (subWrap.length && !subWrap.children().length) subWrap.remove();
});
}());
$.each(steps, function (stepId, step) {
var groupIdx = stepIdToGroup[stepId];
var hiddenByTab = (groupIdx !== undefined && groupIdx !== activeGroup) ||
// Beşên din picker (point 3): stays hidden even while its tab
// is active until explicitly opened from the dropdown.
(BESENDIN_SET[stepId] && !openedOtherSections[stepId]);
if (hiddenByTab || (typeof(step.visible) === "function" && !step.visible(values))) {
$("#wiktku-start-" + stepId).hide();
}
else {
var stepDiv = $("#wiktku-start-" + stepId);
if (changedStep !== step && typeof(step.build) === "function") {
prepareInput(step.build(stepDiv, values), step);
}
// After build, sync the posparams helper widgets whenever pos or lang changes.
if (step.id === "posparams" && typeof step.syncHelpers === "function") {
step.syncHelpers(stepDiv);
}
var input = stepDiv.find(".wiktku-start-step-field");
if (typeof(step.example) === "function") {
// .find() above already reaches nested fields (e.g. the dfn
// step's mane textareas inside each sense block), so one
// assignment covers every step; dfn keeps its own fallback.
var exampleText = step.example(values) || (step.id === "dfn" ? "Mane…" : "");
input.attr("placeholder", exampleText);
}
stepDiv.slideDown();
}
if (step.required &&
(values[stepId] === "" ||
(step.multiple && values[stepId].join("") === ""))) {
canContinue = false;
}
});
$("#wiktku-group-tabs").toggle(!!values.pos);
$("#wiktku-besendin-picker").toggle(activeGroup === BESENDIN_GROUP_IDX);
updateGroupTabIndicators(values);
continueBtn.setDisabled(!canContinue);
// Soft gate (item 7): stays a real, clickable OOUI button — a hard
// setDisabled(true) here would swallow the click entirely, and then
// there'd be no way to tell the person *why* nothing happened. The
// CSS-only "looks disabled" class lets the click handler still run
// and show wiktkuNotify's explanation.
wiktkuContentGateOk = !canContinue || hasMinRequiredContent(values);
continueBtn.$element.toggleClass("wiktku-btn-soft-disabled", !wiktkuContentGateOk);
}
function destroy() {
if (autosaveDebounceTimer) clearTimeout(autosaveDebounceTimer);
if (autosaveInterval) clearInterval(autosaveInterval);
formDirty = false;
$(window).off("beforeunload.wiktkuUnsaved");
$("#wiktku-start-form, .noafterwizard").slideUp(function () {
$(this).remove();
});
$(".noarticletext .nowizard").slideDown();
// #editform was kept laid-out but off-screen (see build()) instead of
// display:none, precisely so the editor never had to size itself
// against a zero-width/height box. Just bring it back on-screen —
// no slideDown needed since it was never actually collapsed.
$("#editform").removeClass("wiktku-offscreen");
// Belt-and-braces: if WikiEditor/CodeMirror/mobile's auto-grow still
// cached a stale size from some earlier point, nudge them to
// recalculate now that the box is genuinely visible.
$(window).trigger("resize");
if (window.CodeMirror) {
var cm = $("#wpTextbox1").data("CodeMirror") || $("#wpTextbox1").data("cmInstance");
if (cm && typeof cm.refresh === "function") cm.refresh();
}
$("#ca-edit").removeClass("selected");
$("#ca-wiktku-nowizard").addClass("selected");
}
// Priority order for Kurdish dialects and navz.
// Codes listed here come before all other languages; unlisted codes
// are sorted alphabetically by their display name via localeCompare.
var LANG_PRIORITY = ["navz", "ku", "hac", "sdh", "lki", "ckb", "zza"];
// Inserts a new "== {{ziman|code}} ==" section at the correct sorted
// position: navz, then ku/hac/sdh/lki/ckb/zza, then alphabetical by name.
function insertNewLangSection(existing, wikitext) {
var newCodeMatch = wikitext.match(new RegExp("^" + langHeaderSource("[^}]+")));
var newCode = newCodeMatch ? newCodeMatch[1] : "";
var sections = [];
var preamble = "";
var anyHeaderSrc = langHeaderSource("[^}]+");
var firstMatch = new RegExp("^" + anyHeaderSrc, "m").exec(existing);
if (!firstMatch) {
// No existing lang sections — just write the new section.
// Add \n\n only when there is real non-whitespace content above.
var trimmed = existing.replace(/\s+$/, "");
return trimmed ? trimmed + "\n\n" + wikitext : wikitext;
}
// Everything before the first == {{ziman|...}} == is the preamble.
var firstSectionStart = firstMatch.index;
// Walk back to the start of that line.
var lineStart = existing.lastIndexOf("\n", firstSectionStart - 1);
var preambleEnd = lineStart !== -1 ? lineStart + 1 : 0;
preamble = existing.slice(0, preambleEnd);
// Parse each language section: header line + everything until the next header.
var body = existing.slice(preambleEnd);
// (?![\s\S]) matches only true end-of-string, since a bare "$" with
// /m would stop at the section's first line break instead.
var langSectionRe = new RegExp(
"^(" + anyHeaderSrc + "\\n?)([\\s\\S]*?)(?=\\n" + anyHeaderSrc + "|(?![\\s\\S]))",
"gm"
);
var m;
while ((m = langSectionRe.exec(body)) !== null) {
sections.push({
code: m[2],
content: m[0] // full text of this section including header
});
}
// Determine sort rank: priority list first (by index), then alphabetical.
function getLangName(code) {
var entry = langsByCode[code];
return entry ? entry.label : code;
}
function sortRank(code) {
var idx = LANG_PRIORITY.indexOf(code);
return idx !== -1 ? idx : LANG_PRIORITY.length;
}
function compareLangs(a, b) {
var ra = sortRank(a), rb = sortRank(b);
if (ra !== rb) return ra - rb;
// Both are outside priority list — sort by display name.
return getLangName(a).localeCompare(getLangName(b), userLang);
}
// Insert the new section into the sorted list.
var newSection = { code: newCode, content: wikitext };
var inserted = false;
for (var i = 0; i < sections.length; i++) {
if (compareLangs(newCode, sections[i].code) < 0) {
sections.splice(i, 0, newSection);
inserted = true;
break;
}
}
if (!inserted) sections.push(newSection);
// Re-join: preamble + sections, each separated by exactly \n\n.
// Trim trailing whitespace off each section's content first so we
// control the spacing precisely.
var joined = sections.map(function (s) {
return s.content.replace(/\s+$/, "");
}).join("\n\n");
// Only add a separator after the preamble when it has real content.
var preambleTrimmed = preamble.replace(/\s+$/, "");
var prefix = preambleTrimmed ? preambleTrimmed + "\n\n" : "";
return prefix + joined + "\n";
}
function build() {
$(".nowizard, .nowizard .noafterwizard").hide();
var callToAction = $("#wiktku-calltoaction");
var origCallToActionText = callToAction.text();
$(mw.util.addPortletLink("p-views", "#", "Edîtora çavkaniyê veke",
"ca-wiktku-nowizard", "Vê rûpelê bi edîtora çavkaniyê çêke",
undefined, "#ca-watch")).click(function (evt) {
evt.preventDefault();
callToAction.text(origCallToActionText);
destroy();
});
if (callToAction.length) {
callToAction.text(origCallToActionText +
" Forma li jêr ji bo çêkirina madeyeke nû bi kar bîne.");
}
var startForm = $("<form id='wiktku-start-form'></form>");
var clearPageCheck = null;
if (addLangMode) {
startForm.append($("<p class='wiktku-addlang-notice'></p>").html(
"Bi vê formê tu yê zimanekî nû li rûpelê îlawe bikî. Eger ev ziman jixwe hebe, beşa nû li dawiya vî zimanî dê were îlawekirin. " +
"Ji kerema xwe netîceya dawî kontrol bike, eger problemek derkeve, li <a href='" +
mw.util.getUrl('Mediawiki talk:Gadget-start.js') +
"'>nîqaşa vê amûrê</a> problemê ragihîne."
));
clearPageCheck = $("<input type='checkbox' id='wiktku-clear-page-check'>");
var clearPageLabel = $("<label for='wiktku-clear-page-check'></label>")
.text(" Muhtewaya rûpelê paqij bike (her tiştî jê bibe û rûpelê ji nû ve binivîse)");
startForm.append(
$("<p class='wiktku-addlang-notice'></p>")
.append(clearPageCheck)
.append(clearPageLabel)
);
// Re-evaluate step visibility (e.g. the pron step) whenever this
// is toggled, since it changes what counts as "existing content".
clearPageCheck.on("change", function () {
refresh();
});
}
var spinner;
// Tab bar for switching between POS sections.
var sectionTabsDiv = $("<div id='wiktku-section-tabs'></div>");
// Tab bar for switching between step-groups (topics) within a section.
// renderGroupTabs()/updateGroupTabIndicators() (which populate and
// maintain it) live outside build() — see near "var activeSection".
var groupTabsDiv = $("<div id='wiktku-group-tabs'></div>");
// Wikihez, 14 Tebax 2026 (item 3): "Beşên din" picker — sits right under
// the group tab bar, only shown while that tab is active (toggled in
// refresh(), see BESENDIN_GROUP_IDX); renderBesenDinPicker() fills it.
var besenDinPickerDiv = $("<div id='wiktku-besendin-picker' class='wiktku-besendin-picker'></div>");
startForm.submit(function (evt) {
evt.preventDefault();
continueBtn.setDisabled(true);
continueBtn.$element.addClass("wiktku-btn-sending");
spinner.show();
getWikitext(function (wikitext) {
if (addLangMode && clearPageCheck && clearPageCheck.prop("checked")) {
// User asked to wipe the page — write fresh content.
$("#wpTextbox1").val(wikitext);
} else if (addLangMode) {
var textbox = $("#wpTextbox1");
var existing = textbox.val() || "";
// ── bnr-h merge ──────────────────────────────────────────
// If the user filled bnr-h inputs, either merge into the
// existing {{bnr-h|…}} call or prepend a new one.
var bnrhOut = steps.bnrh.output(getValues());
if (bnrhOut) {
var newPages = bnrhOut.replace(/^\{\{bnr-h\|/, "").replace(/\}\}\n?$/, "").split("|");
var bnrhRe = /\{\{bnr-h\|([^}]*)\}\}/i;
if (bnrhRe.test(existing)) {
existing = existing.replace(bnrhRe, function (_, inner) {
var existingPages = inner.split("|").map(function (p) { return p.trim(); });
$.each(newPages, function (_, p) {
p = p.trim();
if (p && existingPages.indexOf(p) === -1) existingPages.push(p);
});
return "{{bnr-h|" + existingPages.join("|") + "}}";
});
} else {
existing = bnrhOut + existing;
}
}
// If this language's section already exists (whitespace
// differences aside), merge into it; otherwise insert new.
var langHeaderMatch = wikitext.match(new RegExp("^(" + langHeaderSource("[^}]+") + "\\n)"));
if (langHeaderMatch) {
var langHeader = langHeaderMatch[1]; // e.g. "== {{ziman|ku}} ==\n"
var newCode = langHeaderMatch[2];
var existingHeader = findLangHeader(existing, newCode);
if (existingHeader) {
// Strip the header from the new output.
var newContent = wikitext.slice(langHeader.length);
// Find the insertion point: end of the existing lang section.
// A new L2 heading marks the start of the next language block.
var searchFrom = existingHeader.index + existingHeader.match.length;
// Find the next == … == heading after this section's start.
var nextL2 = existing.indexOf("\n== ", searchFrom);
var insertAt = nextL2 !== -1 ? nextL2 : existing.length;
// Ensure there's a blank line before the inserted block.
var before = existing.slice(0, insertAt);
var after = existing.slice(insertAt);
var sep = /\n\s*$/.test(before) ? "" : "\n";
textbox.val(before + sep + newContent + after);
} else {
// New language — insert at the correct sorted position.
textbox.val(insertNewLangSection(existing, wikitext));
}
} else {
// Unexpected format — insert at sorted position anyway.
textbox.val(insertNewLangSection(existing, wikitext));
}
} else {
$("#wpTextbox1").val(wikitext);
}
$("html, body").animate({scrollTop: 0});
callToAction.text("Hindik ma!");
destroy();
});
});
// Tracks whether groupTabsDiv has been inserted yet — see the
// step.id-driven check below, replaced because it silently broke
// when bnrh/resim/pron moved ahead of "dfn" in ordered_steps.
var groupTabsInserted = false;
$.each(ordered_steps, function (i, step) {
var stepDiv = $(mw.html.element("div", {
"class": "wiktku-start-step",
id: "wiktku-start-" + step.id }));
var name = capitalize(step.name);
var nameH3 = $("<h3></h3>").addClass("wiktku-start-step-name");
var nameLabel = $("<label></label>")
.attr("for", "wiktku-start-" + step.id + "-field")
.text(name);
nameH3.append(nameLabel);
stepDiv.append(nameH3);
if (step.question_fmt) {
// question_fmt can be a plain string, or a function of the
// current values (used by steps whose question text depends
// on e.g. the chosen language) — refresh() keeps it in sync
// afterwards via the .wiktku-start-step-question class.
var questionText = typeof step.question_fmt === "function"
? step.question_fmt(getValues())
: step.question_fmt;
stepDiv.append($(mw.html.element("label", {
"class": "wiktku-start-step-question",
"for": "wiktku-start-" + step.id + "-field" }, questionText)));
if (step.question_br) stepDiv.append($("<br>"));
}
var input;
if (step.choices) {
input = $(mw.html.element("select", {
"class": "wiktku-start-step-field",
id: "wiktku-start-" + step.id + "-field" }));
input.attr("data-placeholder",
capitalize(step.name) + " hilbijêre ");
populateMenus(input, step.choices);
if (step.multiple) input.attr("multiple", true);
// initSelects() runs over the whole form once it is in the DOM.
stepDiv.append(input);
} else if (typeof(step.build) === "function") {
input = step.build(stepDiv);
} else {
input = $("<textarea></textarea>")
.attr("class", "wiktku-start-step-field")
.attr("id", "wiktku-start-" + step.id + "-field")
.attr("rows", step.rows || 2);
if (step.narrow) input.addClass("wiktku-start-narrow");
if (step.placeholder) {
input.attr("placeholder", typeof step.placeholder === "function" ? step.placeholder() : step.placeholder);
}
if (step.multiple) {
input.on("input", function (evt) {
refreshForTextField(evt.target, step);
});
var keyInput = buildKeyInput(step);
var list = $(step.ordered ? "<ol></ol>" : "<ul></ul>")
.append(step.modifiers
? makeModifierLi(input)
: $("<li></li>").append(keyInput).append(input));
stepDiv.append(list);
}
else stepDiv.append(input);
}
prepareInput(input, step);
stepDiv.hide();
// Section tabs (switch between POS sections) sit above the
// per-section fields, starting at "pos".
if (step.id === "pos") {
startForm.append(sectionTabsDiv);
}
// Step-group tabs sit just before the first grouped step in
// ordered_steps — whichever one that is. This USED to be a
// hardcoded "dfn" check, back when dfn was the first grouped
// step. Once bnrh/resim/pron moved into STEP_GROUPS too (and
// earlier in ordered_steps than dfn, so they render near
// pos/posparams), that check stopped matching anything: dfn was
// no longer first, so groupTabsDiv never got appended at all,
// and every grouped step's div — bnrh/resim/pron included — sat
// there with no tab bar above it to reveal them. Deriving the
// insertion point from stepIdToGroup instead means this keeps
// working no matter how STEP_GROUPS/ordered_steps get reordered
// later.
if (!groupTabsInserted && stepIdToGroup[step.id] !== undefined) {
startForm.append(groupTabsDiv);
startForm.append(besenDinPickerDiv);
groupTabsInserted = true;
}
startForm.append(stepDiv);
});
// ── Section tab helpers ──────────────────────────────────────────────
// ── Add-section button — lives in the tab bar, disabled until pos chosen ──
var addSectionBtn = new OO.ui.ButtonWidget({
label: "+ Beş zêde bike",
disabled: true
});
addSectionBtn.on("click", function () {
saveCurrentSection();
sections.push({});
activeSection = sections.length - 1;
$.each(PER_SECTION_STEP_IDS, function (_, id) {
if (id === "dfn") {
var stepDiv = $("#wiktku-start-dfn");
stepDiv.find("ol.wiktku-dfn-list").remove();
steps.dfn.build(stepDiv);
return;
}
if (id === "etym") {
$("#wiktku-start-etym .wiktku-etym-wrap").remove();
steps.etym.build($("#wiktku-start-etym"));
return;
}
if (id === "cavkani") {
$("#wiktku-start-cavkani .wiktku-cavkani-wrap").remove();
steps.cavkani.build($("#wiktku-start-cavkani"));
return;
}
if (id === "posparams") {
var ppDiv = $("#wiktku-start-posparams");
ppDiv.find(".wiktku-posparams-wrap").remove();
return;
}
if (id === "resim") {
$("#wiktku-start-resim .wiktku-resim-wrap").remove();
return;
}
if (id === "trans") {
var transDiv = $("#wiktku-start-trans");
transDiv.find(".wiktku-trans-group").remove();
return;
}
if (id === "zarava") {
var zaravaDiv = $("#wiktku-start-zarava");
zaravaDiv.find(".wiktku-zarava-group").remove();
return;
}
if (id === "dunde") {
var dundeDiv = $("#wiktku-start-dunde");
dundeDiv.find("ul.wiktku-dunde-list").remove();
return;
}
var stepDiv = $("#wiktku-start-" + id);
stepDiv.find(".wiktku-start-step-field").val("");
stepDiv.find("select.wiktku-start-step-field").trigger("wiktku:refresh");
});
// Fresh section — no "Beşên din" sub-section has been opened yet.
openedOtherSections = {};
renderBesenDinPicker();
renderSectionTabs();
refresh();
});
/** Re-render the tab bar to reflect current sections[] and activeSection. */
function renderSectionTabs() {
// Detach (not remove) the button first: .empty() strips bound
// event data from any children left inside it, which would
// silently kill addSectionBtn's click handler on every re-render.
addSectionBtn.$element.detach();
sectionTabsDiv.empty();
var lang = getValues().lang || "";
if (!lang) {
sectionTabsDiv.hide();
return;
}
sectionTabsDiv.show();
$.each(sections, function (i) {
var posVal = sections[i].pos || "";
var tabLabel = posVal ? capitalize(posVal) : ("Beş " + (i + 1));
var tab = $("<span></span>")
.addClass("wiktku-section-tab")
.text(tabLabel)
.toggleClass("wiktku-tab-active", i === activeSection);
(function (idx) {
tab.on("click", function () {
if (idx === activeSection) return;
saveCurrentSection();
activeSection = idx;
restoreSection(sections[activeSection]);
refresh();
renderSectionTabs();
});
}(i));
sectionTabsDiv.append(tab);
});
// Enable "Beş zêde bike" only when the active section has a pos chosen.
var activePos = sections[activeSection] && sections[activeSection].pos
? sections[activeSection].pos
: getValues().pos;
addSectionBtn.setDisabled(!activePos);
sectionTabsDiv.append(addSectionBtn.$element);
}
renderSectionTabs();
/**
* Re-populates a dynamically-growing "multiple" field list (bnrh, je,
* tekildar, …) from a saved array of strings. Sets each value via
* .val() + a triggered "input" event rather than touching the DOM
* structure directly, so the normal refreshForTextField() growth
* logic adds exactly as many rows as needed — the same thing that
* happens when a person types into the last (empty) row.
*/
function restoreMultiField(id, values) {
var container = $("#wiktku-start-" + id);
$.each(values || [], function (i, v) {
var field = container.find(".wiktku-start-step-field").eq(i);
if (!field.length || !v) return;
field.val(v).trigger("input");
});
}
/**
* Restores a full cached draft: shared lang/pron/bnrh fields, then
* every section (via the same restoreSection()/refresh()/
* renderSectionTabs() sequence already used when switching tabs).
* @param cached {{lang: string, pron: string, bnrh: Array, sections: Array, activeSection: number}}
*/
function restoreFromCache(cached) {
if (cached.lang) {
$("#wiktku-start-lang-field").val(cached.lang);
$("#wiktku-start-lang-field").trigger("wiktku:refresh");
}
// Rebuild dependent steps (pos, pron wrap, etc.) now that lang is set.
refresh();
if (cached.pron !== undefined) {
$("#wiktku-start-pron .wiktku-pron-text").val(cached.pron);
}
if (cached.bnrh) {
restoreMultiField("bnrh", cached.bnrh);
}
sections = (cached.sections && cached.sections.length) ? cached.sections : [{}];
activeSection = (typeof cached.activeSection === "number" &&
cached.activeSection >= 0 && cached.activeSection < sections.length)
? cached.activeSection : 0;
restoreSection(sections[activeSection]);
refresh();
renderSectionTabs();
updateLastSavedIndicator(cached.savedAt || null);
formDirty = false;
wiktkuNotify("Danûstandina berê ya qeydkirî ji cache hate barkirin.",
{ type: "info", tag: "wiktku-cache-restore" });
}
// Update the active tab's label whenever pos changes.
startForm.on("change", "#wiktku-start-pos-field", function () {
renderSectionTabs();
// A new cureyê rêzimanî means any previously chosen cinsiyet/
// cureyê lêkerê no longer applies — clear both selections (and
// the shared hidden cinsiyet field, since rebuildTa()/syncHelpers()
// fall back to it) before wiping the textarea, so nothing stale
// gets carried over into the rebuilt template.
var ppDiv = $("#wiktku-start-posparams");
ppDiv.find(".wiktku-posparams-cinsiyet-sel").val("");
ppDiv.find(".wiktku-posparams-jimar-sel").val("");
ppDiv.find(".wiktku-posparams-lektur-sel").prop("selectedIndex", 0);
$("#wiktku-start-cinsiyet-field").val("");
$("#wiktku-start-jimar-field").val("");
ppDiv.find(".wiktku-posparams-text").val("");
// refresh() runs steps.posparams.syncHelpers(), which toggles the
// param rows for the new pos and — since the textarea is now
// empty — calls rebuildTa() to repopulate it. Just clearing the
// textarea (as before) never triggered this, so the params
// section was left stale until some other field's change event
// happened to fire a refresh().
refresh();
});
// Show the tab bar as soon as a language is selected.
startForm.on("change", "#wiktku-start-lang-field", function () {
renderSectionTabs();
});
var footer = $("<div id='wiktku-start-footer'></div>");
spinner = $(mw.html.element("img", {
id: "wiktku-start-spinner",
src: "//upload.wikimedia.org/wikipedia/commons/d/de/Ajax-loader.gif",
alt: "Tê barkirin…",
title: "Tê barkirin…" }));
footer.append(spinner.hide());
continueBtn = new OO.ui.ButtonWidget({
id: "wiktku-unhide-editform",
label: "Bişîne",
flags: [ "primary", "progressive" ]
});
continueBtn.on("click", function () {
// Immediate feedback that the click registered
continueBtn.$element.addClass("wiktku-btn-flash");
setTimeout(function () {
continueBtn.$element.removeClass("wiktku-btn-flash");
}, 500);
// Item 7: Ziman/Cureyê rêzimanî already block submission via the
// real OOUI setDisabled (see canContinue in refresh()) — this is
// a second, softer check that still lets the click through so we
// can explain *why*, instead of the button just silently doing
// nothing.
if (!wiktkuContentGateOk) {
wiktkuNotify(
"Berî şandinê, tiştekî binivîse: Mane, Bi zaravayên din, an jî Werger — kêmasî yek ji van sê beşan divê tijî be.",
{ type: "warn", tag: "wiktku-mincontent" }
);
return;
}
wiktkuNotify("Tê şandin…", { type: "info", tag: "wiktku-submit" });
startForm.trigger("submit");
});
footer.append(continueBtn.$element);
// "Edîtora çavkaniyê veke" button — inline fallback for the portlet link
var sourceEditorBtn = new OO.ui.ButtonWidget({
label: "Edîtora çavkaniyê veke",
flags: [ "destructive" ],
});
sourceEditorBtn.on("click", function () {
destroy();
});
footer.append(sourceEditorBtn.$element);
// ── Cache save/clear buttons ─────────────────────────────────────────
// Manual, page-scoped save of the entire wizard (all sections, not
// just the active one) via [[MediaWiki:Gadget-StorageUtils.js]]'s
// ObjectStorage. Restoring happens silently on load at the end of
// build(), once the full language list is available.
//
// Saving also happens automatically (debounced while typing, plus a
// periodic fallback) — see "Autosave" below — since relying on the
// person to remember to click "Li cache qeyd bike" before an
// accidental tab close/reload defeats the point of having a cache
// at all.
function buildCacheSnapshot() {
return {
lang: getValues().lang || "",
pron: $("#wiktku-start-pron .wiktku-pron-text").val() || "",
// bnrh is shared (page-level), same as lang/pron above — not
// per-section, so it doesn't live in sections[].
bnrh: getValuesForStep("bnrh"),
sections: sections,
activeSection: activeSection,
savedAt: Date.now()
};
}
// ── Last-saved indicator ─────────────────────────────────────────────
var lastSavedEl = $("<span id='wiktku-last-saved'></span>");
function formatSavedTime(ts) {
try {
return new Date(ts).toLocaleTimeString(mw.config.get("wgUserLanguage"),
{ hour: "2-digit", minute: "2-digit" });
} catch (e) {
return new Date(ts).toLocaleTimeString();
}
}
function updateLastSavedIndicator(ts) {
lastSavedEl.text(ts ? ("Cache: qeydkirî di saet " + formatSavedTime(ts) + " de") : "");
}
// ── Dirty-state tracking + autosave ──────────────────────────────────
// formDirty mirrors "does the live form differ from what's in cache".
// Anything the person types/selects sets it; a successful save (auto
// or manual) clears it; destroy() (final submit, or switching to the
// source editor) also clears it since the wizard's job is over at
// that point either way. formDirty/autosaveDebounceTimer/autosaveInterval
// are declared in the outer scope (near activeGroup) — assigned here,
// not re-declared — so destroy() can reach them too.
var AUTOSAVE_DEBOUNCE_MS = 8000; // save shortly after typing pauses
var AUTOSAVE_INTERVAL_MS = 60000; // …and at least this often regardless
function performAutosave() {
if (!formDirty) return;
saveCurrentSection();
try {
formCache.Set(buildCacheSnapshot());
formDirty = false;
updateLastSavedIndicator(Date.now());
} catch (e) {
// Silent on autosave failure (storage blocked/full, etc.) — the
// manual button still surfaces a proper error if the person
// tries it directly, no need to interrupt typing with a toast.
}
}
function scheduleAutosave() {
formDirty = true;
if (autosaveDebounceTimer) clearTimeout(autosaveDebounceTimer);
autosaveDebounceTimer = setTimeout(performAutosave, AUTOSAVE_DEBOUNCE_MS);
}
startForm.on("input change", "input, textarea, select", scheduleAutosave);
autosaveInterval = setInterval(performAutosave, AUTOSAVE_INTERVAL_MS);
// Warn on accidental tab close/reload while there's anything unsaved.
$(window).on("beforeunload.wiktkuUnsaved", function (e) {
if (!formDirty) return undefined;
e.preventDefault();
e.returnValue = "";
return "";
});
var saveCacheBtn = new OO.ui.ButtonWidget({
label: "Li cache qeyd bike",
title: "Halê vê formê yê niha (ziman, bilêvkirin û hemû beş) li cache (localStorage) qeyd bike, da ku eger rûpel bêyî xwestin were girtin an ji nû ve were barkirin, tu karibî berdewam bikî."
});
saveCacheBtn.on("click", function () {
saveCurrentSection();
// ObjectStorage.Set() doesn't return a success/failure value, so
// the only way to detect a real failure (storage blocked, quota
// exceeded, JSON.stringify choking on something unexpected) is to
// catch it here rather than inspect a (nonexistent) return value.
try {
var snapshot = buildCacheSnapshot();
formCache.Set(snapshot);
formDirty = false;
updateLastSavedIndicator(snapshot.savedAt);
wiktkuNotify("Halê formê li cache hate qeydkirin.", { type: "success", tag: "wiktku-cache-save" });
} catch (e) {
mw.notify("Qeydkirina li cache bi ser neket.", { type: "error", tag: "wiktku-cache-save" });
}
});
footer.append(saveCacheBtn.$element);
var clearCacheBtn = new OO.ui.ButtonWidget({
label: "Cache paqij bike",
flags: [ "destructive" ],
title: "Datayên qeydkirî yên vê rûpelê ji cache jê bibe (forma ku niha xuya dike naguherîne)."
});
clearCacheBtn.on("click", function () {
formCache.Set({});
// The live form still has whatever the person typed — it's just no
// longer backed up anywhere, so treat this like a fresh unsaved edit.
formDirty = true;
updateLastSavedIndicator(null);
wiktkuNotify("Cache hate paqijkirin.", { type: "success", tag: "wiktku-cache-clear" });
});
footer.append(clearCacheBtn.$element);
footer.append(lastSavedEl);
// Icon-only settings button — opens the Tercîh dialog. Plain OOUI
// icon names depend on which icon-pack module happens to be loaded,
// so this uses the actual Codex "settings" (color-subtle) SVG from
// Commons directly, the same way the spinner above hotlinks its gif.
var prefsBtn = $("<button></button>", {
type: "button",
"class": "wiktku-prefs-btn",
title: "Tercîh — sazkariyên vê amûrê biguherîne"
});
prefsBtn.on("click", function (e) {
e.preventDefault();
wiktkuOpenPrefsDialog();
});
footer.append(prefsBtn);
startForm.append(footer);
// NOTE: deliberately NOT .hide() (display:none). WikiEditor/CodeMirror/
// the mobile editor's auto-grow logic measure #wpTextbox1's real
// dimensions during their own init, which happens while the wizard is
// up. A display:none ancestor reports 0 for offsetWidth/offsetHeight/
// scrollHeight, so those scripts bake in a near-zero height that never
// gets recalculated later — slideDown() in destroy() only animates the
// outer box, it doesn't re-trigger their sizing. Pushing #editform
// off-screen instead keeps it laid out (real width/height available to
// measure) without being visible, so the editbox opens at full size.
$("#editform").addClass("wiktku-offscreen").before(startForm);
// renderGroupTabs() looks up #wiktku-group-tabs via a live DOM
// selector, so it must run after startForm is actually in the
// document — calling it back in the build loop (while startForm was
// still detached) silently no-op'd and left the tab bar empty.
renderGroupTabs();
renderBesenDinPicker();
// One pass over the whole form: every select that hasn't already been
// initialised, and isn't opted out with .wiktku-plain-select, gets
// the searchable picker.
initSelects(startForm);
refresh();
// Give every draggable textarea a custom resize grip (works
// consistently on Safari/iOS, unlike the native corner grip — see
// the "Manual drag-to-resize handle" comment in styles.css), and
// keep applying it to textareas added later on (new sense blocks,
// quote-source fields, nimûne rows, …).
wiktkuInitManualResize(startForm);
new MutationObserver(function (mutations) {
mutations.forEach(function (mutation) {
$(mutation.addedNodes).each(function () {
if (this.nodeType !== 1) return;
wiktkuInitManualResize(this);
});
});
}).observe(startForm[0], { childList: true, subtree: true });
// Now that the full language list is loaded, silently restore any
// draft the editor previously saved for this page.
var cachedDraft = formCache.Get();
if (cachedDraft && cachedDraft.sections && cachedDraft.sections.length) {
restoreFromCache(cachedDraft);
}
}
mw.loader.using(["oojs-ui-core"], function () {
function wiktkuProceedWithData(wiktkuData) {
var d = wiktkuData || {};
// Populate metadata.
if (d.metadata) $.extend(metadata, d.metadata);
// Populate gender labels.
if (d.genderLabels) $.extend(GENDER_BASE_LABELS, d.genderLabels);
// Item 1: Jimar (number) code definitions — same shape as the wiki's
// own Lua number-type table (code -> {cat, display[, req]}).
if (d.numberLabels) $.extend(NUMBER_LABELS, d.numberLabels);
// Populate lang choices (pinned list).
if (d.langChoices) steps.lang.choices = choicesFromObject(d.langChoices, true);
// Populate langsByCode and merge full language list from d.ziman.
// d.ziman is a {code: name} object with all known languages.
$.each(steps.lang.choices, function (i, choice) {
if (choice.sortKey === undefined) choice.sortKey = choice.label;
langsByCode[choice.code] = choice;
});
if (d.ziman) {
var pinnedCodes = {};
$.each(steps.lang.choices, function (i, c) { pinnedCodes[c.code] = true; });
var extraChoices = [];
$.each(d.ziman, function (code, name) {
if (/-pro$/i.test(code)) return;
if (/ziman[eê]\s+destan/i.test(name)) return;
if (pinnedCodes[code]) return;
var choice = { code: code, label: name, sortKey: name };
extraChoices.push(choice);
langsByCode[code] = choice;
});
extraChoices.sort(function (a, b) {
return a.sortKey.localeCompare(b.sortKey, userLang);
});
steps.lang.choices = steps.lang.choices.concat(extraChoices);
}
// Keep the full merged list around for trans/dunde/zarava — those
// should still be able to reference any language even when the
// Tercîh panel restricts the main "ziman" step below — then, if
// the user set a restriction there, narrow steps.lang.choices
// itself to just those codes.
var wiktkuFullLangChoices = steps.lang.choices;
if (wiktkuPrefs.langCodes && wiktkuPrefs.langCodes.length) {
var wiktkuAllowedLangSet = {};
$.each(wiktkuPrefs.langCodes, function (i, code) { wiktkuAllowedLangSet[code] = true; });
var wiktkuRestrictedChoices = $.grep(wiktkuFullLangChoices, function (c) {
return !!wiktkuAllowedLangSet[c.code];
});
// Fall back to the full list instead of showing an empty
// dropdown if none of the saved codes matched anything
// (typo'd code, data.json changed since, …).
steps.lang.choices = wiktkuRestrictedChoices.length ? wiktkuRestrictedChoices : wiktkuFullLangChoices;
}
// Populate POS choices — also a plain {code: label} object in data.json.
if (d.posChoices) steps.pos.choices = choicesFromObject(d.posChoices, false);
// Populate template definitions for the dfn sense-block builder.
if (d.tplDefs) steps.dfn.tplDefs = d.tplDefs;
// Populate pos placeholder examples.
if (d.posExamples) steps.dfn.posExamples = d.posExamples;
// Populate citation template definitions for the quote widget.
if (d.jederDefs) steps.dfn.jederDefs = d.jederDefs;
// Populate pronunciation and etymology template insert lists.
if (d.pronTpls) {
steps.pron.pronTpls = d.pronTpls;
steps.pron.refreshTplSelect();
}
if (d.etymTpls) {
steps.etym.etymTpls = d.etymTpls;
steps.etym.refreshTplSelect();
}
// Sync trans/dunde/zarava keys with the full language list
// (not the possibly Tercîh-restricted steps.lang.choices).
steps.trans.keys = wiktkuFullLangChoices;
steps.dunde.keys = wiktkuFullLangChoices;
steps.zarava.keys = getZaravaKeys(wiktkuFullLangChoices);
build();
}
if (Testing) {
$.getJSON(mw.util.getUrl(WIKTKU_DATA_JSON_TITLE, { action: "raw", ctype: "application/json" }))
.done(function (data) {
wiktkuProceedWithData(data);
})
.fail(function (jqXHR, textStatus, errorThrown) {
mw.notify(
"data.json nehate barkirin ji " + WIKTKU_DATA_JSON_TITLE +
" (" + textStatus + "). Testing=true û navê rûpelê kontrol bike.",
{ type: "error" }
);
});
} else {
wiktkuProceedWithData(require("./start/data.json"));
}
});
});
//</nowiki>
k87k4yvzdm5p0yw9pq5y4s8ouj07tlm
6333752
6333749
2026-08-14T22:55:51Z
Wikihez
7344
6333752
javascript
text/javascript
// Li ser [[vi:MediaWiki:Gadget-start.js]] hatiye refaktorkirin.
// implicit dependencies: StorageUtils (ObjectStorage)
//<nowiki>
$(function () {
if (window.location.href.includes("editintro=User:Wikihez/creation/intro")) {
return; // Do not run the script wextê WF:Bilez dişuxile
}
var ns = mw.config.get("wgNamespaceNumber");
if (ns &&
!(ns === 2 && mw.config.get("wgPageName").match(/\/ceribandin$|\/test$/))) {
return;
}
var addLangMode = mw.util.getParamValue("wiktkuaddlang") === "1";
// ── Tercîh (user settings) panel stored via mw.storage (localStorage), globally
var WIKTKU_PREFS_KEY = "wiktku_start_prefs";
var WIKTKU_PREFS_DEFAULTS = {
// [] = show the full language list in the "ziman" step; otherwise
// only these codes are shown there (data.json codes, not names).
langCodes: [],
// true = never auto-open on a new/empty page — only via the
// "+Ziman/beşeke din" portlet link.
onlyOnClick: false,
// "auto" | "p-cactions" | "p-tb" | "p-views" — where the
// "+Ziman/beşeke din" portlet link is added.
portlet: "auto",
// true = suppress routine/informational mw.notify toasts (page
// loading, cache auto-restored, cache saved/cleared, "tê şandin…").
// Errors and direct results of an explicit action (like saving
// Tercîh itself) always show regardless of this setting.
quiet: false
};
function wiktkuLoadPrefs() {
if (!(window.mw && mw.storage)) return $.extend({}, WIKTKU_PREFS_DEFAULTS);
var raw;
try { raw = mw.storage.get(WIKTKU_PREFS_KEY); } catch (e) { raw = null; }
if (!raw) return $.extend({}, WIKTKU_PREFS_DEFAULTS);
var parsed;
try { parsed = JSON.parse(raw); } catch (e) { parsed = {}; }
return $.extend({}, WIKTKU_PREFS_DEFAULTS, parsed);
}
function wiktkuSavePrefs(prefs) {
if (!(window.mw && mw.storage)) return false;
try {
mw.storage.set(WIKTKU_PREFS_KEY, JSON.stringify(prefs));
return true;
} catch (e) { return false; }
}
var wiktkuPrefs = wiktkuLoadPrefs();
// Routine/informational notices go through here so "quiet mode" can
// suppress them; errors and explicit-action confirmations (like the
// Tercîh save toast) call mw.notify directly instead, and always show.
function wiktkuNotify(message, options) {
if (wiktkuPrefs.quiet) return;
mw.notify(message, options);
}
// Lazily built the first time it's opened; reused after that (see
// wiktkuOpenPrefsDialog below, defined once we know OOUI is available).
var wiktkuPrefsWindowManager = null;
var wiktkuPrefsDialog = null;
function wiktkuOpenPrefsDialog() {
mw.loader.using(["oojs-ui-core", "oojs-ui-windows"], function () {
function WiktkuPrefsDialog(config) {
WiktkuPrefsDialog.super.call(this, config);
}
if (!wiktkuPrefsDialog) {
OO.inheritClass(WiktkuPrefsDialog, OO.ui.ProcessDialog);
WiktkuPrefsDialog.static.name = "wiktkuPrefsDialog";
WiktkuPrefsDialog.static.title = "Tercîhên min";
WiktkuPrefsDialog.static.actions = [
{ action: "save", label: "Qeyd bike", flags: ["primary", "progressive"] },
{ action: "cancel", label: "Betal bike", flags: "safe" }
];
WiktkuPrefsDialog.prototype.initialize = function () {
WiktkuPrefsDialog.super.prototype.initialize.call(this);
this.langCodesInput = new OO.ui.TextInputWidget({
placeholder: "ku, zza, ckb (vala bihêle ji bo hemû zimanan)"
});
this.onlyOnClickCheckbox = new OO.ui.CheckboxInputWidget({});
this.quietCheckbox = new OO.ui.CheckboxInputWidget({});
this.portletDropdown = new OO.ui.DropdownInputWidget({
options: [
{ data: "auto", label: "Otomatîk (li gorî rûyê wîkiyê)" },
{ data: "p-cactions", label: "p-cactions - Li qismê Amûran" },
{ data: "left-navigation", label: "left-navigation - Li qismê Gotar-Gotûbêj" },
{ data: "p-tb", label: "p-tb - Li qismê Giştî" },
{ data: "p-views", label: "p-views - Li qismê Bixwîne" }
]
});
var fieldset = new OO.ui.FieldsetLayout({ label: "Eyar" });
fieldset.addItems([
new OO.ui.FieldLayout(this.langCodesInput, {
label: "Kodên zimanan ku tê xuyakirin li qismê \"ziman\"",
align: "top",
help: "Kodan bi virgulê (,) ji hev veqetîne. Vala bihêle da ku hemû ziman were nîşandan.",
helpInline: true
}),
new OO.ui.FieldLayout(this.onlyOnClickCheckbox, {
label: "Tenê veke wextê \"+Ziman/beşeke din\" were tikandin",
align: "inline",
help: "Eger were hilbijartin, ev amûr êdî otomatîk li ser rûpelên nû/vala dest pê nake — divê meriv her carê pêl \"+Ziman/beşeke din\" bike.",
helpInline: true
}),
new OO.ui.FieldLayout(this.portletDropdown, {
label: "Cihê lînka \"+Ziman/beşeke din\"",
align: "top",
help: "\"Otomatîk\" li gorî rûyê wîkiyê hildibijêre.",
helpInline: true
}),
new OO.ui.FieldLayout(this.quietCheckbox, {
label: "Moda bêdeng (kêmtir agahdarî nîşan bide)",
align: "inline",
help: "Agahdariyên normal nîşan nede. Xeta her tim tên xuyakirin.",
helpInline: true
})
]);
this.$body.addClass("wiktku-prefs-dialog-body").append(fieldset.$element);
};
WiktkuPrefsDialog.prototype.getSetupProcess = function (data) {
return WiktkuPrefsDialog.super.prototype.getSetupProcess.call(this, data)
.next(function () {
this.langCodesInput.setValue(wiktkuPrefs.langCodes.join(", "));
this.onlyOnClickCheckbox.setSelected(!!wiktkuPrefs.onlyOnClick);
this.portletDropdown.setValue(wiktkuPrefs.portlet || "auto");
this.quietCheckbox.setSelected(!!wiktkuPrefs.quiet);
}, this);
};
WiktkuPrefsDialog.prototype.getActionProcess = function (action) {
var dialog = this;
if (action === "save") {
return new OO.ui.Process(function () {
var codes = dialog.langCodesInput.getValue()
.split(/[,\s]+/)
.map(function (c) { return c.trim().toLowerCase(); })
.filter(function (c) { return !!c; });
wiktkuPrefs = {
langCodes: codes,
onlyOnClick: dialog.onlyOnClickCheckbox.isSelected(),
portlet: dialog.portletDropdown.getValue() || "auto",
quiet: dialog.quietCheckbox.isSelected()
};
wiktkuSavePrefs(wiktkuPrefs);
mw.notify(
"Tercîh hatin qeydkirin. Rûpelê ji nû ve bar bike (F5).",
{ type: "success", tag: "wiktku-prefs-save" }
);
dialog.close({ action: "save" });
});
}
if (action === "cancel") {
return new OO.ui.Process(function () {
dialog.close({ action: "cancel" });
});
}
return WiktkuPrefsDialog.super.prototype.getActionProcess.call(this, action);
};
wiktkuPrefsWindowManager = new OO.ui.WindowManager();
$(document.body).append(wiktkuPrefsWindowManager.$element);
wiktkuPrefsDialog = new WiktkuPrefsDialog();
wiktkuPrefsWindowManager.addWindows([wiktkuPrefsDialog]);
}
wiktkuPrefsWindowManager.openWindow(wiktkuPrefsDialog);
});
}
var targetContainer;
var skin = mw.config.get('skin');
if (wiktkuPrefs.portlet && wiktkuPrefs.portlet !== "auto") {
targetContainer = wiktkuPrefs.portlet;
} else if (skin === 'vector-2022') {
targetContainer = 'p-cactions';
} else if (skin === 'vector') {
targetContainer = 'p-tb';
} else {
targetContainer = 'p-views';
}
mw.util.addPortletLink(targetContainer,
mw.util.getUrl(mw.config.get("wgPageName"), { action: "submit", wiktkuaddlang: "1" }),
"+Ziman/beşeke din", "ca-wiktku-addlang",
"Li vê rûpelê, ziman an jî beşeke nû zêde bike");
// If "onlyOnClick" is set, the wizard should ONLY ever open via the
// "+Ziman/beşeke din" link — never automatically
var wiktkuNewPageDetected = $(".mw-newarticletext, .mw-newarticletextanon").length > 0;
if (wiktkuPrefs.onlyOnClick ? !addLangMode : (!addLangMode && !wiktkuNewPageDetected)) {
return;
}
// ── Shared helpers ───────────────────────────────────────────────────
// Generic text/UI utilities live in their own package file now — see the
// header of util.js for why. Aliased to bare names here so the ~400 call
// sites below read exactly as they did when these were local functions.
var wiktkuUtil = require("./start/util.js");
var capitalize = wiktkuUtil.capitalize;
var decapitalize = wiktkuUtil.decapitalize;
var escapeRegExp = wiktkuUtil.escapeRegExp;
var stripWikilinks = wiktkuUtil.stripWikilinks;
var insertAtCursor = wiktkuUtil.insertAtCursor;
var foldDiacritics = wiktkuUtil.foldDiacritics;
var wrapNativeSelect = wiktkuUtil.wrapNativeSelect;
var initSelects = wiktkuUtil.initSelects;
var wiktkuInitManualResize = wiktkuUtil.initManualResize;
function langHeaderSource(codePattern) {
return "\n?==\\s*\\{\\{\\s*ziman\\s*\\|\\s*(" + codePattern + ")\\s*\\}\\}\\s*==";
}
function findLangHeader(text, code) {
var m = new RegExp(langHeaderSource(escapeRegExp(code))).exec(text);
return m ? { index: m.index, match: m[0] } : null;
}
var catSrcTemplates = null;
var catSrcTemplatesPromise = null;
function fetchCatSrcTemplates() {
if (catSrcTemplatesPromise) return catSrcTemplatesPromise;
catSrcTemplatesPromise = new mw.Api().get({
action: "query",
list: "categorymembers",
cmtitle: "Kategorî:Çavkanî",
cmnamespace: 10,
cmlimit: "max",
formatversion: 2
}).then(function (data) {
var members = (data.query && data.query.categorymembers) || [];
catSrcTemplates = $.map(members, function (m) {
// Pêşgira navî ya "Şablon:" rake.
return m.title.replace(/^[^:]+:/, "");
});
catSrcTemplates.sort(function (a, b) { return a.localeCompare(b, userLang); });
return catSrcTemplates;
}, function () {
catSrcTemplates = [];
return catSrcTemplates;
});
return catSrcTemplatesPromise;
}
var pageName = mw.config.get("wgPageName").replaceAll(/_/g, " ");
if (ns) pageName = pageName.replace(/.*\//, "");
var pageNameRe = escapeRegExp(pageName);
var userLang = mw.config.get("wgUserLanguage");
var formCache = new ObjectStorage("wiktku_start_draft_" + mw.config.get("wgPageName"), 1);
var langsByCode = {};
// Looks up the display label for a language code, falling back to the
// code itself if it isn't known yet (e.g. langsByCode not loaded).
function getLangLabel(code) {
var entry = langsByCode[code];
return entry ? entry.label : code;
}
// Populated from [[MediaWiki:Gadget-start.js/data.json]] at runtime.
var metadata = {};
var ZARAVA_LANG_CODES = ["ckb", "sdh", "lki", "hac", "zza"];
// Converts a {code: label} object (langChoices/posChoices in data.json)
// into the {code, label[, sortKey]} array the rest of the script uses.
// isLang: true adds a sortKey and shows "(code)" after the label —
// language choices only.
function choicesFromObject(obj, isLang) {
var result = [];
$.each(obj || {}, function (code, label) {
var choice = { code: code, label: label };
if (isLang) choice.sortKey = label;
result.push(choice);
});
return result;
}
function getZaravaKeys(choices) {
var byCode = {};
$.each(choices || [], function (_, c) { byCode[c.code] = c; });
var result = [];
$.each(ZARAVA_LANG_CODES, function (_, code) {
if (byCode[code]) result.push(byCode[code]);
});
return result;
}
function needsTransliteration(langCode) {
var meta = metadata[langCode];
if (!meta || !meta.sc) return false;
var scripts = Array.isArray(meta.sc) ? meta.sc : [meta.sc];
return scripts.length > 0 && scripts[0] !== "Latn";
}
// Kodên cinsiyetê yên di metadata.g de — ji data.json tê dagirtin
var GENDER_BASE_LABELS = {};
// Item 1 (Wikihez, 14 Tebax 2026): kodên jimarê (y, s, d, p, p+, tp, j, j+,
// j/nj, nj, nj+, hj!, hj?) — ji data.json's "numberLabels" tê dagirtin.
// Same {code: {cat, display[, req]}} shape as the wiki's own Lua
// number-type table; "display" can contain HTML (<abbr>) or wikilinks
// ([[...]]), so it's only used as-is inside the wikitext output — never
// dropped straight into an <option>, which can't render either (see
// stripMarkupForOption below).
var NUMBER_LABELS = {};
// metadata[lang].g used to list gender AND number codes together (see
// cinsiyet/posparams below) — this tells the two dropdowns apart: any
// code that's a key in NUMBER_LABELS is a number code (goes in the new
// Jimar dropdown / j= param), everything else is a gender code (stays
// in the existing Cîns dropdown / c= param). Compound codes like "m-p"
// or "n-p" are gender+plural pairs, not plain "p" — they don't match a
// NUMBER_LABELS key, so they correctly stay on the gender side.
function isNumberCode(code) {
return Object.prototype.hasOwnProperty.call(NUMBER_LABELS, code);
}
// Strips the bit of markup "display" is allowed to contain so it's safe
// to use as plain <option> text (options can't render HTML or wikilinks):
// <abbr title="X">Y</abbr> -> "Y (X)", [[a|b]] -> "b", [[a]] -> "a".
function stripMarkupForOption(html) {
if (!html) return "";
return $.trim(
String(html)
.replace(/<abbr[^>]*title="([^"]*)"[^>]*>([\s\S]*?)<\/abbr>/gi, "$2 ($1)")
.replace(/\[\[[^\]|]*\|([^\]]*)\]\]/g, "$1")
.replace(/\[\[([^\]]*)\]\]/g, "$1")
.replace(/<[^>]+>/g, "")
);
}
// Builds the Jimar dropdown's <option> text for one code: "j — jimarbar".
function numberOptionLabel(code) {
var def = NUMBER_LABELS[code];
if (!def) return code;
var text = stripMarkupForOption(def.display);
return text ? (code + " — " + text) : code;
}
// Sub-lists that only make sense for a plain (non-şablon) sense — hidden
// when a şablon (e.g. {{guharto|…}}) is chosen for that sense
var HIDDEN_ON_TPL_GROUPS = [
"wiktku-dfn-alternativ",
"wiktku-dfn-hevmane",
"wiktku-dfn-dijmane",
"wiktku-dfn-koordine",
"wiktku-dfn-jornav",
"wiktku-dfn-jernav"
];
function genderLabel(code) {
if (code === "p") return "Pirjimar";
var pluralMatch = code.match(/^(.+)-p$/);
if (pluralMatch && GENDER_BASE_LABELS[pluralMatch[1]]) {
return GENDER_BASE_LABELS[pluralMatch[1]] + " (pirjimar)";
}
return GENDER_BASE_LABELS[code] || code;
}
// True if a sense has content beyond mane worth keeping (etîket, word
// lists, nimûne, jêder) — so it's still emitted with {{mane?}} if empty.
function senseHasExtraContent(s) {
if (s.etiket && $.grep(s.etiket, function (e) { return $.trim(e) !== ""; }).length) return true;
if (s.kategori && $.grep(s.kategori, function (k) { return $.trim(k) !== ""; }).length) return true;
if (s.alternativ.length || s.hevmane.length || s.dijmane.length ||
s.koordine.length || s.jornav.length || s.jernav.length) return true;
if (s.nimune && $.grep(s.nimune, function (n) {
return (typeof n === "object" ? n.text : n) !== "";
}).length > 0) return true;
if (senseHasJeder(s)) return true;
return false;
}
// Wikihez, 14 Tebax 2026 (item 7): the real submit-blocking requirement
// (Ziman + Cureyê rêzimanî, via step.required/canContinue) is already
// obvious since Bişîne stays visibly disabled until it's met. What
// wasn't obvious is that a technically-"complete" entry with nothing
// in Mane, Bi zaravayên din or Werger is still empty in any meaningful
// sense — so this is checked separately, at click time, with its own
// message, instead of another star/legend marker on the page.
function hasMinRequiredContent(values) {
var dfnSenses = steps.dfn.getSenses($("#wiktku-start-dfn"));
var hasMane = dfnSenses.some(function (s) {
return (s.tpl && s.tplTitle) || (!s.tpl && (s.mane !== "" || senseHasExtraContent(s)));
});
if (hasMane) return true;
if (values.lang === "ku") {
var hasWerger = false;
$("#wiktku-start-trans .wiktku-trans-group").each(function () {
if (steps.trans.getGroupTranslations($(this)).length) hasWerger = true;
});
if (hasWerger) return true;
var hasZarava = false;
$("#wiktku-start-zarava .wiktku-zarava-group").each(function () {
if (steps.zarava.getGroupTranslations($(this)).length) hasZarava = true;
});
if (hasZarava) return true;
}
return false;
}
// Bolds the *first* occurrence of the page name
function boldPageNameOnce(text) {
if (!text || !pageNameRe) return text;
var re = new RegExp("(" + pageNameRe + "([^( |,|;|\\?|\\.|\\!)]+)?)", "i");
return text.replace(re, "'''$1'''");
}
// Converts literal line breaks typed into a nimûne/jêgirtin box into
// wikitext <br> tags,
function nlToBr(text) {
return text ? text.replace(/\r\n|\r|\n/g, "<br>") : text;
}
function escapeHtmlForBackdrop(str) {
return String(str)
.replace(/&/g, "&")
.replace(/</g, "<")
.replace(/>/g, ">");
}
// Mirrors a textarea's text, with a small highlighted marker placed
// right after each line that's followed by an actual typed/pasted
// linebreak. Rendered into a transparent backdrop layer behind the
// textarea (see ensureLinebreakBackdrop()), so only the point of the
// break is marked instead of the whole box.
function buildLinebreakBackdropHtml(text) {
var lines = text.split(/\r\n|\r|\n/);
return $.map(lines, function (line, i) {
var isLast = i === lines.length - 1;
return escapeHtmlForBackdrop(line) +
(isLast ? "" : "<mark class='wiktku-linebreak-mark'>↵</mark>\n");
}).join("");
}
// Copies the metrics that affect where text wraps/lands (font, line
// height, padding, border) from the real textarea onto its backdrop,
// via computed style rather than shared CSS classes — most of the
// box's own rules are written as "textarea.foo", which a <div> with
// the same class wouldn't match. Re-run on every update in case a
// responsive breakpoint changed the textarea's own font-size.
function syncLinebreakBackdropMetrics(textarea, backdrop) {
var cs = window.getComputedStyle(textarea[0]);
backdrop.css({
"box-sizing": cs.boxSizing,
"padding-top": cs.paddingTop,
"padding-right": cs.paddingRight,
"padding-bottom": cs.paddingBottom,
"padding-left": cs.paddingLeft,
"border-width": cs.borderWidth,
"border-style": "solid",
"font-family": cs.fontFamily,
"font-size": cs.fontSize,
"font-weight": cs.fontWeight,
"line-height": cs.lineHeight,
"letter-spacing": cs.letterSpacing
});
}
// Lazily wraps a textarea in its own positioning anchor (independent
// of .wiktku-resize-wrap, so this doesn't depend on load order versus
// wiktkuMakeManualResizable) and inserts the transparent backdrop
// layer used to mark the exact point of a linebreak. Safe to call
// more than once on the same textarea — the backdrop is cached.
function ensureLinebreakBackdrop(textarea) {
var existing = textarea.data("wiktkuLinebreakBackdrop");
if (existing) return existing;
textarea.wrap("<div class='wiktku-linebreak-wrap'></div>");
var backdrop = $("<div aria-hidden='true'></div>").addClass("wiktku-linebreak-backdrop");
textarea.before(backdrop);
textarea.data("wiktkuLinebreakBackdrop", backdrop);
textarea.on("scroll.wiktkuLinebreak", function () {
backdrop.scrollTop(textarea.scrollTop()).scrollLeft(textarea.scrollLeft());
});
return backdrop;
}
// Flags a nimûne/jêgirtin textarea (via CSS class, for the border
// tint + tooltip) while it contains a typed/pasted linebreak, so the
// user notices before it's silently turned into <br> on output.
// Marks only the exact point of the break via a mirrored backdrop,
// rather than tinting the whole box.
function highlightLinebreak(el) {
var textarea = $(el);
var text = textarea.val();
var hasBreak = /\r|\n/.test(text);
textarea
.toggleClass("wiktku-has-linebreak", hasBreak)
.attr("title", hasBreak ? "Xeta nû dê wek <br> bê nivîsandin" : "");
if (!hasBreak) {
var cached = textarea.data("wiktkuLinebreakBackdrop");
if (cached) cached.hide();
textarea.removeClass("wiktku-has-linebreak-source");
return;
}
var backdrop = ensureLinebreakBackdrop(textarea);
textarea.addClass("wiktku-has-linebreak-source");
syncLinebreakBackdropMetrics(textarea, backdrop);
backdrop.html(buildLinebreakBackdropHtml(text)).show();
backdrop.scrollTop(textarea.scrollTop()).scrollLeft(textarea.scrollLeft());
}
// Each nimûne item can be { text, tr, t }: text, transliteration, translation.
function formatNimune(nimunes, lang, hasJeder) {
var hasNimune = nimunes && $.grep(nimunes, function (n) {
return (typeof n === "object" ? n.text : n) !== "";
}).length > 0;
if (!hasNimune) {
return hasJeder ? "" : "\n#* {{nimûne?|" + lang + "}}";
}
return $.map(nimunes, function (n) {
var text = typeof n === "object" ? n.text : n;
if (!text) return undefined;
var bolded = nlToBr(boldPageNameOnce(text));
var tpl = "\n#: {{nm|" + lang + "|" + bolded;
if (typeof n === "object") {
if (n.tr) tpl += "|tr=" + nlToBr(n.tr);
// Translation as third positional param (no key needed).
if (n.t) tpl += "|" + nlToBr(n.t);
}
// Short examples fit on one line together with their translation.
// rêz=1 is not used for ku — definitions are shown on separate lines there.
if (text.length < 60 && lang !== "ku") tpl += "|rêz=1";
tpl += "}}";
return tpl;
}).join("");
}
// Formats jêder (citation) entries into "#* {{jêder…|…}}" lines; skips
// entries with no quote text. Falls back to the generic {{jêder}}
// template when no specific template was chosen.
function formatJeder(jederList, lang) {
if (!jederList || !jederList.length) return "";
return $.map(jederList, function (jeder) {
if (!jeder || !jeder.quote) return undefined;
var quote = nlToBr(boldPageNameOnce(jeder.quote));
var quoteTr = nlToBr(jeder.quoteTr);
var quoteT = nlToBr(jeder.quoteT);
if (jeder.jederTpl) {
var cite = "\n#* {{" + jeder.jederTpl + "|" + lang;
cite += "|jêgirtin=" + quote;
if (quoteTr) cite += "|tr=" + quoteTr;
if (quoteT) cite += "|tercime=" + quoteT;
$.each(jeder.jêderFields || {}, function (key, val) {
if (val) cite += "|" + key + "=" + val;
});
cite += "}}";
return cite;
}
var out = "\n#* {{jêder|" + lang + "|jêgirtin=" + quote;
if (quoteTr) out += "|tr=" + quoteTr;
if (quoteT) out += "|tercime=" + quoteT;
// A şablon picked from Kategorî:Çavkanî is transcluded as the
// source param (e.g. |{{Kovara X}}); manual text is used as-is.
var srcParam = jeder.jederCatTpl ? ("{{" + jeder.jederCatTpl + "}}") :
(jeder.jederManual ? jeder.jederManual : "çavkanî?");
// A positional param containing "=" gets parsed as its own key=value
// pair by MediaWiki and breaks the template, so force it to be
// explicitly named (|2=) whenever that's the case.
out += (srcParam.indexOf("=") !== -1 ? "|2=" : "|") + srcParam;
out += "}}";
return out;
}).join("");
}
// True if a sense has at least one jêder entry with quote text.
function senseHasJeder(sense) {
return !!(sense.jeder && $.grep(sense.jeder, function (j) {
return j && j.quote;
}).length > 0);
}
// Builds "{{tplName|lang|part1|part2|…}}" from a sense field (kategori,
// etiket), wrapped inline (" {{…}} ") or on its own line ("\n#: {{…}}").
function buildSenseTpl(sense, field, lang, tplName) {
if (!sense[field] || !sense[field].length) return "";
var parts = sense[field].map(function (p) { return $.trim(p); })
.filter(function (p) { return p !== ""; });
if (!parts.length) return "";
var call = "{{" + tplName + "|" + lang + "|" + parts.join("|") + "}}";
return call
}
/**
* Assembles the nimûne + jêder wikitext block for a sense. Shared by
* both the template-sense and normal-mane-sense branches below.
*/
function buildCite(sense, lang) {
return formatNimune(sense.nimune, lang, senseHasJeder(sense)) +
formatJeder(sense.jeder, lang);
}
// ── Inline modifier system ───────────────────────────────────────────────
// Appends a ⊕ button to a word input <li>. Clicking it shows a compact
// modifier picker; selecting one prompts for the value and appends
// <modifier:value> to the textarea's current content.
var WORD_MODIFIERS = [
{ key: "t", label: "t: tercime / îzah", hint: "Tercimeya kelîmeyê an îzaha wê" },
{ key: "cuda", label: "cuda: alt display", hint: "Forma nîşankirinê ya alternatîf" },
{ key: "c", label: "c: cinsiyet", hint: "Cinsiyeta kelîmeyê" },
{ key: "e", label: "e: etîket (li pêşiyê)", hint: "Etîketek li pêşiya kelîmeyê" },
{ key: "ee", label: "ee: etîket (li dawiyê)", hint: "Etîketek li dawiya kelîmeyê" },
{ key: "q", label: "q: qualifier (li pêşiyê)", hint: "Wesf li pêşiya kelîmeyê" },
{ key: "qq", label: "qq: qualifier (li dawiyê)", hint: "Wesf li dawiya kelîmeyê" },
{ key: "crz", label: "crz: cureyê rêzimanî", hint: "Cureyê rêzimanî yê kelîmeyê" },
{ key: "hrf", label: "hrf: herfiyen", hint: "Herfiyen, manaya rasterast" },
{ key: "ref", label: "ref: çavkanî", hint: "Çavkanî" }
];
// Sub-groups (inside a sense/definition block) that get the same ⊕
// modifier button as makeWordListStep fields.
var MODIFIER_SUBGROUPS = {
"wiktku-dfn-alternativ": true,
"wiktku-dfn-hevmane": true,
"wiktku-dfn-dijmane": true,
"wiktku-dfn-koordine": true,
"wiktku-dfn-jornav": true,
"wiktku-dfn-jernav": true
};
/**
* Wraps a freshly-created textarea in a <li> with a ⊕ modifier button.
* `ta` — the jQuery textarea element.
* Returns the <li>.
*/
function makeModifierLi(ta) {
var li = $("<li class='wiktku-word-li'></li>");
var btn = $("<button type='button' class='wiktku-mod-btn' title='Modifiyerê lê zêde bike'>⊕</button>");
var picker = $("<div class='wiktku-mod-picker'></div>").hide();
// Which modifier keys are already present in the textarea's current
// text — e.g. "<t:...>" → "t" used. Each modifier can only be
// applied once per word, so its pill gets disabled once used.
function usedKeys() {
var used = {};
var re = /<([a-zA-Z]+):/g;
var val = ta.val() || "";
var m;
while ((m = re.exec(val)) !== null) used[m[1]] = true;
return used;
}
$.each(WORD_MODIFIERS, function (_, mod) {
var pill = $("<button type='button' class='wiktku-mod-pill'></button>").text(mod.label);
pill.attr("title", mod.hint);
pill.data("mod-key", mod.key);
pill.on("click", function (e) {
e.preventDefault();
if (pill.prop("disabled")) return; // already used on this word
picker.hide();
// Show a tiny inline input for the modifier value.
var valWrap = $("<span class='wiktku-mod-val-wrap'></span>");
var valInp = $("<input type='text' class='wiktku-mod-val-input'>")
.attr("placeholder", mod.hint + "…")
.attr("size", 20);
var confirm = $("<button type='button' class='wiktku-mod-confirm'>✓</button>");
var cancel = $("<button type='button' class='wiktku-mod-cancel'>✕</button>");
function applyModifier() {
var v = $.trim(valInp.val());
if (v) {
ta.val(ta.val() + "<" + mod.key + ":" + v + ">");
ta.trigger("input");
}
valWrap.remove();
ta.focus();
}
confirm.on("click", applyModifier);
cancel.on("click", function () { valWrap.remove(); ta.focus(); });
valInp.on("keydown", function (e) {
if (e.which === 13) { e.preventDefault(); applyModifier(); }
if (e.which === 27) { valWrap.remove(); ta.focus(); }
});
valWrap.append(valInp).append(confirm).append(cancel);
li.append(valWrap);
valInp.focus();
});
picker.append(pill);
});
btn.on("click", function (e) {
e.preventDefault();
// Close any other open pickers in the same list.
li.closest("ol, ul").find(".wiktku-mod-picker").not(picker).hide();
// Grey out modifiers already used on this word — refreshed on
// every open since the text (and thus what's "used") can change.
var used = usedKeys();
picker.find(".wiktku-mod-pill").each(function () {
var isUsed = !!used[$(this).data("mod-key")];
$(this).prop("disabled", isUsed).toggleClass("wiktku-mod-pill-used", isUsed);
});
picker.toggle();
});
// Close picker when focus leaves the li entirely.
li.on("focusout", function () {
setTimeout(function () {
if (!$.contains(li[0], document.activeElement)) picker.hide();
}, 150);
});
li.append(ta).append(btn).append(picker);
return li;
}
function makeWordListStep(id, name, question_fmt) {
return {
id: id,
name: name,
question_fmt: question_fmt,
multiple: true,
narrow: true,
modifiers: true,
// Function instead of a plain string so it can name the current
// language — computed fresh at build time and re-applied by
// refresh() whenever the language changes.
placeholder: function () {
var lang = getValues().lang || "";
var langLabel = lang ? getLangLabel(lang) : "";
return "Kelîme" + (langLabel ? " bi " + langLabel : "") + "…";
},
visible: function (values) {
return values.lang && values.pos;
},
output: function (values) {
var words = $.grep(values[id] || [], function (w) { return !!w; });
var header = capitalize(name);
if (!words.length) return "";
var lang = values.lang;
var section = "\n==== " + header + " ====\n";
var params = "cure=" + header + "\n" +
$.map(words, function (w) {
return "|" + w;
}).join("\n");
return section +
"{{kol3|" + lang + "|" + params + "\n}}\n";
} };
}
var steps = {
lang: {
id: "lang",
required: true,
name: "ziman",
question_fmt: '"' + pageName + '" bi çi zimanî ye?',
question_br: true,
// Populated from [[MediaWiki:Gadget-start.js/data.json]] (langChoices).
choices: [],
output: function (values) {
return "== {{ziman|" + values.lang + "}} ==\n";
}
},
pron: {
id: "pron",
name: "bilêvkirin",
question_fmt: '"' + pageName + '" çawa tê telafûzkirin?',
// pronTpls populated from data.json
pronTpls: {},
visible: function (values) {
if (!values.lang) return false;
// addLangMode: skip pron only if this lang already has a section.
if (addLangMode) {
// Clearing the page makes existing content irrelevant.
var clearPageCheck = $("#wiktku-clear-page-check");
if (clearPageCheck.length && clearPageCheck.prop("checked")) {
return true;
}
var existing = $("#wpTextbox1").val() || "";
return !findLangHeader(existing, values.lang);
}
return true;
},
// Fills the insert-dropdown from pronTpls, filtered by language.
refreshTplSelect: function () {
var sel = $("#wiktku-start-pron .wiktku-tpl-insert-select");
if (!sel.length) return;
var lang = getValues().lang || "";
sel.find("option[value!='']").remove();
$.each(steps.pron.pronTpls, function (name, tpl) {
// Filter: if tpl.langs exists, only show if lang is in that list; otherwise show always
var allowed = !tpl.langs || tpl.langs.indexOf(lang) !== -1;
if (allowed) {
sel.append($("<option></option>")
.val(tpl.snippet)
.text(name + " — " + tpl.desc)
.attr("data-nolang", tpl.noLang ? "1" : ""));
}
});
// Tell the picker the option list changed.
sel.trigger("wiktku:refresh");
},
build: function (stepDiv) {
if (stepDiv.find(".wiktku-pron-wrap").length) return null;
var wrap = $("<div class='wiktku-pron-wrap'></div>");
// Rewiye tine, 14 Tebax 2026: "berê bilêvkirin otomatîk
// çêdibû, niha zehmettir e ji bo yekî nezan — gelek şablon
// hene, kîjan were hilbijartin?" A one-line reassurance:
// this field is optional, and the dropdown below writes the
// template for you — no need to know the syntax up front.
wrap.append(
$("<p class='wiktku-step-hint'></p>").text(
"Ev qad ne mecbûrî ye. Heke tu nizanî kîjan şablonî hilbijêrî, vale bihêle — an ji pêşkêşkariya jêrîn şablonekî hilbijêre, ew ê bixweber li vir were nivîsandin."
)
);
var ta = $("<textarea></textarea>")
.attr("name", "wiktku-pron-" + $.now())
.attr("class", "wiktku-start-step-field wiktku-pron-text")
.attr("rows", 4)
.attr("placeholder", "Nimûne: {{IPA|ku|/pɛɪ̯n/}} yan {{kîte|ku|he|ce|ki|rin}}");
// Template insert dropdown — filtered by language.
var sel = $("<select class='wiktku-tpl-insert-select'></select>");
sel.attr("data-placeholder", "Şablonek lê zêde bike ");
sel.append($("<option value=''>— şablonek lê zêde bike —</option>"));
var lang = getValues().lang || "";
$.each(steps.pron.pronTpls, function (name, tpl) {
// Filter: if tpl.langs exists, only show if lang is in that list; otherwise show always
var allowed = !tpl.langs || tpl.langs.indexOf(lang) !== -1;
if (allowed) {
sel.append($("<option></option>")
.val(tpl.snippet)
.text(name + " — " + tpl.desc)
.attr("data-nolang", tpl.noLang ? "1" : ""));
}
});
sel.on("change", function () {
var snippet = $(this).val();
if (!snippet) return;
var lang = getValues().lang || "";
// Check if the selected option has noLang flag
var selectedOption = sel.find("option:selected");
var hasNoLang = selectedOption.attr("data-nolang") === "1";
if (!hasNoLang) {
snippet = snippet.replace(/CODE/g, lang).replace(/SOURCELANG/g, "?");
insertAtCursor(ta[0], snippet);
$(this).val("");
// Clear the picker's search box
sel.trigger("wiktku:refresh");
ta.focus();
return;
}
// Item 5 (Wikihez, 14 Tebax 2026): the noLang templates
// (ku-IPA, ku-kîte, zza-IPA, zza-kîte) auto-generate
// their actual content from a Lua module reading the
// page title — "{{ku-IPA}}" alone gives no hint what
// that'll render as, so show a live preview and require
// confirmation before inserting, instead of an inline
// prompt()/confirm() dialog.
var tplLabel = selectedOption.text();
$(this).val("");
sel.trigger("wiktku:refresh");
steps.pron.showTplPreview(stepDiv, ta, snippet, tplLabel);
});
wrap.append(sel).append(ta);
stepDiv.append(wrap);
initSelects(wrap);
return ta;
},
/** Item 5: inline preview + confirm panel for a "noLang" (auto-
* content) pronunciation template — fetches what the snippet
* actually expands to for this page (via action=expandtemplates,
* so the preview is exactly what {{ku-IPA}} etc. would produce)
* and only inserts it into the textarea if the user confirms. */
showTplPreview: function (stepDiv, ta, snippet, tplLabel) {
// Only one preview panel open at a time.
stepDiv.find(".wiktku-pron-preview").remove();
var panel = $("<div class='wiktku-pron-preview'></div>");
panel.append($("<div class='wiktku-pron-preview-label'></div>")
.text("Pêşdîtina " + tplLabel + ":"));
var body = $("<div class='wiktku-pron-preview-body'></div>").text("Tê barkirin…");
panel.append(body);
var actions = $("<div class='wiktku-pron-preview-actions'></div>");
var confirmBtn = $("<button type='button' class='wiktku-pron-preview-confirm'>✓ Tevlî bike</button>")
.prop("disabled", true);
var cancelBtn = $("<button type='button' class='wiktku-pron-preview-cancel'>✕ Betal bike</button>");
actions.append(confirmBtn).append(cancelBtn);
panel.append(actions);
ta.before(panel);
confirmBtn.on("click", function () {
insertAtCursor(ta[0], snippet);
panel.remove();
ta.focus();
});
cancelBtn.on("click", function () {
panel.remove();
});
new mw.Api().post({
action: "expandtemplates",
text: snippet,
title: pageName,
prop: "wikitext",
formatversion: 2
}).done(function (data) {
var wikitext = $.trim((data && data.expandtemplates && data.expandtemplates.wikitext) || "");
// Drop the leading "* " bullet (part of the wikitext
// list-item syntax, not the template's own output) so
// the preview shows just what the template rendered.
wikitext = wikitext.replace(/^\*\s*/, "");
body.text(wikitext || "(vala — vê rûpelê re tiştek nehate afirandin)");
confirmBtn.prop("disabled", false);
}).fail(function () {
body.text("Pêşdîtin nehate barkirin — tu dikarî hîn jî wê tevlî bikî.");
confirmBtn.prop("disabled", false);
});
},
output: function () {
var text = $.trim($("#wiktku-start-pron .wiktku-pron-text").val());
if (!text) return "";
var lines = text.split("\n");
var out = $.map(lines, function (line) {
line = $.trim(line);
if (!line) return undefined;
return line;
}).join("\n");
// Ghybu, 14 Tebax 2026: this used to print at "===" (the same
// level as the POS header itself), directly under Ziman and
// above Cureyê rêzimanî. Nested one level deeper ("====") so
// it prints as a subsection of the POS section instead — see
// getWikitextForCurrentSection(), which now calls this per
// section rather than getWikitext() calling it once up top.
return "\n==== Bilêvkirin ====\n" + out + "\n";
} },
pos: {
id: "pos",
required: true,
name: "Cureyê rêzimanî",
question_fmt: 'Cureyê rêzimanî yê "' + pageName + '" çi ye?',
visible: function (values) {
return values.lang;
},
question_br: true,
// Populated from [[MediaWiki:Gadget-start.js/data.json]] (posChoices).
choices: [],
output: function (values) {
var pos = values.pos || "";
var capitalizedPos = capitalize(pos);
// "form" opt-param (checked in posparams) marks this as a
// form-of/inflected entry — the section title becomes
// "Formeke <pos>ê" instead of the plain pos name. The
// template call itself still uses the unchanged pos name.
var isForm = $("#wiktku-posparams-opt-form").is(":checked");
var header = isForm
? "\n=== Formeke " + pos + "ê ===\n"
: "\n=== " + capitalizedPos + " ===\n";
// Image line (between header and template call)
var imageLine = steps.resim.output(values);
// Read the live wikitext from the posparams textarea.
// Fall back to a plain {{pos|lang}} if the step hasn't been built yet.
var tplLine = $.trim($("#wiktku-start-posparams .wiktku-posparams-text").val());
if (!tplLine) {
tplLine = "{{" + pos + "|" + (values.lang || "") + "}}";
}
return header + imageLine + tplLine + "\n";
}
},
// cinsiyet (gender) — shown for navdêr/serenav only, with choices built
// from metadata[lang].g since not every language has grammatical gender.
cinsiyet: {
id: "cinsiyet",
name: "cinsiyet",
question_fmt: 'Cinsiyeta "' + pageName + '" çi ye?',
question_br: true,
visible: function () { return false; }, // handled inside posparams
// Single source of truth for the selected gender code. The visible
// dropdown lives inside the posparams step (see steps.posparams),
// but it must always read/write THIS hidden field — not a field of
// its own — since getValuesForStep("cinsiyet") reads from here.
build: function (stepDiv) {
var field = stepDiv.find(".wiktku-start-step-field");
if (field.length) return field;
field = $("<input type='hidden'>")
.addClass("wiktku-start-step-field")
.attr("id", "wiktku-start-cinsiyet-field")
.val("");
stepDiv.append(field);
return field;
},
output: function () { return ""; } // consumed by posparams/pos.output
},
// Item 1 (Wikihez, 14 Tebax 2026): jimar (grammatical number) — same
// hidden-field pattern as cinsiyet just above, but writes into its
// own j= template parameter instead of sharing c=. Shown for
// navdêr/serenav only, with choices built from whichever of
// metadata[lang].g are number codes (see isNumberCode) — mirrors
// cinsiyet exactly, just filtered to the other half of that list.
jimar: {
id: "jimar",
name: "jimar",
question_fmt: 'Jimara "' + pageName + '" çi ye?',
question_br: true,
visible: function () { return false; }, // handled inside posparams
build: function (stepDiv) {
var field = stepDiv.find(".wiktku-start-step-field");
if (field.length) return field;
field = $("<input type='hidden'>")
.addClass("wiktku-start-step-field")
.attr("id", "wiktku-start-jimar-field")
.val("");
stepDiv.append(field);
return field;
},
output: function () { return ""; } // consumed by posparams/pos.output
},
// Lêker transitivity — hidden step, handled inside posparams
lektur: {
id: "lektur",
name: "Cureyê lêkerê (fiîlê)",
question_fmt: "Cureyê lêkerê (fiîlê) çi ye?",
question_br: true,
visible: function () { return false; },
choices: [
{ code: "gh", label: "gerguhêz" },
{ code: "x-gh", label: "xwerû-gerguhêz" },
{ code: "p-gh", label: "pêkhatî-gerguhêz" },
{ code: "h-gh", label: "hevedudanî-gerguhêz" },
{ code: "b-gh", label: "biwêjî-gerguhêz" },
{ code: "ngh", label: "negerguhêz" },
{ code: "x-ngh", label: "xwerû-negerguhêz" },
{ code: "p-ngh", label: "pêkhatî-negerguhêz" },
{ code: "h-ngh", label: "hevedudanî-negerguhêz" },
{ code: "b-ngh", label: "biwêjî-negerguhêz" } ],
output: function () { return ""; }
},
// tr — hidden step, handled inside posparams
tr: {
id: "tr",
name: "transliterasyon",
question_fmt: "Transliterasyona vê kelîmeyê",
multiple: false,
narrow: true,
visible: function () { return false; }
},
posparams: {
id: "posparams",
// Fused onto the "pos" card visually (see #wiktku-start-posparams
// in styles.css) so the two read as ONE question, per Ghybu's
// 14 Tebax 2026 feedback — this name is only a no-CSS/no-JS
// fallback, since the h3 that would show it is hidden by CSS.
name: "taybetmendî",
// The old static "Parametreyên cureyê rêzimanî" label named the
// mechanism, not the content. Show what's actually being asked
// for instead: gender for nouns, verb type for verbs, a generic
// fallback (transliteration/forms etc. still apply) otherwise.
question_fmt: function (values) {
var pos = values.pos || "";
if (pos === "navdêr" || pos === "serenav") return "Cins/zayend";
if (/^lêker/.test(pos)) return "Cureyê lêkerê";
return "Taybetmendî";
},
visible: function (values) {
return !!(values.lang && values.pos);
},
build: function (stepDiv) {
if (stepDiv.find(".wiktku-posparams-wrap").length) return null;
var wrap = $("<div class='wiktku-posparams-wrap'></div>");
var helpers = $("<div class='wiktku-posparams-helpers'></div>");
var ta = $("<textarea></textarea>")
.attr("name", "wiktku-posparams-" + $.now())
.attr("class", "wiktku-start-step-field wiktku-posparams-text")
.attr("rows", 2);
var _rebuilding = false;
function safeRebuild() {
if (_rebuilding) return;
_rebuilding = true;
steps.posparams.rebuildTa(stepDiv);
_rebuilding = false;
refresh();
}
// Generic text-input row factory
function makeTextRow(key, labelText, placeholder) {
var row = $("<div class='wiktku-posparams-row'></div>")
.attr("id", "wiktku-posparams-row-" + key).hide();
var inp = $("<input type='text'>")
.addClass("wiktku-start-narrow wiktku-posparams-field")
.attr("data-pp-key", key)
.attr("placeholder", placeholder || "");
inp.on("input", safeRebuild);
row.append($("<label></label>").text(labelText + ": ")).append(inp);
return row;
}
// cinsiyet
var cinsiyetRow = $("<div class='wiktku-posparams-row' id='wiktku-posparams-row-c'></div>")
.append($("<label></label>").text("Cinsiyet: ")).hide();
var cinsiyetSel = $("<select></select>")
.addClass("wiktku-plain-select wiktku-start-narrow wiktku-posparams-cinsiyet-sel")
.append($("<option value=''>— hilbijêre —</option>"));
// Writes into the real, shared #wiktku-start-cinsiyet-field (owned by
// steps.cinsiyet) rather than a field of its own — see the comment
// on steps.cinsiyet.build for why that matters.
cinsiyetSel.on("change", function () {
$("#wiktku-start-cinsiyet-field").val($(this).val()).trigger("change");
safeRebuild();
});
cinsiyetRow.append(cinsiyetSel);
// Item 1 (Wikihez, 14 Tebax 2026): jimar (number) — a second
// dropdown next to Cinsiyet, same pattern (writes into the
// shared hidden #wiktku-start-jimar-field), but into its own
// j= param instead of sharing c=. Options + the title
// tooltip (explanation) are built in syncHelpers, once the
// language's number codes are known.
var jimarRow = $("<div class='wiktku-posparams-row' id='wiktku-posparams-row-jimar'></div>")
.append($("<label></label>").text("Jimar: ")).hide();
var jimarSel = $("<select></select>")
.addClass("wiktku-plain-select wiktku-start-narrow wiktku-posparams-jimar-sel")
.append($("<option value=''>— hilbijêre —</option>"));
jimarSel.on("change", function () {
$("#wiktku-start-jimar-field").val($(this).val()).trigger("change");
safeRebuild();
});
jimarRow.append(jimarSel);
// lektur — Ghybu, 14 Tebax 2026: "'Cureyê lêkerê' nayê fêm
// kirin, bi min pêşta 'gerguhez/negerguhêz' were hilbijartin,
// paşê jî form 'hevdudanî/pêkatî/…' ji ber ku her kes vana
// nizanî." So the one 10-option dropdown ("xwerû-gerguhêz",
// "biwêjî-negerguhêz", …) becomes two plain questions. The
// emitted code is unchanged: base alone ("gh"), or prefix +
// "-" + base ("x-gh") — exactly the codes steps.lektur.choices
// already listed, just assembled from two answers instead of
// asked as one.
var lekturRow = $("<div class='wiktku-posparams-row' id='wiktku-posparams-row-lektur'></div>")
.append($("<label></label>").text("Lêker derbasdar e? ")).hide();
var lekturSel = $("<select></select>")
.addClass("wiktku-plain-select wiktku-start-narrow wiktku-posparams-lektur-sel")
.append($("<option value=''>— hilbijêre —</option>"))
.append($("<option value='gh'>gerguhêz (bireser digire)</option>"))
.append($("<option value='ngh'>negerguhêz (bireser nagire)</option>"));
lekturSel.on("change", safeRebuild);
lekturRow.append(lekturSel);
// Second half of the same question — the structural form.
// Blank = xwerû/sade, which is the common case.
var lekturFormRow = $("<div class='wiktku-posparams-row' id='wiktku-posparams-row-lekturform'></div>")
.append($("<label></label>").text("Şiklê lêkerê: ")).hide();
var lekturFormSel = $("<select></select>")
.addClass("wiktku-plain-select wiktku-start-narrow wiktku-posparams-lekturform-sel")
.append($("<option value=''>sade (asayî)</option>"))
.append($("<option value='x'>xwerû</option>"))
.append($("<option value='p'>pêkhatî</option>"))
.append($("<option value='h'>hevedudanî</option>"))
.append($("<option value='b'>biwêjî</option>"));
lekturFormSel.on("change", safeRebuild);
lekturFormRow.append(lekturFormSel);
helpers.append(cinsiyetRow).append(jimarRow).append(lekturRow).append(lekturFormRow);
// ── Everything below here is "Tercîhên pêşketî" ──────────────
// Ghybu, 14 Tebax 2026: "Tenê 'cîns' û 'jimar' bes e. 'Forma
// mê', 'Forma nêr', … nayê fêm kirin. Bi min wekî 'Tercîhên
// pêşketî' bi navkî din veşartî çêke." The rows themselves are
// unchanged and syncHelpers still shows/hides each one by id
// exactly as before — they just live inside a collapsed panel
// now, so the default view of this card is two dropdowns
// instead of twenty-odd fields.
var advPanel = $("<div class='wiktku-posparams-adv-panel'></div>").hide();
advPanel
.append(makeTextRow("cuda", "nîşankirina alternatîv", "cuda…"))
.append(makeTextRow("tr", "Transliterasyon (tr)", "Transliterasyon…"))
.append(makeTextRow("ts", "Transkrîpsiyon (ts)", "Transkrîpsiyon…"))
.append(makeTextRow("m", "Forma mê (m)", "Forma mê…"))
.append(makeTextRow("mtr", "Translit. mê (mtr)", "Transliterasyona mê…"))
.append(makeTextRow("n", "Forma nêr (n)", "Forma nêr…"))
.append(makeTextRow("ntr", "Translit. nêr (ntr)", "Transliterasyona nêr…"))
.append(makeTextRow("p", "Forma pirjimar (p)", "Forma pirjimar…"))
.append(makeTextRow("ptr", "Translit. pirjimar", "Transliterasyona pirjimar…"))
.append(makeTextRow("y", "Forma yekjimar (y)", "Forma yekjimar…"))
.append(makeTextRow("ytr", "Translit. yekjimar", "Transliterasyona yekjimar…"))
.append(makeTextRow("sûp", "Forma sûperlatîv (sûp)", "Forma sûperlatîv…"))
.append(makeTextRow("sûptr", "Translit. sûperlatîv", "Transliterasyona sûperlatîv…"))
.append(makeTextRow("komp", "Forma komparatîv (komp)", "Forma komparatîv…"))
.append(makeTextRow("komptr", "Translit. komparatîv", "Transliterasyona komparatîv…"))
.append(makeTextRow("gir", "Forma girdêk (gir)", "gir=…"))
.append(makeTextRow("girtr", "Translit. gir", "girtr=…"))
.append(makeTextRow("hûr", "Forma hûrek (hûr)", "hûr=…"))
.append(makeTextRow("hûrtr", "Translit. hûr", "hûrtr=…"))
.append(makeTextRow("hanja", "Forma hanja", "hanja=…"))
.append(makeTextRow("hanjaTr","Translit. hanja", "hanjaTr=…"))
// Lêker rehên demê (only shown when pos is lêker — see syncHelpers)
.append(makeTextRow("niha", "Rehê dema niha (niha)", "Rehê dema niha…"))
.append(makeTextRow("nihatr", "Translit. rehê dema niha", "Transliterasyona rehê dema niha…"))
.append(makeTextRow("borî", "Rehê dema borî (borî)", "Rehê dema borî…"))
.append(makeTextRow("borîtr", "Translit. rehê dema borî", "Transliterasyona rehê dema borî…"))
.append(makeTextRow("subj", "Rehê dema bilanî (subj)", "Rehê dema bilanî…"))
.append(makeTextRow("subjtr", "Translit. rehê dema bilanî", "Transliterasyona rehê dema bilanî…"));
// Optional boolean params — nested inside the advanced panel
// (they were already the most niche thing on the card).
var optPanel = $("<div class='wiktku-posparams-opt-panel'></div>");
$.each([
{ key: "form", label: "form — ev made forma tewandî ye" },
{ key: "formaalt", label: "formaalt — vê madeyê bike forma alternatîv" },
{ key: "nekatcure", label: "nekatcure — sinifa rêzimanî kategorîze neke" },
{ key: "nekatcins", label: "nekatcins — kategoriya cinsiyetê neyîne" },
{ key: "nekatçendterm", label: "nekatçendterm — kategoriya çend-term neyîne" },
{ key: "serlînkneke", label: "serlînkneke — sernavê madeyê lînk neke" },
{ key: "nekatpalîndrom", label: "nekatpalîndrom — kategoriya palîndromê neyîne" },
{ key: "neformtr", label: "neformtr — transliterasyona forman neyîne" }
], function (_, p) {
var cb = $("<input type='checkbox'>")
.attr("id", "wiktku-posparams-opt-" + p.key).val(p.key).on("change", safeRebuild);
var lbl = $("<label></label>").attr("for", "wiktku-posparams-opt-" + p.key).text(" " + p.label);
optPanel.append($("<div class='wiktku-posparams-opt-row'></div>").append(cb).append(lbl));
});
advPanel.append(optPanel);
var optToggle = $("<a href='#' class='wiktku-posparams-opt-toggle wiktku-adv-toggle'></a>")
.attr("aria-expanded", "false")
.append($("<span class='wiktku-adv-toggle-chevron'>▾</span>"))
.append($("<span class='wiktku-adv-toggle-text'>Tercîhên pêşketî</span>"));
var optCount = $("<span class='wiktku-adv-toggle-count'></span>");
/** "N zevî · M tije" for whatever the advanced panel is
* currently showing — the row set changes with pos/lang (see
* syncHelpers), so this counts visible rows, not all of them. */
function syncAdvCount() {
var rows = advPanel.find(".wiktku-posparams-row").filter(function () {
return $(this).css("display") !== "none";
});
var filled = rows.filter(function () {
return $.trim($(this).find("input").val() || "") !== "";
}).length;
var checked = advPanel.find(".wiktku-posparams-opt-panel input:checked").length;
optCount.text(rows.length + " zevî · " + (filled + checked) + " tije");
}
stepDiv.data("syncAdvCount", syncAdvCount);
optToggle.on("click", function (e) {
e.preventDefault();
var open = advPanel.is(":visible");
advPanel.toggle(!open);
$(this).attr("aria-expanded", open ? "false" : "true")
.toggleClass("wiktku-adv-open", !open);
syncAdvCount();
});
advPanel.on("input change", "input", syncAdvCount);
helpers.append($("<div class='wiktku-adv-toggle-row'></div>")
.append(optToggle).append(optCount));
helpers.append(advPanel);
wrap.append(helpers).append(ta);
// Typing directly in textarea keeps cinsiyet/jimar hidden
// fields in sync, but does NOT call refresh() — preserves
// manual edits.
ta.on("input", function () {
var text = $(this).val();
var cMatch = text.match(/\|c=([^|}\s]+)/);
$("#wiktku-start-cinsiyet-field").val(cMatch ? cMatch[1] : "");
var jMatch = text.match(/\|j=([^|}\s]+)/);
$("#wiktku-start-jimar-field").val(jMatch ? jMatch[1] : "");
});
stepDiv.append(wrap);
return null;
},
/** Reads all helper widget values and rewrites the textarea.
* Called only by safeRebuild (user interaction) — never by syncHelpers,
* so manual textarea edits are never overwritten by a refresh cycle. */
rebuildTa: function (stepDiv) {
var values = getValues();
var pos = values.pos || "";
var lang = values.lang || "";
if (!pos || !lang) return;
var cinsiyet = stepDiv.find(".wiktku-posparams-cinsiyet-sel").val() || "";
var jimar = stepDiv.find(".wiktku-posparams-jimar-sel").val() || "";
// Two dropdowns, one code: "gh" / "ngh" on their own, or
// prefixed with the structural form ("x-gh", "b-ngh", …).
var lekturBase = stepDiv.find(".wiktku-posparams-lektur-sel").val() || "";
var lekturForm = stepDiv.find(".wiktku-posparams-lekturform-sel").val() || "";
var lektur = lekturBase ? (lekturForm ? lekturForm + "-" + lekturBase : lekturBase) : "";
function v(key) {
return $.trim(stepDiv.find(".wiktku-posparams-field[data-pp-key='" + key + "']").val());
}
var out = "{{" + pos + "|" + lang;
if (pos === "navdêr" || pos === "serenav") {
out += cinsiyet ? "|c=" + cinsiyet : (lang === "ku" ? "|c=?" : "");
// Item 1: number is its own j= param now, separate from
// c= — c= keeps holding gender (and gender+plural
// compounds like m-p/n-p, unaffected by this change).
if (jimar) out += "|j=" + jimar;
} else if (/^lêker/.test(pos) && lektur) {
out += "|c=" + lektur;
}
if (v("cuda")) out += "|" + v("cuda");
if (v("tr")) out += "|tr=" + v("tr");
if (v("ts")) out += "|ts=" + v("ts");
$.each(["m","n","p","y"], function (_, k) {
if (v(k)) out += "|" + k + "=" + v(k);
if (v(k+"tr")) out += "|" + k + "tr=" + v(k+"tr");
});
if (v("sûp")) out += "|sûp=" + v("sûp");
if (v("sûptr")) out += "|sûptr=" + v("sûptr");
if (v("komp")) out += "|komp=" + v("komp");
if (v("komptr")) out += "|komptr=" + v("komptr");
if (v("gir")) out += "|gir=" + v("gir");
if (v("girtr")) out += "|girtr=" + v("girtr");
if (v("hûr")) out += "|hûr=" + v("hûr");
if (v("hûrtr")) out += "|hûrtr=" + v("hûrtr");
if (v("hanja")) out += "|hanja=" + v("hanja");
if (v("hanjaTr")) out += "|hanjaTr=" + v("hanjaTr");
if (v("niha")) out += "|niha=" + v("niha");
if (v("nihatr")) out += "|nihatr=" + v("nihatr");
if (v("borî")) out += "|borî=" + v("borî");
if (v("borîtr")) out += "|borîtr=" + v("borîtr");
if (v("subj")) out += "|subj=" + v("subj");
if (v("subjtr")) out += "|subjtr=" + v("subjtr");
stepDiv.find(".wiktku-posparams-opt-panel input:checked").each(function () {
var key = $(this).val();
// "form" marks this entry as a form-of/inflected entry — it
// takes "erê" rather than the plain "1" the other boolean
// opt params use.
out += "|" + key + "=" + (key === "form" ? "erê" : "1");
});
out += "}}";
stepDiv.find(".wiktku-posparams-text").val(out);
$("#wiktku-start-cinsiyet-field").val(cinsiyet);
$("#wiktku-start-jimar-field").val(jimar);
},
/** Called from refresh() — controls row visibility only.
* Does NOT rewrite textarea so user edits are preserved.
* Rebuilds only when textarea is empty (first pos selection). */
syncHelpers: function (stepDiv) {
var values = getValues();
var pos = values.pos || "";
var lang = values.lang || "";
var needsTr = needsTransliteration(lang);
var isNom = pos === "navdêr" || pos === "serenav" || pos === "rengdêr";
var isAdj = pos === "rengdêr";
var isTîp = pos === "tîp";
var isJa = lang === "ja";
var isLeker = /^lêker/.test(pos);
// Item 1: metadata[lang].g used to list gender AND number
// codes together — split them here (see isNumberCode) so
// Cîns only ever offers gender codes (and gender+plural
// compounds like m-p/n-p, which aren't NUMBER_LABELS keys)
// and the new Jimar dropdown only offers number codes.
var meta = metadata[lang];
var allCodes = (meta && meta.g) || [];
var genderCodes = $.grep(allCodes, function (c) { return !isNumberCode(c); });
var jimarCodes = $.grep(allCodes, function (c) { return isNumberCode(c); });
var showC = (pos === "navdêr" || pos === "serenav") && genderCodes.length > 0;
var cRow = stepDiv.find("#wiktku-posparams-row-c");
cRow.toggle(showC);
if (showC) {
var sel = cRow.find(".wiktku-posparams-cinsiyet-sel");
// Prefer the select's own current value (normal in-session
// use); fall back to the shared hidden field, which is how
// a cache/section restore communicates a saved gender
// before this select has any <option>s to hold it.
var prev = sel.val() || $("#wiktku-start-cinsiyet-field").val() || "";
sel.find("option[value!='']").remove();
$.each(genderCodes, function (_, code) {
sel.append($("<option></option>").val(code).text(genderLabel(code)));
});
if (prev) sel.val(prev);
}
var showJimar = (pos === "navdêr" || pos === "serenav") && jimarCodes.length > 0;
var jimarRowEl = stepDiv.find("#wiktku-posparams-row-jimar");
jimarRowEl.toggle(showJimar);
if (showJimar) {
var jimarSelEl = jimarRowEl.find(".wiktku-posparams-jimar-sel");
var prevJimar = jimarSelEl.val() || $("#wiktku-start-jimar-field").val() || "";
jimarSelEl.find("option[value!='']").remove();
$.each(jimarCodes, function (_, code) {
var def = NUMBER_LABELS[code] || {};
var opt = $("<option></option>").val(code).text(numberOptionLabel(code));
// The explanation (cat, e.g. "dualia tantum") shows as a
// hover tooltip — <option> can't hold richer markup.
if (def.cat) opt.attr("title", def.cat);
jimarSelEl.append(opt);
});
if (prevJimar) jimarSelEl.val(prevJimar);
}
stepDiv.find("#wiktku-posparams-row-lektur").toggle(isLeker);
// Only ask for the structural form once the person has said
// gerguhêz/negerguhêz — "paşê jî form", per Ghybu.
stepDiv.find("#wiktku-posparams-row-lekturform")
.toggle(isLeker && !!stepDiv.find(".wiktku-posparams-lektur-sel").val());
stepDiv.find("#wiktku-posparams-row-tr").toggle(needsTr);
stepDiv.find("#wiktku-posparams-row-ts").toggle(needsTr);
stepDiv.find("#wiktku-posparams-row-m").toggle(isNom);
stepDiv.find("#wiktku-posparams-row-mtr").toggle(isNom && needsTr);
stepDiv.find("#wiktku-posparams-row-n").toggle(isNom);
stepDiv.find("#wiktku-posparams-row-ntr").toggle(isNom && needsTr);
stepDiv.find("#wiktku-posparams-row-p").toggle(isNom);
stepDiv.find("#wiktku-posparams-row-ptr").toggle(isNom && needsTr);
stepDiv.find("#wiktku-posparams-row-y").toggle(isNom);
stepDiv.find("#wiktku-posparams-row-ytr").toggle(isNom && needsTr);
stepDiv.find("#wiktku-posparams-row-sûp").toggle(isAdj);
stepDiv.find("#wiktku-posparams-row-sûptr").toggle(isAdj && needsTr);
stepDiv.find("#wiktku-posparams-row-komp").toggle(isAdj);
stepDiv.find("#wiktku-posparams-row-komptr").toggle(isAdj && needsTr);
stepDiv.find("#wiktku-posparams-row-gir").toggle(isTîp);
stepDiv.find("#wiktku-posparams-row-girtr").toggle(isTîp && needsTr);
stepDiv.find("#wiktku-posparams-row-hûr").toggle(isTîp);
stepDiv.find("#wiktku-posparams-row-hûrtr").toggle(isTîp && needsTr);
stepDiv.find("#wiktku-posparams-row-hanja").toggle(isJa);
stepDiv.find("#wiktku-posparams-row-hanjaTr").toggle(isJa);
stepDiv.find("#wiktku-posparams-row-niha").toggle(isLeker);
stepDiv.find("#wiktku-posparams-row-nihatr").toggle(isLeker && needsTr);
stepDiv.find("#wiktku-posparams-row-borî").toggle(isLeker);
stepDiv.find("#wiktku-posparams-row-borîtr").toggle(isLeker && needsTr);
stepDiv.find("#wiktku-posparams-row-subj").toggle(isLeker);
stepDiv.find("#wiktku-posparams-row-subjtr").toggle(isLeker && needsTr);
// Row visibility just changed, so the "N zevî" half of the
// advanced toggle's badge is stale — recount.
var syncAdvCount = stepDiv.data("syncAdvCount");
if (typeof syncAdvCount === "function") syncAdvCount();
if (!$.trim(stepDiv.find(".wiktku-posparams-text").val())) {
steps.posparams.rebuildTa(stepDiv);
}
},
output: function () { return ""; } // pos.output reads the textarea directly
},
dfn: {
id: "dfn",
name: "Mane",
// Field types that live behind "Malûmatên pêşketî". Kept as one
// list so the collapse CSS, the count badge and the allGroups
// adv: flags below can't drift apart.
ADV_SUBGROUPS: [
"wiktku-dfn-etiket",
"wiktku-dfn-kategori",
"wiktku-dfn-alternativ",
"wiktku-dfn-koordine",
"wiktku-dfn-jornav",
"wiktku-dfn-jernav"
],
question_fmt: function (values) {
var base = "Maneya kelîmeyê binivîse. Mane otomatîk tê lînkkirin!";
if (values.lang === "ku") {
return base + " Ji bo tercimeyan beşa 'Werger' bi kar bîne!";
}
return base;
},
multiple: true,
ordered: true,
rows: 3,
visible: function (values) {
return values.lang && values.pos;
},
example: function (values) {
// posExamples loaded from [[MediaWiki:Gadget-start.js/data.json]].
var examples = steps.dfn.posExamples || {};
var full = values.pos || "";
return examples[full] || "";
},
// Builds one sense block (<li>): mane textarea, nimûne list, and
// sub-lists for alternatîv/hevmane/dijmane/etc.
buildSenseBlock: function (stepDiv) {
var block = $("<li class='wiktku-dfn-sense'></li>");
// — Mane textarea (declared first so the template handler can reference it) —
var dfnArea = $("<textarea></textarea>")
.attr("name", "wiktku-dfn-mane-" + $.now() + "-" + Math.random().toString(36).substr(2, 9))
.attr("class", "wiktku-start-step-field wiktku-dfn-mane")
.attr("rows", 6)
.attr("placeholder", "Mane…");
dfnArea.on("input", function () {
steps.dfn.onDfnInput(stepDiv, block, this);
});
// — Tercime + Îzah boxes (non-ku alternative to the plain mane box) —
// Non-ku entries get a direct translation plus a {{îzah|…}}-wrapped
// gloss instead of a Kurdish-style gloss. Rather than teach every
// consumer (getSenses/getOutput/linkify) a second data shape, these
// boxes just write their combined text into dfnArea and re-fire its
// "input" event, so dfnArea stays the single source of truth.
var tercimeArea = $("<textarea></textarea>")
.attr("name", "wiktku-dfn-tercime-" + $.now() + "-" + Math.random().toString(36).substr(2, 9))
.attr("class", "wiktku-dfn-subfield wiktku-dfn-tercime")
.attr("rows", 2)
.attr("placeholder", "Tercimeyên rasterast ên kurmancî… Ji bo school-a îngilîzî li vir 'mekteb, medrese' binivîse");
var izahArea = $("<textarea></textarea>")
.attr("name", "wiktku-dfn-izah-" + $.now() + "-" + Math.random().toString(36).substr(2, 9))
.attr("class", "wiktku-dfn-subfield wiktku-dfn-izah")
.attr("rows", 3)
.attr("placeholder", "Îzaha kurmancî… Ji bo school-a îngilîzî li vir 'cihê tehsîlgirtinê' binivîse");
var nonKuWrap = $("<div class='wiktku-dfn-nonku-wrap'></div>")
.append(tercimeArea).append(izahArea)
.hide();
function syncNonKuToMane() {
var t = $.trim(tercimeArea.val());
var iz = $.trim(izahArea.val());
// if tercime is blank, use îzah as definition
var combined = t ? (iz ? t + " {{îzah|" + iz + "}}" : t) : iz;
dfnArea.val(combined);
// Re-fires onDfnInput so the sense list still grows and
// refresh() still runs, exactly as if this were typed
// directly into the mane textarea.
dfnArea.trigger("input");
}
tercimeArea.on("input", syncNonKuToMane);
izahArea.on("input", syncNonKuToMane);
// Switches between the plain mane box and the tercime+îzah pair —
// only for non-ku entries with no tplSelect selected.
function updateManeMode() {
var lang = getValues().lang || "";
var isTpl = !!tplSelect.val();
if (lang && lang !== "ku" && !isTpl) {
dfnArea.hide();
nonKuWrap.show();
} else {
nonKuWrap.hide();
if (!isTpl) dfnArea.show();
}
}
// Store on the block so refresh() can re-sync every block when
// lang changes, and restoreDfn() can re-sync after restoring.
block.data("updateManeMode", updateManeMode);
// — Template selector (optional — replaces mane when chosen) —
// Template definitions loaded from [[MediaWiki:Gadget-start.js/data.json]].
var tplDefs = steps.dfn.tplDefs || {};
// Cache of all non-placeholder option elements, so updateTplOptions
// can detach/re-attach them without losing the full list.
var _allTplOptions = [];
var tplSelect = $(mw.html.element("select", { "class": "wiktku-dfn-tpl-select" }));
tplSelect.attr("data-placeholder", "Li şablonekê bigere");
tplSelect.append($("<option value=''>— yan jî şablonek hilbijêre —</option>"));
$.each(tplDefs, function (name, tpl) {
// Rewiye tine, 14 Tebax 2026: "guharto? kevnbûyî? ku-Latn?
// şaşnivîs? famkirina van zehmet e" — these 13 names had
// zero explanation in the dropdown (unlike steps.pron's
// template picker, which already shows "name — tpl.desc").
// Mirrors that same pattern here: if tpl.desc is ever
// added to a tplDefs entry in data.json, it'll show up
// automatically. It's optional per-entry, not required,
// since data.json doesn't have desc text for these yet —
// writing accurate one-line explanations for each needs
// someone who actually knows what each template does.
var opt = $("<option></option>")
.val(name)
.text(tpl.desc ? name + " — " + tpl.desc : name)
.attr("data-langs", tpl.langs ? tpl.langs.join(",") : "")
.attr("data-nolang", tpl.noLang ? "1" : "");
tplSelect.append(opt);
_allTplOptions.push(opt[0]);
});
function updateTplOptions() {
var lang = getValues().lang || "";
var currentVal = tplSelect.val();
var currentStillValid = false;
// Detach all non-placeholder options, then re-attach only the visible
// ones — native <select> won't reliably hide options any other way.
tplSelect.find("option[value!='']").detach();
$.each(_allTplOptions, function (_, opt) {
var allowed = $(opt).attr("data-langs");
var visible = !allowed || allowed.split(",").indexOf(lang) !== -1;
if (visible) {
tplSelect.append(opt);
if ($(opt).val() === currentVal) currentStillValid = true;
}
});
tplSelect.trigger("wiktku:refresh");
if (currentVal && !currentStillValid) {
tplSelect.val("");
tplTitleInput.hide().val("");
updateManeMode();
}
}
// Store updater on the element so refresh() can call it for all blocks.
tplSelect.data("updateOptions", updateTplOptions);
var tplTitleInput = $("<input type='text'>")
.addClass("wiktku-dfn-tpl-title wiktku-start-narrow")
.attr("placeholder", "Navê rûpela hedefê…")
.hide();
// Grow the sense list when the title field of the last block gets content,
// mirroring what onDfnInput does for the plain mane textarea.
tplTitleInput.on("input", function () {
steps.dfn.onDfnInput(stepDiv, block, this);
});
// Şablon senses have no plain gloss, so hide alternatîv/hevmane/
// dijmane/etc. Etîket, Nimûne and Jêgirtin stay visible either way.
function updateFieldVisibility() {
var isTpl = !!tplSelect.val();
$.each(HIDDEN_ON_TPL_GROUPS, function (_, cls) {
block.find("." + cls + "-group").toggle(!isTpl);
});
}
// Store on the block so restoreDfn() can re-sync visibility
// after setting tplSelect's value.
block.data("updateFieldVisibility", updateFieldVisibility);
tplSelect.on("change", function () {
var chosen = $(this).val();
if (chosen) {
dfnArea.hide();
nonKuWrap.hide();
tplTitleInput.show().focus();
} else {
tplTitleInput.hide().val("");
updateManeMode();
}
updateFieldVisibility();
// Re-run refresh so the Werger step visibility updates.
refresh();
});
var tplRow = $("<div></div>").addClass("wiktku-dfn-tpl-row")
.append(tplSelect).append(" ").append(tplTitleInput);
block.append(tplRow);
block.append(dfnArea);
block.append(nonKuWrap);
// Apply lang filter on initial build.
updateTplOptions();
updateManeMode();
// — Sub-field groups. —
// Ghybu, 14 Tebax 2026: "Bi min beşên 'Hevmane' û dijmane jî
// bike de nav beşa Mane ji ber ku pirr tên xwestin" — and,
// separately, that showing all nine at once is what makes this
// form read as long and tevlihev. So the four people actually
// reach for (Nimûne, Jêgirtin, Hevmane, Dijmane) stay open, in
// that order, and the other five sit behind the "Malûmatên
// pêşketî" toggle (adv: true → .wiktku-dfn-subgroup-adv, which
// is what the collapse CSS keys off now).
// Jêgirtin isn't in this array — it's a compound widget built
// after the loop — but it's inserted right after Nimûne so the
// visible order matches the list above.
var allGroups = [
{ cls: "wiktku-dfn-nimune", label: "Nimûne", rows: 2, narrow: false },
{ cls: "wiktku-dfn-hevmane", label: "Hevmane", rows: 1, narrow: true, izah: "Spehî hevmaneya Bedew e." },
{ cls: "wiktku-dfn-dijmane", label: "Dijmane", rows: 1, narrow: true, izah: "Zengîn dijmaneya feqîr e." },
{ cls: "wiktku-dfn-etiket", label: "Etîket", rows: 1, narrow: true, izah: "xisûsen, Mêrdîn, anatomî, Badînî", noLangSuffix: true, adv: true },
{ cls: "wiktku-dfn-kategori", label: "Kategorî", rows: 1, narrow: true, izah: "wekî etîket lê xuya nabe tenê kategorîze dike", noLangSuffix: true, adv: true },
{ cls: "wiktku-dfn-alternativ", label: "Formên alternatîv", rows: 1, narrow: true, izah: "Varyantên vê kelîmeyê", adv: true },
{ cls: "wiktku-dfn-koordine", label: "Termên koordîne", rows: 1, narrow: true, izah: "Pisîk û kûçik termên koordîne ne çunkî Jornavên wan gelek in", adv: true },
{ cls: "wiktku-dfn-jornav", label: "Jornav", rows: 1, narrow: true, izah: "Heywan jornavê guhandar e", adv: true },
{ cls: "wiktku-dfn-jernav", label: "Jêrnav", rows: 1, narrow: true, izah: "Guhandar jêrnavê heywan e", adv: true }
];
$.each(allGroups, function (_, g) {
var groupDiv = $("<div></div>").addClass("wiktku-dfn-subgroup " + g.cls + "-group");
if (g.adv) groupDiv.addClass("wiktku-dfn-subgroup-adv");
function buildNimuneLi() {
var lang = getValues().lang || "";
var li = $("<li></li>").addClass("wiktku-dfn-nimune-li");
var mainTa = $("<textarea></textarea>")
.attr("name", "wiktku-dfn-nimune-text-" + $.now() + "-" + Math.random().toString(36).substr(2, 9))
.attr("rows", g.rows)
.attr("class", "wiktku-dfn-subfield wiktku-dfn-nimune-text")
.attr("placeholder", "Nimûneya emilandina kelîmeyê tu bi xwe binivîse…");
mainTa.on("input", function () {
highlightLinebreak(this);
var val = $.trim($(this).val());
var isLast = li.is(list.children("li:last-child"));
if (val && isLast) {
list.append(buildNimuneLi());
}
});
li.append(mainTa);
var subWrap = $("<div></div>").addClass("wiktku-dfn-nimune-sub");
if (needsTransliteration(lang)) {
subWrap.append(
$("<textarea></textarea>")
.attr("name", "wiktku-dfn-nimune-tr-" + $.now() + "-" + Math.random().toString(36).substr(2, 9))
.attr("rows", 5)
.attr("class", "wiktku-dfn-subfield wiktku-dfn-nimune-tr")
.attr("placeholder", "Transliterasyona bi alfabeya latînî")
);
}
if (lang && lang !== "ku") {
subWrap.append(
$("<textarea></textarea>")
.attr("name", "wiktku-dfn-nimune-t-" + $.now() + "-" + Math.random().toString(36).substr(2, 9))
.attr("rows", 5)
.attr("class", "wiktku-dfn-subfield wiktku-dfn-nimune-t")
.attr("placeholder", "Tercimeya nimûneyê bi kurmancî")
);
}
if (subWrap.children().length) li.append(subWrap);
return li;
}
// The placeholder names the current language, but that's
// often not chosen yet when this block is first built —
// so keep a function around that refresh() (and onSubInput,
// for newly-grown fields) can call again once lang is set
// or changes.
function subPlaceholder() {
if (g.noLangSuffix) return g.label + "…";
var lang = getValues().lang || "";
var langLabel = lang ? getLangLabel(lang) : "";
return g.label + (langLabel ? " bi " + langLabel : "") + "…";
}
function updateSubPlaceholders() {
list.find("> li > textarea.wiktku-dfn-subfield").attr("placeholder", subPlaceholder());
}
if (g.cls === "wiktku-dfn-nimune") {
// Nimûne — compound widget with tr/t sub-fields.
var lbl = $("<span></span>").addClass("wiktku-dfn-sublabel")
.append($("<span></span>").addClass("wiktku-dfn-sublabel-term").text(g.label))
.append(": ");
var list = $("<ol></ol>").addClass("wiktku-dfn-sublist " + g.cls + "-list");
groupDiv.data("buildNimuneLi", buildNimuneLi);
list.append(buildNimuneLi());
groupDiv.append(lbl).append(list);
block.append(groupDiv);
} else {
// Regular always-visible group — label + growing textarea list.
var lbl = $("<span></span>").addClass("wiktku-dfn-sublabel")
.append($("<span></span>").addClass("wiktku-dfn-sublabel-term").text(g.label))
.append(": ")
.append($("<span></span>").addClass("wiktku-dfn-sublabel-hint").text(g.izah));
var list = $("<ol></ol>").addClass("wiktku-dfn-sublist " + g.cls + "-list");
var useModifiers = !!MODIFIER_SUBGROUPS[g.cls];
list.data("updatePlaceholders", updateSubPlaceholders);
var firstInput = $("<textarea></textarea>")
.attr("name", g.cls + "-" + $.now() + "-" + Math.random().toString(36).substr(2, 9))
.attr("rows", g.rows)
.attr("class", "wiktku-dfn-subfield" + (g.narrow ? " wiktku-start-narrow" : ""))
.attr("placeholder", subPlaceholder());
firstInput.on("input", function () {
steps.dfn.onSubInput(list, this, g.rows, g.narrow, useModifiers);
});
list.append(useModifiers ? makeModifierLi(firstInput) : $("<li></li>").append(firstInput));
groupDiv.append(lbl).append(list);
block.append(groupDiv);
}
});
// — Jêder group — growing list, same structure as Nimûne. —
(function () {
var jederGroupDiv = $("<div></div>").addClass("wiktku-dfn-subgroup wiktku-dfn-jeder-group");
var jederLbl = $("<span></span>").addClass("wiktku-dfn-sublabel")
.append($("<span></span>").addClass("wiktku-dfn-sublabel-term").text("Jêgirtin"))
.append(": ");
var jederList = $("<ol></ol>").addClass("wiktku-dfn-sublist wiktku-dfn-jeder-list");
function buildJederLi() {
var lang = getValues().lang || "";
var li = $("<li></li>").addClass("wiktku-dfn-jeder-li");
// Quote text textarea
var quoteTa = $("<textarea></textarea>")
.attr("name", "wiktku-dfn-nimune-quote-" + $.now() + "-" + Math.random().toString(36).substr(2, 9))
.attr("rows", 2)
.attr("class", "wiktku-dfn-subfield wiktku-dfn-nimune-quote")
.attr("placeholder", "Nimûneya emilandinê ji kitêb an çavkaniyeke din binivîse");
quoteTa.on("input", function () {
highlightLinebreak(this);
var val = $.trim($(this).val());
var isLast = li.is(jederList.children("li:last-child"));
if (val && isLast) {
jederList.append(buildJederLi());
}
});
li.append(quoteTa);
// tr/t sub-fields for the quote — shown as needed for the language.
var quoteSubWrap = $("<div></div>").addClass("wiktku-dfn-quote-sub");
if (needsTransliteration(lang)) {
quoteSubWrap.append(
$("<textarea></textarea>")
.attr("name", "wiktku-dfn-nimune-quote-tr-" + $.now() + "-" + Math.random().toString(36).substr(2, 9))
.attr("rows", 2)
.attr("class", "wiktku-dfn-subfield wiktku-dfn-nimune-quote-tr")
.attr("placeholder", "Transliterasyona jêgirtinê…")
);
}
if (lang && lang !== "ku") {
quoteSubWrap.append(
$("<textarea></textarea>")
.attr("name", "wiktku-dfn-nimune-quote-t-" + $.now() + "-" + Math.random().toString(36).substr(2, 9))
.attr("rows", 2)
.attr("class", "wiktku-dfn-subfield wiktku-dfn-nimune-quote-t")
.attr("placeholder", "Tercimeya jêgirtinê bi kurmancî")
);
}
if (quoteSubWrap.children().length) li.append(quoteSubWrap);
// Citoid auto-fill: fetch citation data from a URL, DOI or ISBN and
// prefill the source şablon + fields below (see Gadget-citoid-helper.js).
var citoidWrap = $("<div></div>").addClass("wiktku-dfn-quote-citoid");
var citoidInput = $("<textarea></textarea>")
.addClass("wiktku-dfn-subfield wiktku-dfn-quote-citoid-input")
.attr("rows", 1)
.attr("placeholder", "URL, DOI an ISBN binivîse ku otomatîk were tijekirin…");
var citoidBtn = new OO.ui.ButtonWidget({
label: "Bi otomatîk tijî bike",
classes: [ "wiktku-dfn-quote-citoid-btn" ]
});
var citoidStatus = $("<span></span>").addClass("wiktku-dfn-quote-citoid-status");
// Fetches citation data from Citoid and fills this citation's
// şablon + fields — only rebuilds fields on template change,
// and never overwrites values the user already typed.
function runCitoidFetch() {
var query = $.trim(citoidInput.val());
if (!query) {
mw.notify("Ji kerema xwe re pêşî URL, DOI an ISBNyekê binivîse.");
return;
}
citoidBtn.setDisabled(true);
citoidStatus.text("Tê anîn…");
wikt.citoid.fetchJederFields(query).then(function (result) {
var jederKey = result.jederKey;
var hasTpl = !!jederKey && srcSel.find("option[value='" + jederKey + "']").length > 0;
var targetVal = hasTpl ? jederKey : "__manual__";
// Only rebuild if switching şablon, so a repeat fetch
// doesn't clear fields already filled in by hand.
if (srcSel.val() !== targetVal) {
srcSel.val(targetVal).trigger("change");
}
if (hasTpl) {
// Tenê qadên vala tijî bike.
$.each(result.fields, function (key, val) {
var input = srcFields.find("[data-field-key='" + key + "']");
if (input.length && !$.trim(input.val())) {
input.val(val);
}
});
} else {
// Şablonek nehat naskirin ji bo vê itemType — rêzikeke
// çavkaniyê ya bi destan a ji qadên Citoid tê çêkirin,
// lê tenê ger qada destan vala be.
var manualField = srcFields.find(".wiktku-dfn-quote-src-manual");
if (!$.trim(manualField.val())) {
var parts = [];
$.each(["nivîskar", "sernav", "websîte", "kovar", "weşanxane", "sal", "url"], function (_, k) {
if (result.fields[k]) parts.push(result.fields[k]);
});
manualField.val(parts.join(", "));
}
}
citoidStatus.text("");
}, function (errorMsg) {
citoidStatus.text(typeof errorMsg === "string" ? errorMsg : "Nehat dîtin. Kontrol bike ka URL/DOI/ISBN rast e.");
}).always(function () {
citoidBtn.setDisabled(false);
});
}
citoidBtn.on("click", runCitoidFetch);
citoidInput.on("keydown", function (e) {
if (e.which === 13) { // Enter
e.preventDefault();
runCitoidFetch();
}
});
citoidWrap.append(citoidInput).append(citoidBtn.$element).append(citoidStatus);
// Source template selector, specific to this citation.
var srcSel = $("<select></select>").addClass("wiktku-dfn-quote-src-sel wiktku-plain-select");
srcSel.append($("<option value=''>— Çavkaniyê hilbijêre —</option>"));
srcSel.append($("<option></option>").val("__manual__").text("Bi destê xwe binivîsim"));
srcSel.append($("<option></option>").val("__category__").text("Ji Kategorî:Çavkanî şablonekê hilbijêre"));
var jederDefs = steps.dfn.jederDefs || {};
$.each(jederDefs, function (tplName, def) {
srcSel.append($("<option></option>").val(tplName).text(def.label));
});
// Dynamic source fields container.
var srcFields = $("<div></div>").addClass("wiktku-dfn-quote-src-fields");
srcSel.on("change", function () {
srcFields.empty();
var chosen = $(this).val();
// Citoid is only useful before a source is chosen —
// hide it once a selection is made, restore on reset.
if (chosen) {
citoidWrap.hide();
} else {
citoidWrap.show();
return;
}
if (chosen === "__manual__") {
// Freeform source, written by the user — becomes the 2nd
// positional param of {{jêder|lang|…}} instead of çavkanî?.
srcFields.append(
$("<textarea></textarea>")
.attr("rows", 4)
.addClass("wiktku-dfn-subfield wiktku-dfn-quote-src-manual")
.attr("placeholder", "Çavkaniyê bi destê xwe binivîse…")
);
return;
}
if (chosen === "__category__") {
// Search widget over the members of [[Kategorî:Çavkanî]].
// Picking a şablon here immediately switches the row to
// "Bi destê xwe binivîsim" mode with {{Şablon}} pre-filled,
var catWrap = $("<span></span>").addClass("wiktku-native-select-wrap wiktku-dfn-quote-src-cat");
var catInput = $("<input type='search' autocomplete='off'>")
.addClass("wiktku-start-narrow wiktku-dfn-quote-src-cat-input")
.attr("placeholder", "Li navê şablonê bigere…");
var catResults = $("<ul></ul>").addClass("wiktku-ac-results wiktku-dfn-quote-src-cat-results").hide();
var catStatus = $("<span></span>").addClass("wiktku-dfn-quote-src-cat-status").text("Şablon tên barkirin…");
var showCatResults = function (query) {
var q = $.trim(query).toLowerCase();
catResults.empty();
var list = catSrcTemplates || [];
var matched = q ?
$.grep(list, function (name) { return name.toLowerCase().indexOf(q) !== -1; }) :
list;
if (!matched.length) {
catResults.hide();
return;
}
$.each(matched.slice(0, 50), function (_, name) {
var li = $("<li></li>").text(name).attr("data-value", name);
var touchMoved = false;
li.on("touchstart", function () { touchMoved = false; });
li.on("touchmove", function () { touchMoved = true; });
li.on("touchend", function (e) {
if (touchMoved) return;
e.preventDefault();
selectCatTpl(name);
});
li.on("mousedown", function (e) {
e.preventDefault();
selectCatTpl(name);
});
catResults.append(li);
});
catResults.show();
};
// Wraps the chosen şablon as {{Name}}, drops it into the
// manual textarea, and switches the row into manual mode
// so the user can keep editing it (add params, etc.).
var selectCatTpl = function (name) {
catResults.hide();
srcSel.val("__manual__");
srcSel.trigger("change");
srcFields.find(".wiktku-dfn-quote-src-manual")
.val("{{" + name + "}}")
.trigger("focus");
};
catInput.on("input", function () {
showCatResults($(this).val());
});
catInput.on("focus", function () {
showCatResults($(this).val());
});
catInput.on("blur", function () {
setTimeout(function () { catResults.hide(); }, 200);
});
catWrap.append(catInput).append(catResults).append(catStatus);
srcFields.append(catWrap);
fetchCatSrcTemplates().then(function () {
catStatus.text("");
}, function () {
catStatus.text("Şablon nehatin barkirin.");
});
return;
}
var def = (steps.dfn.jederDefs || {})[chosen];
if (!def) return;
$.each(def.fields, function (key, label) {
var row = $("<div></div>").addClass("wiktku-dfn-quote-src-row");
var fieldLbl = $("<label></label>").text(label + ": ");
var inp = $("<textarea></textarea>")
.attr("rows", 2)
.addClass("wiktku-dfn-quote-src-input wiktku-start-narrow")
.attr("data-field-key", key)
.attr("placeholder", label + "…");
// "Sernav" / "Sernavê orjînal" (title fields, e.g. for
// kitêb/kovar/malper) get a taller, draggable box; every
// other field in the template stays as-is. Field labels
// come from the on-wiki jederDefs data, so match on the
// (diacritic-folded) label text rather than a fixed key.
var foldedLabel = foldDiacritics(label);
if (/^sernav$/.test(foldedLabel) || /orjin/.test(foldedLabel)) {
inp.addClass("wiktku-dfn-quote-src-input--title");
}
row.append(fieldLbl).append(inp);
srcFields.append(row);
});
});
li.append(citoidWrap).append(srcSel).append(srcFields);
return li;
}
jederGroupDiv.data("buildJederLi", buildJederLi);
jederList.append(buildJederLi());
jederGroupDiv.append(jederLbl).append(jederList);
// Straight after Nimûne rather than last: Jêgirtin is the
// same kind of thing (an attested use of the word) and the
// two belong together — see the allGroups comment above.
var nimuneGroup = block.find(".wiktku-dfn-nimune-group");
if (nimuneGroup.length) jederGroupDiv.insertAfter(nimuneGroup);
else block.append(jederGroupDiv);
}());
// Apply the initial hide/show state for the sub-groups (matches
// tplSelect's starting value, which is normally empty).
updateFieldVisibility();
return block;
},
/** Grows the sense list when the last mane textarea gets content. */
onDfnInput: function (stepDiv, block, textarea) {
var val = $.trim($(textarea).val());
var list = stepDiv.find("ol.wiktku-dfn-list");
var isLast = block.is(list.children("li:last-child"));
if (val && isLast) {
var newBlock = steps.dfn.buildSenseBlock(stepDiv);
list.append(newBlock);
// Give the new block's template selector the searchable picker.
initSelects(newBlock);
}
refresh();
},
/** Grows a sub-list (nimûne/formên alternatîv/hevmane/dijmane/termên koordîne) on input. */
onSubInput: function (list, input, rows, narrow, modifiers) {
var val = $.trim($(input).val());
var item = $(input).parent();
var isLast = item.is(list.children("li:last-child"));
if (val && isLast) {
var next = $("<textarea></textarea>")
.attr("name", "wiktku-dfn-sub-" + $.now() + "-" + Math.random().toString(36).substr(2, 9))
.attr("rows", rows)
.attr("class", "wiktku-dfn-subfield" + (narrow ? " wiktku-start-narrow" : ""));
next.on("input", function () {
steps.dfn.onSubInput(list, this, rows, narrow, modifiers);
});
list.append(modifiers ? makeModifierLi(next) : $("<li></li>").append(next));
// New field starts with no placeholder — give it (and any
// others in the list) the current one.
var updatePlaceholders = list.data("updatePlaceholders");
if (typeof updatePlaceholders === "function") updatePlaceholders();
}
},
// Populated from [[MediaWiki:Gadget-start.js/data.json]] (tplDefs, posExamples, jederDefs).
tplDefs: {},
posExamples: {},
jederDefs: {},
build: function (stepDiv) {
if (stepDiv.find("ol.wiktku-dfn-list").length) return null;
// Rewiye tine, 14 Tebax 2026: "şablonên mana jî dikare serê
// yekî tevlîhev bike... famkirina van zehmet e" — the "an jî
// şablonek hilbijêre" dropdown inside each sense (guharto,
// kevnbûyî, ku-Latn, şaşnivîs, …) had no explanation at all.
// One reassurance, shown once for the whole Mane step rather
// than repeated per sense: it's optional, plain text is the
// normal path.
if (!stepDiv.find(".wiktku-dfn-tpl-hint").length) {
stepDiv.append(
$("<p class='wiktku-step-hint wiktku-dfn-tpl-hint'></p>").text(
"Ji bo her maneyekê, dropdown-a \"an jî şablonek hilbijêre\" ne mecbûrî ye — bi gelemperî tu tenê maneyê bi tîpên asayî dinivîsî. Ew şablon tenê ji bo rewşên taybet in (mînak: guherto, kevnbûyî, şaşnivîs); heke tu nizanî kîjan divê, vale bihêle."
)
);
}
// One-time "hide/show all" link for the etîket/kategorî/hevmane/…/
// nimûne/jêgirtin subgroups. Wikihez, 14 Tebax 2026: starts
// collapsed now (was expanded by default) — this is "malûmatên
// pêşketî" in the Mane tab's new Mane → malûmatên pêşketî →
// Wêne → Bi zaravayên din → Werger ordering.
if (!stepDiv.find(".wiktku-dfn-subs-toggle").length) {
stepDiv.addClass("wiktku-dfn-subs-hidden");
var subsRow = $("<div class='wiktku-adv-toggle-row'></div>");
var subsToggle = $("<a href='#' class='wiktku-dfn-subs-toggle wiktku-adv-toggle'></a>");
var subsLabel = $("<span class='wiktku-adv-toggle-text'></span>");
subsToggle
.append($("<span class='wiktku-adv-toggle-chevron'>▾</span>"))
.append(subsLabel);
// Count badge: the panel is collapsed by default, so without
// this nothing on screen says what is behind it or whether
// anything in there is already filled in.
var subsCount = $("<span class='wiktku-adv-toggle-count'></span>");
function syncSubsToggle() {
var hidden = stepDiv.hasClass("wiktku-dfn-subs-hidden");
subsLabel.text(hidden ? "Malûmatên pêşketî nîşan bide" : "Malûmatên pêşketî veşêre");
subsToggle.attr("aria-expanded", hidden ? "false" : "true");
// One count per field TYPE (not per sense) — "Etîket" is
// one row in the person's head even when three senses
// each have one.
var total = 0, filled = 0;
$.each(steps.dfn.ADV_SUBGROUPS, function (_, cls) {
total++;
var any = false;
stepDiv.find("." + cls + "-group textarea").each(function () {
if ($.trim($(this).val())) any = true;
});
if (any) filled++;
});
subsCount.text(total + " zevî · " + filled + " tije");
}
subsToggle.on("click", function (e) {
e.preventDefault();
stepDiv.toggleClass("wiktku-dfn-subs-hidden");
syncSubsToggle();
});
// Recount as the person types anywhere in the step.
stepDiv.on("input", "textarea", function () { syncSubsToggle(); });
stepDiv.data("syncSubsToggle", syncSubsToggle);
subsRow.append(subsToggle).append(subsCount);
stepDiv.append(subsRow);
syncSubsToggle();
}
var list = $("<ol class='wiktku-dfn-list'></ol>");
list.append(steps.dfn.buildSenseBlock(stepDiv));
stepDiv.append(list);
return null;
},
/** Reads all sense blocks from the DOM and returns an array of sense objects. */
getSenses: function (stepDiv) {
var senses = [];
stepDiv.find("li.wiktku-dfn-sense").each(function () {
var block = $(this);
var tplSel = block.find("select.wiktku-dfn-tpl-select");
var tpl = tplSel.val() || "";
// noLang: template already encodes the language — don't add |lang| param.
var tplNoLang = tpl
? tplSel.find("option[value='" + tpl + "']").attr("data-nolang") === "1"
: false;
var tplTitle = $.trim(block.find("input.wiktku-dfn-tpl-title").val());
var mane = $.trim(block.find("textarea.wiktku-dfn-mane").val());
function readList(cls) {
var vals = [];
block.find("." + cls + "-list textarea").each(function () {
var v = $.trim($(this).val());
if (v) vals.push(v);
});
return vals;
}
// Nimûne items are compound: { text, tr?, t? }
function readNimuneList() {
var items = [];
block.find(".wiktku-dfn-nimune-list li.wiktku-dfn-nimune-li").each(function () {
var text = $.trim($(this).find(".wiktku-dfn-nimune-text").val());
if (!text) return;
var obj = { text: text };
var tr = $.trim($(this).find(".wiktku-dfn-nimune-tr").val());
var t = $.trim($(this).find(".wiktku-dfn-nimune-t").val());
if (tr) obj.tr = tr;
if (t) obj.t = t;
items.push(obj);
});
return items;
}
// Jêder is a growing list of citations, one per li — mirrors readNimuneList().
function readJederList() {
var items = [];
block.find(".wiktku-dfn-jeder-list li.wiktku-dfn-jeder-li").each(function () {
var li = $(this);
var quote = $.trim(li.find(".wiktku-dfn-nimune-quote").val());
if (!quote) return;
var obj = { quote: quote };
var qtr = $.trim(li.find(".wiktku-dfn-nimune-quote-tr").val());
var qt = $.trim(li.find(".wiktku-dfn-nimune-quote-t").val());
if (qtr) obj.quoteTr = qtr;
if (qt) obj.quoteT = qt;
var tplName = li.find(".wiktku-dfn-quote-src-sel").val();
if (tplName === "__manual__") {
var manual = $.trim(li.find(".wiktku-dfn-quote-src-manual").val());
if (manual) obj.jederManual = manual;
} else if (tplName === "__category__") {
// Reachable only if the user opened the category search but
// never picked a şablon — picking one switches the row to
// __manual__ (see selectCatTpl above), so there's nothing
// meaningful to save here.
} else if (tplName) {
obj.jederTpl = tplName;
var fields = {};
li.find(".wiktku-dfn-quote-src-input").each(function () {
var k = $(this).attr("data-field-key");
var v = $.trim($(this).val());
if (k && v) fields[k] = v;
});
obj.jêderFields = fields;
}
items.push(obj);
});
return items;
}
senses.push({
tpl: tpl,
tplNoLang: tplNoLang,
tplTitle: tplTitle,
mane: mane,
etiket: readList("wiktku-dfn-etiket"),
kategori: readList("wiktku-dfn-kategori"),
nimune: readNimuneList(),
jeder: readJederList(),
alternativ: readList("wiktku-dfn-alternativ"),
hevmane: readList("wiktku-dfn-hevmane"),
dijmane: readList("wiktku-dfn-dijmane"),
koordine: readList("wiktku-dfn-koordine"),
jornav: readList("wiktku-dfn-jornav"),
jernav: readList("wiktku-dfn-jernav")
});
});
return senses;
},
getOutput: function (values, callback) {
var stepDiv = $("#wiktku-start-dfn");
var senses = steps.dfn.getSenses(stepDiv);
var lang = values.lang;
// A sense counts as "filled" if it has a mane, a chosen template + title,
// or any other content (etîket/hevmane/nimûne/jêder…) worth keeping.
var hasMane = senses.some(function (s) {
return s.mane !== "" || (s.tpl && s.tplTitle) || senseHasExtraContent(s);
});
var defLines = []; // one entry per kept sense (goes to linkify)
var citeLines = []; // parallel — nimûne+jêder for that same sense
var izahLines = []; // parallel — raw îzah gloss for that same sense
// True only once some sense's *actual* dfn text (post tercime/îzah
// split) is non-empty.
var hasLinkableMane = false;
$.each(senses, function (_, sense) {
// — Template sense (e.g. {{guharto|ku|somepage}}) —
if (sense.tpl) {
if (!sense.tplTitle) return; // skip empty template senses
var tplKatTpl = buildSenseTpl(sense, "kategori", lang, "K");
var tplLabelTpl = buildSenseTpl(sense, "etiket", lang, "e");
var tplCall = sense.tplNoLang
? "{{" + sense.tpl + "|" + sense.tplTitle + "}}"
: "{{" + sense.tpl + "|" + lang + "|" + sense.tplTitle + "}}";
var idx = defLines.length;
var cite = buildCite(sense, lang);
defLines.push("# " + (tplKatTpl ? tplKatTpl + " " : "") + (tplLabelTpl ? tplLabelTpl + " " : "") + tplCall +
(cite ? "{{wiktku-cite-" + idx + "}}" : ""));
citeLines.push(cite);
izahLines.push(""); // template senses have no îzah
return;
}
// — Normal mane sense —
var dfn = sense.mane;
if (!dfn && !senseHasExtraContent(sense)) return; // truly empty
// Pull the îzah gloss (if any) out of the combined tercime+îzah
// string — it's spliced back in separately below, after its
// own linkify pass (see izahLines / the second linkifyText call).
var izahRaw = null;
var tercimeIzah = splitTercimeIzah(dfn);
if (tercimeIzah) {
dfn = tercimeIzah.tercime;
izahRaw = stripWikilinks(tercimeIzah.izah);
}
if (dfn) {
dfn = stripWikilinks(dfn);
// Sentence-case + trailing period are for ku definitions,
// which are written as full glosses.
if (lang === "ku") {
if (dfn[0] !== dfn[0].toUpperCase()) dfn = capitalize(dfn);
if (!dfn.match(/[.…?!)\]]$/)) dfn += ".";
}
// Real prose — this is what makes the sense worth running
// through the main linkify pass.
hasLinkableMane = true;
} else if (izahRaw === null) {
// No mane at all — this is just the "{{mane?|lang}}"
// placeholder, a bare template call with no plain words
// in it. Do NOT count it as linkable: sending nothing but
// bracketed templates through the main linkify pass hangs
// the linkify gadget (see the hasLinkableMane/hasIzah
// check below).
dfn = lang === "ku" ? "{{mane?|" + lang + "}}" : "";
}
var katTpl = buildSenseTpl(sense, "kategori", lang, "K");
var labelTpl = buildSenseTpl(sense, "etiket", lang, "e");
var out = "# " + (katTpl ? katTpl + " " : "") + (labelTpl ? labelTpl + " " : "") + dfn;
var idx = defLines.length;
var hasThisIzah = izahRaw !== null && $.trim(izahRaw) !== "";
// Bare {{...}} token — like {{wiktku-cite-N}}, this survives
// linkify's first pass untouched (it treats template calls as
// opaque), then gets swapped for {{îzah|…}} once the actual
// gloss text has been linkified in its own separate pass.
if (hasThisIzah) {
out += (dfn ? " " : "") + "{{wiktku-izah-" + idx + "}}";
}
function wordLine(tpl, words) {
if (!words.length) return "";
return "\n#: {{" + tpl + "|" + lang + "|" + words.join("|") + "}}";
}
out += wordLine("alt-r", sense.alternativ);
out += wordLine("hevmane", sense.hevmane);
out += wordLine("dijmane", sense.dijmane);
out += wordLine("koordîne", sense.koordine);
out += wordLine("jornav", sense.jornav);
out += wordLine("jêrnav", sense.jernav);
var cite = buildCite(sense, lang);
defLines.push(out + (cite ? "{{wiktku-cite-" + idx + "}}" : ""));
citeLines.push(cite);
izahLines.push(hasThisIzah ? izahRaw : "");
});
// Splice citeLines back into a linkified string, replacing each
// {{wiktku-cite-N}} token with its stored nimûne/jêder block.
function restoreCites(t) {
return t.replace(/\{\{wiktku-cite-(\d+)\}\}/g, function (_, n) {
return citeLines[parseInt(n, 10)] || "";
});
}
// Runs text through the linkify gadget if it's loaded, otherwise
// just passes it through unchanged. Shared by both linkify passes
// below (main mane text, and — separately — îzah glosses).
function linkifyText(t, cb) {
if (typeof $.kuLinkify === "function") {
$.kuLinkify(t, cb);
} else {
cb(t);
}
}
var hasIzah = izahLines.some(function (t) { return t && $.trim(t) !== ""; });
var text = defLines.join("\n") + "\n";
if (!hasMane) {
// No definitions entered — emit {{mane?}} with nimûne?.
text = "# {{mane?|" + lang + "}}\n#* {{nimûne?|" + lang + "}}\n";
callback(text);
return;
}
// Runs the îzah-only linkify pass against `base` (either the raw
// text, when there's no linkable mane to run the main pass on
// first, or the already-linkified main text). Shared by both
// branches below so the token-splice logic only lives once.
function runIzahPass(base) {
var izahJoined = $.map(izahLines, function (raw, idx) {
if (!raw) return undefined;
return "{{wiktku-izah-open-" + idx + "}}" + raw + "{{wiktku-izah-close-" + idx + "}}";
}).join("\n");
linkifyText(izahJoined, function (izahLinked) {
var izahByIdx = {};
var re = /\{\{wiktku-izah-open-(\d+)\}\}([\s\S]*?)\{\{wiktku-izah-close-\1\}\}/g;
var m;
while ((m = re.exec(izahLinked)) !== null) {
izahByIdx[parseInt(m[1], 10)] = m[2];
}
var withIzah = base.replace(/\{\{wiktku-izah-(\d+)\}\}/g, function (_, n) {
var linked = izahByIdx[parseInt(n, 10)];
return linked !== undefined ? "{{îzah|" + linked + "}}" : "";
});
callback(restoreCites(withIzah));
});
}
if (!hasLinkableMane) {
if (!hasIzah) {
// All filled senses are template senses (or otherwise have
// no plain text at all) — nothing here needs linkify.
callback(restoreCites(text));
return;
}
// There's no plain mane text anywhere (e.g. tercime left blank
// with only îzah filled in), so every defLine is just a bare
// template call with nothing to word-link. Sending a line
// like "# {{wiktku-izah-0}}" through the main linkify pass
// gives it no plain words to work with, makes the linkify
// gadget hang — so skip that pass entirely and run only
// the îzah pass, splicing straight into the unlinkified text.
var loadIzahOnly = function () { runIzahPass(text); };
mw.loader.using("ext.gadget.linkify", loadIzahOnly, loadIzahOnly);
return;
}
var didTryToLoad = function () {
// First pass: the main definition text (mane), same as before.
linkifyText(text, function (mainLinked) {
if (!hasIzah) {
callback(restoreCites(mainLinked));
return;
}
// Second pass: îzah glosses, linkified via their own
// separate call. Each gloss is wrapped in its own
// {{wiktku-izah-open/close-N}} pair; like the existing
// {{wiktku-cite-N}} tokens, these sit inside double
// braces so linkify leaves the tokens themselves alone —
// only the raw gloss text between each pair gets linked.
runIzahPass(mainLinked);
});
};
mw.loader.using("ext.gadget.linkify", didTryToLoad, didTryToLoad);
}
},
tewandin: {
id: "tewandin",
name: "tewandin",
question_fmt: 'Tewandina "' + pageName + '" binivîse',
visible: function (values) {
return values.lang && values.pos;
},
build: function (stepDiv) {
if (stepDiv.find(".wiktku-tewandin-wrap").length) return null;
var wrap = $("<div class='wiktku-tewandin-wrap'></div>");
var ta = $("<textarea></textarea>")
.attr("name", "wiktku-tewandin-" + $.now())
.attr("class", "wiktku-start-step-field wiktku-tewandin-text")
.attr("rows", 4)
.attr("placeholder", "{{ku-tewîn-nav|nêr}}");
wrap.append(ta);
stepDiv.append(wrap);
function autoPopulate() {
if (!ta.length) return;
var vals = getValues();
var c = vals.cinsiyet || "";
var p = vals.pos || "";
if (!pageName.includes(" ") && c && GENDER_BASE_LABELS[c] &&
(p === "navdêr" || p === "serenav") && vals.lang === "ku" &&
c !== "mndudil") {
var label = (c === "mnmane") ? "mê û nêr" : GENDER_BASE_LABELS[c];
var out = "{{ku-tewîn-nav|" + label;
if (p === "serenav") out += "|y";
out += "}}";
if (!$.trim(ta.val())) ta.val(out);
}
}
setTimeout(function () {
autoPopulate();
$("#wiktku-start-form").on("change.tewandin",
"#wiktku-start-lang-field, #wiktku-start-cinsiyet-field, #wiktku-start-pos-field",
autoPopulate);
}, 0);
return ta;
},
output: function () {
var manualText = $.trim($("#wiktku-start-tewandin .wiktku-tewandin-text").val());
if (manualText) {
return "\n==== Tewandin ====\n" + manualText + "\n";
}
return "";
}
},
// resim — one or more images
resim: {
id: "resim",
name: "resim",
question_fmt: "Resmekê lê zêde bike",
visible: function (values) { return !!(values.lang && values.pos); },
/** Builds one image row: filename + caption + alt text. */
buildItem: function (stepDiv) {
var item = $("<li class='wiktku-resim-item'></li>");
var fileRow = $("<div class='wiktku-posparams-row'></div>");
var fileInp = $("<input type='text'>")
.addClass("wiktku-start-step-field wiktku-start-narrow wiktku-resim-file")
.attr("placeholder", "navê_dosyayê.jpg");
fileRow.append($("<label></label>").text("Navê dosyayê: ")).append(fileInp);
var capRow = $("<div class='wiktku-posparams-row'></div>");
var capInp = $("<input type='text'>")
.addClass("wiktku-start-step-field wiktku-start-narrow wiktku-resim-caption")
.attr("placeholder", "Danasîna resimê…");
capRow.append($("<label></label>").text("Danasîn: ")).append(capInp);
// Alt text: what a screen reader announces for this image
var altRow = $("<div class='wiktku-posparams-row'></div>");
var altInp = $("<input type='text'>")
.addClass("wiktku-start-step-field wiktku-start-narrow wiktku-resim-alt")
.attr("placeholder", "Ji bo kesên nabînin, çi tê dîtin? (ne mecbûrî)");
altRow.append($("<label></label>").text("Nivîsa alternatîf: ")).append(altInp);
// Auto-fill the caption with the plain page name when a filename
// is typed
fileInp.on("input", function () {
var file = $.trim($(this).val());
var curCap = $.trim(capInp.val());
var isDefault = !curCap || curCap === pageName;
if (file && isDefault) {
capInp.val(pageName);
} else if (!file && isDefault) {
capInp.val("");
}
steps.resim.onFileInput(stepDiv, item, this);
});
item.append(fileRow).append(capRow).append(altRow);
return item;
},
/** Grows the image list when the last row's filename gets content. */
onFileInput: function (stepDiv, item, input) {
var val = $.trim($(input).val());
var list = stepDiv.find("ol.wiktku-resim-list");
var isLast = item.is(list.children("li:last-child"));
if (val && isLast) {
list.append(steps.resim.buildItem(stepDiv));
}
},
build: function (stepDiv) {
if (stepDiv.find(".wiktku-resim-wrap").length) return null;
var wrap = $("<div class='wiktku-resim-wrap'></div>");
var list = $("<ol class='wiktku-resim-list'></ol>");
list.append(steps.resim.buildItem(stepDiv));
wrap.append(list);
stepDiv.append(wrap);
return null;
},
/** Reads every filled row from the DOM into an array of {file, caption, alt}
* objects — blank rows (missing filename or caption) are skipped.
* Non-Kurdish captions get wrapped in {{zim|lang|…}} here, unless
* the user already typed their own {{zim|…}} template. Alt text is
* optional and left as plain text either way. */
getImages: function (values) {
var lang = (values && values.lang) || getValues().lang || "";
var images = [];
$("#wiktku-start-resim li.wiktku-resim-item").each(function () {
var file = $.trim($(this).find(".wiktku-resim-file").val());
var caption = $.trim($(this).find(".wiktku-resim-caption").val());
var alt = $.trim($(this).find(".wiktku-resim-alt").val());
if (!file || !caption) return;
// Strip leading "Wêne:" or "File:" if the user typed it — we add it ourselves.
file = file.replace(/^(wêne|file|image)\s*:\s*/i, "");
if (lang && lang !== "ku" && !/^\{\{zim\s*\|/i.test(caption)) {
caption = "{{zim|" + lang + "|" + caption + "}}";
}
images.push({ file: file, caption: caption, alt: alt });
});
return images;
},
output: function (values) {
var images = steps.resim.getImages(values);
if (!images.length) return "";
return images.map(function (img) {
var altPart = img.alt ? "|alt=" + img.alt : "";
return "[[Wêne:" + img.file + "|thumb" + altPart + "|" + img.caption + "]]";
}).join("\n") + "\n";
}
},
// bnr-h — {{bnr-h|Page1|Page2|…}} prepended before the lang section (shared, not per-section)
bnrh: {
id: "bnrh",
name: "binêre herwiha (bnr-h)",
question_fmt: "Şablona bnr-h li qismê herî jor a rûpelê",
//visible: function (values) { return !!values.lang; },
multiple: true,
narrow: true,
placeholder: "Ji bo 'test' bnr 'Test', 'teşt'",
output: function (values) {
var pages = $.grep(values.bnrh || [], function (p) { return !!$.trim(p); });
if (!pages.length) return "";
return "{{bnr-h|" + pages.map(function (p) { return $.trim(p); }).join("|") + "}}\n";
}
},
bikaranin: {
id: "bikaranin",
name: "Notên bikaranînê",
question_fmt: "Notên bikaranînê yên li ser vê kelîmeyê",
visible: function (values) {
return values.lang && values.pos;
},
multiple: false,
narrow: false,
output: function (values) {
var text = $.trim(values.bikaranin || "");
if (!text) return "";
return "\n==== Notên bikaranînê ====\n" + text + "\n";
},
},
xwendin: {
id: "xwendin",
name: "Bêhtir bixwîne",
question_fmt: "Lînkên derveyî eleqedarî vê madeyê",
visible: function (values) {
return values.lang && values.pos;
},
multiple: false,
narrow: false,
placeholder: function (values) {
if (!values || !values.lang) {
return `* {{wpedî}} ji bo ku meqaleya Wîkîpediyayê lînk bidî`;
}
const ziman = values.lang === "ku" ? "" : `|ziman=${values.lang}`;
return `* {{wpedî${ziman}}} ji bo ku meqaleya Wîkîpediyayê lînk bidî`;
},
output: function (values) {
var text = $.trim(values.xwendin || "");
if (!text) return "";
return "\n==== Bêhtir bixwîne ====\n" + text + "\n";
},
},
alfabeyendin: {
id: "alfabeyendin",
name: "Bi alfabeyên din",
question_fmt: function (values) {
var base = "Nivîsîna vê kelîmeyê bi alfabeyên din"
var langLabel = values.lang ? getLangLabel(values.lang) : "";
if (langLabel) {
return base + " ên " + langLabel;
}
return base;
},
visible: function (values) {
return values.lang && values.pos;
},
multiple: false,
narrow: false,
placeholder: "Ji bo kurmancî: * {{ku-ar|şiklê alfaba erebî}}",
output: function (values) {
var text = $.trim(values.alfabeyendin || "");
if (!text) return "";
return "\n==== Bi alfabeyên din ====\n" + text + "\n";
},
},
formalt: makeWordListStep("formalt", "formên alternatîv", "Formên alternatîv ên vê kelîmeyê ji bo hemû maneyan eger te li binê maneyê nenivîsandibe"),
hevmane: makeWordListStep("hevmane", "hevmane", "Hevmaneyên vê kelîmeyê ji bo hemû maneyan eger te li binê maneyê nenivîsandibe"),
dijmane: makeWordListStep("dijmane", "dijmane", "Dijmaneyên vê kelîmeyê ji bo hemû maneyan eger te li binê maneyê nenivîsandibe"),
jornav: makeWordListStep("jornav", "jornav", "Jornavên vê kelîmeyê ji bo hemû maneyan eger te li binê maneyê nenivîsandibe"),
jernav: makeWordListStep("jernav", "jêrnav", "Jêrnavên vê kelîmeyê ji bo hemû maneyan eger te li binê maneyê nenivîsandibe"),
je: makeWordListStep("je", "jê", "Kelîmeyên jê çêbûyî binivîse"),
tekildar: makeWordListStep("tekildar", "têkildar", "Kelîmeyên ji aliyê etîmolojiyê ve têkildarî vê kelîmeyê binivîse"),
binereherwiha: makeWordListStep("binereherwiha", "herwiha binêre", "Kelîmeyên din ên eleqedar binivîse"),
etym: {
id: "etym",
name: "etîmolojî",
question_fmt: "Etîmolojiya kelîmeyê binivîse",
// etymTpls populated from data.json
etymTpls: {},
visible: function (values) {
return values.lang && values.pos;
},
// Fills the insert-dropdown from the current etymTpls object.
refreshTplSelect: function () {
var sel = $("#wiktku-start-etym .wiktku-tpl-insert-select");
if (!sel.length) return;
sel.find("option[value!='']").remove();
$.each(steps.etym.etymTpls, function (name, tpl) {
sel.append($("<option></option>").val(tpl.snippet).text(name + " — " + tpl.desc));
});
// Tell the picker the option list changed.
sel.trigger("wiktku:refresh");
},
build: function (stepDiv) {
if (stepDiv.find(".wiktku-etym-wrap").length) return null;
var wrap = $("<div class='wiktku-etym-wrap'></div>");
var ta = $("<textarea></textarea>")
.attr("name", "wiktku-etym-" + $.now())
.attr("class", "wiktku-start-step-field wiktku-etym-text")
.attr("rows", 4)
.attr("placeholder", "Ji {{ji|en|ku|apple}}. yan rasterast binivîse…");
// Template insert dropdown — options also refreshed after data.json loads.
var sel = $("<select class='wiktku-tpl-insert-select'></select>");
sel.attr("data-placeholder", "Şablonek lê zêde bike…");
sel.append($("<option value=''>— şablonek lê zêde bike —</option>"));
$.each(steps.etym.etymTpls, function (name, tpl) {
sel.append($("<option></option>").val(tpl.snippet).text(name + " — " + tpl.desc));
});
sel.on("change", function () {
var snippet = $(this).val();
if (!snippet) return;
var lang = getValues().lang || "";
snippet = snippet.replace(/CODE/g, lang).replace(/SOURCELANG/g, "?");
insertAtCursor(ta[0], snippet);
$(this).val("");
sel.trigger("wiktku:refresh");
ta.focus();
});
wrap.append(sel);
wrap.append(ta);
stepDiv.append(wrap);
initSelects(wrap);
return ta;
},
output: function (values) {
var text = $.trim($("#wiktku-start-etym .wiktku-etym-text").val());
if (text) {
return "\n==== Etîmolojî ====\n" + text + "\n";
}
// No etymology entered — emit {{ji?|lang}} as a placeholder.
// Skip it only when every filled sense is a şablon sense
// a completely empty entry with no şablon chosen still gets the placeholder
var dfnSenses = steps.dfn.getSenses($("#wiktku-start-dfn"));
var hasFilledTplSense = dfnSenses.some(function (s) {
return !!s.tpl && !!s.tplTitle;
});
var hasRegularMane = dfnSenses.some(function (s) {
return !s.tpl && (s.mane !== "" || senseHasExtraContent(s));
});
if (hasFilledTplSense && !hasRegularMane) return "";
return "\n==== Etîmolojî ====\n{{ji?|" + values.lang + "}}\n";
} },
dunde: {
id: "dunde",
name: "dûnde",
question_fmt: "Eger ev kelîme ji vî zimanî ketibe zimanekî din, vî zimanî û kelîmeya wî binivîse",
visible: function (values) {
return !!values.pos;
},
disabledKeys: function (values) {
return {"navz": true, [values.lang]: true}
},
// Language dropdown + growing word-input list; a new row appends
// when the dropdown gets a value. Mirrors steps.trans, but flat.
buildRow: function (stepDiv) {
var row = $("<li class='wiktku-dunde-row wiktku-lang-row'></li>");
// Language selector — the searchable picker is applied after insertion into DOM.
var langSel = $(mw.html.element("select", {
"class": "wiktku-start-step-keyfield wiktku-start-narrow" }));
langSel.attr("data-placeholder", "Li zimanekî bigere");
populateMenus(langSel, steps.dunde.keys || [], steps.dunde.disabledKeys);
// When a language is chosen, ensure a next empty row exists.
langSel.on("change", function () {
steps.dunde.onLangChange(stepDiv, row);
});
// Word list for this language.
var wordList = $("<ul class='wiktku-dunde-words wiktku-lang-row-words'></ul>");
var firstWord = steps.dunde.makeWordInput();
wordList.append($("<li></li>").append(firstWord));
// The searchable picker is attached by initSelects() once the row
// is in the DOM (see onLangChange/build below).
row.append(langSel).append(wordList);
return row;
},
makeWordInput: function () {
var input = $("<textarea></textarea>")
.attr("name", "wiktku-dunde-word-" + $.now() + "-" + Math.random().toString(36).substr(2, 9))
.attr("rows", 1)
.attr("class", "wiktku-dfn-subfield wiktku-start-narrow")
.attr("placeholder", "Kelîme…");
input.on("input", function () {
var list = $(this).closest("ul.wiktku-dunde-words");
var item = $(this).parent();
var val = $.trim($(this).val());
if (val && item.is(list.children("li:last-child"))) {
var next = steps.dunde.makeWordInput();
list.append($("<li></li>").append(next));
}
});
return input;
},
onLangChange: function (stepDiv, row) {
var list = stepDiv.find("ul.wiktku-dunde-list");
var isLast = row.is(list.children("li.wiktku-dunde-row:last-child"));
if (isLast) {
var newRow = steps.dunde.buildRow(stepDiv);
list.append(newRow);
// Attach the searchable picker now the row is in the DOM.
initSelects(newRow);
}
// Keep disabled keys in sync across all lang selectors.
steps.dunde.syncDisabledKeys(stepDiv);
},
/** Disables already-selected languages in all other dropdowns. */
syncDisabledKeys: function (stepDiv) {
var taken = $.extend({}, steps.dunde.disabledKeys);
stepDiv.find("li.wiktku-dunde-row select").each(function () {
var v = $(this).val();
if (v) taken[v] = true;
});
stepDiv.find("li.wiktku-dunde-row select").each(function () {
var self = $(this);
var own = self.val();
self.find("option").each(function () {
var code = $(this).val();
if (!code) return;
$(this).prop("disabled", taken[code] && code !== own);
});
self.trigger("wiktku:refresh");
});
},
build: function (stepDiv) {
if (stepDiv.find("ul.wiktku-dunde-list").length) return null;
var list = $("<ul class='wiktku-dunde-list wiktku-lang-row-list'></ul>");
list.append(steps.dunde.buildRow(stepDiv));
stepDiv.append(list);
// Attach the searchable picker now the select is in the DOM.
initSelects(list);
return null;
},
/** Reads all [langcode, words[]] rows from the DOM. */
getRows: function (stepDiv) {
var result = [];
stepDiv.find("li.wiktku-dunde-row").each(function () {
var lang = $(this).find("select").val();
if (!lang) return;
var words = [];
$(this).find("ul.wiktku-dunde-words textarea").each(function () {
var v = $.trim($(this).val());
if (v) words.push(v);
});
if (words.length) result.push([lang, words]);
});
return result;
},
output: function () {
var stepDiv = $("#wiktku-start-dunde");
var rows = steps.dunde.getRows(stepDiv);
if (!rows.length) return "";
var lines = $.map(rows, function (row) {
var lang = row[0], words = row[1];
return "* {{dû|" + lang + "|" + words.join("|") + "}}";
});
return "\n==== Dûnde ====\n" + lines.join("\n") + "\n";
}
},
zarava: {
id: "zarava",
name: "bi zaravayên din",
question_fmt: "'"+ pageName + "' di zaravayên din de çawa tê gotin?",
visible: function (values) {
return steps.trans.visible(values);
},
disabledKeys: {},
buildRow: function (group) {
var row = $("<li class='wiktku-zarava-row wiktku-lang-row'></li>");
var langSel = $(mw.html.element("select", {
"class": "wiktku-start-step-keyfield wiktku-start-narrow" }));
langSel.attr("data-placeholder", "Li zaravayekî bigere");
populateMenus(langSel, steps.zarava.keys || [], steps.zarava.disabledKeys);
langSel.on("change", function () {
steps.zarava.onLangChange(group, row);
});
var wordList = $("<ul class='wiktku-zarava-words wiktku-lang-row-words'></ul>");
var firstWord = steps.zarava.makeWordInput();
wordList.append($("<li></li>").append(firstWord));
row.append(langSel).append(wordList);
return row;
},
makeWordInput: function () {
var input = $("<textarea></textarea>")
.attr("name", "wiktku-zarava-word-" + $.now() + "-" + Math.random().toString(36).substr(2, 9))
.attr("rows", 1)
.attr("class", "wiktku-dfn-subfield wiktku-start-narrow")
.attr("placeholder", "Tercime…");
input.on("input", function () {
var list = $(this).closest("ul.wiktku-zarava-words");
var item = $(this).parent();
var val = $.trim($(this).val());
if (val && item.is(list.children("li:last-child"))) {
var next = steps.zarava.makeWordInput();
list.append($("<li></li>").append(next));
}
});
return input;
},
onLangChange: function (group, row) {
var list = group.find("ul.wiktku-zarava-list");
var isLast = row.is(list.children("li.wiktku-zarava-row:last-child"));
if (isLast) {
var newRow = steps.zarava.buildRow(group);
list.append(newRow);
// Attach the searchable picker now the row is in the DOM.
initSelects(newRow);
}
steps.zarava.syncDisabledKeys(group);
},
/** Disables already-selected dialects in all other dropdowns within one group. */
syncDisabledKeys: function (group) {
var taken = $.extend({}, steps.zarava.disabledKeys);
group.find("li.wiktku-zarava-row select").each(function () {
var v = $(this).val();
if (v) taken[v] = true;
});
group.find("li.wiktku-zarava-row select").each(function () {
var self = $(this);
var own = self.val();
self.find("option").each(function () {
var code = $(this).val();
if (!code) return;
$(this).prop("disabled", taken[code] && code !== own);
});
self.trigger("wiktku:refresh");
});
},
/** Builds (or fetches) the .wiktku-zarava-group for one gloss. */
buildGroup: function (stepDiv, gi) {
var group = $("<div class='wiktku-zarava-group'></div>").attr("data-gloss-pos", gi);
var list = $("<ul class='wiktku-zarava-list wiktku-lang-row-list'></ul>");
list.append(steps.zarava.buildRow(group));
group.append(list);
stepDiv.append(group);
// Attach the searchable picker now the select is in the DOM.
initSelects(list);
return group;
},
/** Syncs one .wiktku-zarava-group per current gloss (same logic as steps.trans.build). */
build: function (stepDiv) {
var glosses = steps.trans.glossList();
if (!glosses.length) {
stepDiv.find(".wiktku-zarava-group").remove();
return null;
}
var existingGroups = stepDiv.find(".wiktku-zarava-group");
if (existingGroups.length > glosses.length) {
existingGroups.slice(glosses.length).remove();
}
$.each(glosses, function (gi, gloss) {
var group = stepDiv.find(".wiktku-zarava-group[data-gloss-pos='" + gi + "']");
if (!group.length) group = steps.zarava.buildGroup(stepDiv, gi);
var label = group.find(".wiktku-zarava-group-label");
if (glosses.length > 1) {
if (!label.length) {
label = $("<div class='wiktku-zarava-group-label'></div>");
group.prepend(label);
}
label.text(gloss.index + " " + gloss.text);
} else if (label.length) {
label.remove();
}
});
return null;
},
/** Reads the dialect rows for a single gloss group. */
getGroupTranslations: function (group) {
var result = [];
group.find("li.wiktku-zarava-row").each(function () {
var lang = $(this).find("select").val();
if (!lang) return;
var words = [];
$(this).find("ul.wiktku-zarava-words textarea").each(function () {
var v = $.trim($(this).val());
if (v) words.push(v);
});
if (words.length) result.push([lang, words]);
});
return result;
},
/** Reads all rows from the DOM, grouped by gloss position. */
getTranslations: function (stepDiv) {
var result = [];
stepDiv.find(".wiktku-zarava-group").each(function () {
result.push(steps.zarava.getGroupTranslations($(this)));
});
return result;
},
output: function (values) {
if (values.lang !== "ku") return "";
var stepDiv = $("#wiktku-start-zarava");
var glosses = steps.trans.glossList();
if (!glosses.length) return "";
// Item 6 (Wikihez, 14 Tebax 2026): "Bi zaravayên din" now
// auto-appears empty for lang=ku exactly like Werger
// already does (steps.trans.output, same rule below) —
// a completely empty entry still gets a placeholder
// section to fill in later; an individual placeholder
// gloss is only skipped once some other sense already has
// real content, making that particular one redundant.
var dfnSenses = steps.dfn.getSenses($("#wiktku-start-dfn"));
var hasRegularMane = dfnSenses.some(function (s) {
return !s.tpl && (s.mane !== "" || senseHasExtraContent(s));
});
var blocks = $.map(glosses, function (gloss, gi) {
var group = stepDiv.find(".wiktku-zarava-group[data-gloss-pos='" + gi + "']");
var rows = group.length ? steps.zarava.getGroupTranslations(group) : [];
if (!gloss.text && !rows.length && hasRegularMane) return undefined;
if (rows.length) {
rows.sort(function (a, b) {
var aLang = langsByCode[a[0]] || {};
var bLang = langsByCode[b[0]] || {};
return (aLang.sortKey || "").localeCompare(bLang.sortKey || "", "ku");
});
}
var wordLines = $.map(rows, function (row) {
var lang = row[0];
var words = row[1];
var wikiWords = words.map(function (w) {
return "{{W|" + lang + "|" + w + "}}";
}).join(", ");
return "* {{Z|" + lang + "}}: " + wikiWords;
}).join("\n");
var block = "{{werger-ser|" + (gloss.text || "?") + "|" + gloss.index + "}}";
if (wordLines) block += "\n" + wordLines;
block += "\n{{werger-bin}}";
return block;
});
if (!blocks.length) return "";
return "\n==== Bi zaravayên din ====\n" + blocks.join("\n") + "\n";
}
},
trans: {
id: "trans",
name: "werger",
question_fmt: "Tercimeyên vê maneyê bi zimanên din binivîse",
visible: function (values) {
if (!(values.lang === "ku" && values.pos)) return false;
// Hide only when every sense is a filled template sense (no plain
// gloss to attach translations to). A mix, or nothing filled in
// yet, still shows Werger.
var dfnSenses = steps.dfn.getSenses($("#wiktku-start-dfn"));
var hasRealSense = dfnSenses.some(function (s) {
return !s.tpl && (s.mane !== "" || senseHasExtraContent(s));
});
var hasFilledTplSense = dfnSenses.some(function (s) {
return s.tpl && s.tplTitle;
});
return hasRealSense || !hasFilledTplSense;
},
disabledKeys: {
"navz": true,
"ku": true,
"ckb": true,
"sdh": true,
"lki": true,
"hac": true,
"zza": true },
// Language dropdown + growing word-input list, scoped to one gloss's
// group (each gloss has its own group and row list).
buildRow: function (group) {
var row = $("<li class='wiktku-trans-row wiktku-lang-row'></li>");
// Language selector — the searchable picker is applied after insertion into DOM.
var langSel = $(mw.html.element("select", {
"class": "wiktku-start-step-keyfield wiktku-start-narrow" }));
langSel.attr("data-placeholder", "Li zimanekî bigere");
populateMenus(langSel, steps.trans.keys || [], steps.trans.disabledKeys);
// When a language is chosen, ensure a next empty row exists.
langSel.on("change", function () {
steps.trans.onLangChange(group, row);
});
// Word list for this language.
var wordList = $("<ul class='wiktku-trans-words wiktku-lang-row-words'></ul>");
var firstWord = steps.trans.makeWordInput();
wordList.append($("<li></li>").append(firstWord));
// The searchable picker is attached by initSelects() once the row
// is in the DOM (see onLangChange/buildGroup below).
row.append(langSel).append(wordList);
return row;
},
makeWordInput: function () {
var input = $("<textarea></textarea>")
.attr("name", "wiktku-trans-word-" + $.now() + "-" + Math.random().toString(36).substr(2, 9))
.attr("rows", 1)
.attr("class", "wiktku-dfn-subfield wiktku-start-narrow")
.attr("placeholder", "Tercime…");
input.on("input", function () {
var list = $(this).closest("ul.wiktku-trans-words");
var item = $(this).parent();
var val = $.trim($(this).val());
if (val && item.is(list.children("li:last-child"))) {
var next = steps.trans.makeWordInput();
list.append($("<li></li>").append(next));
}
});
return input;
},
onLangChange: function (group, row) {
var list = group.find("ul.wiktku-trans-list");
var isLast = row.is(list.children("li.wiktku-trans-row:last-child"));
if (isLast) {
var newRow = steps.trans.buildRow(group);
list.append(newRow);
// Attach the searchable picker now the row is in the DOM.
initSelects(newRow);
}
// Keep disabled keys in sync across this gloss's lang selectors
// only — the same language can be used for different senses.
steps.trans.syncDisabledKeys(group);
},
/** Disables already-selected languages in all other dropdowns within one group. */
syncDisabledKeys: function (group) {
var taken = $.extend({}, steps.trans.disabledKeys);
group.find("li.wiktku-trans-row select").each(function () {
var v = $(this).val();
if (v) taken[v] = true;
});
group.find("li.wiktku-trans-row select").each(function () {
var self = $(this);
var own = self.val();
self.find("option").each(function () {
var code = $(this).val();
if (!code) return;
$(this).prop("disabled", taken[code] && code !== own);
});
self.trigger("wiktku:refresh");
});
},
// Builds (or fetches) the .wiktku-trans-group for one gloss.
buildGroup: function (stepDiv, gi) {
var group = $("<div class='wiktku-trans-group'></div>").attr("data-gloss-pos", gi);
var list = $("<ul class='wiktku-trans-list wiktku-lang-row-list'></ul>");
list.append(steps.trans.buildRow(group));
group.append(list);
stepDiv.append(group);
// Attach the searchable picker now the select is in the DOM.
initSelects(list);
return group;
},
// Syncs one .wiktku-trans-group per current gloss, keyed by
// data-gloss-pos so groups stay matched across rebuilds.
build: function (stepDiv) {
var glosses = steps.trans.glossList();
if (!glosses.length) {
stepDiv.find(".wiktku-trans-group").remove();
return null;
}
// Drop groups for glosses that no longer exist (always from the
// tail — groups are only ever appended in gloss order below).
var existingGroups = stepDiv.find(".wiktku-trans-group");
if (existingGroups.length > glosses.length) {
existingGroups.slice(glosses.length).remove();
}
$.each(glosses, function (gi, gloss) {
var group = stepDiv.find(".wiktku-trans-group[data-gloss-pos='" + gi + "']");
if (!group.length) group = steps.trans.buildGroup(stepDiv, gi);
// Only label groups when there's more than one gloss to
// distinguish between — a single gloss needs no caption.
var label = group.find(".wiktku-trans-group-label");
if (glosses.length > 1) {
if (!label.length) {
label = $("<div class='wiktku-trans-group-label'></div>");
group.prepend(label);
}
label.text(gloss.index + " " + gloss.text);
} else if (label.length) {
label.remove();
}
});
return null;
},
/** Reads the translation rows for a single gloss group. */
getGroupTranslations: function (group) {
var result = [];
group.find("li.wiktku-trans-row").each(function () {
var lang = $(this).find("select").val();
if (!lang) return;
var words = [];
$(this).find("ul.wiktku-trans-words textarea").each(function () {
var v = $.trim($(this).val());
if (v) words.push(v);
});
if (words.length) result.push([lang, words]);
});
return result;
},
// Reads all translation rows, grouped by gloss position.
getTranslations: function (stepDiv) {
var result = [];
stepDiv.find(".wiktku-trans-group").each(function () {
result.push(steps.trans.getGroupTranslations($(this)));
});
return result;
},
// Builds the numbered "{ index, gloss }" list, one per dfn sense
// with a real mane (skips template senses). index is 1-based and
// matches the sense's position in the "#" definition list.
// When nothing's filled in, returns one placeholder entry so
// Werger still has a group to attach to; when every sense is a
// filled template sense, stays empty (matches trans.visible()).
glossList: function () {
var dfnSenses = steps.dfn.getSenses($("#wiktku-start-dfn"));
var glosses = [];
var hasFilledTplSense = false;
$.each(dfnSenses, function (i, s) {
if (s.tpl) {
if (s.tplTitle) hasFilledTplSense = true;
return; // template sense — no gloss to caption with
}
var dfn = s.mane;
if (!dfn) {
// No mane, but other fields are filled — still gets a
// gloss group since dfn.getOutput() emits {{mane?}} for it.
if (senseHasExtraContent(s)) glosses.push({ index: i + 1, text: "" });
return;
}
if (dfn[0] !== dfn[0].toLowerCase()) dfn = decapitalize(dfn);
dfn = stripWikilinks(dfn).replace(/[.…?!)\]،؟]+$/, "");
glosses.push({ index: i + 1, text: dfn });
});
if (!glosses.length && !hasFilledTplSense) {
glosses.push({ index: 1, text: "" });
}
return glosses;
},
output: function (values) {
if (values.lang !== "ku") return "";
var stepDiv = $("#wiktku-start-trans");
var glosses = steps.trans.glossList();
// Every sense is a template sense — there's no real gloss
// anywhere and no group in the DOM either (glossList() only
// returns empty in that case), so skip the section entirely.
if (!glosses.length) return "";
// A completely empty entry (nothing filled in dfn at all, no
// şablon chosen either) still gets a placeholder Werger section
// to fill in later. Only
// skip an individual placeholder gloss below when some other
// sense actually has real content, making that particular
// placeholder redundant.
var dfnSenses = steps.dfn.getSenses($("#wiktku-start-dfn"));
var hasRegularMane = dfnSenses.some(function (s) {
return !s.tpl && (s.mane !== "" || senseHasExtraContent(s));
});
// Each gloss now has its own group of translation rows —
// attach every gloss's own words under its own werger-ser/-bin
// pair instead of dumping everything under the first one.
var blocks = $.map(glosses, function (gloss, gi) {
var group = stepDiv.find(".wiktku-trans-group[data-gloss-pos='" + gi + "']");
var rows = group.length ? steps.trans.getGroupTranslations(group) : [];
// Placeholder gloss (no real mane entered yet) with nothing
// translated into it. If some other sense already has real
// content, this placeholder is redundant — skip it. If the
// whole entry is empty, keep it so Werger still gets a
// section to fill in.
if (!gloss.text && !rows.length && hasRegularMane) return undefined;
if (rows.length) {
// Sort by Kurdish sort key.
rows.sort(function (a, b) {
var aLang = langsByCode[a[0]] || {};
var bLang = langsByCode[b[0]] || {};
return (aLang.sortKey || "").localeCompare(bLang.sortKey || "", "ku");
});
}
var wordLines = $.map(rows, function (row) {
var lang = row[0];
var words = row[1];
var wikiWords = words.map(function (w) {
return "{{W|" + lang + "|" + w + "}}";
}).join(", ");
return "* {{Z|" + lang + "}}: " + wikiWords;
}).join("\n");
var block = "{{werger-ser|" + (gloss.text || "?") + "|" + gloss.index + "}}";
if (wordLines) block += "\n" + wordLines;
block += "\n{{werger-bin}}";
return block;
});
if (!blocks.length) return "";
return "\n==== Werger ====\n" + blocks.join("\n") + "\n";
}
},
cavkani: {
id: "cavkani",
name: "çavkanî",
question_fmt: "Çavkaniyên din (ne jêgirtin) lê zêde bike",
visible: function (values) {
return !!values.pos;
},
// Fills the insert-dropdown from the members of [[Kategorî:Çavkanî]].
refreshTplSelect: function () {
var sel = $("#wiktku-start-cavkani .wiktku-tpl-insert-select");
if (!sel.length) return;
sel.find("option[value!='']").remove();
$.each(catSrcTemplates || [], function (_, name) {
sel.append($("<option></option>").val(name).text(name));
});
// Tell the picker the option list changed.
sel.trigger("wiktku:refresh");
},
build: function (stepDiv) {
if (stepDiv.find(".wiktku-cavkani-wrap").length) return null;
var wrap = $("<div class='wiktku-cavkani-wrap'></div>");
var ta = $("<textarea></textarea>")
.attr("name", "wiktku-cavkani-" + $.now())
.attr("class", "wiktku-start-step-field wiktku-cavkani-text")
.attr("rows", 4)
.attr("placeholder", "Şablonekî ji lîsteyê hilbijêre an rasterast binivîse…");
// Template insert dropdown, populated from [[Kategorî:Çavkanî]] —
// options refreshed once the category members are fetched.
var sel = $("<select class='wiktku-tpl-insert-select'></select>");
sel.attr("data-placeholder", "Şablonek lê zêde bike…");
sel.append($("<option value=''>— şablonek lê zêde bike —</option>"));
var status = $("<span class='wiktku-cavkani-status'></span>");
sel.on("change", function () {
var name = $(this).val();
if (!name) return;
insertAtCursor(ta[0], "\n* {{" + name + "}}");
$(this).val("");
sel.trigger("wiktku:refresh");
ta.focus();
});
wrap.append(sel);
wrap.append(status).append(ta);
stepDiv.append(wrap);
// build() runs again for every new beş (see the "+ Beş zêde bike"
// handler), after the initial page-wide pass — so this select needs
// its own init or it stays a plain, unsearchable native <select>.
initSelects(wrap);
if (catSrcTemplates) {
steps.cavkani.refreshTplSelect();
} else {
status.text("Şablon tên barkirin…");
fetchCatSrcTemplates().then(function () {
steps.cavkani.refreshTplSelect();
status.text("");
}, function () {
status.text("Şablon nehatin barkirin.");
});
}
return ta;
},
output: function () {
var text = $.trim($("#wiktku-start-cavkani .wiktku-cavkani-text").val());
if (!text) return "";
return "\n==== Çavkanî ====\n" + text + "\n";
}
},
};
steps.trans.keys = steps.lang.choices;
steps.dunde.keys = steps.lang.choices;
steps.zarava.keys = getZaravaKeys(steps.lang.choices);
// Ghybu, 14 Tebax 2026: bnrh/resim/pron used to sit here, always visible,
// well above the tab bar (which starts right before "dfn"). They're now
// tab-gated (see STEP_GROUPS below), so their DOM position moves down to
// sit right next to it instead of rendering as always-open fields between
// Ziman and Cureyê rêzimanî. This array only controls DOM build order —
// nothing else keys off it (see the comment above stepIdToGroup).
// Wikihez, 14 Tebax 2026: Mane tab's internal order is now Mane → malûmatên
// pêşketî (nested inside dfn's own div, see steps.dfn.build) → Wêne →
// Bi zaravayên din → Werger, so dfn/resim/zarava/trans need to sit
// adjacent to each other, in that order, in the DOM. zarava/trans moved
// out of the "Beşên din" cluster entirely — see STEP_GROUPS below.
var ordered_steps = [
steps.lang, steps.pos, steps.posparams,
steps.cinsiyet, steps.jimar, steps.lektur, steps.tr,
steps.dfn, steps.trans,
steps.pron,
steps.resim, steps.zarava,
steps.bnrh, steps.tewandin, steps.bikaranin, steps.alfabeyendin, steps.je, steps.tekildar, steps.binereherwiha, steps.formalt, steps.hevmane, steps.dijmane, steps.jornav, steps.jernav,
steps.etym, steps.dunde, steps.cavkani, steps.xwendin];
// ── Step-group tabs ──────────────────────────────────────────────────────
// Ghybu, 14 Tebax 2026 (revised): originally 5 tabs (Bingehîn/Bilêvkirin/
// Lînkkirin/Bikaranîn/Din), split by topic. Ghybu's follow-up flattened
// that to exactly 3: "Mane", "Bilêvkirin", "Beşên din" ("other
// sections") — with Wêne and Nimûne folded INTO "Mane" specifically
// (not left in a misc tab), and everything that isn't Mane/Bilêvkirin
// dumped into one single "Beşên din" catch-all rather than split across
// topic tabs. Nimûne doesn't appear below as its own entry because it's
// not a separate step — it's already rendered inside each dfn/Mane
// sense block (see buildSenseBlock's allGroups), so it's under "Mane"
// automatically. "mane" stays first (and so the default-active tab)
// since required content — Mane itself — has to be what's seen by
// default.
// Wikihez, 14 Tebax 2026: zarava/trans moved from "besendin" into "mane" —
// both are already gated to lang===ku (zarava.visible just delegates to
// trans.visible), so they show/hide automatically with no picker
// involvement, same as before; they just render inside the Mane tab
// now instead of behind the Beşên din picker (see openedOtherSections
// below, which only applies to "besendin" members).
// Wikihez, 15 Tebax 2026: pared back again after Ghybu's "Tu jî dizanî ku
// kesên ku tên vira çito peyv çêdikin: Ziman > Mane > Mînak > Hevmane >
// Dijmane". That path is now what the form shows by default and nothing
// else: Mane holds the senses (whose own blocks carry Nimûne, Jêgirtin,
// Hevmane and Dijmane — see steps.dfn.allGroups) plus Werger. Wêne and
// "Bi zaravayên din" moved out to the Beşên din picker with everything
// else; they aren't gone, they're one dropdown pick away.
var STEP_GROUPS = [
{ id: "mane", label: "Mane", steps: ["dfn", "trans"] },
{ id: "bilevkirin", label: "Bilêvkirin", steps: ["pron"] },
{ id: "besendin", label: "Beşên din", steps: ["resim", "zarava", "tewandin", "etym", "je", "tekildar", "binereherwiha", "formalt", "hevmane", "dijmane", "jornav", "jernav", "bikaranin", "alfabeyendin", "dunde", "cavkani", "xwendin", "bnrh"] },
];
// Steps that live behind the "Beşên din" picker (point 3) — only these
// need an explicit "open" before they're shown, even when their tab is
// active. Derived from the group above so it can't drift out of sync.
var BESENDIN_STEP_IDS = STEP_GROUPS[2].steps;
// Reverse lookup: step id -> index into STEP_GROUPS (undefined for
// ungrouped steps — now only lang/pos/posparams/cinsiyet/lektur/tr,
// which stay always-visible since they're required to get to everything
// else).
var stepIdToGroup = {};
$.each(STEP_GROUPS, function (gi, g) {
$.each(g.steps, function (_, sid) { stepIdToGroup[sid] = gi; });
});
// Step ids that belong to each section (not shared across sections).
var PER_SECTION_STEP_IDS = [
"pos", "posparams", "cinsiyet", "jimar", "lektur", "tr",
"resim", "dfn", "tewandin", "formalt", "bikaranin", "alfabeyendin", "hevmane", "dijmane", "jornav", "jernav", "je", "tekildar", "etym", "dunde", "binereherwiha", "zarava", "trans", "cavkani", "xwendin"
];
// ── Multi-section state ──────────────────────────────────────────────────
// Each entry is a plain snapshot: { pos, cinsiyet, lektur, tr, dfn (senses[]),
// je, tekildar, binereherwiha, trans (rows[]) }.
var sections = [{}]; // section 0 starts empty (DOM is the truth)
var activeSection = 0;
// Which STEP_GROUPS tab is currently shown. Lives out here (like
// activeSection above) so refresh() — which is not nested inside build()
// — can read it and so renderGroupTabs()/updateGroupTabIndicators() below
// can be called from refresh() too. Both operate on the tab bar via its
// #wiktku-group-tabs id rather than a closured element reference, for the
// same reason.
var activeGroup = 0;
// Unsaved-changes / autosave state. Lives out here (same reason as
// activeGroup above) so destroy() — which runs on final submit and on
// switching to the source editor, and is not nested inside build() —
// can clear the timers and the beforeunload warning. build() assigns
// into these; it doesn't re-declare them.
var formDirty = false;
var autosaveDebounceTimer = null;
var autosaveInterval = null;
/** Re-renders the step-group tab bar to reflect the current activeGroup. */
function renderGroupTabs() {
var groupTabsDiv = $("#wiktku-group-tabs");
if (!groupTabsDiv.length) return;
groupTabsDiv.empty();
$.each(STEP_GROUPS, function (i, g) {
var tab = $("<span></span>")
.addClass("wiktku-group-tab")
.attr("data-group-idx", i)
.text(g.label)
.toggleClass("wiktku-tab-active", i === activeGroup);
(function (idx) {
tab.on("click", function () {
if (idx === activeGroup) return;
activeGroup = idx;
renderGroupTabs();
if (idx === BESENDIN_GROUP_IDX) renderBesenDinPicker();
refresh();
});
}(i));
groupTabsDiv.append(tab);
});
}
/**
* Toggles a "needs attention" dot on any group tab that still has a
* required, unfilled field hidden inside it — so switching tabs doesn't
* leave the person wondering why "Bişîne" stays disabled.
*/
function updateGroupTabIndicators(values) {
var tabs = $("#wiktku-group-tabs .wiktku-group-tab");
if (!tabs.length) return;
$.each(STEP_GROUPS, function (i, g) {
var missing = false;
$.each(g.steps, function (_, sid) {
var step = steps[sid];
if (!step || !step.required) return;
var val = values[sid];
if (val === "" || (step.multiple && $.isArray(val) && val.join("") === "")) {
missing = true;
}
});
tabs.eq(i).toggleClass("wiktku-tab-missing", missing && i !== activeGroup);
});
}
// Wikihez, 14 Tebax 2026: "Beşên din" no longer shows all 16 fields
// stacked at once — a picker reveals one at a time instead. This is
// per-section state (like the field values themselves), snapshotted in
// saveCurrentSection() and restored in restoreSection() below, and
// auto-seeded from any field that already has content (so a returning
// draft, or an older cache saved before this existed, doesn't hide
// something the person already filled in).
var openedOtherSections = {};
var BESENDIN_SET = {};
$.each(BESENDIN_STEP_IDS, function (_, sid) { BESENDIN_SET[sid] = true; });
var BESENDIN_GROUP_IDX = 2; // "besendin"'s index in STEP_GROUPS above
/** Re-renders the "Beşên din" picker to list only the not-yet-opened sections. */
function renderBesenDinPicker() {
var wrap = $("#wiktku-besendin-picker");
if (!wrap.length) return;
wrap.empty();
var pickerValues = getValues();
var unopened = $.grep(BESENDIN_STEP_IDS, function (sid) {
if (openedOtherSections[sid]) return false;
// Don't offer a section that would open onto nothing: several of
// these are gated (Bi zaravayên din / Werger need lang=ku, most
// need a pos). refresh() would hide it again straight away, so
// picking it would read as a broken dropdown.
var step = steps[sid];
if (step && typeof step.visible === "function") {
try {
if (!step.visible(pickerValues)) return false;
} catch (e) { /* a step whose visible() needs DOM we lack yet — offer it */ }
}
return true;
});
if (!unopened.length) return; // everything's open — nothing left to pick
var sel = $("<select class='wiktku-besendin-select'></select>");
sel.attr("data-placeholder", "— beşek hilbijêre —");
sel.append($("<option value=''>— beşek hilbijêre —</option>"));
$.each(unopened, function (_, sid) {
var step = steps[sid];
if (!step) return;
sel.append($("<option></option>").val(sid).text(capitalize(step.name)));
});
sel.on("change", function () {
var sid = $(this).val();
if (!sid) return;
openedOtherSections[sid] = true;
renderBesenDinPicker();
refresh();
});
wrap.append(sel);
initSelects(wrap);
}
/** Marks any BESENDIN_STEP_IDS field that already has real content as
* "opened", so restoring a draft doesn't bury filled-in sections behind
* the picker. Reuses each step's own output() as the emptiness check —
* it already knows what "empty" means per field, and it reads the DOM
* the restore just populated. Call this AFTER the DOM has the restored
* values in it. */
function seedOpenedFromContent() {
var values = getValues();
$.each(BESENDIN_STEP_IDS, function (_, sid) {
if (openedOtherSections[sid]) return;
var step = steps[sid];
if (!step || typeof step.output !== "function") return;
try {
if (step.output(values)) openedOtherSections[sid] = true;
} catch (e) { /* a step whose output() needs more state than we have yet — skip it */ }
});
}
function snapshotDfn() {
return steps.dfn.getSenses($("#wiktku-start-dfn"));
}
// Rebuilds the dfn DOM from a previously snapshotted senses array.
function restoreDfn(senses) {
var stepDiv = $("#wiktku-start-dfn");
// Tear down the existing list so build() recreates it cleanly.
stepDiv.find("ol.wiktku-dfn-list").remove();
steps.dfn.build(stepDiv);
var list = stepDiv.find("ol.wiktku-dfn-list");
$.each(senses, function (i, sense) {
// Ensure enough blocks exist (build() seeds one).
var blocks = list.find("li.wiktku-dfn-sense");
var block = blocks.eq(i);
if (!block.length) {
var nb = steps.dfn.buildSenseBlock(stepDiv);
list.append(nb);
block = list.find("li.wiktku-dfn-sense").last();
}
// Template selector.
block.find("select.wiktku-dfn-tpl-select").val(sense.tpl || "");
if (sense.tpl) {
block.find("textarea.wiktku-dfn-mane").hide();
block.find("input.wiktku-dfn-tpl-title").val(sense.tplTitle || "").show();
} else {
block.find("textarea.wiktku-dfn-mane").val(sense.mane || "").show();
block.find("input.wiktku-dfn-tpl-title").hide().val("");
}
// dfnArea is the only thing actually saved, so split it back into
// tercime/îzah for editing (mirrors syncNonKuToMane's join format).
var maneParts = splitTercimeIzah(sense.mane);
block.find(".wiktku-dfn-tercime").val(maneParts ? maneParts.tercime : (sense.mane || ""));
block.find(".wiktku-dfn-izah").val(maneParts ? maneParts.izah : "");
// Re-sync the formên alternatîv/hevmane/… hide state now that
// tplSelect's value was set (its own "change"
// handler doesn't fire from .val(), so this doesn't happen otherwise).
var updateVis = block.data("updateFieldVisibility");
if (updateVis) updateVis();
// Same for the mane-box mode (plain vs tercime+îzah), since this
// also depends on tplSelect's (and lang's) value.
var updateMane = block.data("updateManeMode");
if (updateMane) updateMane();
// Restore a sub-list (etiket, formên alternatîv, hevmane …) from a values array.
function restoreSubList(cls, values) {
if (!values || !values.length) return;
var groupDiv = block.find("." + cls + "-group");
var subList = groupDiv.find("ol, ul").first();
if (!subList.length) return; // group not found
var useModifiers = !!MODIFIER_SUBGROUPS[cls];
// Fill existing items, append new ones as needed.
$.each(values, function (j, val) {
var items = subList.find("li");
if (j < items.length) {
items.eq(j).find("textarea").val(val);
} else {
var ta = $("<textarea></textarea>")
.attr("name", "wiktku-dfn-restore-" + $.now() + "-" + Math.random().toString(36).substr(2, 9))
.attr("rows", 1)
.attr("class", "wiktku-dfn-subfield wiktku-start-narrow")
.val(val);
ta.on("input", function () {
steps.dfn.onSubInput(subList, this, 1, true, useModifiers);
});
subList.append(useModifiers ? makeModifierLi(ta) : $("<li></li>").append(ta));
}
});
}
// Reveal and populate lazy groups that have data.
var lazyMap = {
"wiktku-dfn-etiket": sense.etiket,
"wiktku-dfn-kategori": sense.kategori,
"wiktku-dfn-alternativ": sense.alternativ,
"wiktku-dfn-hevmane": sense.hevmane,
"wiktku-dfn-dijmane": sense.dijmane,
"wiktku-dfn-koordine": sense.koordine,
"wiktku-dfn-jornav": sense.jornav,
"wiktku-dfn-jernav": sense.jernav
};
$.each(lazyMap, function (cls, vals) {
if (vals && vals.length) restoreSubList(cls, vals);
});
// Nimûne items are objects { text, tr?, t? } — restore using the builder.
if (sense.nimune && sense.nimune.length) {
var nimuneGroupDiv = block.find(".wiktku-dfn-nimune-group");
var nimuneList = nimuneGroupDiv.find("ol.wiktku-dfn-nimune-list");
var buildFn = nimuneGroupDiv.data("buildNimuneLi");
nimuneList.empty();
$.each(sense.nimune, function (_, n) {
var text = typeof n === "object" ? (n.text || "") : n;
if (!text) return;
var li = buildFn ? buildFn() : $("<li class='wiktku-dfn-nimune-li'></li>");
li.find(".wiktku-dfn-nimune-text").val(text).each(function () { highlightLinebreak(this); });
if (n.tr) li.find(".wiktku-dfn-nimune-tr").val(n.tr);
if (n.t) li.find(".wiktku-dfn-nimune-t").val(n.t);
nimuneList.append(li);
});
// Always leave a blank trailing item.
if (buildFn) nimuneList.append(buildFn());
}
// Restore jêder entries — accepts current array shape or a legacy
// single object (older saved sections) for backwards compat.
var jederArr = $.isArray(sense.jeder) ? sense.jeder : (sense.jeder ? [sense.jeder] : []);
if (jederArr.length) {
var jederGroupDiv = block.find(".wiktku-dfn-jeder-group");
var jederList = jederGroupDiv.find("ol.wiktku-dfn-jeder-list");
var buildJederFn = jederGroupDiv.data("buildJederLi");
jederList.empty();
$.each(jederArr, function (_, j) {
if (!j || !j.quote) return;
var li = buildJederFn ? buildJederFn() : $("<li class='wiktku-dfn-jeder-li'></li>");
li.find(".wiktku-dfn-nimune-quote").val(j.quote).each(function () { highlightLinebreak(this); });
if (j.quoteTr) li.find(".wiktku-dfn-nimune-quote-tr").val(j.quoteTr);
if (j.quoteT) li.find(".wiktku-dfn-nimune-quote-t").val(j.quoteT);
if (j.jederManual) {
var manualSel = li.find(".wiktku-dfn-quote-src-sel");
manualSel.val("__manual__").trigger("change");
li.find(".wiktku-dfn-quote-src-manual").val(j.jederManual);
} else if (j.jederCatTpl) {
// Legacy format from before the şablon search switched rows to
// manual mode directly — convert it the same way now, so it's
// editable like any other free-form source.
var catSelEl = li.find(".wiktku-dfn-quote-src-sel");
catSelEl.val("__manual__").trigger("change");
li.find(".wiktku-dfn-quote-src-manual").val("{{" + j.jederCatTpl + "}}");
} else if (j.jederTpl) {
var srcSel = li.find(".wiktku-dfn-quote-src-sel");
srcSel.val(j.jederTpl).trigger("change");
if (j.jêderFields) {
$.each(j.jêderFields, function (key, val) {
li.find(".wiktku-dfn-quote-src-input[data-field-key='" + key + "']").val(val);
});
}
}
jederList.append(li);
});
// Always leave a blank trailing item, same as Nimûne.
if (buildJederFn) jederList.append(buildJederFn());
}
});
}
// Snapshots simple (non-dfn) per-section steps from the DOM into obj.
function saveCurrentSection() {
var snap = {};
$.each(PER_SECTION_STEP_IDS, function (_, id) {
if (id === "dfn") {
snap.dfn = snapshotDfn();
return;
}
if (id === "etym") {
snap.etym = $.trim($("#wiktku-start-etym .wiktku-etym-text").val());
return;
}
if (id === "cavkani") {
snap.cavkani = $.trim($("#wiktku-start-cavkani .wiktku-cavkani-text").val());
return;
}
if (id === "posparams") {
snap.posparams = $.trim($("#wiktku-start-posparams .wiktku-posparams-text").val());
return;
}
if (id === "resim") {
// One entry per row, including blank ones, so a mid-edit draft
// (e.g. a filename typed but no caption yet) survives a cache
// restore instead of being silently dropped.
snap.resim = $("#wiktku-start-resim li.wiktku-resim-item").map(function () {
return {
file: $.trim($(this).find(".wiktku-resim-file").val()),
caption: $.trim($(this).find(".wiktku-resim-caption").val()),
alt: $.trim($(this).find(".wiktku-resim-alt").val())
};
}).get();
return;
}
var step = steps[id];
if (!step) return;
var stepDiv = $("#wiktku-start-" + id);
if (id === "trans") {
snap.trans = steps.trans.getTranslations(stepDiv);
return;
}
if (id === "zarava") {
snap.zarava = steps.zarava.getTranslations(stepDiv);
return;
}
if (id === "dunde") {
snap.dunde = steps.dunde.getRows(stepDiv);
return;
}
// Generic: read all step fields.
var fields = stepDiv.find(".wiktku-start-step-field");
if (step.multiple) {
snap[id] = fields.map(function () { return $(this).val(); }).get();
} else {
snap[id] = fields.val();
}
});
// Item 3: which "Beşên din" sub-sections this section has already
// opened via the picker — per-section, like everything else here.
snap.openedOtherSections = $.extend({}, openedOtherSections);
sections[activeSection] = snap;
}
// Restores a previously saved snapshot into the form DOM.
function restoreSection(snap) {
$.each(PER_SECTION_STEP_IDS, function (_, id) {
if (id === "dfn") {
restoreDfn(snap.dfn || []);
return;
}
if (id === "etym") {
$("#wiktku-start-etym .wiktku-etym-wrap").remove();
steps.etym.build($("#wiktku-start-etym"));
$("#wiktku-start-etym .wiktku-etym-text").val(snap.etym || "");
return;
}
if (id === "cavkani") {
$("#wiktku-start-cavkani .wiktku-cavkani-wrap").remove();
steps.cavkani.build($("#wiktku-start-cavkani"));
$("#wiktku-start-cavkani .wiktku-cavkani-text").val(snap.cavkani || "");
return;
}
if (id === "posparams") {
var ppDiv = $("#wiktku-start-posparams");
ppDiv.find(".wiktku-posparams-wrap").remove();
steps.posparams.build(ppDiv);
var savedTa = snap.posparams || "";
ppDiv.find(".wiktku-posparams-text").val(savedTa);
// Re-parse saved textarea to restore helper widget states.
if (savedTa) {
var cMatch = savedTa.match(/\|c=([^|}\s]+)/);
var jMatch = savedTa.match(/\|j=([^|}\s]+)/);
var trMatch = savedTa.match(/\|tr=([^|}\s]+)/);
// Write into the shared hidden field (not the visible
// select, which has no <option>s yet) — syncHelpers()
// below reads it back to restore the dropdown once the
// gender/number options for this language are populated.
if (cMatch) $("#wiktku-start-cinsiyet-field").val(cMatch[1]);
if (jMatch) $("#wiktku-start-jimar-field").val(jMatch[1]);
if (trMatch) ppDiv.find(".wiktku-posparams-field[data-pp-key='tr']").val(trMatch[1]);
// For lêker, c= holds the verb-type code instead of a
// gender — split it back across the two dropdowns it is
// now assembled from ("x-gh" → form "x" + base "gh").
if (cMatch && /^lêker/.test(snap.pos || "")) {
var lekturParts = /^(?:([xphb])-)?(n?gh)$/.exec(cMatch[1]);
if (lekturParts) {
ppDiv.find(".wiktku-posparams-lektur-sel").val(lekturParts[2]);
ppDiv.find(".wiktku-posparams-lekturform-sel").val(lekturParts[1] || "");
}
}
// Restore checked optional params. "form" is stored as
// "erê" rather than "1" (see rebuildTa), so it needs its
// own check here.
ppDiv.find(".wiktku-posparams-opt-panel input[type='checkbox']").each(function () {
var key = $(this).val();
var expected = key === "form" ? "erê" : "1";
$(this).prop("checked", savedTa.indexOf("|" + key + "=" + expected) !== -1);
});
}
steps.posparams.syncHelpers(ppDiv);
return;
}
if (id === "resim") {
var resimDiv = $("#wiktku-start-resim");
resimDiv.find(".wiktku-resim-wrap").remove();
steps.resim.build(resimDiv);
// Accept both the new array-of-rows format and the older
// single {file, caption} object saved before multi-image
// support existed.
var resimSnap = snap.resim;
var rows = $.isArray(resimSnap) ? resimSnap : (resimSnap ? [resimSnap] : []);
if (rows.length) {
var list = resimDiv.find("ol.wiktku-resim-list");
list.empty();
$.each(rows, function (_, r) {
var item = steps.resim.buildItem(resimDiv);
item.find(".wiktku-resim-file").val(r.file || "");
item.find(".wiktku-resim-caption").val(r.caption || "");
item.find(".wiktku-resim-alt").val(r.alt || "");
list.append(item);
});
// Always keep a blank trailing row, same as Nimûne/Dûnde.
var lastItem = list.children("li.wiktku-resim-item").last();
if ($.trim(lastItem.find(".wiktku-resim-file").val())) {
list.append(steps.resim.buildItem(resimDiv));
}
}
return;
}
if (id === "trans") {
// Rebuild trans groups (dfn must already be restored by this
// point in the $.each loop, so glossList() reflects it).
var transDiv = $("#wiktku-start-trans");
transDiv.find(".wiktku-trans-group").remove();
steps.trans.build(transDiv);
var groupsSnap = snap.trans || [];
$.each(groupsSnap, function (gi, rows) {
var group = transDiv.find(".wiktku-trans-group[data-gloss-pos='" + gi + "']");
if (!group.length) return; // gloss no longer exists — drop its rows
var list = group.find("ul.wiktku-trans-list");
$.each(rows, function (j, row) {
var lang = row[0], words = row[1];
var lastRow = list.find("li.wiktku-trans-row").last();
lastRow.find("select").val(lang).trigger("change");
var wordList = lastRow.find("ul.wiktku-trans-words");
$.each(words, function (k, word) {
var wordItems = wordList.find("li");
if (k < wordItems.length) {
wordItems.eq(k).find("textarea").val(word);
} else {
// .val() below doesn't fire "input", so the normal
// auto-grow never runs — append a matching item
// ourselves instead of silently dropping the word.
var extraInput = steps.trans.makeWordInput();
wordList.append($("<li></li>").append(extraInput));
extraInput.val(word);
}
});
// Leave one trailing empty field so the row can still grow
// when the user types, matching a freshly-built row.
if ($.trim(wordList.children("li").last().find("textarea").val())) {
wordList.append($("<li></li>").append(steps.trans.makeWordInput()));
}
});
});
return;
}
if (id === "zarava") {
// Rebuild zarava groups (dfn must already be restored by this
// point in the $.each loop, so glossList() reflects it).
var zaravaDiv = $("#wiktku-start-zarava");
zaravaDiv.find(".wiktku-zarava-group").remove();
steps.zarava.build(zaravaDiv);
var zaravaGroupsSnap = snap.zarava || [];
$.each(zaravaGroupsSnap, function (gi, rows) {
var group = zaravaDiv.find(".wiktku-zarava-group[data-gloss-pos='" + gi + "']");
if (!group.length) return; // gloss no longer exists — drop its rows
var list = group.find("ul.wiktku-zarava-list");
$.each(rows, function (j, row) {
var lang = row[0], words = row[1];
var lastRow = list.find("li.wiktku-zarava-row").last();
lastRow.find("select").val(lang).trigger("change");
var wordList = lastRow.find("ul.wiktku-zarava-words");
$.each(words, function (k, word) {
var wordItems = wordList.find("li");
if (k < wordItems.length) {
wordItems.eq(k).find("textarea").val(word);
} else {
var extraInput = steps.zarava.makeWordInput();
wordList.append($("<li></li>").append(extraInput));
extraInput.val(word);
}
});
if ($.trim(wordList.children("li").last().find("textarea").val())) {
wordList.append($("<li></li>").append(steps.zarava.makeWordInput()));
}
});
});
return;
}
if (id === "dunde") {
// Rebuild dunde rows.
var dundeDiv = $("#wiktku-start-dunde");
dundeDiv.find("ul.wiktku-dunde-list").remove();
steps.dunde.build(dundeDiv);
var dundeRows = snap.dunde || [];
$.each(dundeRows, function (i, row) {
var lang = row[0], words = row[1];
var list = dundeDiv.find("ul.wiktku-dunde-list");
var lastRow = list.find("li.wiktku-dunde-row").last();
lastRow.find("select").val(lang).trigger("change");
var wordList = lastRow.find("ul.wiktku-dunde-words");
$.each(words, function (j, word) {
var wordItems = wordList.find("li");
if (j < wordItems.length) {
wordItems.eq(j).find("textarea").val(word);
} else {
// .val() below doesn't fire "input", so the normal
// auto-grow never runs — append a matching item
// ourselves instead of silently dropping the word.
var extraInput = steps.dunde.makeWordInput();
wordList.append($("<li></li>").append(extraInput));
extraInput.val(word);
}
});
// Leave one trailing empty field so the row can still grow
// when the user types, matching a freshly-built row.
if ($.trim(wordList.children("li").last().find("textarea").val())) {
wordList.append($("<li></li>").append(steps.dunde.makeWordInput()));
}
});
return;
}
var step = steps[id];
if (!step) return;
var stepDiv = $("#wiktku-start-" + id);
var fields = stepDiv.find(".wiktku-start-step-field");
var val = snap[id];
if (val === undefined || val === null) return;
if (step.multiple) {
var arr = val;
fields.each(function (i) {
if (i < arr.length) $(this).val(arr[i]);
});
} else {
fields.val(val);
}
// Tell the pickers about the programmatic value change.
fields.filter("select").trigger("wiktku:refresh");
});
// Item 3: restore which "Beşên din" sub-sections were already opened
// for this section, then seed in anything the DOM restore above just
// filled in but that wasn't marked opened yet (e.g. an older cache
// saved before this existed).
openedOtherSections = $.extend({}, snap.openedOtherSections || {});
seedOpenedFromContent();
renderBesenDinPicker();
}
function getWikitextForCurrentSection(callback) {
var values = getValues();
var entry = steps.pos.output(values);
// Bilêvkirin now nests under the POS section (Ghybu, 14 Tebax 2026)
// instead of printing once, shared, above every POS section — see
// steps.pron.output's own comment for the header-level change this
// pairs with. steps.pron.output() reads the shared #wiktku-start-pron
// textarea directly (not the "values" arg), and that field isn't
// per-section, so calling it once per section prints the same text
// under each POS — the intended effect of nesting it "under Cureyê
// peyvê" rather than once under Ziman.
entry += steps.pron.output(values);
steps.dfn.getOutput(values, function (output) {
entry += output;
entry += steps.tewandin.output(values);
entry += steps.bikaranin.output(values);
entry += steps.alfabeyendin.output(values);
entry += steps.formalt.output(values);
entry += steps.hevmane.output(values);
entry += steps.dijmane.output(values);
entry += steps.jornav.output(values);
entry += steps.jernav.output(values);
entry += steps.je.output(values);
entry += steps.tekildar.output(values);
entry += steps.etym.output(values);
entry += steps.dunde.output(values);
entry += steps.binereherwiha.output(values);
entry += steps.zarava.output(values);
entry += steps.trans.output(values);
entry += steps.cavkani.output(values);
entry += steps.xwendin.output(values);
callback(entry, values);
});
}
function getWikitextAllSections(callback) {
saveCurrentSection();
var results = new Array(sections.length);
var sharedValues = getValues(); // lang/pron are shared
function processSection(i) {
if (i >= sections.length) {
// All done — restore original active section.
restoreSection(sections[activeSection]);
refresh();
callback(results, sharedValues);
return;
}
restoreSection(sections[i]);
refresh();
getWikitextForCurrentSection(function (sectionText) {
results[i] = sectionText;
processSection(i + 1);
});
}
processSection(0);
}
// Assembles wikitext for all sections plus the shared lang header.
// pron used to be prepended here too (shared, above every section) —
// it now nests inside each section instead, via getWikitextForCurrentSection.
function getWikitext(callback) {
getWikitextAllSections(function (sectionTexts, sharedValues) {
var bnrh = steps.bnrh.output(sharedValues);
var entry = steps.lang.output(sharedValues);
entry += sectionTexts.join("\n");
// bnr-h goes before the language section — only prepended when
// generating fresh wikitext (not addLangMode, which handles it separately).
if (!addLangMode && bnrh) entry = bnrh + entry;
// Edit summary uses section 0's values. Read from the saved snapshot
// (not the live DOM) so it doesn't mix section 0's pos with whichever
// section happens to be active/restored at this point.
var dfnSenses = (sections[0] && sections[0].dfn) || [];
var dfnSummary = dfnSenses.map(function (s) {
if (s.mane) return s.mane;
// Template sense (e.g. {{guharto|ku|somepage}}) — same
// construction as the tplCall built in getOutput, so the
// summary shows what actually gets written to the entry
// instead of going blank.
if (s.tpl && s.tplTitle) {
return s.tplNoLang
? "{{" + s.tpl + "|" + s.tplTitle + "}}"
: "{{" + s.tpl + "|" + sharedValues.lang + "|" + s.tplTitle + "}}";
}
return "";
}).filter(Boolean).join("; ");
var summary = "([[Mediawiki:Gadget-start.js|WF:NÛ]] v.2.0) +" +
sharedValues.lang + ":" + sections[0].pos + ":" + dfnSummary;
var summaryField = document.getElementById("wpSummary");
if (addLangMode && summaryField.value) {
summary = summaryField.value + " " + summary;
}
summaryField.value = summary;
callback(entry);
});
}
var continueBtn;
// Item 7: whether Mane/Bi zaravayên din/Werger has anything in it —
// kept outside refresh() so the click handler (defined separately,
// where continueBtn is built) can read the latest value.
var wiktkuContentGateOk = true;
function getValuesForStep(stepId) {
var fields = $("#wiktku-start-" + stepId + " .wiktku-start-step-field");
var step = steps[stepId];
if (step.keys) {
var values = {};
fields.each(function (i, field) {
var key = $(field).prevAll(".wiktku-start-step-keyfield").val();
if (key) values[key] = $(field).val();
});
return values;
}
else if (step.multiple) {
return fields.map(function () {
return $(this).val();
}).get();
}
return fields.val();
}
function getValues() {
var values = {};
$.each(steps, function (stepId) {
values[stepId] = getValuesForStep(stepId);
});
return values;
}
function populateMenus(inputs, choices, disabledValues, placeholderText) {
if (!disabledValues) disabledValues = {};
var vals = inputs.map(function (i, input) {
return $(input).val();
});
inputs.empty();
inputs.append($("<option></option>").text(placeholderText || ""));
$.each(choices, function (j, choice) {
// Append the language code in parentheses so that typing a code
// (e.g. "ku") in the search box still finds the language name.
var displayText = capitalize(choice.label);
if (choice.sortKey !== undefined) {
// This is a language choice {code, label, sortKey} — show code.
displayText = capitalize(choice.label) + " (" + choice.code + ")";
}
var option = $(mw.html.element("option", {
value: choice.code }, displayText));
if (disabledValues[choice.code]) option.prop("disabled", true);
inputs.append(option);
});
inputs.val(function (i) {
return vals[i];
});
}
// Keys to disable for a key menu: already-taken or explicitly disabled.
function getDisabledKeys(step) {
var occupiedKeys = {};
$("#wiktku-start-" + step.id + " .wiktku-start-step-keyfield").each(function () {
occupiedKeys[$(this).val()] = true;
});
if (step.disabledKeys) $.extend(occupiedKeys, step.disabledKeys);
return occupiedKeys;
}
function buildKeyInput(step) {
if (!step.keys) return undefined;
var input = $(mw.html.element("select", {
"class": "wiktku-start-step-keyfield wiktku-start-narrow" }));
input.attr("data-placeholder", "Hilbijêre " + step.keyName);
populateMenus(input, step.keys, getDisabledKeys(step));
// Keep the key menus mutually exclusive: whatever one row selects is
// disabled in every other row. Recomputed from the DOM on each change.
input.on("change", function () {
var all = $("#wiktku-start-" + step.id + " .wiktku-start-step-keyfield");
var taken = {};
all.each(function () {
var v = $(this).val();
if (v) taken[v] = true;
});
all.not(this).each(function () {
var self = $(this), own = self.val();
self.find("option").each(function () {
var code = $(this).val();
if (code) $(this).prop("disabled", !!taken[code] && code !== own);
});
self.trigger("wiktku:refresh");
});
});
// Return the wrapper; the select lives inside it and still fires change.
return wrapNativeSelect(input);
}
// Adds another text field to the list if the last one now has text.
function refreshForTextField(currentInput, step) {
currentInput = $(currentInput);
var value = currentInput.val();
var item = currentInput.parent();
if (value && !item.next("li").length) {
var nextInput = $("<textarea></textarea>")
.attr("name", "wiktku-field-" + $.now() + "-" + Math.random().toString(36).substr(2, 9))
.attr("class", currentInput.attr("class"))
.attr("rows", currentInput.attr("rows") || 1);
if (step.placeholder) {
nextInput.attr("placeholder", typeof step.placeholder === "function" ? step.placeholder() : step.placeholder);
}
nextInput.on("input", function (evt) {
refreshForTextField(evt.target, step);
});
var nextKeyInput = buildKeyInput(step);
var nextItem = step.modifiers
? makeModifierLi(nextInput).prepend(nextKeyInput || "")
: $("<li></li>").append(nextKeyInput).append(nextInput);
item.parent().append(nextItem);
if (nextKeyInput) initSelects(nextItem);
}
var canContinue = !continueBtn.isDisabled();
if ((value && !canContinue) || (!value && canContinue)) {
refresh(step);
}
}
function prepareInput(input, step) {
if (!input) return;
if (step.required) input.prop('required', true);
input.change(step, refresh);
}
// Shows/hides steps based on whether their prerequisites are met, and
// updates placeholders where applicable.
function refresh(evt) {
var values = getValues();
var changedStep = evt && evt.data;
var canContinue = true;
// Re-filter template options in every sense block whenever lang changes.
$("#wiktku-start-dfn .wiktku-dfn-tpl-select").each(function () {
var fn = $(this).data("updateOptions");
if (typeof fn === "function") fn();
});
// Re-filter pronunciation and etymology template dropdowns when language changes.
steps.pron.refreshTplSelect();
steps.etym.refreshTplSelect();
steps.cavkani.refreshTplSelect();
// Re-render any step's question label that depends on current values
// (e.g. dfn's Werger-section reminder, which only applies to ku).
$.each(steps, function (stepId, step) {
if (typeof step.question_fmt === "function") {
$("#wiktku-start-" + stepId + " .wiktku-start-step-question")
.text(step.question_fmt(values));
}
});
// Sync every sense block's mane-box mode (plain mane vs tercime+îzah)
// to the current language, in case lang changes after blocks exist.
$("#wiktku-start-dfn li.wiktku-dfn-sense").each(function () {
var updateMane = $(this).data("updateManeMode");
if (updateMane) updateMane();
});
// Sync tr/t sub-fields in every nimûne item to the current language.
// tr shown when language needs transliteration; t shown when lang !== "ku".
(function () {
var lang = values.lang || "";
var showTr = needsTransliteration(lang);
var showT = lang && lang !== "ku";
$("#wiktku-start-dfn .wiktku-dfn-nimune-list li.wiktku-dfn-nimune-li").each(function () {
var li = $(this);
// Ensure the sub-wrapper exists when we need it.
var subWrap = li.find(".wiktku-dfn-nimune-sub");
// tr field
var trTa = li.find(".wiktku-dfn-nimune-tr");
if (showTr && !trTa.length) {
if (!subWrap.length) {
subWrap = $("<div></div>").addClass("wiktku-dfn-nimune-sub");
li.append(subWrap);
}
trTa = $("<textarea></textarea>")
.attr("name", "wiktku-dfn-nimune-tr-" + $.now() + "-" + Math.random().toString(36).substr(2, 9))
.attr("rows", 5)
.attr("class", "wiktku-dfn-subfield wiktku-dfn-nimune-tr")
.attr("placeholder", "Transliterasyon…");
subWrap.prepend(trTa);
} else if (!showTr && trTa.length) {
trTa.remove();
}
// t field
var tTa = li.find(".wiktku-dfn-nimune-t");
if (showT && !tTa.length) {
if (!subWrap.length) {
subWrap = $("<div></div>").addClass("wiktku-dfn-nimune-sub");
li.append(subWrap);
}
tTa = $("<textarea></textarea>")
.attr("name", "wiktku-dfn-nimune-t-" + $.now() + "-" + Math.random().toString(36).substr(2, 9))
.attr("rows", 5)
.attr("class", "wiktku-dfn-subfield wiktku-dfn-nimune-t")
.attr("placeholder", "Tercimeya nimûneyê bi kurmancî…");
subWrap.append(tTa);
} else if (!showT && tTa.length) {
tTa.remove();
}
// Remove the wrapper if it ended up empty.
subWrap = li.find(".wiktku-dfn-nimune-sub");
if (subWrap.length && !subWrap.children().length) subWrap.remove();
});
}());
// Re-sync the "<label> bi <ziman>…" placeholder on every always-visible
// sub-field list (etîket, kategorî, hevmane, …), since the language may
// not have been chosen yet when these lists were first built, or may
// have changed since.
$("#wiktku-start-dfn .wiktku-dfn-sublist").each(function () {
var upd = $(this).data("updatePlaceholders");
if (typeof upd === "function") upd();
});
// Same idea for word-list steps (jê, têkildar, binêre herwiha, …)
// whose placeholder is a function of the current language.
$.each(steps, function (stepId, step) {
if (typeof step.placeholder === "function") {
$("#wiktku-start-" + stepId + " textarea.wiktku-start-step-field")
.attr("placeholder", step.placeholder());
}
});
// Sync tr/t sub-fields in every jêder citation to the current language.
// tr shown when language needs transliteration; t shown when lang !== "ku".
(function () {
var lang = values.lang || "";
var showTr = needsTransliteration(lang);
var showT = lang && lang !== "ku";
$("#wiktku-start-dfn .wiktku-dfn-jeder-list li.wiktku-dfn-jeder-li").each(function () {
var li = $(this);
// Ensure the sub-wrapper exists when we need it. It must sit right
// after the quote textarea and before the source selector.
var subWrap = li.find(".wiktku-dfn-quote-sub");
// tr field
var trTa = li.find(".wiktku-dfn-nimune-quote-tr");
if (showTr && !trTa.length) {
if (!subWrap.length) {
subWrap = $("<div></div>").addClass("wiktku-dfn-quote-sub");
// Insert after the quote textarea's resize-wrap (if the manual
// resize handle has already been attached to it), not after the
// bare textarea -- otherwise this lands *inside* that wrap,
// between the textarea and its own grip, breaking jêgirtin's
// handle and nesting the tr/t boxes inside it.
var quoteTa = li.find(".wiktku-dfn-nimune-quote");
var quoteResizeWrap = quoteTa.closest(".wiktku-resize-wrap");
(quoteResizeWrap.length ? quoteResizeWrap : quoteTa).after(subWrap);
}
trTa = $("<textarea></textarea>")
.attr("name", "wiktku-dfn-nimune-quote-tr-" + $.now() + "-" + Math.random().toString(36).substr(2, 9))
.attr("rows", 2)
.attr("class", "wiktku-dfn-subfield wiktku-dfn-nimune-quote-tr")
.attr("placeholder", "Transliterasyona jêgirtinê…");
subWrap.prepend(trTa);
} else if (!showTr && trTa.length) {
trTa.remove();
}
// t field
var tTa = li.find(".wiktku-dfn-nimune-quote-t");
if (showT && !tTa.length) {
if (!subWrap.length) {
subWrap = $("<div></div>").addClass("wiktku-dfn-quote-sub");
// See the tr-field branch above for why this targets the
// resize-wrap instead of the bare textarea.
var quoteTa2 = li.find(".wiktku-dfn-nimune-quote");
var quoteResizeWrap2 = quoteTa2.closest(".wiktku-resize-wrap");
(quoteResizeWrap2.length ? quoteResizeWrap2 : quoteTa2).after(subWrap);
}
tTa = $("<textarea></textarea>")
.attr("name", "wiktku-dfn-nimune-quote-t-" + $.now() + "-" + Math.random().toString(36).substr(2, 9))
.attr("rows", 2)
.attr("class", "wiktku-dfn-subfield wiktku-dfn-nimune-quote-t")
.attr("placeholder", "Tercimeya jêgirtinê bi kurmancî…");
subWrap.append(tTa);
} else if (!showT && tTa.length) {
tTa.remove();
}
// Remove the wrapper if it ended up empty.
subWrap = li.find(".wiktku-dfn-quote-sub");
if (subWrap.length && !subWrap.children().length) subWrap.remove();
});
}());
$.each(steps, function (stepId, step) {
var groupIdx = stepIdToGroup[stepId];
var hiddenByTab = (groupIdx !== undefined && groupIdx !== activeGroup) ||
// Beşên din picker (point 3): stays hidden even while its tab
// is active until explicitly opened from the dropdown.
(BESENDIN_SET[stepId] && !openedOtherSections[stepId]);
if (hiddenByTab || (typeof(step.visible) === "function" && !step.visible(values))) {
$("#wiktku-start-" + stepId).hide();
}
else {
var stepDiv = $("#wiktku-start-" + stepId);
if (changedStep !== step && typeof(step.build) === "function") {
prepareInput(step.build(stepDiv, values), step);
}
// After build, sync the posparams helper widgets whenever pos or lang changes.
if (step.id === "posparams" && typeof step.syncHelpers === "function") {
step.syncHelpers(stepDiv);
}
var input = stepDiv.find(".wiktku-start-step-field");
if (typeof(step.example) === "function") {
// .find() above already reaches nested fields (e.g. the dfn
// step's mane textareas inside each sense block), so one
// assignment covers every step; dfn keeps its own fallback.
var exampleText = step.example(values) || (step.id === "dfn" ? "Mane…" : "");
input.attr("placeholder", exampleText);
}
stepDiv.slideDown();
}
if (step.required &&
(values[stepId] === "" ||
(step.multiple && values[stepId].join("") === ""))) {
canContinue = false;
}
});
$("#wiktku-group-tabs").toggle(!!values.pos);
var besenDinActive = activeGroup === BESENDIN_GROUP_IDX;
$("#wiktku-besendin-picker").toggle(besenDinActive);
// The option list is filtered by each step's visible(), which depends
// on lang/pos — so it has to be rebuilt when those change, not just
// when a section is opened. Safe to call from here: rendering the
// picker doesn't itself call refresh(), only picking an option does.
if (besenDinActive) renderBesenDinPicker();
updateGroupTabIndicators(values);
continueBtn.setDisabled(!canContinue);
// Soft gate (item 7): stays a real, clickable OOUI button — a hard
// setDisabled(true) here would swallow the click entirely, and then
// there'd be no way to tell the person *why* nothing happened. The
// CSS-only "looks disabled" class lets the click handler still run
// and show wiktkuNotify's explanation.
wiktkuContentGateOk = !canContinue || hasMinRequiredContent(values);
continueBtn.$element.toggleClass("wiktku-btn-soft-disabled", !wiktkuContentGateOk);
}
function destroy() {
if (autosaveDebounceTimer) clearTimeout(autosaveDebounceTimer);
if (autosaveInterval) clearInterval(autosaveInterval);
formDirty = false;
$(window).off("beforeunload.wiktkuUnsaved");
$("#wiktku-start-form, .noafterwizard").slideUp(function () {
$(this).remove();
});
$(".noarticletext .nowizard").slideDown();
// #editform was kept laid-out but off-screen (see build()) instead of
// display:none, precisely so the editor never had to size itself
// against a zero-width/height box. Just bring it back on-screen —
// no slideDown needed since it was never actually collapsed.
$("#editform").removeClass("wiktku-offscreen");
// Belt-and-braces: if WikiEditor/CodeMirror/mobile's auto-grow still
// cached a stale size from some earlier point, nudge them to
// recalculate now that the box is genuinely visible.
$(window).trigger("resize");
if (window.CodeMirror) {
var cm = $("#wpTextbox1").data("CodeMirror") || $("#wpTextbox1").data("cmInstance");
if (cm && typeof cm.refresh === "function") cm.refresh();
}
$("#ca-edit").removeClass("selected");
$("#ca-wiktku-nowizard").addClass("selected");
}
// Priority order for Kurdish dialects and navz.
// Codes listed here come before all other languages; unlisted codes
// are sorted alphabetically by their display name via localeCompare.
var LANG_PRIORITY = ["navz", "ku", "hac", "sdh", "lki", "ckb", "zza"];
// Inserts a new "== {{ziman|code}} ==" section at the correct sorted
// position: navz, then ku/hac/sdh/lki/ckb/zza, then alphabetical by name.
function insertNewLangSection(existing, wikitext) {
var newCodeMatch = wikitext.match(new RegExp("^" + langHeaderSource("[^}]+")));
var newCode = newCodeMatch ? newCodeMatch[1] : "";
var sections = [];
var preamble = "";
var anyHeaderSrc = langHeaderSource("[^}]+");
var firstMatch = new RegExp("^" + anyHeaderSrc, "m").exec(existing);
if (!firstMatch) {
// No existing lang sections — just write the new section.
// Add \n\n only when there is real non-whitespace content above.
var trimmed = existing.replace(/\s+$/, "");
return trimmed ? trimmed + "\n\n" + wikitext : wikitext;
}
// Everything before the first == {{ziman|...}} == is the preamble.
var firstSectionStart = firstMatch.index;
// Walk back to the start of that line.
var lineStart = existing.lastIndexOf("\n", firstSectionStart - 1);
var preambleEnd = lineStart !== -1 ? lineStart + 1 : 0;
preamble = existing.slice(0, preambleEnd);
// Parse each language section: header line + everything until the next header.
var body = existing.slice(preambleEnd);
// (?![\s\S]) matches only true end-of-string, since a bare "$" with
// /m would stop at the section's first line break instead.
var langSectionRe = new RegExp(
"^(" + anyHeaderSrc + "\\n?)([\\s\\S]*?)(?=\\n" + anyHeaderSrc + "|(?![\\s\\S]))",
"gm"
);
var m;
while ((m = langSectionRe.exec(body)) !== null) {
sections.push({
code: m[2],
content: m[0] // full text of this section including header
});
}
// Determine sort rank: priority list first (by index), then alphabetical.
function getLangName(code) {
var entry = langsByCode[code];
return entry ? entry.label : code;
}
function sortRank(code) {
var idx = LANG_PRIORITY.indexOf(code);
return idx !== -1 ? idx : LANG_PRIORITY.length;
}
function compareLangs(a, b) {
var ra = sortRank(a), rb = sortRank(b);
if (ra !== rb) return ra - rb;
// Both are outside priority list — sort by display name.
return getLangName(a).localeCompare(getLangName(b), userLang);
}
// Insert the new section into the sorted list.
var newSection = { code: newCode, content: wikitext };
var inserted = false;
for (var i = 0; i < sections.length; i++) {
if (compareLangs(newCode, sections[i].code) < 0) {
sections.splice(i, 0, newSection);
inserted = true;
break;
}
}
if (!inserted) sections.push(newSection);
// Re-join: preamble + sections, each separated by exactly \n\n.
// Trim trailing whitespace off each section's content first so we
// control the spacing precisely.
var joined = sections.map(function (s) {
return s.content.replace(/\s+$/, "");
}).join("\n\n");
// Only add a separator after the preamble when it has real content.
var preambleTrimmed = preamble.replace(/\s+$/, "");
var prefix = preambleTrimmed ? preambleTrimmed + "\n\n" : "";
return prefix + joined + "\n";
}
function build() {
$(".nowizard, .nowizard .noafterwizard").hide();
var callToAction = $("#wiktku-calltoaction");
var origCallToActionText = callToAction.text();
$(mw.util.addPortletLink("p-views", "#", "Edîtora çavkaniyê veke",
"ca-wiktku-nowizard", "Vê rûpelê bi edîtora çavkaniyê çêke",
undefined, "#ca-watch")).click(function (evt) {
evt.preventDefault();
callToAction.text(origCallToActionText);
destroy();
});
if (callToAction.length) {
callToAction.text(origCallToActionText +
" Forma li jêr ji bo çêkirina madeyeke nû bi kar bîne.");
}
var startForm = $("<form id='wiktku-start-form'></form>");
var clearPageCheck = null;
if (addLangMode) {
startForm.append($("<p class='wiktku-addlang-notice'></p>").html(
"Bi vê formê tu yê zimanekî nû li rûpelê îlawe bikî. Eger ev ziman jixwe hebe, beşa nû li dawiya vî zimanî dê were îlawekirin. " +
"Ji kerema xwe netîceya dawî kontrol bike, eger problemek derkeve, li <a href='" +
mw.util.getUrl('Mediawiki talk:Gadget-start.js') +
"'>nîqaşa vê amûrê</a> problemê ragihîne."
));
clearPageCheck = $("<input type='checkbox' id='wiktku-clear-page-check'>");
var clearPageLabel = $("<label for='wiktku-clear-page-check'></label>")
.text(" Muhtewaya rûpelê paqij bike (her tiştî jê bibe û rûpelê ji nû ve binivîse)");
startForm.append(
$("<p class='wiktku-addlang-notice'></p>")
.append(clearPageCheck)
.append(clearPageLabel)
);
// Re-evaluate step visibility (e.g. the pron step) whenever this
// is toggled, since it changes what counts as "existing content".
clearPageCheck.on("change", function () {
refresh();
});
}
var spinner;
// Tab bar for switching between POS sections.
var sectionTabsDiv = $("<div id='wiktku-section-tabs'></div>");
// Tab bar for switching between step-groups (topics) within a section.
// renderGroupTabs()/updateGroupTabIndicators() (which populate and
// maintain it) live outside build() — see near "var activeSection".
var groupTabsDiv = $("<div id='wiktku-group-tabs'></div>");
// Wikihez, 14 Tebax 2026 (item 3): "Beşên din" picker — sits right under
// the group tab bar, only shown while that tab is active (toggled in
// refresh(), see BESENDIN_GROUP_IDX); renderBesenDinPicker() fills it.
var besenDinPickerDiv = $("<div id='wiktku-besendin-picker' class='wiktku-besendin-picker'></div>");
startForm.submit(function (evt) {
evt.preventDefault();
continueBtn.setDisabled(true);
continueBtn.$element.addClass("wiktku-btn-sending");
spinner.show();
getWikitext(function (wikitext) {
if (addLangMode && clearPageCheck && clearPageCheck.prop("checked")) {
// User asked to wipe the page — write fresh content.
$("#wpTextbox1").val(wikitext);
} else if (addLangMode) {
var textbox = $("#wpTextbox1");
var existing = textbox.val() || "";
// ── bnr-h merge ──────────────────────────────────────────
// If the user filled bnr-h inputs, either merge into the
// existing {{bnr-h|…}} call or prepend a new one.
var bnrhOut = steps.bnrh.output(getValues());
if (bnrhOut) {
var newPages = bnrhOut.replace(/^\{\{bnr-h\|/, "").replace(/\}\}\n?$/, "").split("|");
var bnrhRe = /\{\{bnr-h\|([^}]*)\}\}/i;
if (bnrhRe.test(existing)) {
existing = existing.replace(bnrhRe, function (_, inner) {
var existingPages = inner.split("|").map(function (p) { return p.trim(); });
$.each(newPages, function (_, p) {
p = p.trim();
if (p && existingPages.indexOf(p) === -1) existingPages.push(p);
});
return "{{bnr-h|" + existingPages.join("|") + "}}";
});
} else {
existing = bnrhOut + existing;
}
}
// If this language's section already exists (whitespace
// differences aside), merge into it; otherwise insert new.
var langHeaderMatch = wikitext.match(new RegExp("^(" + langHeaderSource("[^}]+") + "\\n)"));
if (langHeaderMatch) {
var langHeader = langHeaderMatch[1]; // e.g. "== {{ziman|ku}} ==\n"
var newCode = langHeaderMatch[2];
var existingHeader = findLangHeader(existing, newCode);
if (existingHeader) {
// Strip the header from the new output.
var newContent = wikitext.slice(langHeader.length);
// Find the insertion point: end of the existing lang section.
// A new L2 heading marks the start of the next language block.
var searchFrom = existingHeader.index + existingHeader.match.length;
// Find the next == … == heading after this section's start.
var nextL2 = existing.indexOf("\n== ", searchFrom);
var insertAt = nextL2 !== -1 ? nextL2 : existing.length;
// Ensure there's a blank line before the inserted block.
var before = existing.slice(0, insertAt);
var after = existing.slice(insertAt);
var sep = /\n\s*$/.test(before) ? "" : "\n";
textbox.val(before + sep + newContent + after);
} else {
// New language — insert at the correct sorted position.
textbox.val(insertNewLangSection(existing, wikitext));
}
} else {
// Unexpected format — insert at sorted position anyway.
textbox.val(insertNewLangSection(existing, wikitext));
}
} else {
$("#wpTextbox1").val(wikitext);
}
$("html, body").animate({scrollTop: 0});
callToAction.text("Hindik ma!");
destroy();
});
});
// Tracks whether groupTabsDiv has been inserted yet — see the
// step.id-driven check below, replaced because it silently broke
// when bnrh/resim/pron moved ahead of "dfn" in ordered_steps.
var groupTabsInserted = false;
$.each(ordered_steps, function (i, step) {
var stepDiv = $(mw.html.element("div", {
"class": "wiktku-start-step",
id: "wiktku-start-" + step.id }));
var name = capitalize(step.name);
var nameH3 = $("<h3></h3>").addClass("wiktku-start-step-name");
var nameLabel = $("<label></label>")
.attr("for", "wiktku-start-" + step.id + "-field")
.text(name);
nameH3.append(nameLabel);
stepDiv.append(nameH3);
if (step.question_fmt) {
// question_fmt can be a plain string, or a function of the
// current values (used by steps whose question text depends
// on e.g. the chosen language) — refresh() keeps it in sync
// afterwards via the .wiktku-start-step-question class.
var questionText = typeof step.question_fmt === "function"
? step.question_fmt(getValues())
: step.question_fmt;
stepDiv.append($(mw.html.element("label", {
"class": "wiktku-start-step-question",
"for": "wiktku-start-" + step.id + "-field" }, questionText)));
if (step.question_br) stepDiv.append($("<br>"));
}
var input;
if (step.choices) {
input = $(mw.html.element("select", {
"class": "wiktku-start-step-field",
id: "wiktku-start-" + step.id + "-field" }));
input.attr("data-placeholder",
capitalize(step.name) + " hilbijêre ");
populateMenus(input, step.choices);
if (step.multiple) input.attr("multiple", true);
// initSelects() runs over the whole form once it is in the DOM.
stepDiv.append(input);
} else if (typeof(step.build) === "function") {
input = step.build(stepDiv);
} else {
input = $("<textarea></textarea>")
.attr("class", "wiktku-start-step-field")
.attr("id", "wiktku-start-" + step.id + "-field")
.attr("rows", step.rows || 2);
if (step.narrow) input.addClass("wiktku-start-narrow");
if (step.placeholder) {
input.attr("placeholder", typeof step.placeholder === "function" ? step.placeholder() : step.placeholder);
}
if (step.multiple) {
input.on("input", function (evt) {
refreshForTextField(evt.target, step);
});
var keyInput = buildKeyInput(step);
var list = $(step.ordered ? "<ol></ol>" : "<ul></ul>")
.append(step.modifiers
? makeModifierLi(input)
: $("<li></li>").append(keyInput).append(input));
stepDiv.append(list);
}
else stepDiv.append(input);
}
prepareInput(input, step);
stepDiv.hide();
// Section tabs (switch between POS sections) sit above the
// per-section fields, starting at "pos".
if (step.id === "pos") {
startForm.append(sectionTabsDiv);
}
// Step-group tabs sit just before the first grouped step in
// ordered_steps — whichever one that is. This USED to be a
// hardcoded "dfn" check, back when dfn was the first grouped
// step. Once bnrh/resim/pron moved into STEP_GROUPS too (and
// earlier in ordered_steps than dfn, so they render near
// pos/posparams), that check stopped matching anything: dfn was
// no longer first, so groupTabsDiv never got appended at all,
// and every grouped step's div — bnrh/resim/pron included — sat
// there with no tab bar above it to reveal them. Deriving the
// insertion point from stepIdToGroup instead means this keeps
// working no matter how STEP_GROUPS/ordered_steps get reordered
// later.
if (!groupTabsInserted && stepIdToGroup[step.id] !== undefined) {
startForm.append(groupTabsDiv);
startForm.append(besenDinPickerDiv);
groupTabsInserted = true;
}
startForm.append(stepDiv);
});
// ── Section tab helpers ──────────────────────────────────────────────
// ── Add-section button — lives in the tab bar, disabled until pos chosen ──
var addSectionBtn = new OO.ui.ButtonWidget({
label: "+ Beş zêde bike",
disabled: true
});
addSectionBtn.on("click", function () {
saveCurrentSection();
sections.push({});
activeSection = sections.length - 1;
$.each(PER_SECTION_STEP_IDS, function (_, id) {
if (id === "dfn") {
var stepDiv = $("#wiktku-start-dfn");
stepDiv.find("ol.wiktku-dfn-list").remove();
steps.dfn.build(stepDiv);
return;
}
if (id === "etym") {
$("#wiktku-start-etym .wiktku-etym-wrap").remove();
steps.etym.build($("#wiktku-start-etym"));
return;
}
if (id === "cavkani") {
$("#wiktku-start-cavkani .wiktku-cavkani-wrap").remove();
steps.cavkani.build($("#wiktku-start-cavkani"));
return;
}
if (id === "posparams") {
var ppDiv = $("#wiktku-start-posparams");
ppDiv.find(".wiktku-posparams-wrap").remove();
return;
}
if (id === "resim") {
$("#wiktku-start-resim .wiktku-resim-wrap").remove();
return;
}
if (id === "trans") {
var transDiv = $("#wiktku-start-trans");
transDiv.find(".wiktku-trans-group").remove();
return;
}
if (id === "zarava") {
var zaravaDiv = $("#wiktku-start-zarava");
zaravaDiv.find(".wiktku-zarava-group").remove();
return;
}
if (id === "dunde") {
var dundeDiv = $("#wiktku-start-dunde");
dundeDiv.find("ul.wiktku-dunde-list").remove();
return;
}
var stepDiv = $("#wiktku-start-" + id);
stepDiv.find(".wiktku-start-step-field").val("");
stepDiv.find("select.wiktku-start-step-field").trigger("wiktku:refresh");
});
// Fresh section — no "Beşên din" sub-section has been opened yet.
openedOtherSections = {};
renderBesenDinPicker();
renderSectionTabs();
refresh();
});
/** Re-render the tab bar to reflect current sections[] and activeSection. */
function renderSectionTabs() {
// Detach (not remove) the button first: .empty() strips bound
// event data from any children left inside it, which would
// silently kill addSectionBtn's click handler on every re-render.
addSectionBtn.$element.detach();
sectionTabsDiv.empty();
var lang = getValues().lang || "";
if (!lang) {
sectionTabsDiv.hide();
return;
}
sectionTabsDiv.show();
$.each(sections, function (i) {
var posVal = sections[i].pos || "";
var tabLabel = posVal ? capitalize(posVal) : ("Beş " + (i + 1));
var tab = $("<span></span>")
.addClass("wiktku-section-tab")
.text(tabLabel)
.toggleClass("wiktku-tab-active", i === activeSection);
(function (idx) {
tab.on("click", function () {
if (idx === activeSection) return;
saveCurrentSection();
activeSection = idx;
restoreSection(sections[activeSection]);
refresh();
renderSectionTabs();
});
}(i));
sectionTabsDiv.append(tab);
});
// Enable "Beş zêde bike" only when the active section has a pos chosen.
var activePos = sections[activeSection] && sections[activeSection].pos
? sections[activeSection].pos
: getValues().pos;
addSectionBtn.setDisabled(!activePos);
sectionTabsDiv.append(addSectionBtn.$element);
}
renderSectionTabs();
/**
* Re-populates a dynamically-growing "multiple" field list (bnrh, je,
* tekildar, …) from a saved array of strings. Sets each value via
* .val() + a triggered "input" event rather than touching the DOM
* structure directly, so the normal refreshForTextField() growth
* logic adds exactly as many rows as needed — the same thing that
* happens when a person types into the last (empty) row.
*/
function restoreMultiField(id, values) {
var container = $("#wiktku-start-" + id);
$.each(values || [], function (i, v) {
var field = container.find(".wiktku-start-step-field").eq(i);
if (!field.length || !v) return;
field.val(v).trigger("input");
});
}
/**
* Restores a full cached draft: shared lang/pron/bnrh fields, then
* every section (via the same restoreSection()/refresh()/
* renderSectionTabs() sequence already used when switching tabs).
* @param cached {{lang: string, pron: string, bnrh: Array, sections: Array, activeSection: number}}
*/
function restoreFromCache(cached) {
if (cached.lang) {
$("#wiktku-start-lang-field").val(cached.lang);
$("#wiktku-start-lang-field").trigger("wiktku:refresh");
}
// Rebuild dependent steps (pos, pron wrap, etc.) now that lang is set.
refresh();
if (cached.pron !== undefined) {
$("#wiktku-start-pron .wiktku-pron-text").val(cached.pron);
}
if (cached.bnrh) {
restoreMultiField("bnrh", cached.bnrh);
}
sections = (cached.sections && cached.sections.length) ? cached.sections : [{}];
activeSection = (typeof cached.activeSection === "number" &&
cached.activeSection >= 0 && cached.activeSection < sections.length)
? cached.activeSection : 0;
restoreSection(sections[activeSection]);
refresh();
renderSectionTabs();
updateLastSavedIndicator(cached.savedAt || null);
formDirty = false;
wiktkuNotify("Danûstandina berê ya qeydkirî ji cache hate barkirin.",
{ type: "info", tag: "wiktku-cache-restore" });
}
// Update the active tab's label whenever pos changes.
startForm.on("change", "#wiktku-start-pos-field", function () {
renderSectionTabs();
// A new cureyê rêzimanî means any previously chosen cinsiyet/
// cureyê lêkerê no longer applies — clear both selections (and
// the shared hidden cinsiyet field, since rebuildTa()/syncHelpers()
// fall back to it) before wiping the textarea, so nothing stale
// gets carried over into the rebuilt template.
var ppDiv = $("#wiktku-start-posparams");
ppDiv.find(".wiktku-posparams-cinsiyet-sel").val("");
ppDiv.find(".wiktku-posparams-jimar-sel").val("");
ppDiv.find(".wiktku-posparams-lektur-sel").prop("selectedIndex", 0);
ppDiv.find(".wiktku-posparams-lekturform-sel").prop("selectedIndex", 0);
$("#wiktku-start-cinsiyet-field").val("");
$("#wiktku-start-jimar-field").val("");
ppDiv.find(".wiktku-posparams-text").val("");
// refresh() runs steps.posparams.syncHelpers(), which toggles the
// param rows for the new pos and — since the textarea is now
// empty — calls rebuildTa() to repopulate it. Just clearing the
// textarea (as before) never triggered this, so the params
// section was left stale until some other field's change event
// happened to fire a refresh().
refresh();
});
// Show the tab bar as soon as a language is selected.
startForm.on("change", "#wiktku-start-lang-field", function () {
renderSectionTabs();
});
var footer = $("<div id='wiktku-start-footer'></div>");
spinner = $(mw.html.element("img", {
id: "wiktku-start-spinner",
src: "//upload.wikimedia.org/wikipedia/commons/d/de/Ajax-loader.gif",
alt: "Tê barkirin…",
title: "Tê barkirin…" }));
footer.append(spinner.hide());
continueBtn = new OO.ui.ButtonWidget({
id: "wiktku-unhide-editform",
label: "Bişîne",
flags: [ "primary", "progressive" ]
});
continueBtn.on("click", function () {
// Immediate feedback that the click registered
continueBtn.$element.addClass("wiktku-btn-flash");
setTimeout(function () {
continueBtn.$element.removeClass("wiktku-btn-flash");
}, 500);
// Item 7: Ziman/Cureyê rêzimanî already block submission via the
// real OOUI setDisabled (see canContinue in refresh()) — this is
// a second, softer check that still lets the click through so we
// can explain *why*, instead of the button just silently doing
// nothing.
if (!wiktkuContentGateOk) {
wiktkuNotify(
"Berî şandinê, tiştekî binivîse: Mane, Bi zaravayên din, an jî Werger — kêmasî yek ji van sê beşan divê tijî be.",
{ type: "warn", tag: "wiktku-mincontent" }
);
return;
}
wiktkuNotify("Tê şandin…", { type: "info", tag: "wiktku-submit" });
startForm.trigger("submit");
});
footer.append(continueBtn.$element);
// "Edîtora çavkaniyê veke" button — inline fallback for the portlet link
var sourceEditorBtn = new OO.ui.ButtonWidget({
label: "Edîtora çavkaniyê veke",
flags: [ "destructive" ],
});
sourceEditorBtn.on("click", function () {
destroy();
});
footer.append(sourceEditorBtn.$element);
// ── Cache save/clear buttons ─────────────────────────────────────────
// Manual, page-scoped save of the entire wizard (all sections, not
// just the active one) via [[MediaWiki:Gadget-StorageUtils.js]]'s
// ObjectStorage. Restoring happens silently on load at the end of
// build(), once the full language list is available.
//
// Saving also happens automatically (debounced while typing, plus a
// periodic fallback) — see "Autosave" below — since relying on the
// person to remember to click "Li cache qeyd bike" before an
// accidental tab close/reload defeats the point of having a cache
// at all.
function buildCacheSnapshot() {
return {
lang: getValues().lang || "",
pron: $("#wiktku-start-pron .wiktku-pron-text").val() || "",
// bnrh is shared (page-level), same as lang/pron above — not
// per-section, so it doesn't live in sections[].
bnrh: getValuesForStep("bnrh"),
sections: sections,
activeSection: activeSection,
savedAt: Date.now()
};
}
// ── Last-saved indicator ─────────────────────────────────────────────
var lastSavedEl = $("<span id='wiktku-last-saved'></span>");
function formatSavedTime(ts) {
try {
return new Date(ts).toLocaleTimeString(mw.config.get("wgUserLanguage"),
{ hour: "2-digit", minute: "2-digit" });
} catch (e) {
return new Date(ts).toLocaleTimeString();
}
}
function updateLastSavedIndicator(ts) {
lastSavedEl.text(ts ? ("Cache: qeydkirî di saet " + formatSavedTime(ts) + " de") : "");
}
// ── Dirty-state tracking + autosave ──────────────────────────────────
// formDirty mirrors "does the live form differ from what's in cache".
// Anything the person types/selects sets it; a successful save (auto
// or manual) clears it; destroy() (final submit, or switching to the
// source editor) also clears it since the wizard's job is over at
// that point either way. formDirty/autosaveDebounceTimer/autosaveInterval
// are declared in the outer scope (near activeGroup) — assigned here,
// not re-declared — so destroy() can reach them too.
var AUTOSAVE_DEBOUNCE_MS = 8000; // save shortly after typing pauses
var AUTOSAVE_INTERVAL_MS = 60000; // …and at least this often regardless
function performAutosave() {
if (!formDirty) return;
saveCurrentSection();
try {
formCache.Set(buildCacheSnapshot());
formDirty = false;
updateLastSavedIndicator(Date.now());
} catch (e) {
// Silent on autosave failure (storage blocked/full, etc.) — the
// manual button still surfaces a proper error if the person
// tries it directly, no need to interrupt typing with a toast.
}
}
function scheduleAutosave() {
formDirty = true;
if (autosaveDebounceTimer) clearTimeout(autosaveDebounceTimer);
autosaveDebounceTimer = setTimeout(performAutosave, AUTOSAVE_DEBOUNCE_MS);
}
startForm.on("input change", "input, textarea, select", scheduleAutosave);
autosaveInterval = setInterval(performAutosave, AUTOSAVE_INTERVAL_MS);
// Warn on accidental tab close/reload while there's anything unsaved.
$(window).on("beforeunload.wiktkuUnsaved", function (e) {
if (!formDirty) return undefined;
e.preventDefault();
e.returnValue = "";
return "";
});
var saveCacheBtn = new OO.ui.ButtonWidget({
label: "Li cache qeyd bike",
title: "Halê vê formê yê niha (ziman, bilêvkirin û hemû beş) li cache (localStorage) qeyd bike, da ku eger rûpel bêyî xwestin were girtin an ji nû ve were barkirin, tu karibî berdewam bikî."
});
saveCacheBtn.on("click", function () {
saveCurrentSection();
// ObjectStorage.Set() doesn't return a success/failure value, so
// the only way to detect a real failure (storage blocked, quota
// exceeded, JSON.stringify choking on something unexpected) is to
// catch it here rather than inspect a (nonexistent) return value.
try {
var snapshot = buildCacheSnapshot();
formCache.Set(snapshot);
formDirty = false;
updateLastSavedIndicator(snapshot.savedAt);
wiktkuNotify("Halê formê li cache hate qeydkirin.", { type: "success", tag: "wiktku-cache-save" });
} catch (e) {
mw.notify("Qeydkirina li cache bi ser neket.", { type: "error", tag: "wiktku-cache-save" });
}
});
footer.append(saveCacheBtn.$element);
var clearCacheBtn = new OO.ui.ButtonWidget({
label: "Cache paqij bike",
flags: [ "destructive" ],
title: "Datayên qeydkirî yên vê rûpelê ji cache jê bibe (forma ku niha xuya dike naguherîne)."
});
clearCacheBtn.on("click", function () {
formCache.Set({});
// The live form still has whatever the person typed — it's just no
// longer backed up anywhere, so treat this like a fresh unsaved edit.
formDirty = true;
updateLastSavedIndicator(null);
wiktkuNotify("Cache hate paqijkirin.", { type: "success", tag: "wiktku-cache-clear" });
});
footer.append(clearCacheBtn.$element);
footer.append(lastSavedEl);
// Icon-only settings button — opens the Tercîh dialog. Plain OOUI
// icon names depend on which icon-pack module happens to be loaded,
// so this uses the actual Codex "settings" (color-subtle) SVG from
// Commons directly, the same way the spinner above hotlinks its gif.
var prefsBtn = $("<button></button>", {
type: "button",
"class": "wiktku-prefs-btn",
title: "Tercîh — sazkariyên vê amûrê biguherîne"
});
prefsBtn.on("click", function (e) {
e.preventDefault();
wiktkuOpenPrefsDialog();
});
footer.append(prefsBtn);
startForm.append(footer);
// NOTE: deliberately NOT .hide() (display:none). WikiEditor/CodeMirror/
// the mobile editor's auto-grow logic measure #wpTextbox1's real
// dimensions during their own init, which happens while the wizard is
// up. A display:none ancestor reports 0 for offsetWidth/offsetHeight/
// scrollHeight, so those scripts bake in a near-zero height that never
// gets recalculated later — slideDown() in destroy() only animates the
// outer box, it doesn't re-trigger their sizing. Pushing #editform
// off-screen instead keeps it laid out (real width/height available to
// measure) without being visible, so the editbox opens at full size.
$("#editform").addClass("wiktku-offscreen").before(startForm);
// renderGroupTabs() looks up #wiktku-group-tabs via a live DOM
// selector, so it must run after startForm is actually in the
// document — calling it back in the build loop (while startForm was
// still detached) silently no-op'd and left the tab bar empty.
renderGroupTabs();
renderBesenDinPicker();
// One pass over the whole form: every select that hasn't already been
// initialised, and isn't opted out with .wiktku-plain-select, gets
// the searchable picker.
initSelects(startForm);
refresh();
// Give every draggable textarea a custom resize grip (works
// consistently on Safari/iOS, unlike the native corner grip — see
// the "Manual drag-to-resize handle" comment in styles.css), and
// keep applying it to textareas added later on (new sense blocks,
// quote-source fields, nimûne rows, …).
wiktkuInitManualResize(startForm);
new MutationObserver(function (mutations) {
mutations.forEach(function (mutation) {
$(mutation.addedNodes).each(function () {
if (this.nodeType !== 1) return;
wiktkuInitManualResize(this);
});
});
}).observe(startForm[0], { childList: true, subtree: true });
// Now that the full language list is loaded, silently restore any
// draft the editor previously saved for this page.
var cachedDraft = formCache.Get();
if (cachedDraft && cachedDraft.sections && cachedDraft.sections.length) {
restoreFromCache(cachedDraft);
}
}
mw.loader.using(["oojs-ui-core"], function () {
function wiktkuProceedWithData(wiktkuData) {
var d = wiktkuData || {};
// Populate metadata.
if (d.metadata) $.extend(metadata, d.metadata);
// Populate gender labels.
if (d.genderLabels) $.extend(GENDER_BASE_LABELS, d.genderLabels);
// Item 1: Jimar (number) code definitions — same shape as the wiki's
// own Lua number-type table (code -> {cat, display[, req]}).
if (d.numberLabels) $.extend(NUMBER_LABELS, d.numberLabels);
// Populate lang choices (pinned list).
if (d.langChoices) steps.lang.choices = choicesFromObject(d.langChoices, true);
// Populate langsByCode and merge full language list from d.ziman.
// d.ziman is a {code: name} object with all known languages.
$.each(steps.lang.choices, function (i, choice) {
if (choice.sortKey === undefined) choice.sortKey = choice.label;
langsByCode[choice.code] = choice;
});
if (d.ziman) {
var pinnedCodes = {};
$.each(steps.lang.choices, function (i, c) { pinnedCodes[c.code] = true; });
var extraChoices = [];
$.each(d.ziman, function (code, name) {
if (/-pro$/i.test(code)) return;
if (/ziman[eê]\s+destan/i.test(name)) return;
if (pinnedCodes[code]) return;
var choice = { code: code, label: name, sortKey: name };
extraChoices.push(choice);
langsByCode[code] = choice;
});
extraChoices.sort(function (a, b) {
return a.sortKey.localeCompare(b.sortKey, userLang);
});
steps.lang.choices = steps.lang.choices.concat(extraChoices);
}
// Keep the full merged list around for trans/dunde/zarava — those
// should still be able to reference any language even when the
// Tercîh panel restricts the main "ziman" step below — then, if
// the user set a restriction there, narrow steps.lang.choices
// itself to just those codes.
var wiktkuFullLangChoices = steps.lang.choices;
if (wiktkuPrefs.langCodes && wiktkuPrefs.langCodes.length) {
var wiktkuAllowedLangSet = {};
$.each(wiktkuPrefs.langCodes, function (i, code) { wiktkuAllowedLangSet[code] = true; });
var wiktkuRestrictedChoices = $.grep(wiktkuFullLangChoices, function (c) {
return !!wiktkuAllowedLangSet[c.code];
});
// Fall back to the full list instead of showing an empty
// dropdown if none of the saved codes matched anything
// (typo'd code, data.json changed since, …).
steps.lang.choices = wiktkuRestrictedChoices.length ? wiktkuRestrictedChoices : wiktkuFullLangChoices;
}
// Populate POS choices — also a plain {code: label} object in data.json.
if (d.posChoices) steps.pos.choices = choicesFromObject(d.posChoices, false);
// Populate template definitions for the dfn sense-block builder.
if (d.tplDefs) steps.dfn.tplDefs = d.tplDefs;
// Populate pos placeholder examples.
if (d.posExamples) steps.dfn.posExamples = d.posExamples;
// Populate citation template definitions for the quote widget.
if (d.jederDefs) steps.dfn.jederDefs = d.jederDefs;
// Populate pronunciation and etymology template insert lists.
if (d.pronTpls) {
steps.pron.pronTpls = d.pronTpls;
steps.pron.refreshTplSelect();
}
if (d.etymTpls) {
steps.etym.etymTpls = d.etymTpls;
steps.etym.refreshTplSelect();
}
// Sync trans/dunde/zarava keys with the full language list
// (not the possibly Tercîh-restricted steps.lang.choices).
steps.trans.keys = wiktkuFullLangChoices;
steps.dunde.keys = wiktkuFullLangChoices;
steps.zarava.keys = getZaravaKeys(wiktkuFullLangChoices);
build();
}
// data.json ships inside this package module, so it is already parsed
// and in memory — no action=raw round trip, and no Testing switch to
// forget to flip back before deploying.
wiktkuProceedWithData(require("./start/data.json"));
});
});
//</nowiki>
4hny7nxmxheez72p609hpipf9s73125
6333762
6333752
2026-08-14T23:34:23Z
Wikihez
7344
6333762
javascript
text/javascript
// Li ser [[vi:MediaWiki:Gadget-start.js]] hatiye refaktorkirin.
// implicit dependencies: StorageUtils (ObjectStorage)
//<nowiki>
$(function () {
if (window.location.href.includes("editintro=User:Wikihez/creation/intro")) {
return; // Do not run the script wextê WF:Bilez dişuxile
}
var ns = mw.config.get("wgNamespaceNumber");
if (ns &&
!(ns === 2 && mw.config.get("wgPageName").match(/\/ceribandin$|\/test$/))) {
return;
}
var addLangMode = mw.util.getParamValue("wiktkuaddlang") === "1";
// ── Tercîh (user settings) panel stored via mw.storage (localStorage), globally
var WIKTKU_PREFS_KEY = "wiktku_start_prefs";
var WIKTKU_PREFS_DEFAULTS = {
// [] = show the full language list in the "ziman" step; otherwise
// only these codes are shown there (data.json codes, not names).
langCodes: [],
// true = never auto-open on a new/empty page — only via the
// "+Ziman/beşeke din" portlet link.
onlyOnClick: false,
// "auto" | "p-cactions" | "p-tb" | "p-views" — where the
// "+Ziman/beşeke din" portlet link is added.
portlet: "auto",
// true = suppress routine/informational mw.notify toasts (page
// loading, cache auto-restored, cache saved/cleared, "tê şandin…").
// Errors and direct results of an explicit action (like saving
// Tercîh itself) always show regardless of this setting.
quiet: false
};
function wiktkuLoadPrefs() {
if (!(window.mw && mw.storage)) return $.extend({}, WIKTKU_PREFS_DEFAULTS);
var raw;
try { raw = mw.storage.get(WIKTKU_PREFS_KEY); } catch (e) { raw = null; }
if (!raw) return $.extend({}, WIKTKU_PREFS_DEFAULTS);
var parsed;
try { parsed = JSON.parse(raw); } catch (e) { parsed = {}; }
return $.extend({}, WIKTKU_PREFS_DEFAULTS, parsed);
}
function wiktkuSavePrefs(prefs) {
if (!(window.mw && mw.storage)) return false;
try {
mw.storage.set(WIKTKU_PREFS_KEY, JSON.stringify(prefs));
return true;
} catch (e) { return false; }
}
var wiktkuPrefs = wiktkuLoadPrefs();
// Routine/informational notices go through here so "quiet mode" can
// suppress them; errors and explicit-action confirmations (like the
// Tercîh save toast) call mw.notify directly instead, and always show.
function wiktkuNotify(message, options) {
if (wiktkuPrefs.quiet) return;
mw.notify(message, options);
}
// Lazily built the first time it's opened; reused after that (see
// wiktkuOpenPrefsDialog below, defined once we know OOUI is available).
var wiktkuPrefsWindowManager = null;
var wiktkuPrefsDialog = null;
function wiktkuOpenPrefsDialog() {
mw.loader.using(["oojs-ui-core", "oojs-ui-windows"], function () {
function WiktkuPrefsDialog(config) {
WiktkuPrefsDialog.super.call(this, config);
}
if (!wiktkuPrefsDialog) {
OO.inheritClass(WiktkuPrefsDialog, OO.ui.ProcessDialog);
WiktkuPrefsDialog.static.name = "wiktkuPrefsDialog";
WiktkuPrefsDialog.static.title = "Tercîhên min";
WiktkuPrefsDialog.static.actions = [
{ action: "save", label: "Qeyd bike", flags: ["primary", "progressive"] },
{ action: "cancel", label: "Betal bike", flags: "safe" }
];
WiktkuPrefsDialog.prototype.initialize = function () {
WiktkuPrefsDialog.super.prototype.initialize.call(this);
this.langCodesInput = new OO.ui.TextInputWidget({
placeholder: "ku, zza, ckb (vala bihêle ji bo hemû zimanan)"
});
this.onlyOnClickCheckbox = new OO.ui.CheckboxInputWidget({});
this.quietCheckbox = new OO.ui.CheckboxInputWidget({});
this.portletDropdown = new OO.ui.DropdownInputWidget({
options: [
{ data: "auto", label: "Otomatîk (li gorî rûyê wîkiyê)" },
{ data: "p-cactions", label: "p-cactions - Li qismê Amûran" },
{ data: "left-navigation", label: "left-navigation - Li qismê Gotar-Gotûbêj" },
{ data: "p-tb", label: "p-tb - Li qismê Giştî" },
{ data: "p-views", label: "p-views - Li qismê Bixwîne" }
]
});
var fieldset = new OO.ui.FieldsetLayout({ label: "Eyar" });
fieldset.addItems([
new OO.ui.FieldLayout(this.langCodesInput, {
label: "Kodên zimanan ku tê xuyakirin li qismê \"ziman\"",
align: "top",
help: "Kodan bi virgulê (,) ji hev veqetîne. Vala bihêle da ku hemû ziman were nîşandan.",
helpInline: true
}),
new OO.ui.FieldLayout(this.onlyOnClickCheckbox, {
label: "Tenê veke wextê \"+Ziman/beşeke din\" were tikandin",
align: "inline",
help: "Eger were hilbijartin, ev amûr êdî otomatîk li ser rûpelên nû/vala dest pê nake — divê meriv her carê pêl \"+Ziman/beşeke din\" bike.",
helpInline: true
}),
new OO.ui.FieldLayout(this.portletDropdown, {
label: "Cihê lînka \"+Ziman/beşeke din\"",
align: "top",
help: "\"Otomatîk\" li gorî rûyê wîkiyê hildibijêre.",
helpInline: true
}),
new OO.ui.FieldLayout(this.quietCheckbox, {
label: "Moda bêdeng (kêmtir agahdarî nîşan bide)",
align: "inline",
help: "Agahdariyên normal nîşan nede. Xeta her tim tên xuyakirin.",
helpInline: true
})
]);
this.$body.addClass("wiktku-prefs-dialog-body").append(fieldset.$element);
};
WiktkuPrefsDialog.prototype.getSetupProcess = function (data) {
return WiktkuPrefsDialog.super.prototype.getSetupProcess.call(this, data)
.next(function () {
this.langCodesInput.setValue(wiktkuPrefs.langCodes.join(", "));
this.onlyOnClickCheckbox.setSelected(!!wiktkuPrefs.onlyOnClick);
this.portletDropdown.setValue(wiktkuPrefs.portlet || "auto");
this.quietCheckbox.setSelected(!!wiktkuPrefs.quiet);
}, this);
};
WiktkuPrefsDialog.prototype.getActionProcess = function (action) {
var dialog = this;
if (action === "save") {
return new OO.ui.Process(function () {
var codes = dialog.langCodesInput.getValue()
.split(/[,\s]+/)
.map(function (c) { return c.trim().toLowerCase(); })
.filter(function (c) { return !!c; });
wiktkuPrefs = {
langCodes: codes,
onlyOnClick: dialog.onlyOnClickCheckbox.isSelected(),
portlet: dialog.portletDropdown.getValue() || "auto",
quiet: dialog.quietCheckbox.isSelected()
};
wiktkuSavePrefs(wiktkuPrefs);
mw.notify(
"Tercîh hatin qeydkirin. Rûpelê ji nû ve bar bike (F5).",
{ type: "success", tag: "wiktku-prefs-save" }
);
dialog.close({ action: "save" });
});
}
if (action === "cancel") {
return new OO.ui.Process(function () {
dialog.close({ action: "cancel" });
});
}
return WiktkuPrefsDialog.super.prototype.getActionProcess.call(this, action);
};
wiktkuPrefsWindowManager = new OO.ui.WindowManager();
$(document.body).append(wiktkuPrefsWindowManager.$element);
wiktkuPrefsDialog = new WiktkuPrefsDialog();
wiktkuPrefsWindowManager.addWindows([wiktkuPrefsDialog]);
}
wiktkuPrefsWindowManager.openWindow(wiktkuPrefsDialog);
});
}
var targetContainer;
var skin = mw.config.get('skin');
if (wiktkuPrefs.portlet && wiktkuPrefs.portlet !== "auto") {
targetContainer = wiktkuPrefs.portlet;
} else if (skin === 'vector-2022') {
targetContainer = 'p-cactions';
} else if (skin === 'vector') {
targetContainer = 'p-tb';
} else {
targetContainer = 'p-views';
}
mw.util.addPortletLink(targetContainer,
mw.util.getUrl(mw.config.get("wgPageName"), { action: "submit", wiktkuaddlang: "1" }),
"+Ziman/beşeke din", "ca-wiktku-addlang",
"Li vê rûpelê, ziman an jî beşeke nû zêde bike");
// If "onlyOnClick" is set, the wizard should ONLY ever open via the
// "+Ziman/beşeke din" link — never automatically
var wiktkuNewPageDetected = $(".mw-newarticletext, .mw-newarticletextanon").length > 0;
if (wiktkuPrefs.onlyOnClick ? !addLangMode : (!addLangMode && !wiktkuNewPageDetected)) {
return;
}
// ── Shared helpers ───────────────────────────────────────────────────
// Generic text/UI utilities live in their own package file now — see the
// header of util.js for why. Aliased to bare names here so the ~400 call
// sites below read exactly as they did when these were local functions.
var wiktkuUtil = require("./start/util.js");
var capitalize = wiktkuUtil.capitalize;
var decapitalize = wiktkuUtil.decapitalize;
var escapeRegExp = wiktkuUtil.escapeRegExp;
var stripWikilinks = wiktkuUtil.stripWikilinks;
var splitTercimeIzah = wiktkuUtil.splitTercimeIzah;
var insertAtCursor = wiktkuUtil.insertAtCursor;
var foldDiacritics = wiktkuUtil.foldDiacritics;
var wrapNativeSelect = wiktkuUtil.wrapNativeSelect;
var initSelects = wiktkuUtil.initSelects;
var wiktkuInitManualResize = wiktkuUtil.initManualResize;
function langHeaderSource(codePattern) {
return "\n?==\\s*\\{\\{\\s*ziman\\s*\\|\\s*(" + codePattern + ")\\s*\\}\\}\\s*==";
}
function findLangHeader(text, code) {
var m = new RegExp(langHeaderSource(escapeRegExp(code))).exec(text);
return m ? { index: m.index, match: m[0] } : null;
}
var catSrcTemplates = null;
var catSrcTemplatesPromise = null;
function fetchCatSrcTemplates() {
if (catSrcTemplatesPromise) return catSrcTemplatesPromise;
catSrcTemplatesPromise = new mw.Api().get({
action: "query",
list: "categorymembers",
cmtitle: "Kategorî:Çavkanî",
cmnamespace: 10,
cmlimit: "max",
formatversion: 2
}).then(function (data) {
var members = (data.query && data.query.categorymembers) || [];
catSrcTemplates = $.map(members, function (m) {
// Pêşgira navî ya "Şablon:" rake.
return m.title.replace(/^[^:]+:/, "");
});
catSrcTemplates.sort(function (a, b) { return a.localeCompare(b, userLang); });
return catSrcTemplates;
}, function () {
catSrcTemplates = [];
return catSrcTemplates;
});
return catSrcTemplatesPromise;
}
var pageName = mw.config.get("wgPageName").replaceAll(/_/g, " ");
if (ns) pageName = pageName.replace(/.*\//, "");
var pageNameRe = escapeRegExp(pageName);
var userLang = mw.config.get("wgUserLanguage");
var formCache = new ObjectStorage("wiktku_start_draft_" + mw.config.get("wgPageName"), 1);
var langsByCode = {};
// Looks up the display label for a language code, falling back to the
// code itself if it isn't known yet (e.g. langsByCode not loaded).
function getLangLabel(code) {
var entry = langsByCode[code];
return entry ? entry.label : code;
}
// Populated from [[MediaWiki:Gadget-start.js/data.json]] at runtime.
var metadata = {};
var ZARAVA_LANG_CODES = ["ckb", "sdh", "lki", "hac", "zza"];
// Converts a {code: label} object (langChoices/posChoices in data.json)
// into the {code, label[, sortKey]} array the rest of the script uses.
// isLang: true adds a sortKey and shows "(code)" after the label —
// language choices only.
function choicesFromObject(obj, isLang) {
var result = [];
$.each(obj || {}, function (code, label) {
var choice = { code: code, label: label };
if (isLang) choice.sortKey = label;
result.push(choice);
});
return result;
}
function getZaravaKeys(choices) {
var byCode = {};
$.each(choices || [], function (_, c) { byCode[c.code] = c; });
var result = [];
$.each(ZARAVA_LANG_CODES, function (_, code) {
if (byCode[code]) result.push(byCode[code]);
});
return result;
}
function needsTransliteration(langCode) {
var meta = metadata[langCode];
if (!meta || !meta.sc) return false;
var scripts = Array.isArray(meta.sc) ? meta.sc : [meta.sc];
return scripts.length > 0 && scripts[0] !== "Latn";
}
// Kodên cinsiyetê yên di metadata.g de — ji data.json tê dagirtin
var GENDER_BASE_LABELS = {};
// Item 1 (Wikihez, 14 Tebax 2026): kodên jimarê (y, s, d, p, p+, tp, j, j+,
// j/nj, nj, nj+, hj!, hj?) — ji data.json's "numberLabels" tê dagirtin.
// Same {code: {cat, display[, req]}} shape as the wiki's own Lua
// number-type table; "display" can contain HTML (<abbr>) or wikilinks
// ([[...]]), so it's only used as-is inside the wikitext output — never
// dropped straight into an <option>, which can't render either (see
// stripMarkupForOption below).
var NUMBER_LABELS = {};
// metadata[lang].g used to list gender AND number codes together (see
// cinsiyet/posparams below) — this tells the two dropdowns apart: any
// code that's a key in NUMBER_LABELS is a number code (goes in the new
// Jimar dropdown / j= param), everything else is a gender code (stays
// in the existing Cîns dropdown / c= param). Compound codes like "m-p"
// or "n-p" are gender+plural pairs, not plain "p" — they don't match a
// NUMBER_LABELS key, so they correctly stay on the gender side.
function isNumberCode(code) {
return Object.prototype.hasOwnProperty.call(NUMBER_LABELS, code);
}
// Strips the bit of markup "display" is allowed to contain so it's safe
// to use as plain <option> text (options can't render HTML or wikilinks):
// <abbr title="X">Y</abbr> -> "Y (X)", [[a|b]] -> "b", [[a]] -> "a".
function stripMarkupForOption(html) {
if (!html) return "";
return $.trim(
String(html)
.replace(/<abbr[^>]*title="([^"]*)"[^>]*>([\s\S]*?)<\/abbr>/gi, "$2 ($1)")
.replace(/\[\[[^\]|]*\|([^\]]*)\]\]/g, "$1")
.replace(/\[\[([^\]]*)\]\]/g, "$1")
.replace(/<[^>]+>/g, "")
);
}
// Builds the Jimar dropdown's <option> text for one code: "j — jimarbar".
function numberOptionLabel(code) {
var def = NUMBER_LABELS[code];
if (!def) return code;
var text = stripMarkupForOption(def.display);
return text ? (code + " — " + text) : code;
}
// Sub-lists that only make sense for a plain (non-şablon) sense — hidden
// when a şablon (e.g. {{guharto|…}}) is chosen for that sense
var HIDDEN_ON_TPL_GROUPS = [
"wiktku-dfn-alternativ",
"wiktku-dfn-hevmane",
"wiktku-dfn-dijmane",
"wiktku-dfn-koordine",
"wiktku-dfn-jornav",
"wiktku-dfn-jernav"
];
function genderLabel(code) {
if (code === "p") return "Pirjimar";
var pluralMatch = code.match(/^(.+)-p$/);
if (pluralMatch && GENDER_BASE_LABELS[pluralMatch[1]]) {
return GENDER_BASE_LABELS[pluralMatch[1]] + " (pirjimar)";
}
return GENDER_BASE_LABELS[code] || code;
}
// True if a sense has content beyond mane worth keeping (etîket, word
// lists, nimûne, jêder) — so it's still emitted with {{mane?}} if empty.
function senseHasExtraContent(s) {
if (s.etiket && $.grep(s.etiket, function (e) { return $.trim(e) !== ""; }).length) return true;
if (s.kategori && $.grep(s.kategori, function (k) { return $.trim(k) !== ""; }).length) return true;
if (s.alternativ.length || s.hevmane.length || s.dijmane.length ||
s.koordine.length || s.jornav.length || s.jernav.length) return true;
if (s.nimune && $.grep(s.nimune, function (n) {
return (typeof n === "object" ? n.text : n) !== "";
}).length > 0) return true;
if (senseHasJeder(s)) return true;
return false;
}
// Wikihez, 14 Tebax 2026 (item 7): the real submit-blocking requirement
// (Ziman + Cureyê rêzimanî, via step.required/canContinue) is already
// obvious since Bişîne stays visibly disabled until it's met. What
// wasn't obvious is that a technically-"complete" entry with nothing
// in Mane, Bi zaravayên din or Werger is still empty in any meaningful
// sense — so this is checked separately, at click time, with its own
// message, instead of another star/legend marker on the page.
function hasMinRequiredContent(values) {
var dfnSenses = steps.dfn.getSenses($("#wiktku-start-dfn"));
var hasMane = dfnSenses.some(function (s) {
return (s.tpl && s.tplTitle) || (!s.tpl && (s.mane !== "" || senseHasExtraContent(s)));
});
if (hasMane) return true;
if (values.lang === "ku") {
var hasWerger = false;
$("#wiktku-start-trans .wiktku-trans-group").each(function () {
if (steps.trans.getGroupTranslations($(this)).length) hasWerger = true;
});
if (hasWerger) return true;
var hasZarava = false;
$("#wiktku-start-zarava .wiktku-zarava-group").each(function () {
if (steps.zarava.getGroupTranslations($(this)).length) hasZarava = true;
});
if (hasZarava) return true;
}
return false;
}
// Bolds the *first* occurrence of the page name
function boldPageNameOnce(text) {
if (!text || !pageNameRe) return text;
var re = new RegExp("(" + pageNameRe + "([^( |,|;|\\?|\\.|\\!)]+)?)", "i");
return text.replace(re, "'''$1'''");
}
// Converts literal line breaks typed into a nimûne/jêgirtin box into
// wikitext <br> tags,
function nlToBr(text) {
return text ? text.replace(/\r\n|\r|\n/g, "<br>") : text;
}
function escapeHtmlForBackdrop(str) {
return String(str)
.replace(/&/g, "&")
.replace(/</g, "<")
.replace(/>/g, ">");
}
// Mirrors a textarea's text, with a small highlighted marker placed
// right after each line that's followed by an actual typed/pasted
// linebreak. Rendered into a transparent backdrop layer behind the
// textarea (see ensureLinebreakBackdrop()), so only the point of the
// break is marked instead of the whole box.
function buildLinebreakBackdropHtml(text) {
var lines = text.split(/\r\n|\r|\n/);
return $.map(lines, function (line, i) {
var isLast = i === lines.length - 1;
return escapeHtmlForBackdrop(line) +
(isLast ? "" : "<mark class='wiktku-linebreak-mark'>↵</mark>\n");
}).join("");
}
// Copies the metrics that affect where text wraps/lands (font, line
// height, padding, border) from the real textarea onto its backdrop,
// via computed style rather than shared CSS classes — most of the
// box's own rules are written as "textarea.foo", which a <div> with
// the same class wouldn't match. Re-run on every update in case a
// responsive breakpoint changed the textarea's own font-size.
function syncLinebreakBackdropMetrics(textarea, backdrop) {
var cs = window.getComputedStyle(textarea[0]);
backdrop.css({
"box-sizing": cs.boxSizing,
"padding-top": cs.paddingTop,
"padding-right": cs.paddingRight,
"padding-bottom": cs.paddingBottom,
"padding-left": cs.paddingLeft,
"border-width": cs.borderWidth,
"border-style": "solid",
"font-family": cs.fontFamily,
"font-size": cs.fontSize,
"font-weight": cs.fontWeight,
"line-height": cs.lineHeight,
"letter-spacing": cs.letterSpacing
});
}
// Lazily wraps a textarea in its own positioning anchor (independent
// of .wiktku-resize-wrap, so this doesn't depend on load order versus
// wiktkuMakeManualResizable) and inserts the transparent backdrop
// layer used to mark the exact point of a linebreak. Safe to call
// more than once on the same textarea — the backdrop is cached.
function ensureLinebreakBackdrop(textarea) {
var existing = textarea.data("wiktkuLinebreakBackdrop");
if (existing) return existing;
textarea.wrap("<div class='wiktku-linebreak-wrap'></div>");
var backdrop = $("<div aria-hidden='true'></div>").addClass("wiktku-linebreak-backdrop");
textarea.before(backdrop);
textarea.data("wiktkuLinebreakBackdrop", backdrop);
textarea.on("scroll.wiktkuLinebreak", function () {
backdrop.scrollTop(textarea.scrollTop()).scrollLeft(textarea.scrollLeft());
});
return backdrop;
}
// Flags a nimûne/jêgirtin textarea (via CSS class, for the border
// tint + tooltip) while it contains a typed/pasted linebreak, so the
// user notices before it's silently turned into <br> on output.
// Marks only the exact point of the break via a mirrored backdrop,
// rather than tinting the whole box.
function highlightLinebreak(el) {
var textarea = $(el);
var text = textarea.val();
var hasBreak = /\r|\n/.test(text);
textarea
.toggleClass("wiktku-has-linebreak", hasBreak)
.attr("title", hasBreak ? "Xeta nû dê wek <br> bê nivîsandin" : "");
if (!hasBreak) {
var cached = textarea.data("wiktkuLinebreakBackdrop");
if (cached) cached.hide();
textarea.removeClass("wiktku-has-linebreak-source");
return;
}
var backdrop = ensureLinebreakBackdrop(textarea);
textarea.addClass("wiktku-has-linebreak-source");
syncLinebreakBackdropMetrics(textarea, backdrop);
backdrop.html(buildLinebreakBackdropHtml(text)).show();
backdrop.scrollTop(textarea.scrollTop()).scrollLeft(textarea.scrollLeft());
}
// Each nimûne item can be { text, tr, t }: text, transliteration, translation.
function formatNimune(nimunes, lang, hasJeder) {
var hasNimune = nimunes && $.grep(nimunes, function (n) {
return (typeof n === "object" ? n.text : n) !== "";
}).length > 0;
if (!hasNimune) {
return hasJeder ? "" : "\n#* {{nimûne?|" + lang + "}}";
}
return $.map(nimunes, function (n) {
var text = typeof n === "object" ? n.text : n;
if (!text) return undefined;
var bolded = nlToBr(boldPageNameOnce(text));
var tpl = "\n#: {{nm|" + lang + "|" + bolded;
if (typeof n === "object") {
if (n.tr) tpl += "|tr=" + nlToBr(n.tr);
// Translation as third positional param (no key needed).
if (n.t) tpl += "|" + nlToBr(n.t);
}
// Short examples fit on one line together with their translation.
// rêz=1 is not used for ku — definitions are shown on separate lines there.
if (text.length < 60 && lang !== "ku") tpl += "|rêz=1";
tpl += "}}";
return tpl;
}).join("");
}
// Formats jêder (citation) entries into "#* {{jêder…|…}}" lines; skips
// entries with no quote text. Falls back to the generic {{jêder}}
// template when no specific template was chosen.
function formatJeder(jederList, lang) {
if (!jederList || !jederList.length) return "";
return $.map(jederList, function (jeder) {
if (!jeder || !jeder.quote) return undefined;
var quote = nlToBr(boldPageNameOnce(jeder.quote));
var quoteTr = nlToBr(jeder.quoteTr);
var quoteT = nlToBr(jeder.quoteT);
if (jeder.jederTpl) {
var cite = "\n#* {{" + jeder.jederTpl + "|" + lang;
cite += "|jêgirtin=" + quote;
if (quoteTr) cite += "|tr=" + quoteTr;
if (quoteT) cite += "|tercime=" + quoteT;
$.each(jeder.jêderFields || {}, function (key, val) {
if (val) cite += "|" + key + "=" + val;
});
cite += "}}";
return cite;
}
var out = "\n#* {{jêder|" + lang + "|jêgirtin=" + quote;
if (quoteTr) out += "|tr=" + quoteTr;
if (quoteT) out += "|tercime=" + quoteT;
// A şablon picked from Kategorî:Çavkanî is transcluded as the
// source param (e.g. |{{Kovara X}}); manual text is used as-is.
var srcParam = jeder.jederCatTpl ? ("{{" + jeder.jederCatTpl + "}}") :
(jeder.jederManual ? jeder.jederManual : "çavkanî?");
// A positional param containing "=" gets parsed as its own key=value
// pair by MediaWiki and breaks the template, so force it to be
// explicitly named (|2=) whenever that's the case.
out += (srcParam.indexOf("=") !== -1 ? "|2=" : "|") + srcParam;
out += "}}";
return out;
}).join("");
}
// True if a sense has at least one jêder entry with quote text.
function senseHasJeder(sense) {
return !!(sense.jeder && $.grep(sense.jeder, function (j) {
return j && j.quote;
}).length > 0);
}
// Builds "{{tplName|lang|part1|part2|…}}" from a sense field (kategori,
// etiket), wrapped inline (" {{…}} ") or on its own line ("\n#: {{…}}").
function buildSenseTpl(sense, field, lang, tplName) {
if (!sense[field] || !sense[field].length) return "";
var parts = sense[field].map(function (p) { return $.trim(p); })
.filter(function (p) { return p !== ""; });
if (!parts.length) return "";
var call = "{{" + tplName + "|" + lang + "|" + parts.join("|") + "}}";
return call
}
/**
* Assembles the nimûne + jêder wikitext block for a sense. Shared by
* both the template-sense and normal-mane-sense branches below.
*/
function buildCite(sense, lang) {
return formatNimune(sense.nimune, lang, senseHasJeder(sense)) +
formatJeder(sense.jeder, lang);
}
// ── Inline modifier system ───────────────────────────────────────────────
// Appends a ⊕ button to a word input <li>. Clicking it shows a compact
// modifier picker; selecting one prompts for the value and appends
// <modifier:value> to the textarea's current content.
var WORD_MODIFIERS = [
{ key: "t", label: "t: tercime / îzah", hint: "Tercimeya kelîmeyê an îzaha wê" },
{ key: "cuda", label: "cuda: alt display", hint: "Forma nîşankirinê ya alternatîf" },
{ key: "c", label: "c: cinsiyet", hint: "Cinsiyeta kelîmeyê" },
{ key: "e", label: "e: etîket (li pêşiyê)", hint: "Etîketek li pêşiya kelîmeyê" },
{ key: "ee", label: "ee: etîket (li dawiyê)", hint: "Etîketek li dawiya kelîmeyê" },
{ key: "q", label: "q: qualifier (li pêşiyê)", hint: "Wesf li pêşiya kelîmeyê" },
{ key: "qq", label: "qq: qualifier (li dawiyê)", hint: "Wesf li dawiya kelîmeyê" },
{ key: "crz", label: "crz: cureyê rêzimanî", hint: "Cureyê rêzimanî yê kelîmeyê" },
{ key: "hrf", label: "hrf: herfiyen", hint: "Herfiyen, manaya rasterast" },
{ key: "ref", label: "ref: çavkanî", hint: "Çavkanî" }
];
// Sub-groups (inside a sense/definition block) that get the same ⊕
// modifier button as makeWordListStep fields.
var MODIFIER_SUBGROUPS = {
"wiktku-dfn-alternativ": true,
"wiktku-dfn-hevmane": true,
"wiktku-dfn-dijmane": true,
"wiktku-dfn-koordine": true,
"wiktku-dfn-jornav": true,
"wiktku-dfn-jernav": true
};
/**
* Wraps a freshly-created textarea in a <li> with a ⊕ modifier button.
* `ta` — the jQuery textarea element.
* Returns the <li>.
*/
function makeModifierLi(ta) {
var li = $("<li class='wiktku-word-li'></li>");
var btn = $("<button type='button' class='wiktku-mod-btn' title='Modifiyerê lê zêde bike'>⊕</button>");
var picker = $("<div class='wiktku-mod-picker'></div>").hide();
// Which modifier keys are already present in the textarea's current
// text — e.g. "<t:...>" → "t" used. Each modifier can only be
// applied once per word, so its pill gets disabled once used.
function usedKeys() {
var used = {};
var re = /<([a-zA-Z]+):/g;
var val = ta.val() || "";
var m;
while ((m = re.exec(val)) !== null) used[m[1]] = true;
return used;
}
$.each(WORD_MODIFIERS, function (_, mod) {
var pill = $("<button type='button' class='wiktku-mod-pill'></button>").text(mod.label);
pill.attr("title", mod.hint);
pill.data("mod-key", mod.key);
pill.on("click", function (e) {
e.preventDefault();
if (pill.prop("disabled")) return; // already used on this word
picker.hide();
// Show a tiny inline input for the modifier value.
var valWrap = $("<span class='wiktku-mod-val-wrap'></span>");
var valInp = $("<input type='text' class='wiktku-mod-val-input'>")
.attr("placeholder", mod.hint + "…")
.attr("size", 20);
var confirm = $("<button type='button' class='wiktku-mod-confirm'>✓</button>");
var cancel = $("<button type='button' class='wiktku-mod-cancel'>✕</button>");
function applyModifier() {
var v = $.trim(valInp.val());
if (v) {
ta.val(ta.val() + "<" + mod.key + ":" + v + ">");
ta.trigger("input");
}
valWrap.remove();
ta.focus();
}
confirm.on("click", applyModifier);
cancel.on("click", function () { valWrap.remove(); ta.focus(); });
valInp.on("keydown", function (e) {
if (e.which === 13) { e.preventDefault(); applyModifier(); }
if (e.which === 27) { valWrap.remove(); ta.focus(); }
});
valWrap.append(valInp).append(confirm).append(cancel);
li.append(valWrap);
valInp.focus();
});
picker.append(pill);
});
btn.on("click", function (e) {
e.preventDefault();
// Close any other open pickers in the same list.
li.closest("ol, ul").find(".wiktku-mod-picker").not(picker).hide();
// Grey out modifiers already used on this word — refreshed on
// every open since the text (and thus what's "used") can change.
var used = usedKeys();
picker.find(".wiktku-mod-pill").each(function () {
var isUsed = !!used[$(this).data("mod-key")];
$(this).prop("disabled", isUsed).toggleClass("wiktku-mod-pill-used", isUsed);
});
picker.toggle();
});
// Close picker when focus leaves the li entirely.
li.on("focusout", function () {
setTimeout(function () {
if (!$.contains(li[0], document.activeElement)) picker.hide();
}, 150);
});
li.append(ta).append(btn).append(picker);
return li;
}
function makeWordListStep(id, name, question_fmt) {
return {
id: id,
name: name,
question_fmt: question_fmt,
multiple: true,
narrow: true,
modifiers: true,
// Function instead of a plain string so it can name the current
// language — computed fresh at build time and re-applied by
// refresh() whenever the language changes.
placeholder: function () {
var lang = getValues().lang || "";
var langLabel = lang ? getLangLabel(lang) : "";
return "Kelîme" + (langLabel ? " bi " + langLabel : "") + "…";
},
visible: function (values) {
return values.lang && values.pos;
},
output: function (values) {
var words = $.grep(values[id] || [], function (w) { return !!w; });
var header = capitalize(name);
if (!words.length) return "";
var lang = values.lang;
var section = "\n==== " + header + " ====\n";
var params = "cure=" + header + "\n" +
$.map(words, function (w) {
return "|" + w;
}).join("\n");
return section +
"{{kol3|" + lang + "|" + params + "\n}}\n";
} };
}
var steps = {
lang: {
id: "lang",
required: true,
name: "ziman",
question_fmt: '"' + pageName + '" bi çi zimanî ye?',
question_br: true,
// Populated from [[MediaWiki:Gadget-start.js/data.json]] (langChoices).
choices: [],
output: function (values) {
return "== {{ziman|" + values.lang + "}} ==\n";
}
},
pron: {
id: "pron",
name: "bilêvkirin",
question_fmt: '"' + pageName + '" çawa tê telafûzkirin?',
// pronTpls populated from data.json
pronTpls: {},
visible: function (values) {
if (!values.lang) return false;
// addLangMode: skip pron only if this lang already has a section.
if (addLangMode) {
// Clearing the page makes existing content irrelevant.
var clearPageCheck = $("#wiktku-clear-page-check");
if (clearPageCheck.length && clearPageCheck.prop("checked")) {
return true;
}
var existing = $("#wpTextbox1").val() || "";
return !findLangHeader(existing, values.lang);
}
return true;
},
// Fills the insert-dropdown from pronTpls, filtered by language.
refreshTplSelect: function () {
var sel = $("#wiktku-start-pron .wiktku-tpl-insert-select");
if (!sel.length) return;
var lang = getValues().lang || "";
sel.find("option[value!='']").remove();
$.each(steps.pron.pronTpls, function (name, tpl) {
// Filter: if tpl.langs exists, only show if lang is in that list; otherwise show always
var allowed = !tpl.langs || tpl.langs.indexOf(lang) !== -1;
if (allowed) {
sel.append($("<option></option>")
.val(tpl.snippet)
.text(name + " — " + tpl.desc)
.attr("data-nolang", tpl.noLang ? "1" : ""));
}
});
// Tell the picker the option list changed.
sel.trigger("wiktku:refresh");
},
build: function (stepDiv) {
if (stepDiv.find(".wiktku-pron-wrap").length) return null;
var wrap = $("<div class='wiktku-pron-wrap'></div>");
// Rewiye tine, 14 Tebax 2026: "berê bilêvkirin otomatîk
// çêdibû, niha zehmettir e ji bo yekî nezan — gelek şablon
// hene, kîjan were hilbijartin?" A one-line reassurance:
// this field is optional, and the dropdown below writes the
// template for you — no need to know the syntax up front.
wrap.append(
$("<p class='wiktku-step-hint'></p>").text(
"Ev qad ne mecbûrî ye. Heke tu nizanî kîjan şablonî hilbijêrî, vale bihêle — an ji pêşkêşkariya jêrîn şablonekî hilbijêre, ew ê bixweber li vir were nivîsandin."
)
);
var ta = $("<textarea></textarea>")
.attr("name", "wiktku-pron-" + $.now())
.attr("class", "wiktku-start-step-field wiktku-pron-text")
.attr("rows", 4)
.attr("placeholder", "Nimûne: {{IPA|ku|/pɛɪ̯n/}} yan {{kîte|ku|he|ce|ki|rin}}");
// Template insert dropdown — filtered by language.
var sel = $("<select class='wiktku-tpl-insert-select'></select>");
sel.attr("data-placeholder", "Şablonek lê zêde bike ");
sel.append($("<option value=''>— şablonek lê zêde bike —</option>"));
var lang = getValues().lang || "";
$.each(steps.pron.pronTpls, function (name, tpl) {
// Filter: if tpl.langs exists, only show if lang is in that list; otherwise show always
var allowed = !tpl.langs || tpl.langs.indexOf(lang) !== -1;
if (allowed) {
sel.append($("<option></option>")
.val(tpl.snippet)
.text(name + " — " + tpl.desc)
.attr("data-nolang", tpl.noLang ? "1" : ""));
}
});
sel.on("change", function () {
var snippet = $(this).val();
if (!snippet) return;
var lang = getValues().lang || "";
// Check if the selected option has noLang flag
var selectedOption = sel.find("option:selected");
var hasNoLang = selectedOption.attr("data-nolang") === "1";
if (!hasNoLang) {
snippet = snippet.replace(/CODE/g, lang).replace(/SOURCELANG/g, "?");
insertAtCursor(ta[0], snippet);
$(this).val("");
// Clear the picker's search box
sel.trigger("wiktku:refresh");
ta.focus();
return;
}
// Item 5 (Wikihez, 14 Tebax 2026): the noLang templates
// (ku-IPA, ku-kîte, zza-IPA, zza-kîte) auto-generate
// their actual content from a Lua module reading the
// page title — "{{ku-IPA}}" alone gives no hint what
// that'll render as, so show a live preview and require
// confirmation before inserting, instead of an inline
// prompt()/confirm() dialog.
var tplLabel = selectedOption.text();
$(this).val("");
sel.trigger("wiktku:refresh");
steps.pron.showTplPreview(stepDiv, ta, snippet, tplLabel);
});
wrap.append(sel).append(ta);
stepDiv.append(wrap);
initSelects(wrap);
return ta;
},
/** Item 5: inline preview + confirm panel for a "noLang" (auto-
* content) pronunciation template — fetches what the snippet
* actually expands to for this page (via action=expandtemplates,
* so the preview is exactly what {{ku-IPA}} etc. would produce)
* and only inserts it into the textarea if the user confirms. */
showTplPreview: function (stepDiv, ta, snippet, tplLabel) {
// Only one preview panel open at a time.
stepDiv.find(".wiktku-pron-preview").remove();
var panel = $("<div class='wiktku-pron-preview'></div>");
panel.append($("<div class='wiktku-pron-preview-label'></div>")
.text("Pêşdîtina " + tplLabel + ":"));
var body = $("<div class='wiktku-pron-preview-body'></div>").text("Tê barkirin…");
panel.append(body);
var actions = $("<div class='wiktku-pron-preview-actions'></div>");
var confirmBtn = $("<button type='button' class='wiktku-pron-preview-confirm'>✓ Tevlî bike</button>")
.prop("disabled", true);
var cancelBtn = $("<button type='button' class='wiktku-pron-preview-cancel'>✕ Betal bike</button>");
actions.append(confirmBtn).append(cancelBtn);
panel.append(actions);
ta.before(panel);
confirmBtn.on("click", function () {
insertAtCursor(ta[0], snippet);
panel.remove();
ta.focus();
});
cancelBtn.on("click", function () {
panel.remove();
});
new mw.Api().post({
action: "expandtemplates",
text: snippet,
title: pageName,
prop: "wikitext",
formatversion: 2
}).done(function (data) {
var wikitext = $.trim((data && data.expandtemplates && data.expandtemplates.wikitext) || "");
// Drop the leading "* " bullet (part of the wikitext
// list-item syntax, not the template's own output) so
// the preview shows just what the template rendered.
wikitext = wikitext.replace(/^\*\s*/, "");
body.text(wikitext || "(vala — vê rûpelê re tiştek nehate afirandin)");
confirmBtn.prop("disabled", false);
}).fail(function () {
body.text("Pêşdîtin nehate barkirin — tu dikarî hîn jî wê tevlî bikî.");
confirmBtn.prop("disabled", false);
});
},
output: function () {
var text = $.trim($("#wiktku-start-pron .wiktku-pron-text").val());
if (!text) return "";
var lines = text.split("\n");
var out = $.map(lines, function (line) {
line = $.trim(line);
if (!line) return undefined;
return line;
}).join("\n");
// Ghybu, 14 Tebax 2026: this used to print at "===" (the same
// level as the POS header itself), directly under Ziman and
// above Cureyê rêzimanî. Nested one level deeper ("====") so
// it prints as a subsection of the POS section instead — see
// getWikitextForCurrentSection(), which now calls this per
// section rather than getWikitext() calling it once up top.
return "\n==== Bilêvkirin ====\n" + out + "\n";
} },
pos: {
id: "pos",
required: true,
name: "Cureyê rêzimanî",
question_fmt: 'Cureyê rêzimanî yê "' + pageName + '" çi ye?',
visible: function (values) {
return values.lang;
},
question_br: true,
// Populated from [[MediaWiki:Gadget-start.js/data.json]] (posChoices).
choices: [],
output: function (values) {
var pos = values.pos || "";
var capitalizedPos = capitalize(pos);
// "form" opt-param (checked in posparams) marks this as a
// form-of/inflected entry — the section title becomes
// "Formeke <pos>ê" instead of the plain pos name. The
// template call itself still uses the unchanged pos name.
var isForm = $("#wiktku-posparams-opt-form").is(":checked");
var header = isForm
? "\n=== Formeke " + pos + "ê ===\n"
: "\n=== " + capitalizedPos + " ===\n";
// Image line (between header and template call)
var imageLine = steps.resim.output(values);
// Read the live wikitext from the posparams textarea.
// Fall back to a plain {{pos|lang}} if the step hasn't been built yet.
var tplLine = $.trim($("#wiktku-start-posparams .wiktku-posparams-text").val());
if (!tplLine) {
tplLine = "{{" + pos + "|" + (values.lang || "") + "}}";
}
return header + imageLine + tplLine + "\n";
}
},
// cinsiyet (gender) — shown for navdêr/serenav only, with choices built
// from metadata[lang].g since not every language has grammatical gender.
cinsiyet: {
id: "cinsiyet",
name: "cinsiyet",
question_fmt: 'Cinsiyeta "' + pageName + '" çi ye?',
question_br: true,
visible: function () { return false; }, // handled inside posparams
// Single source of truth for the selected gender code. The visible
// dropdown lives inside the posparams step (see steps.posparams),
// but it must always read/write THIS hidden field — not a field of
// its own — since getValuesForStep("cinsiyet") reads from here.
build: function (stepDiv) {
var field = stepDiv.find(".wiktku-start-step-field");
if (field.length) return field;
field = $("<input type='hidden'>")
.addClass("wiktku-start-step-field")
.attr("id", "wiktku-start-cinsiyet-field")
.val("");
stepDiv.append(field);
return field;
},
output: function () { return ""; } // consumed by posparams/pos.output
},
// Item 1 (Wikihez, 14 Tebax 2026): jimar (grammatical number) — same
// hidden-field pattern as cinsiyet just above, but writes into its
// own j= template parameter instead of sharing c=. Shown for
// navdêr/serenav only, with choices built from whichever of
// metadata[lang].g are number codes (see isNumberCode) — mirrors
// cinsiyet exactly, just filtered to the other half of that list.
jimar: {
id: "jimar",
name: "jimar",
question_fmt: 'Jimara "' + pageName + '" çi ye?',
question_br: true,
visible: function () { return false; }, // handled inside posparams
build: function (stepDiv) {
var field = stepDiv.find(".wiktku-start-step-field");
if (field.length) return field;
field = $("<input type='hidden'>")
.addClass("wiktku-start-step-field")
.attr("id", "wiktku-start-jimar-field")
.val("");
stepDiv.append(field);
return field;
},
output: function () { return ""; } // consumed by posparams/pos.output
},
// Lêker transitivity — hidden step, handled inside posparams
lektur: {
id: "lektur",
name: "Cureyê lêkerê (fiîlê)",
question_fmt: "Cureyê lêkerê (fiîlê) çi ye?",
question_br: true,
visible: function () { return false; },
choices: [
{ code: "gh", label: "gerguhêz" },
{ code: "x-gh", label: "xwerû-gerguhêz" },
{ code: "p-gh", label: "pêkhatî-gerguhêz" },
{ code: "h-gh", label: "hevedudanî-gerguhêz" },
{ code: "b-gh", label: "biwêjî-gerguhêz" },
{ code: "ngh", label: "negerguhêz" },
{ code: "x-ngh", label: "xwerû-negerguhêz" },
{ code: "p-ngh", label: "pêkhatî-negerguhêz" },
{ code: "h-ngh", label: "hevedudanî-negerguhêz" },
{ code: "b-ngh", label: "biwêjî-negerguhêz" } ],
output: function () { return ""; }
},
// tr — hidden step, handled inside posparams
tr: {
id: "tr",
name: "transliterasyon",
question_fmt: "Transliterasyona vê kelîmeyê",
multiple: false,
narrow: true,
visible: function () { return false; }
},
posparams: {
id: "posparams",
// Fused onto the "pos" card visually (see #wiktku-start-posparams
// in styles.css) so the two read as ONE question, per Ghybu's
// 14 Tebax 2026 feedback — this name is only a no-CSS/no-JS
// fallback, since the h3 that would show it is hidden by CSS.
name: "taybetmendî",
// The old static "Parametreyên cureyê rêzimanî" label named the
// mechanism, not the content. Show what's actually being asked
// for instead: gender for nouns, verb type for verbs, a generic
// fallback (transliteration/forms etc. still apply) otherwise.
question_fmt: function (values) {
var pos = values.pos || "";
if (pos === "navdêr" || pos === "serenav") return "Cins/zayend";
if (/^lêker/.test(pos)) return "Cureyê lêkerê";
return "Taybetmendî";
},
visible: function (values) {
return !!(values.lang && values.pos);
},
build: function (stepDiv) {
if (stepDiv.find(".wiktku-posparams-wrap").length) return null;
var wrap = $("<div class='wiktku-posparams-wrap'></div>");
var helpers = $("<div class='wiktku-posparams-helpers'></div>");
var ta = $("<textarea></textarea>")
.attr("name", "wiktku-posparams-" + $.now())
.attr("class", "wiktku-start-step-field wiktku-posparams-text")
.attr("rows", 2);
var _rebuilding = false;
function safeRebuild() {
if (_rebuilding) return;
_rebuilding = true;
steps.posparams.rebuildTa(stepDiv);
_rebuilding = false;
refresh();
}
// Generic text-input row factory
function makeTextRow(key, labelText, placeholder) {
var row = $("<div class='wiktku-posparams-row'></div>")
.attr("id", "wiktku-posparams-row-" + key).hide();
var inp = $("<input type='text'>")
.addClass("wiktku-start-narrow wiktku-posparams-field")
.attr("data-pp-key", key)
.attr("placeholder", placeholder || "");
inp.on("input", safeRebuild);
row.append($("<label></label>").text(labelText + ": ")).append(inp);
return row;
}
// cinsiyet
var cinsiyetRow = $("<div class='wiktku-posparams-row' id='wiktku-posparams-row-c'></div>")
.append($("<label></label>").text("Cinsiyet: ")).hide();
var cinsiyetSel = $("<select></select>")
.addClass("wiktku-plain-select wiktku-start-narrow wiktku-posparams-cinsiyet-sel")
.append($("<option value=''>— hilbijêre —</option>"));
// Writes into the real, shared #wiktku-start-cinsiyet-field (owned by
// steps.cinsiyet) rather than a field of its own — see the comment
// on steps.cinsiyet.build for why that matters.
cinsiyetSel.on("change", function () {
$("#wiktku-start-cinsiyet-field").val($(this).val()).trigger("change");
safeRebuild();
});
cinsiyetRow.append(cinsiyetSel);
// Item 1 (Wikihez, 14 Tebax 2026): jimar (number) — a second
// dropdown next to Cinsiyet, same pattern (writes into the
// shared hidden #wiktku-start-jimar-field), but into its own
// j= param instead of sharing c=. Options + the title
// tooltip (explanation) are built in syncHelpers, once the
// language's number codes are known.
var jimarRow = $("<div class='wiktku-posparams-row' id='wiktku-posparams-row-jimar'></div>")
.append($("<label></label>").text("Jimar: ")).hide();
var jimarSel = $("<select></select>")
.addClass("wiktku-plain-select wiktku-start-narrow wiktku-posparams-jimar-sel")
.append($("<option value=''>— hilbijêre —</option>"));
jimarSel.on("change", function () {
$("#wiktku-start-jimar-field").val($(this).val()).trigger("change");
safeRebuild();
});
jimarRow.append(jimarSel);
// lektur — Ghybu, 14 Tebax 2026: "'Cureyê lêkerê' nayê fêm
// kirin, bi min pêşta 'gerguhez/negerguhêz' were hilbijartin,
// paşê jî form 'hevdudanî/pêkatî/…' ji ber ku her kes vana
// nizanî." So the one 10-option dropdown ("xwerû-gerguhêz",
// "biwêjî-negerguhêz", …) becomes two plain questions. The
// emitted code is unchanged: base alone ("gh"), or prefix +
// "-" + base ("x-gh") — exactly the codes steps.lektur.choices
// already listed, just assembled from two answers instead of
// asked as one.
var lekturRow = $("<div class='wiktku-posparams-row' id='wiktku-posparams-row-lektur'></div>")
.append($("<label></label>").text("Lêker derbasdar e? ")).hide();
var lekturSel = $("<select></select>")
.addClass("wiktku-plain-select wiktku-start-narrow wiktku-posparams-lektur-sel")
.append($("<option value=''>— hilbijêre —</option>"))
.append($("<option value='gh'>gerguhêz (bireser digire)</option>"))
.append($("<option value='ngh'>negerguhêz (bireser nagire)</option>"));
lekturSel.on("change", safeRebuild);
lekturRow.append(lekturSel);
// Second half of the same question — the structural form.
// Blank = xwerû/sade, which is the common case.
var lekturFormRow = $("<div class='wiktku-posparams-row' id='wiktku-posparams-row-lekturform'></div>")
.append($("<label></label>").text("Şiklê lêkerê: ")).hide();
var lekturFormSel = $("<select></select>")
.addClass("wiktku-plain-select wiktku-start-narrow wiktku-posparams-lekturform-sel")
.append($("<option value=''>sade (asayî)</option>"))
.append($("<option value='x'>xwerû</option>"))
.append($("<option value='p'>pêkhatî</option>"))
.append($("<option value='h'>hevedudanî</option>"))
.append($("<option value='b'>biwêjî</option>"));
lekturFormSel.on("change", safeRebuild);
lekturFormRow.append(lekturFormSel);
helpers.append(cinsiyetRow).append(jimarRow).append(lekturRow).append(lekturFormRow);
// ── Everything below here is "Tercîhên pêşketî" ──────────────
// Ghybu, 14 Tebax 2026: "Tenê 'cîns' û 'jimar' bes e. 'Forma
// mê', 'Forma nêr', … nayê fêm kirin. Bi min wekî 'Tercîhên
// pêşketî' bi navkî din veşartî çêke." The rows themselves are
// unchanged and syncHelpers still shows/hides each one by id
// exactly as before — they just live inside a collapsed panel
// now, so the default view of this card is two dropdowns
// instead of twenty-odd fields.
var advPanel = $("<div class='wiktku-posparams-adv-panel'></div>").hide();
advPanel
.append(makeTextRow("cuda", "nîşankirina alternatîv", "cuda…"))
.append(makeTextRow("tr", "Transliterasyon (tr)", "Transliterasyon…"))
.append(makeTextRow("ts", "Transkrîpsiyon (ts)", "Transkrîpsiyon…"))
.append(makeTextRow("m", "Forma mê (m)", "Forma mê…"))
.append(makeTextRow("mtr", "Translit. mê (mtr)", "Transliterasyona mê…"))
.append(makeTextRow("n", "Forma nêr (n)", "Forma nêr…"))
.append(makeTextRow("ntr", "Translit. nêr (ntr)", "Transliterasyona nêr…"))
.append(makeTextRow("p", "Forma pirjimar (p)", "Forma pirjimar…"))
.append(makeTextRow("ptr", "Translit. pirjimar", "Transliterasyona pirjimar…"))
.append(makeTextRow("y", "Forma yekjimar (y)", "Forma yekjimar…"))
.append(makeTextRow("ytr", "Translit. yekjimar", "Transliterasyona yekjimar…"))
.append(makeTextRow("sûp", "Forma sûperlatîv (sûp)", "Forma sûperlatîv…"))
.append(makeTextRow("sûptr", "Translit. sûperlatîv", "Transliterasyona sûperlatîv…"))
.append(makeTextRow("komp", "Forma komparatîv (komp)", "Forma komparatîv…"))
.append(makeTextRow("komptr", "Translit. komparatîv", "Transliterasyona komparatîv…"))
.append(makeTextRow("gir", "Forma girdêk (gir)", "gir=…"))
.append(makeTextRow("girtr", "Translit. gir", "girtr=…"))
.append(makeTextRow("hûr", "Forma hûrek (hûr)", "hûr=…"))
.append(makeTextRow("hûrtr", "Translit. hûr", "hûrtr=…"))
.append(makeTextRow("hanja", "Forma hanja", "hanja=…"))
.append(makeTextRow("hanjaTr","Translit. hanja", "hanjaTr=…"))
// Lêker rehên demê (only shown when pos is lêker — see syncHelpers)
.append(makeTextRow("niha", "Rehê dema niha (niha)", "Rehê dema niha…"))
.append(makeTextRow("nihatr", "Translit. rehê dema niha", "Transliterasyona rehê dema niha…"))
.append(makeTextRow("borî", "Rehê dema borî (borî)", "Rehê dema borî…"))
.append(makeTextRow("borîtr", "Translit. rehê dema borî", "Transliterasyona rehê dema borî…"))
.append(makeTextRow("subj", "Rehê dema bilanî (subj)", "Rehê dema bilanî…"))
.append(makeTextRow("subjtr", "Translit. rehê dema bilanî", "Transliterasyona rehê dema bilanî…"));
// Optional boolean params — nested inside the advanced panel
// (they were already the most niche thing on the card).
var optPanel = $("<div class='wiktku-posparams-opt-panel'></div>");
$.each([
{ key: "form", label: "form — ev made forma tewandî ye" },
{ key: "formaalt", label: "formaalt — vê madeyê bike forma alternatîv" },
{ key: "nekatcure", label: "nekatcure — sinifa rêzimanî kategorîze neke" },
{ key: "nekatcins", label: "nekatcins — kategoriya cinsiyetê neyîne" },
{ key: "nekatçendterm", label: "nekatçendterm — kategoriya çend-term neyîne" },
{ key: "serlînkneke", label: "serlînkneke — sernavê madeyê lînk neke" },
{ key: "nekatpalîndrom", label: "nekatpalîndrom — kategoriya palîndromê neyîne" },
{ key: "neformtr", label: "neformtr — transliterasyona forman neyîne" }
], function (_, p) {
var cb = $("<input type='checkbox'>")
.attr("id", "wiktku-posparams-opt-" + p.key).val(p.key).on("change", safeRebuild);
var lbl = $("<label></label>").attr("for", "wiktku-posparams-opt-" + p.key).text(" " + p.label);
optPanel.append($("<div class='wiktku-posparams-opt-row'></div>").append(cb).append(lbl));
});
advPanel.append(optPanel);
var optToggle = $("<a href='#' class='wiktku-posparams-opt-toggle wiktku-adv-toggle'></a>")
.attr("aria-expanded", "false")
.append($("<span class='wiktku-adv-toggle-chevron'>▾</span>"))
.append($("<span class='wiktku-adv-toggle-text'>Tercîhên pêşketî</span>"));
var optCount = $("<span class='wiktku-adv-toggle-count'></span>");
/** "N zevî · M tije" for whatever the advanced panel is
* currently showing — the row set changes with pos/lang (see
* syncHelpers), so this counts visible rows, not all of them. */
function syncAdvCount() {
var rows = advPanel.find(".wiktku-posparams-row").filter(function () {
return $(this).css("display") !== "none";
});
var filled = rows.filter(function () {
return $.trim($(this).find("input").val() || "") !== "";
}).length;
var checked = advPanel.find(".wiktku-posparams-opt-panel input:checked").length;
optCount.text(rows.length + " zevî · " + (filled + checked) + " tije");
}
stepDiv.data("syncAdvCount", syncAdvCount);
optToggle.on("click", function (e) {
e.preventDefault();
var open = advPanel.is(":visible");
advPanel.toggle(!open);
$(this).attr("aria-expanded", open ? "false" : "true")
.toggleClass("wiktku-adv-open", !open);
syncAdvCount();
});
advPanel.on("input change", "input", syncAdvCount);
helpers.append($("<div class='wiktku-adv-toggle-row'></div>")
.append(optToggle).append(optCount));
helpers.append(advPanel);
wrap.append(helpers).append(ta);
// Typing directly in textarea keeps cinsiyet/jimar hidden
// fields in sync, but does NOT call refresh() — preserves
// manual edits.
ta.on("input", function () {
var text = $(this).val();
var cMatch = text.match(/\|c=([^|}\s]+)/);
$("#wiktku-start-cinsiyet-field").val(cMatch ? cMatch[1] : "");
var jMatch = text.match(/\|j=([^|}\s]+)/);
$("#wiktku-start-jimar-field").val(jMatch ? jMatch[1] : "");
});
stepDiv.append(wrap);
return null;
},
/** Reads all helper widget values and rewrites the textarea.
* Called only by safeRebuild (user interaction) — never by syncHelpers,
* so manual textarea edits are never overwritten by a refresh cycle. */
rebuildTa: function (stepDiv) {
var values = getValues();
var pos = values.pos || "";
var lang = values.lang || "";
if (!pos || !lang) return;
var cinsiyet = stepDiv.find(".wiktku-posparams-cinsiyet-sel").val() || "";
var jimar = stepDiv.find(".wiktku-posparams-jimar-sel").val() || "";
// Two dropdowns, one code: "gh" / "ngh" on their own, or
// prefixed with the structural form ("x-gh", "b-ngh", …).
var lekturBase = stepDiv.find(".wiktku-posparams-lektur-sel").val() || "";
var lekturForm = stepDiv.find(".wiktku-posparams-lekturform-sel").val() || "";
var lektur = lekturBase ? (lekturForm ? lekturForm + "-" + lekturBase : lekturBase) : "";
function v(key) {
return $.trim(stepDiv.find(".wiktku-posparams-field[data-pp-key='" + key + "']").val());
}
var out = "{{" + pos + "|" + lang;
if (pos === "navdêr" || pos === "serenav") {
out += cinsiyet ? "|c=" + cinsiyet : (lang === "ku" ? "|c=?" : "");
// Item 1: number is its own j= param now, separate from
// c= — c= keeps holding gender (and gender+plural
// compounds like m-p/n-p, unaffected by this change).
if (jimar) out += "|j=" + jimar;
} else if (/^lêker/.test(pos) && lektur) {
out += "|c=" + lektur;
}
if (v("cuda")) out += "|" + v("cuda");
if (v("tr")) out += "|tr=" + v("tr");
if (v("ts")) out += "|ts=" + v("ts");
$.each(["m","n","p","y"], function (_, k) {
if (v(k)) out += "|" + k + "=" + v(k);
if (v(k+"tr")) out += "|" + k + "tr=" + v(k+"tr");
});
if (v("sûp")) out += "|sûp=" + v("sûp");
if (v("sûptr")) out += "|sûptr=" + v("sûptr");
if (v("komp")) out += "|komp=" + v("komp");
if (v("komptr")) out += "|komptr=" + v("komptr");
if (v("gir")) out += "|gir=" + v("gir");
if (v("girtr")) out += "|girtr=" + v("girtr");
if (v("hûr")) out += "|hûr=" + v("hûr");
if (v("hûrtr")) out += "|hûrtr=" + v("hûrtr");
if (v("hanja")) out += "|hanja=" + v("hanja");
if (v("hanjaTr")) out += "|hanjaTr=" + v("hanjaTr");
if (v("niha")) out += "|niha=" + v("niha");
if (v("nihatr")) out += "|nihatr=" + v("nihatr");
if (v("borî")) out += "|borî=" + v("borî");
if (v("borîtr")) out += "|borîtr=" + v("borîtr");
if (v("subj")) out += "|subj=" + v("subj");
if (v("subjtr")) out += "|subjtr=" + v("subjtr");
stepDiv.find(".wiktku-posparams-opt-panel input:checked").each(function () {
var key = $(this).val();
// "form" marks this entry as a form-of/inflected entry — it
// takes "erê" rather than the plain "1" the other boolean
// opt params use.
out += "|" + key + "=" + (key === "form" ? "erê" : "1");
});
out += "}}";
stepDiv.find(".wiktku-posparams-text").val(out);
$("#wiktku-start-cinsiyet-field").val(cinsiyet);
$("#wiktku-start-jimar-field").val(jimar);
},
/** Called from refresh() — controls row visibility only.
* Does NOT rewrite textarea so user edits are preserved.
* Rebuilds only when textarea is empty (first pos selection). */
syncHelpers: function (stepDiv) {
var values = getValues();
var pos = values.pos || "";
var lang = values.lang || "";
var needsTr = needsTransliteration(lang);
var isNom = pos === "navdêr" || pos === "serenav" || pos === "rengdêr";
var isAdj = pos === "rengdêr";
var isTîp = pos === "tîp";
var isJa = lang === "ja";
var isLeker = /^lêker/.test(pos);
// Item 1: metadata[lang].g used to list gender AND number
// codes together — split them here (see isNumberCode) so
// Cîns only ever offers gender codes (and gender+plural
// compounds like m-p/n-p, which aren't NUMBER_LABELS keys)
// and the new Jimar dropdown only offers number codes.
var meta = metadata[lang];
var allCodes = (meta && meta.g) || [];
var genderCodes = $.grep(allCodes, function (c) { return !isNumberCode(c); });
var jimarCodes = $.grep(allCodes, function (c) { return isNumberCode(c); });
var showC = (pos === "navdêr" || pos === "serenav") && genderCodes.length > 0;
var cRow = stepDiv.find("#wiktku-posparams-row-c");
cRow.toggle(showC);
if (showC) {
var sel = cRow.find(".wiktku-posparams-cinsiyet-sel");
// Prefer the select's own current value (normal in-session
// use); fall back to the shared hidden field, which is how
// a cache/section restore communicates a saved gender
// before this select has any <option>s to hold it.
var prev = sel.val() || $("#wiktku-start-cinsiyet-field").val() || "";
sel.find("option[value!='']").remove();
$.each(genderCodes, function (_, code) {
sel.append($("<option></option>").val(code).text(genderLabel(code)));
});
if (prev) sel.val(prev);
}
var showJimar = (pos === "navdêr" || pos === "serenav") && jimarCodes.length > 0;
var jimarRowEl = stepDiv.find("#wiktku-posparams-row-jimar");
jimarRowEl.toggle(showJimar);
if (showJimar) {
var jimarSelEl = jimarRowEl.find(".wiktku-posparams-jimar-sel");
var prevJimar = jimarSelEl.val() || $("#wiktku-start-jimar-field").val() || "";
jimarSelEl.find("option[value!='']").remove();
$.each(jimarCodes, function (_, code) {
var def = NUMBER_LABELS[code] || {};
var opt = $("<option></option>").val(code).text(numberOptionLabel(code));
// The explanation (cat, e.g. "dualia tantum") shows as a
// hover tooltip — <option> can't hold richer markup.
if (def.cat) opt.attr("title", def.cat);
jimarSelEl.append(opt);
});
if (prevJimar) jimarSelEl.val(prevJimar);
}
stepDiv.find("#wiktku-posparams-row-lektur").toggle(isLeker);
// Only ask for the structural form once the person has said
// gerguhêz/negerguhêz — "paşê jî form", per Ghybu.
stepDiv.find("#wiktku-posparams-row-lekturform")
.toggle(isLeker && !!stepDiv.find(".wiktku-posparams-lektur-sel").val());
stepDiv.find("#wiktku-posparams-row-tr").toggle(needsTr);
stepDiv.find("#wiktku-posparams-row-ts").toggle(needsTr);
stepDiv.find("#wiktku-posparams-row-m").toggle(isNom);
stepDiv.find("#wiktku-posparams-row-mtr").toggle(isNom && needsTr);
stepDiv.find("#wiktku-posparams-row-n").toggle(isNom);
stepDiv.find("#wiktku-posparams-row-ntr").toggle(isNom && needsTr);
stepDiv.find("#wiktku-posparams-row-p").toggle(isNom);
stepDiv.find("#wiktku-posparams-row-ptr").toggle(isNom && needsTr);
stepDiv.find("#wiktku-posparams-row-y").toggle(isNom);
stepDiv.find("#wiktku-posparams-row-ytr").toggle(isNom && needsTr);
stepDiv.find("#wiktku-posparams-row-sûp").toggle(isAdj);
stepDiv.find("#wiktku-posparams-row-sûptr").toggle(isAdj && needsTr);
stepDiv.find("#wiktku-posparams-row-komp").toggle(isAdj);
stepDiv.find("#wiktku-posparams-row-komptr").toggle(isAdj && needsTr);
stepDiv.find("#wiktku-posparams-row-gir").toggle(isTîp);
stepDiv.find("#wiktku-posparams-row-girtr").toggle(isTîp && needsTr);
stepDiv.find("#wiktku-posparams-row-hûr").toggle(isTîp);
stepDiv.find("#wiktku-posparams-row-hûrtr").toggle(isTîp && needsTr);
stepDiv.find("#wiktku-posparams-row-hanja").toggle(isJa);
stepDiv.find("#wiktku-posparams-row-hanjaTr").toggle(isJa);
stepDiv.find("#wiktku-posparams-row-niha").toggle(isLeker);
stepDiv.find("#wiktku-posparams-row-nihatr").toggle(isLeker && needsTr);
stepDiv.find("#wiktku-posparams-row-borî").toggle(isLeker);
stepDiv.find("#wiktku-posparams-row-borîtr").toggle(isLeker && needsTr);
stepDiv.find("#wiktku-posparams-row-subj").toggle(isLeker);
stepDiv.find("#wiktku-posparams-row-subjtr").toggle(isLeker && needsTr);
// Row visibility just changed, so the "N zevî" half of the
// advanced toggle's badge is stale — recount.
var syncAdvCount = stepDiv.data("syncAdvCount");
if (typeof syncAdvCount === "function") syncAdvCount();
if (!$.trim(stepDiv.find(".wiktku-posparams-text").val())) {
steps.posparams.rebuildTa(stepDiv);
}
},
output: function () { return ""; } // pos.output reads the textarea directly
},
dfn: {
id: "dfn",
name: "Mane",
// Field types that live behind "Malûmatên pêşketî". Kept as one
// list so the collapse CSS, the count badge and the allGroups
// adv: flags below can't drift apart.
ADV_SUBGROUPS: [
"wiktku-dfn-etiket",
"wiktku-dfn-kategori",
"wiktku-dfn-alternativ",
"wiktku-dfn-koordine",
"wiktku-dfn-jornav",
"wiktku-dfn-jernav"
],
question_fmt: function (values) {
var base = "Maneya kelîmeyê binivîse. Mane otomatîk tê lînkkirin!";
if (values.lang === "ku") {
return base + " Ji bo tercimeyan beşa 'Werger' bi kar bîne!";
}
return base;
},
multiple: true,
ordered: true,
rows: 3,
visible: function (values) {
return values.lang && values.pos;
},
example: function (values) {
// posExamples loaded from [[MediaWiki:Gadget-start.js/data.json]].
var examples = steps.dfn.posExamples || {};
var full = values.pos || "";
return examples[full] || "";
},
// Builds one sense block (<li>): mane textarea, nimûne list, and
// sub-lists for alternatîv/hevmane/dijmane/etc.
buildSenseBlock: function (stepDiv) {
var block = $("<li class='wiktku-dfn-sense'></li>");
// — Mane textarea (declared first so the template handler can reference it) —
var dfnArea = $("<textarea></textarea>")
.attr("name", "wiktku-dfn-mane-" + $.now() + "-" + Math.random().toString(36).substr(2, 9))
.attr("class", "wiktku-start-step-field wiktku-dfn-mane")
.attr("rows", 6)
.attr("placeholder", "Mane…");
dfnArea.on("input", function () {
steps.dfn.onDfnInput(stepDiv, block, this);
});
// — Tercime + Îzah boxes (non-ku alternative to the plain mane box) —
// Non-ku entries get a direct translation plus a {{îzah|…}}-wrapped
// gloss instead of a Kurdish-style gloss. Rather than teach every
// consumer (getSenses/getOutput/linkify) a second data shape, these
// boxes just write their combined text into dfnArea and re-fire its
// "input" event, so dfnArea stays the single source of truth.
var tercimeArea = $("<textarea></textarea>")
.attr("name", "wiktku-dfn-tercime-" + $.now() + "-" + Math.random().toString(36).substr(2, 9))
.attr("class", "wiktku-dfn-subfield wiktku-dfn-tercime")
.attr("rows", 2)
.attr("placeholder", "Tercimeyên rasterast ên kurmancî… Ji bo school-a îngilîzî li vir 'mekteb, medrese' binivîse");
var izahArea = $("<textarea></textarea>")
.attr("name", "wiktku-dfn-izah-" + $.now() + "-" + Math.random().toString(36).substr(2, 9))
.attr("class", "wiktku-dfn-subfield wiktku-dfn-izah")
.attr("rows", 3)
.attr("placeholder", "Îzaha kurmancî… Ji bo school-a îngilîzî li vir 'cihê tehsîlgirtinê' binivîse");
var nonKuWrap = $("<div class='wiktku-dfn-nonku-wrap'></div>")
.append(tercimeArea).append(izahArea)
.hide();
function syncNonKuToMane() {
var t = $.trim(tercimeArea.val());
var iz = $.trim(izahArea.val());
// if tercime is blank, use îzah as definition
var combined = t ? (iz ? t + " {{îzah|" + iz + "}}" : t) : iz;
dfnArea.val(combined);
// Re-fires onDfnInput so the sense list still grows and
// refresh() still runs, exactly as if this were typed
// directly into the mane textarea.
dfnArea.trigger("input");
}
tercimeArea.on("input", syncNonKuToMane);
izahArea.on("input", syncNonKuToMane);
// Switches between the plain mane box and the tercime+îzah pair —
// only for non-ku entries with no tplSelect selected.
function updateManeMode() {
var lang = getValues().lang || "";
var isTpl = !!tplSelect.val();
if (lang && lang !== "ku" && !isTpl) {
dfnArea.hide();
nonKuWrap.show();
} else {
nonKuWrap.hide();
if (!isTpl) dfnArea.show();
}
}
// Store on the block so refresh() can re-sync every block when
// lang changes, and restoreDfn() can re-sync after restoring.
block.data("updateManeMode", updateManeMode);
// — Template selector (optional — replaces mane when chosen) —
// Template definitions loaded from [[MediaWiki:Gadget-start.js/data.json]].
var tplDefs = steps.dfn.tplDefs || {};
// Cache of all non-placeholder option elements, so updateTplOptions
// can detach/re-attach them without losing the full list.
var _allTplOptions = [];
var tplSelect = $(mw.html.element("select", { "class": "wiktku-dfn-tpl-select" }));
tplSelect.attr("data-placeholder", "Li şablonekê bigere");
tplSelect.append($("<option value=''>— yan jî şablonek hilbijêre —</option>"));
$.each(tplDefs, function (name, tpl) {
// Rewiye tine, 14 Tebax 2026: "guharto? kevnbûyî? ku-Latn?
// şaşnivîs? famkirina van zehmet e" — these 13 names had
// zero explanation in the dropdown (unlike steps.pron's
// template picker, which already shows "name — tpl.desc").
// Mirrors that same pattern here: if tpl.desc is ever
// added to a tplDefs entry in data.json, it'll show up
// automatically. It's optional per-entry, not required,
// since data.json doesn't have desc text for these yet —
// writing accurate one-line explanations for each needs
// someone who actually knows what each template does.
var opt = $("<option></option>")
.val(name)
.text(tpl.desc ? name + " — " + tpl.desc : name)
.attr("data-langs", tpl.langs ? tpl.langs.join(",") : "")
.attr("data-nolang", tpl.noLang ? "1" : "");
tplSelect.append(opt);
_allTplOptions.push(opt[0]);
});
function updateTplOptions() {
var lang = getValues().lang || "";
var currentVal = tplSelect.val();
var currentStillValid = false;
// Detach all non-placeholder options, then re-attach only the visible
// ones — native <select> won't reliably hide options any other way.
tplSelect.find("option[value!='']").detach();
$.each(_allTplOptions, function (_, opt) {
var allowed = $(opt).attr("data-langs");
var visible = !allowed || allowed.split(",").indexOf(lang) !== -1;
if (visible) {
tplSelect.append(opt);
if ($(opt).val() === currentVal) currentStillValid = true;
}
});
tplSelect.trigger("wiktku:refresh");
if (currentVal && !currentStillValid) {
tplSelect.val("");
tplTitleInput.hide().val("");
updateManeMode();
}
}
// Store updater on the element so refresh() can call it for all blocks.
tplSelect.data("updateOptions", updateTplOptions);
var tplTitleInput = $("<input type='text'>")
.addClass("wiktku-dfn-tpl-title wiktku-start-narrow")
.attr("placeholder", "Navê rûpela hedefê…")
.hide();
// Grow the sense list when the title field of the last block gets content,
// mirroring what onDfnInput does for the plain mane textarea.
tplTitleInput.on("input", function () {
steps.dfn.onDfnInput(stepDiv, block, this);
});
// Şablon senses have no plain gloss, so hide alternatîv/hevmane/
// dijmane/etc. Etîket, Nimûne and Jêgirtin stay visible either way.
function updateFieldVisibility() {
var isTpl = !!tplSelect.val();
$.each(HIDDEN_ON_TPL_GROUPS, function (_, cls) {
block.find("." + cls + "-group").toggle(!isTpl);
});
}
// Store on the block so restoreDfn() can re-sync visibility
// after setting tplSelect's value.
block.data("updateFieldVisibility", updateFieldVisibility);
tplSelect.on("change", function () {
var chosen = $(this).val();
if (chosen) {
dfnArea.hide();
nonKuWrap.hide();
tplTitleInput.show().focus();
} else {
tplTitleInput.hide().val("");
updateManeMode();
}
updateFieldVisibility();
// Re-run refresh so the Werger step visibility updates.
refresh();
});
var tplRow = $("<div></div>").addClass("wiktku-dfn-tpl-row")
.append(tplSelect).append(" ").append(tplTitleInput);
block.append(tplRow);
block.append(dfnArea);
block.append(nonKuWrap);
// Apply lang filter on initial build.
updateTplOptions();
updateManeMode();
// — Sub-field groups. —
// Ghybu, 14 Tebax 2026: "Bi min beşên 'Hevmane' û dijmane jî
// bike de nav beşa Mane ji ber ku pirr tên xwestin" — and,
// separately, that showing all nine at once is what makes this
// form read as long and tevlihev. So the four people actually
// reach for (Nimûne, Jêgirtin, Hevmane, Dijmane) stay open, in
// that order, and the other five sit behind the "Malûmatên
// pêşketî" toggle (adv: true → .wiktku-dfn-subgroup-adv, which
// is what the collapse CSS keys off now).
// Jêgirtin isn't in this array — it's a compound widget built
// after the loop — but it's inserted right after Nimûne so the
// visible order matches the list above.
var allGroups = [
{ cls: "wiktku-dfn-nimune", label: "Nimûne", rows: 2, narrow: false },
{ cls: "wiktku-dfn-hevmane", label: "Hevmane", rows: 1, narrow: true, izah: "Spehî hevmaneya Bedew e." },
{ cls: "wiktku-dfn-dijmane", label: "Dijmane", rows: 1, narrow: true, izah: "Zengîn dijmaneya feqîr e." },
{ cls: "wiktku-dfn-etiket", label: "Etîket", rows: 1, narrow: true, izah: "xisûsen, Mêrdîn, anatomî, Badînî", noLangSuffix: true, adv: true },
{ cls: "wiktku-dfn-kategori", label: "Kategorî", rows: 1, narrow: true, izah: "wekî etîket lê xuya nabe tenê kategorîze dike", noLangSuffix: true, adv: true },
{ cls: "wiktku-dfn-alternativ", label: "Formên alternatîv", rows: 1, narrow: true, izah: "Varyantên vê kelîmeyê", adv: true },
{ cls: "wiktku-dfn-koordine", label: "Termên koordîne", rows: 1, narrow: true, izah: "Pisîk û kûçik termên koordîne ne çunkî Jornavên wan gelek in", adv: true },
{ cls: "wiktku-dfn-jornav", label: "Jornav", rows: 1, narrow: true, izah: "Heywan jornavê guhandar e", adv: true },
{ cls: "wiktku-dfn-jernav", label: "Jêrnav", rows: 1, narrow: true, izah: "Guhandar jêrnavê heywan e", adv: true }
];
$.each(allGroups, function (_, g) {
var groupDiv = $("<div></div>").addClass("wiktku-dfn-subgroup " + g.cls + "-group");
if (g.adv) groupDiv.addClass("wiktku-dfn-subgroup-adv");
function buildNimuneLi() {
var lang = getValues().lang || "";
var li = $("<li></li>").addClass("wiktku-dfn-nimune-li");
var mainTa = $("<textarea></textarea>")
.attr("name", "wiktku-dfn-nimune-text-" + $.now() + "-" + Math.random().toString(36).substr(2, 9))
.attr("rows", g.rows)
.attr("class", "wiktku-dfn-subfield wiktku-dfn-nimune-text")
.attr("placeholder", "Nimûneya emilandina kelîmeyê tu bi xwe binivîse…");
mainTa.on("input", function () {
highlightLinebreak(this);
var val = $.trim($(this).val());
var isLast = li.is(list.children("li:last-child"));
if (val && isLast) {
list.append(buildNimuneLi());
}
});
li.append(mainTa);
var subWrap = $("<div></div>").addClass("wiktku-dfn-nimune-sub");
if (needsTransliteration(lang)) {
subWrap.append(
$("<textarea></textarea>")
.attr("name", "wiktku-dfn-nimune-tr-" + $.now() + "-" + Math.random().toString(36).substr(2, 9))
.attr("rows", 5)
.attr("class", "wiktku-dfn-subfield wiktku-dfn-nimune-tr")
.attr("placeholder", "Transliterasyona bi alfabeya latînî")
);
}
if (lang && lang !== "ku") {
subWrap.append(
$("<textarea></textarea>")
.attr("name", "wiktku-dfn-nimune-t-" + $.now() + "-" + Math.random().toString(36).substr(2, 9))
.attr("rows", 5)
.attr("class", "wiktku-dfn-subfield wiktku-dfn-nimune-t")
.attr("placeholder", "Tercimeya nimûneyê bi kurmancî")
);
}
if (subWrap.children().length) li.append(subWrap);
return li;
}
// The placeholder names the current language, but that's
// often not chosen yet when this block is first built —
// so keep a function around that refresh() (and onSubInput,
// for newly-grown fields) can call again once lang is set
// or changes.
function subPlaceholder() {
if (g.noLangSuffix) return g.label + "…";
var lang = getValues().lang || "";
var langLabel = lang ? getLangLabel(lang) : "";
return g.label + (langLabel ? " bi " + langLabel : "") + "…";
}
function updateSubPlaceholders() {
list.find("> li > textarea.wiktku-dfn-subfield").attr("placeholder", subPlaceholder());
}
if (g.cls === "wiktku-dfn-nimune") {
// Nimûne — compound widget with tr/t sub-fields.
var lbl = $("<span></span>").addClass("wiktku-dfn-sublabel")
.append($("<span></span>").addClass("wiktku-dfn-sublabel-term").text(g.label))
.append(": ");
var list = $("<ol></ol>").addClass("wiktku-dfn-sublist " + g.cls + "-list");
groupDiv.data("buildNimuneLi", buildNimuneLi);
list.append(buildNimuneLi());
groupDiv.append(lbl).append(list);
block.append(groupDiv);
} else {
// Regular always-visible group — label + growing textarea list.
var lbl = $("<span></span>").addClass("wiktku-dfn-sublabel")
.append($("<span></span>").addClass("wiktku-dfn-sublabel-term").text(g.label))
.append(": ")
.append($("<span></span>").addClass("wiktku-dfn-sublabel-hint").text(g.izah));
var list = $("<ol></ol>").addClass("wiktku-dfn-sublist " + g.cls + "-list");
var useModifiers = !!MODIFIER_SUBGROUPS[g.cls];
list.data("updatePlaceholders", updateSubPlaceholders);
var firstInput = $("<textarea></textarea>")
.attr("name", g.cls + "-" + $.now() + "-" + Math.random().toString(36).substr(2, 9))
.attr("rows", g.rows)
.attr("class", "wiktku-dfn-subfield" + (g.narrow ? " wiktku-start-narrow" : ""))
.attr("placeholder", subPlaceholder());
firstInput.on("input", function () {
steps.dfn.onSubInput(list, this, g.rows, g.narrow, useModifiers);
});
list.append(useModifiers ? makeModifierLi(firstInput) : $("<li></li>").append(firstInput));
groupDiv.append(lbl).append(list);
block.append(groupDiv);
}
});
// — Jêder group — growing list, same structure as Nimûne. —
(function () {
var jederGroupDiv = $("<div></div>").addClass("wiktku-dfn-subgroup wiktku-dfn-jeder-group");
var jederLbl = $("<span></span>").addClass("wiktku-dfn-sublabel")
.append($("<span></span>").addClass("wiktku-dfn-sublabel-term").text("Jêgirtin"))
.append(": ");
var jederList = $("<ol></ol>").addClass("wiktku-dfn-sublist wiktku-dfn-jeder-list");
function buildJederLi() {
var lang = getValues().lang || "";
var li = $("<li></li>").addClass("wiktku-dfn-jeder-li");
// Quote text textarea
var quoteTa = $("<textarea></textarea>")
.attr("name", "wiktku-dfn-nimune-quote-" + $.now() + "-" + Math.random().toString(36).substr(2, 9))
.attr("rows", 2)
.attr("class", "wiktku-dfn-subfield wiktku-dfn-nimune-quote")
.attr("placeholder", "Nimûneya emilandinê ji kitêb an çavkaniyeke din binivîse");
quoteTa.on("input", function () {
highlightLinebreak(this);
var val = $.trim($(this).val());
var isLast = li.is(jederList.children("li:last-child"));
if (val && isLast) {
jederList.append(buildJederLi());
}
});
li.append(quoteTa);
// tr/t sub-fields for the quote — shown as needed for the language.
var quoteSubWrap = $("<div></div>").addClass("wiktku-dfn-quote-sub");
if (needsTransliteration(lang)) {
quoteSubWrap.append(
$("<textarea></textarea>")
.attr("name", "wiktku-dfn-nimune-quote-tr-" + $.now() + "-" + Math.random().toString(36).substr(2, 9))
.attr("rows", 2)
.attr("class", "wiktku-dfn-subfield wiktku-dfn-nimune-quote-tr")
.attr("placeholder", "Transliterasyona jêgirtinê…")
);
}
if (lang && lang !== "ku") {
quoteSubWrap.append(
$("<textarea></textarea>")
.attr("name", "wiktku-dfn-nimune-quote-t-" + $.now() + "-" + Math.random().toString(36).substr(2, 9))
.attr("rows", 2)
.attr("class", "wiktku-dfn-subfield wiktku-dfn-nimune-quote-t")
.attr("placeholder", "Tercimeya jêgirtinê bi kurmancî")
);
}
if (quoteSubWrap.children().length) li.append(quoteSubWrap);
// Citoid auto-fill: fetch citation data from a URL, DOI or ISBN and
// prefill the source şablon + fields below (see Gadget-citoid-helper.js).
var citoidWrap = $("<div></div>").addClass("wiktku-dfn-quote-citoid");
var citoidInput = $("<textarea></textarea>")
.addClass("wiktku-dfn-subfield wiktku-dfn-quote-citoid-input")
.attr("rows", 1)
.attr("placeholder", "URL, DOI an ISBN binivîse ku otomatîk were tijekirin…");
var citoidBtn = new OO.ui.ButtonWidget({
label: "Bi otomatîk tijî bike",
classes: [ "wiktku-dfn-quote-citoid-btn" ]
});
var citoidStatus = $("<span></span>").addClass("wiktku-dfn-quote-citoid-status");
// Fetches citation data from Citoid and fills this citation's
// şablon + fields — only rebuilds fields on template change,
// and never overwrites values the user already typed.
function runCitoidFetch() {
var query = $.trim(citoidInput.val());
if (!query) {
mw.notify("Ji kerema xwe re pêşî URL, DOI an ISBNyekê binivîse.");
return;
}
citoidBtn.setDisabled(true);
citoidStatus.text("Tê anîn…");
wikt.citoid.fetchJederFields(query).then(function (result) {
var jederKey = result.jederKey;
var hasTpl = !!jederKey && srcSel.find("option[value='" + jederKey + "']").length > 0;
var targetVal = hasTpl ? jederKey : "__manual__";
// Only rebuild if switching şablon, so a repeat fetch
// doesn't clear fields already filled in by hand.
if (srcSel.val() !== targetVal) {
srcSel.val(targetVal).trigger("change");
}
if (hasTpl) {
// Tenê qadên vala tijî bike.
$.each(result.fields, function (key, val) {
var input = srcFields.find("[data-field-key='" + key + "']");
if (input.length && !$.trim(input.val())) {
input.val(val);
}
});
} else {
// Şablonek nehat naskirin ji bo vê itemType — rêzikeke
// çavkaniyê ya bi destan a ji qadên Citoid tê çêkirin,
// lê tenê ger qada destan vala be.
var manualField = srcFields.find(".wiktku-dfn-quote-src-manual");
if (!$.trim(manualField.val())) {
var parts = [];
$.each(["nivîskar", "sernav", "websîte", "kovar", "weşanxane", "sal", "url"], function (_, k) {
if (result.fields[k]) parts.push(result.fields[k]);
});
manualField.val(parts.join(", "));
}
}
citoidStatus.text("");
}, function (errorMsg) {
citoidStatus.text(typeof errorMsg === "string" ? errorMsg : "Nehat dîtin. Kontrol bike ka URL/DOI/ISBN rast e.");
}).always(function () {
citoidBtn.setDisabled(false);
});
}
citoidBtn.on("click", runCitoidFetch);
citoidInput.on("keydown", function (e) {
if (e.which === 13) { // Enter
e.preventDefault();
runCitoidFetch();
}
});
citoidWrap.append(citoidInput).append(citoidBtn.$element).append(citoidStatus);
// Source template selector, specific to this citation.
var srcSel = $("<select></select>").addClass("wiktku-dfn-quote-src-sel wiktku-plain-select");
srcSel.append($("<option value=''>— Çavkaniyê hilbijêre —</option>"));
srcSel.append($("<option></option>").val("__manual__").text("Bi destê xwe binivîsim"));
srcSel.append($("<option></option>").val("__category__").text("Ji Kategorî:Çavkanî şablonekê hilbijêre"));
var jederDefs = steps.dfn.jederDefs || {};
$.each(jederDefs, function (tplName, def) {
srcSel.append($("<option></option>").val(tplName).text(def.label));
});
// Dynamic source fields container.
var srcFields = $("<div></div>").addClass("wiktku-dfn-quote-src-fields");
srcSel.on("change", function () {
srcFields.empty();
var chosen = $(this).val();
// Citoid is only useful before a source is chosen —
// hide it once a selection is made, restore on reset.
if (chosen) {
citoidWrap.hide();
} else {
citoidWrap.show();
return;
}
if (chosen === "__manual__") {
// Freeform source, written by the user — becomes the 2nd
// positional param of {{jêder|lang|…}} instead of çavkanî?.
srcFields.append(
$("<textarea></textarea>")
.attr("rows", 4)
.addClass("wiktku-dfn-subfield wiktku-dfn-quote-src-manual")
.attr("placeholder", "Çavkaniyê bi destê xwe binivîse…")
);
return;
}
if (chosen === "__category__") {
// Search widget over the members of [[Kategorî:Çavkanî]].
// Picking a şablon here immediately switches the row to
// "Bi destê xwe binivîsim" mode with {{Şablon}} pre-filled,
var catWrap = $("<span></span>").addClass("wiktku-native-select-wrap wiktku-dfn-quote-src-cat");
var catInput = $("<input type='search' autocomplete='off'>")
.addClass("wiktku-start-narrow wiktku-dfn-quote-src-cat-input")
.attr("placeholder", "Li navê şablonê bigere…");
var catResults = $("<ul></ul>").addClass("wiktku-ac-results wiktku-dfn-quote-src-cat-results").hide();
var catStatus = $("<span></span>").addClass("wiktku-dfn-quote-src-cat-status").text("Şablon tên barkirin…");
var showCatResults = function (query) {
var q = $.trim(query).toLowerCase();
catResults.empty();
var list = catSrcTemplates || [];
var matched = q ?
$.grep(list, function (name) { return name.toLowerCase().indexOf(q) !== -1; }) :
list;
if (!matched.length) {
catResults.hide();
return;
}
$.each(matched.slice(0, 50), function (_, name) {
var li = $("<li></li>").text(name).attr("data-value", name);
var touchMoved = false;
li.on("touchstart", function () { touchMoved = false; });
li.on("touchmove", function () { touchMoved = true; });
li.on("touchend", function (e) {
if (touchMoved) return;
e.preventDefault();
selectCatTpl(name);
});
li.on("mousedown", function (e) {
e.preventDefault();
selectCatTpl(name);
});
catResults.append(li);
});
catResults.show();
};
// Wraps the chosen şablon as {{Name}}, drops it into the
// manual textarea, and switches the row into manual mode
// so the user can keep editing it (add params, etc.).
var selectCatTpl = function (name) {
catResults.hide();
srcSel.val("__manual__");
srcSel.trigger("change");
srcFields.find(".wiktku-dfn-quote-src-manual")
.val("{{" + name + "}}")
.trigger("focus");
};
catInput.on("input", function () {
showCatResults($(this).val());
});
catInput.on("focus", function () {
showCatResults($(this).val());
});
catInput.on("blur", function () {
setTimeout(function () { catResults.hide(); }, 200);
});
catWrap.append(catInput).append(catResults).append(catStatus);
srcFields.append(catWrap);
fetchCatSrcTemplates().then(function () {
catStatus.text("");
}, function () {
catStatus.text("Şablon nehatin barkirin.");
});
return;
}
var def = (steps.dfn.jederDefs || {})[chosen];
if (!def) return;
$.each(def.fields, function (key, label) {
var row = $("<div></div>").addClass("wiktku-dfn-quote-src-row");
var fieldLbl = $("<label></label>").text(label + ": ");
var inp = $("<textarea></textarea>")
.attr("rows", 2)
.addClass("wiktku-dfn-quote-src-input wiktku-start-narrow")
.attr("data-field-key", key)
.attr("placeholder", label + "…");
// "Sernav" / "Sernavê orjînal" (title fields, e.g. for
// kitêb/kovar/malper) get a taller, draggable box; every
// other field in the template stays as-is. Field labels
// come from the on-wiki jederDefs data, so match on the
// (diacritic-folded) label text rather than a fixed key.
var foldedLabel = foldDiacritics(label);
if (/^sernav$/.test(foldedLabel) || /orjin/.test(foldedLabel)) {
inp.addClass("wiktku-dfn-quote-src-input--title");
}
row.append(fieldLbl).append(inp);
srcFields.append(row);
});
});
li.append(citoidWrap).append(srcSel).append(srcFields);
return li;
}
jederGroupDiv.data("buildJederLi", buildJederLi);
jederList.append(buildJederLi());
jederGroupDiv.append(jederLbl).append(jederList);
// Straight after Nimûne rather than last: Jêgirtin is the
// same kind of thing (an attested use of the word) and the
// two belong together — see the allGroups comment above.
var nimuneGroup = block.find(".wiktku-dfn-nimune-group");
if (nimuneGroup.length) jederGroupDiv.insertAfter(nimuneGroup);
else block.append(jederGroupDiv);
}());
// Apply the initial hide/show state for the sub-groups (matches
// tplSelect's starting value, which is normally empty).
updateFieldVisibility();
return block;
},
/** Grows the sense list when the last mane textarea gets content. */
onDfnInput: function (stepDiv, block, textarea) {
var val = $.trim($(textarea).val());
var list = stepDiv.find("ol.wiktku-dfn-list");
var isLast = block.is(list.children("li:last-child"));
if (val && isLast) {
var newBlock = steps.dfn.buildSenseBlock(stepDiv);
list.append(newBlock);
// Give the new block's template selector the searchable picker.
initSelects(newBlock);
}
refresh();
},
/** Grows a sub-list (nimûne/formên alternatîv/hevmane/dijmane/termên koordîne) on input. */
onSubInput: function (list, input, rows, narrow, modifiers) {
var val = $.trim($(input).val());
var item = $(input).parent();
var isLast = item.is(list.children("li:last-child"));
if (val && isLast) {
var next = $("<textarea></textarea>")
.attr("name", "wiktku-dfn-sub-" + $.now() + "-" + Math.random().toString(36).substr(2, 9))
.attr("rows", rows)
.attr("class", "wiktku-dfn-subfield" + (narrow ? " wiktku-start-narrow" : ""));
next.on("input", function () {
steps.dfn.onSubInput(list, this, rows, narrow, modifiers);
});
list.append(modifiers ? makeModifierLi(next) : $("<li></li>").append(next));
// New field starts with no placeholder — give it (and any
// others in the list) the current one.
var updatePlaceholders = list.data("updatePlaceholders");
if (typeof updatePlaceholders === "function") updatePlaceholders();
}
},
// Populated from [[MediaWiki:Gadget-start.js/data.json]] (tplDefs, posExamples, jederDefs).
tplDefs: {},
posExamples: {},
jederDefs: {},
build: function (stepDiv) {
if (stepDiv.find("ol.wiktku-dfn-list").length) return null;
// Rewiye tine, 14 Tebax 2026: "şablonên mana jî dikare serê
// yekî tevlîhev bike... famkirina van zehmet e" — the "an jî
// şablonek hilbijêre" dropdown inside each sense (guharto,
// kevnbûyî, ku-Latn, şaşnivîs, …) had no explanation at all.
// One reassurance, shown once for the whole Mane step rather
// than repeated per sense: it's optional, plain text is the
// normal path.
if (!stepDiv.find(".wiktku-dfn-tpl-hint").length) {
stepDiv.append(
$("<p class='wiktku-step-hint wiktku-dfn-tpl-hint'></p>").text(
"Ji bo her maneyekê, dropdown-a \"an jî şablonek hilbijêre\" ne mecbûrî ye — bi gelemperî tu tenê maneyê bi tîpên asayî dinivîsî. Ew şablon tenê ji bo rewşên taybet in (mînak: guherto, kevnbûyî, şaşnivîs); heke tu nizanî kîjan divê, vale bihêle."
)
);
}
// One-time "hide/show all" link for the etîket/kategorî/hevmane/…/
// nimûne/jêgirtin subgroups. Wikihez, 14 Tebax 2026: starts
// collapsed now (was expanded by default) — this is "malûmatên
// pêşketî" in the Mane tab's new Mane → malûmatên pêşketî →
// Wêne → Bi zaravayên din → Werger ordering.
if (!stepDiv.find(".wiktku-dfn-subs-toggle").length) {
stepDiv.addClass("wiktku-dfn-subs-hidden");
var subsRow = $("<div class='wiktku-adv-toggle-row'></div>");
var subsToggle = $("<a href='#' class='wiktku-dfn-subs-toggle wiktku-adv-toggle'></a>");
var subsLabel = $("<span class='wiktku-adv-toggle-text'></span>");
subsToggle
.append($("<span class='wiktku-adv-toggle-chevron'>▾</span>"))
.append(subsLabel);
// Count badge: the panel is collapsed by default, so without
// this nothing on screen says what is behind it or whether
// anything in there is already filled in.
var subsCount = $("<span class='wiktku-adv-toggle-count'></span>");
function syncSubsToggle() {
var hidden = stepDiv.hasClass("wiktku-dfn-subs-hidden");
subsLabel.text(hidden ? "Malûmatên pêşketî nîşan bide" : "Malûmatên pêşketî veşêre");
subsToggle.attr("aria-expanded", hidden ? "false" : "true");
// One count per field TYPE (not per sense) — "Etîket" is
// one row in the person's head even when three senses
// each have one.
var total = 0, filled = 0;
$.each(steps.dfn.ADV_SUBGROUPS, function (_, cls) {
total++;
var any = false;
stepDiv.find("." + cls + "-group textarea").each(function () {
if ($.trim($(this).val())) any = true;
});
if (any) filled++;
});
subsCount.text(total + " zevî · " + filled + " tije");
}
subsToggle.on("click", function (e) {
e.preventDefault();
stepDiv.toggleClass("wiktku-dfn-subs-hidden");
syncSubsToggle();
});
// Recount as the person types anywhere in the step.
stepDiv.on("input", "textarea", function () { syncSubsToggle(); });
stepDiv.data("syncSubsToggle", syncSubsToggle);
subsRow.append(subsToggle).append(subsCount);
stepDiv.append(subsRow);
syncSubsToggle();
}
var list = $("<ol class='wiktku-dfn-list'></ol>");
list.append(steps.dfn.buildSenseBlock(stepDiv));
stepDiv.append(list);
return null;
},
/** Reads all sense blocks from the DOM and returns an array of sense objects. */
getSenses: function (stepDiv) {
var senses = [];
stepDiv.find("li.wiktku-dfn-sense").each(function () {
var block = $(this);
var tplSel = block.find("select.wiktku-dfn-tpl-select");
var tpl = tplSel.val() || "";
// noLang: template already encodes the language — don't add |lang| param.
var tplNoLang = tpl
? tplSel.find("option[value='" + tpl + "']").attr("data-nolang") === "1"
: false;
var tplTitle = $.trim(block.find("input.wiktku-dfn-tpl-title").val());
var mane = $.trim(block.find("textarea.wiktku-dfn-mane").val());
function readList(cls) {
var vals = [];
block.find("." + cls + "-list textarea").each(function () {
var v = $.trim($(this).val());
if (v) vals.push(v);
});
return vals;
}
// Nimûne items are compound: { text, tr?, t? }
function readNimuneList() {
var items = [];
block.find(".wiktku-dfn-nimune-list li.wiktku-dfn-nimune-li").each(function () {
var text = $.trim($(this).find(".wiktku-dfn-nimune-text").val());
if (!text) return;
var obj = { text: text };
var tr = $.trim($(this).find(".wiktku-dfn-nimune-tr").val());
var t = $.trim($(this).find(".wiktku-dfn-nimune-t").val());
if (tr) obj.tr = tr;
if (t) obj.t = t;
items.push(obj);
});
return items;
}
// Jêder is a growing list of citations, one per li — mirrors readNimuneList().
function readJederList() {
var items = [];
block.find(".wiktku-dfn-jeder-list li.wiktku-dfn-jeder-li").each(function () {
var li = $(this);
var quote = $.trim(li.find(".wiktku-dfn-nimune-quote").val());
if (!quote) return;
var obj = { quote: quote };
var qtr = $.trim(li.find(".wiktku-dfn-nimune-quote-tr").val());
var qt = $.trim(li.find(".wiktku-dfn-nimune-quote-t").val());
if (qtr) obj.quoteTr = qtr;
if (qt) obj.quoteT = qt;
var tplName = li.find(".wiktku-dfn-quote-src-sel").val();
if (tplName === "__manual__") {
var manual = $.trim(li.find(".wiktku-dfn-quote-src-manual").val());
if (manual) obj.jederManual = manual;
} else if (tplName === "__category__") {
// Reachable only if the user opened the category search but
// never picked a şablon — picking one switches the row to
// __manual__ (see selectCatTpl above), so there's nothing
// meaningful to save here.
} else if (tplName) {
obj.jederTpl = tplName;
var fields = {};
li.find(".wiktku-dfn-quote-src-input").each(function () {
var k = $(this).attr("data-field-key");
var v = $.trim($(this).val());
if (k && v) fields[k] = v;
});
obj.jêderFields = fields;
}
items.push(obj);
});
return items;
}
senses.push({
tpl: tpl,
tplNoLang: tplNoLang,
tplTitle: tplTitle,
mane: mane,
etiket: readList("wiktku-dfn-etiket"),
kategori: readList("wiktku-dfn-kategori"),
nimune: readNimuneList(),
jeder: readJederList(),
alternativ: readList("wiktku-dfn-alternativ"),
hevmane: readList("wiktku-dfn-hevmane"),
dijmane: readList("wiktku-dfn-dijmane"),
koordine: readList("wiktku-dfn-koordine"),
jornav: readList("wiktku-dfn-jornav"),
jernav: readList("wiktku-dfn-jernav")
});
});
return senses;
},
getOutput: function (values, callback) {
var stepDiv = $("#wiktku-start-dfn");
var senses = steps.dfn.getSenses(stepDiv);
var lang = values.lang;
// A sense counts as "filled" if it has a mane, a chosen template + title,
// or any other content (etîket/hevmane/nimûne/jêder…) worth keeping.
var hasMane = senses.some(function (s) {
return s.mane !== "" || (s.tpl && s.tplTitle) || senseHasExtraContent(s);
});
var defLines = []; // one entry per kept sense (goes to linkify)
var citeLines = []; // parallel — nimûne+jêder for that same sense
var izahLines = []; // parallel — raw îzah gloss for that same sense
// True only once some sense's *actual* dfn text (post tercime/îzah
// split) is non-empty.
var hasLinkableMane = false;
$.each(senses, function (_, sense) {
// — Template sense (e.g. {{guharto|ku|somepage}}) —
if (sense.tpl) {
if (!sense.tplTitle) return; // skip empty template senses
var tplKatTpl = buildSenseTpl(sense, "kategori", lang, "K");
var tplLabelTpl = buildSenseTpl(sense, "etiket", lang, "e");
var tplCall = sense.tplNoLang
? "{{" + sense.tpl + "|" + sense.tplTitle + "}}"
: "{{" + sense.tpl + "|" + lang + "|" + sense.tplTitle + "}}";
var idx = defLines.length;
var cite = buildCite(sense, lang);
defLines.push("# " + (tplKatTpl ? tplKatTpl + " " : "") + (tplLabelTpl ? tplLabelTpl + " " : "") + tplCall +
(cite ? "{{wiktku-cite-" + idx + "}}" : ""));
citeLines.push(cite);
izahLines.push(""); // template senses have no îzah
return;
}
// — Normal mane sense —
var dfn = sense.mane;
if (!dfn && !senseHasExtraContent(sense)) return; // truly empty
// Pull the îzah gloss (if any) out of the combined tercime+îzah
// string — it's spliced back in separately below, after its
// own linkify pass (see izahLines / the second linkifyText call).
var izahRaw = null;
var tercimeIzah = splitTercimeIzah(dfn);
if (tercimeIzah) {
dfn = tercimeIzah.tercime;
izahRaw = stripWikilinks(tercimeIzah.izah);
}
if (dfn) {
dfn = stripWikilinks(dfn);
// Sentence-case + trailing period are for ku definitions,
// which are written as full glosses.
if (lang === "ku") {
if (dfn[0] !== dfn[0].toUpperCase()) dfn = capitalize(dfn);
if (!dfn.match(/[.…?!)\]]$/)) dfn += ".";
}
// Real prose — this is what makes the sense worth running
// through the main linkify pass.
hasLinkableMane = true;
} else if (izahRaw === null) {
// No mane at all — this is just the "{{mane?|lang}}"
// placeholder, a bare template call with no plain words
// in it. Do NOT count it as linkable: sending nothing but
// bracketed templates through the main linkify pass hangs
// the linkify gadget (see the hasLinkableMane/hasIzah
// check below).
dfn = lang === "ku" ? "{{mane?|" + lang + "}}" : "";
}
var katTpl = buildSenseTpl(sense, "kategori", lang, "K");
var labelTpl = buildSenseTpl(sense, "etiket", lang, "e");
var out = "# " + (katTpl ? katTpl + " " : "") + (labelTpl ? labelTpl + " " : "") + dfn;
var idx = defLines.length;
var hasThisIzah = izahRaw !== null && $.trim(izahRaw) !== "";
// Bare {{...}} token — like {{wiktku-cite-N}}, this survives
// linkify's first pass untouched (it treats template calls as
// opaque), then gets swapped for {{îzah|…}} once the actual
// gloss text has been linkified in its own separate pass.
if (hasThisIzah) {
out += (dfn ? " " : "") + "{{wiktku-izah-" + idx + "}}";
}
function wordLine(tpl, words) {
if (!words.length) return "";
return "\n#: {{" + tpl + "|" + lang + "|" + words.join("|") + "}}";
}
out += wordLine("alt-r", sense.alternativ);
out += wordLine("hevmane", sense.hevmane);
out += wordLine("dijmane", sense.dijmane);
out += wordLine("koordîne", sense.koordine);
out += wordLine("jornav", sense.jornav);
out += wordLine("jêrnav", sense.jernav);
var cite = buildCite(sense, lang);
defLines.push(out + (cite ? "{{wiktku-cite-" + idx + "}}" : ""));
citeLines.push(cite);
izahLines.push(hasThisIzah ? izahRaw : "");
});
// Splice citeLines back into a linkified string, replacing each
// {{wiktku-cite-N}} token with its stored nimûne/jêder block.
function restoreCites(t) {
return t.replace(/\{\{wiktku-cite-(\d+)\}\}/g, function (_, n) {
return citeLines[parseInt(n, 10)] || "";
});
}
// Runs text through the linkify gadget if it's loaded, otherwise
// just passes it through unchanged. Shared by both linkify passes
// below (main mane text, and — separately — îzah glosses).
function linkifyText(t, cb) {
if (typeof $.kuLinkify === "function") {
$.kuLinkify(t, cb);
} else {
cb(t);
}
}
var hasIzah = izahLines.some(function (t) { return t && $.trim(t) !== ""; });
var text = defLines.join("\n") + "\n";
if (!hasMane) {
// No definitions entered — emit {{mane?}} with nimûne?.
text = "# {{mane?|" + lang + "}}\n#* {{nimûne?|" + lang + "}}\n";
callback(text);
return;
}
// Runs the îzah-only linkify pass against `base` (either the raw
// text, when there's no linkable mane to run the main pass on
// first, or the already-linkified main text). Shared by both
// branches below so the token-splice logic only lives once.
function runIzahPass(base) {
var izahJoined = $.map(izahLines, function (raw, idx) {
if (!raw) return undefined;
return "{{wiktku-izah-open-" + idx + "}}" + raw + "{{wiktku-izah-close-" + idx + "}}";
}).join("\n");
linkifyText(izahJoined, function (izahLinked) {
var izahByIdx = {};
var re = /\{\{wiktku-izah-open-(\d+)\}\}([\s\S]*?)\{\{wiktku-izah-close-\1\}\}/g;
var m;
while ((m = re.exec(izahLinked)) !== null) {
izahByIdx[parseInt(m[1], 10)] = m[2];
}
var withIzah = base.replace(/\{\{wiktku-izah-(\d+)\}\}/g, function (_, n) {
var linked = izahByIdx[parseInt(n, 10)];
return linked !== undefined ? "{{îzah|" + linked + "}}" : "";
});
callback(restoreCites(withIzah));
});
}
if (!hasLinkableMane) {
if (!hasIzah) {
// All filled senses are template senses (or otherwise have
// no plain text at all) — nothing here needs linkify.
callback(restoreCites(text));
return;
}
// There's no plain mane text anywhere (e.g. tercime left blank
// with only îzah filled in), so every defLine is just a bare
// template call with nothing to word-link. Sending a line
// like "# {{wiktku-izah-0}}" through the main linkify pass
// gives it no plain words to work with, makes the linkify
// gadget hang — so skip that pass entirely and run only
// the îzah pass, splicing straight into the unlinkified text.
var loadIzahOnly = function () { runIzahPass(text); };
mw.loader.using("ext.gadget.linkify", loadIzahOnly, loadIzahOnly);
return;
}
var didTryToLoad = function () {
// First pass: the main definition text (mane), same as before.
linkifyText(text, function (mainLinked) {
if (!hasIzah) {
callback(restoreCites(mainLinked));
return;
}
// Second pass: îzah glosses, linkified via their own
// separate call. Each gloss is wrapped in its own
// {{wiktku-izah-open/close-N}} pair; like the existing
// {{wiktku-cite-N}} tokens, these sit inside double
// braces so linkify leaves the tokens themselves alone —
// only the raw gloss text between each pair gets linked.
runIzahPass(mainLinked);
});
};
mw.loader.using("ext.gadget.linkify", didTryToLoad, didTryToLoad);
}
},
tewandin: {
id: "tewandin",
name: "tewandin",
question_fmt: 'Tewandina "' + pageName + '" binivîse',
visible: function (values) {
return values.lang && values.pos;
},
build: function (stepDiv) {
if (stepDiv.find(".wiktku-tewandin-wrap").length) return null;
var wrap = $("<div class='wiktku-tewandin-wrap'></div>");
var ta = $("<textarea></textarea>")
.attr("name", "wiktku-tewandin-" + $.now())
.attr("class", "wiktku-start-step-field wiktku-tewandin-text")
.attr("rows", 4)
.attr("placeholder", "{{ku-tewîn-nav|nêr}}");
wrap.append(ta);
stepDiv.append(wrap);
function autoPopulate() {
if (!ta.length) return;
var vals = getValues();
var c = vals.cinsiyet || "";
var p = vals.pos || "";
if (!pageName.includes(" ") && c && GENDER_BASE_LABELS[c] &&
(p === "navdêr" || p === "serenav") && vals.lang === "ku" &&
c !== "mndudil") {
var label = (c === "mnmane") ? "mê û nêr" : GENDER_BASE_LABELS[c];
var out = "{{ku-tewîn-nav|" + label;
if (p === "serenav") out += "|y";
out += "}}";
if (!$.trim(ta.val())) ta.val(out);
}
}
setTimeout(function () {
autoPopulate();
$("#wiktku-start-form").on("change.tewandin",
"#wiktku-start-lang-field, #wiktku-start-cinsiyet-field, #wiktku-start-pos-field",
autoPopulate);
}, 0);
return ta;
},
output: function () {
var manualText = $.trim($("#wiktku-start-tewandin .wiktku-tewandin-text").val());
if (manualText) {
return "\n==== Tewandin ====\n" + manualText + "\n";
}
return "";
}
},
// resim — one or more images
resim: {
id: "resim",
name: "resim",
question_fmt: "Resmekê lê zêde bike",
visible: function (values) { return !!(values.lang && values.pos); },
/** Builds one image row: filename + caption + alt text. */
buildItem: function (stepDiv) {
var item = $("<li class='wiktku-resim-item'></li>");
var fileRow = $("<div class='wiktku-posparams-row'></div>");
var fileInp = $("<input type='text'>")
.addClass("wiktku-start-step-field wiktku-start-narrow wiktku-resim-file")
.attr("placeholder", "navê_dosyayê.jpg");
fileRow.append($("<label></label>").text("Navê dosyayê: ")).append(fileInp);
var capRow = $("<div class='wiktku-posparams-row'></div>");
var capInp = $("<input type='text'>")
.addClass("wiktku-start-step-field wiktku-start-narrow wiktku-resim-caption")
.attr("placeholder", "Danasîna resimê…");
capRow.append($("<label></label>").text("Danasîn: ")).append(capInp);
// Alt text: what a screen reader announces for this image
var altRow = $("<div class='wiktku-posparams-row'></div>");
var altInp = $("<input type='text'>")
.addClass("wiktku-start-step-field wiktku-start-narrow wiktku-resim-alt")
.attr("placeholder", "Ji bo kesên nabînin, çi tê dîtin? (ne mecbûrî)");
altRow.append($("<label></label>").text("Nivîsa alternatîf: ")).append(altInp);
// Auto-fill the caption with the plain page name when a filename
// is typed
fileInp.on("input", function () {
var file = $.trim($(this).val());
var curCap = $.trim(capInp.val());
var isDefault = !curCap || curCap === pageName;
if (file && isDefault) {
capInp.val(pageName);
} else if (!file && isDefault) {
capInp.val("");
}
steps.resim.onFileInput(stepDiv, item, this);
});
item.append(fileRow).append(capRow).append(altRow);
return item;
},
/** Grows the image list when the last row's filename gets content. */
onFileInput: function (stepDiv, item, input) {
var val = $.trim($(input).val());
var list = stepDiv.find("ol.wiktku-resim-list");
var isLast = item.is(list.children("li:last-child"));
if (val && isLast) {
list.append(steps.resim.buildItem(stepDiv));
}
},
build: function (stepDiv) {
if (stepDiv.find(".wiktku-resim-wrap").length) return null;
var wrap = $("<div class='wiktku-resim-wrap'></div>");
var list = $("<ol class='wiktku-resim-list'></ol>");
list.append(steps.resim.buildItem(stepDiv));
wrap.append(list);
stepDiv.append(wrap);
return null;
},
/** Reads every filled row from the DOM into an array of {file, caption, alt}
* objects — blank rows (missing filename or caption) are skipped.
* Non-Kurdish captions get wrapped in {{zim|lang|…}} here, unless
* the user already typed their own {{zim|…}} template. Alt text is
* optional and left as plain text either way. */
getImages: function (values) {
var lang = (values && values.lang) || getValues().lang || "";
var images = [];
$("#wiktku-start-resim li.wiktku-resim-item").each(function () {
var file = $.trim($(this).find(".wiktku-resim-file").val());
var caption = $.trim($(this).find(".wiktku-resim-caption").val());
var alt = $.trim($(this).find(".wiktku-resim-alt").val());
if (!file || !caption) return;
// Strip leading "Wêne:" or "File:" if the user typed it — we add it ourselves.
file = file.replace(/^(wêne|file|image)\s*:\s*/i, "");
if (lang && lang !== "ku" && !/^\{\{zim\s*\|/i.test(caption)) {
caption = "{{zim|" + lang + "|" + caption + "}}";
}
images.push({ file: file, caption: caption, alt: alt });
});
return images;
},
output: function (values) {
var images = steps.resim.getImages(values);
if (!images.length) return "";
return images.map(function (img) {
var altPart = img.alt ? "|alt=" + img.alt : "";
return "[[Wêne:" + img.file + "|thumb" + altPart + "|" + img.caption + "]]";
}).join("\n") + "\n";
}
},
// bnr-h — {{bnr-h|Page1|Page2|…}} prepended before the lang section (shared, not per-section)
bnrh: {
id: "bnrh",
name: "binêre herwiha (bnr-h)",
question_fmt: "Şablona bnr-h li qismê herî jor a rûpelê",
//visible: function (values) { return !!values.lang; },
multiple: true,
narrow: true,
placeholder: "Ji bo 'test' bnr 'Test', 'teşt'",
output: function (values) {
var pages = $.grep(values.bnrh || [], function (p) { return !!$.trim(p); });
if (!pages.length) return "";
return "{{bnr-h|" + pages.map(function (p) { return $.trim(p); }).join("|") + "}}\n";
}
},
bikaranin: {
id: "bikaranin",
name: "Notên bikaranînê",
question_fmt: "Notên bikaranînê yên li ser vê kelîmeyê",
visible: function (values) {
return values.lang && values.pos;
},
multiple: false,
narrow: false,
output: function (values) {
var text = $.trim(values.bikaranin || "");
if (!text) return "";
return "\n==== Notên bikaranînê ====\n" + text + "\n";
},
},
xwendin: {
id: "xwendin",
name: "Bêhtir bixwîne",
question_fmt: "Lînkên derveyî eleqedarî vê madeyê",
visible: function (values) {
return values.lang && values.pos;
},
multiple: false,
narrow: false,
placeholder: function (values) {
if (!values || !values.lang) {
return `* {{wpedî}} ji bo ku meqaleya Wîkîpediyayê lînk bidî`;
}
const ziman = values.lang === "ku" ? "" : `|ziman=${values.lang}`;
return `* {{wpedî${ziman}}} ji bo ku meqaleya Wîkîpediyayê lînk bidî`;
},
output: function (values) {
var text = $.trim(values.xwendin || "");
if (!text) return "";
return "\n==== Bêhtir bixwîne ====\n" + text + "\n";
},
},
alfabeyendin: {
id: "alfabeyendin",
name: "Bi alfabeyên din",
question_fmt: function (values) {
var base = "Nivîsîna vê kelîmeyê bi alfabeyên din"
var langLabel = values.lang ? getLangLabel(values.lang) : "";
if (langLabel) {
return base + " ên " + langLabel;
}
return base;
},
visible: function (values) {
return values.lang && values.pos;
},
multiple: false,
narrow: false,
placeholder: "Ji bo kurmancî: * {{ku-ar|şiklê alfaba erebî}}",
output: function (values) {
var text = $.trim(values.alfabeyendin || "");
if (!text) return "";
return "\n==== Bi alfabeyên din ====\n" + text + "\n";
},
},
formalt: makeWordListStep("formalt", "formên alternatîv", "Formên alternatîv ên vê kelîmeyê ji bo hemû maneyan eger te li binê maneyê nenivîsandibe"),
hevmane: makeWordListStep("hevmane", "hevmane", "Hevmaneyên vê kelîmeyê ji bo hemû maneyan eger te li binê maneyê nenivîsandibe"),
dijmane: makeWordListStep("dijmane", "dijmane", "Dijmaneyên vê kelîmeyê ji bo hemû maneyan eger te li binê maneyê nenivîsandibe"),
jornav: makeWordListStep("jornav", "jornav", "Jornavên vê kelîmeyê ji bo hemû maneyan eger te li binê maneyê nenivîsandibe"),
jernav: makeWordListStep("jernav", "jêrnav", "Jêrnavên vê kelîmeyê ji bo hemû maneyan eger te li binê maneyê nenivîsandibe"),
je: makeWordListStep("je", "jê", "Kelîmeyên jê çêbûyî binivîse"),
tekildar: makeWordListStep("tekildar", "têkildar", "Kelîmeyên ji aliyê etîmolojiyê ve têkildarî vê kelîmeyê binivîse"),
binereherwiha: makeWordListStep("binereherwiha", "herwiha binêre", "Kelîmeyên din ên eleqedar binivîse"),
etym: {
id: "etym",
name: "etîmolojî",
question_fmt: "Etîmolojiya kelîmeyê binivîse",
// etymTpls populated from data.json
etymTpls: {},
visible: function (values) {
return values.lang && values.pos;
},
// Fills the insert-dropdown from the current etymTpls object.
refreshTplSelect: function () {
var sel = $("#wiktku-start-etym .wiktku-tpl-insert-select");
if (!sel.length) return;
sel.find("option[value!='']").remove();
$.each(steps.etym.etymTpls, function (name, tpl) {
sel.append($("<option></option>").val(tpl.snippet).text(name + " — " + tpl.desc));
});
// Tell the picker the option list changed.
sel.trigger("wiktku:refresh");
},
build: function (stepDiv) {
if (stepDiv.find(".wiktku-etym-wrap").length) return null;
var wrap = $("<div class='wiktku-etym-wrap'></div>");
var ta = $("<textarea></textarea>")
.attr("name", "wiktku-etym-" + $.now())
.attr("class", "wiktku-start-step-field wiktku-etym-text")
.attr("rows", 4)
.attr("placeholder", "Ji {{ji|en|ku|apple}}. yan rasterast binivîse…");
// Template insert dropdown — options also refreshed after data.json loads.
var sel = $("<select class='wiktku-tpl-insert-select'></select>");
sel.attr("data-placeholder", "Şablonek lê zêde bike…");
sel.append($("<option value=''>— şablonek lê zêde bike —</option>"));
$.each(steps.etym.etymTpls, function (name, tpl) {
sel.append($("<option></option>").val(tpl.snippet).text(name + " — " + tpl.desc));
});
sel.on("change", function () {
var snippet = $(this).val();
if (!snippet) return;
var lang = getValues().lang || "";
snippet = snippet.replace(/CODE/g, lang).replace(/SOURCELANG/g, "?");
insertAtCursor(ta[0], snippet);
$(this).val("");
sel.trigger("wiktku:refresh");
ta.focus();
});
wrap.append(sel);
wrap.append(ta);
stepDiv.append(wrap);
initSelects(wrap);
return ta;
},
output: function (values) {
var text = $.trim($("#wiktku-start-etym .wiktku-etym-text").val());
if (text) {
return "\n==== Etîmolojî ====\n" + text + "\n";
}
// No etymology entered — emit {{ji?|lang}} as a placeholder.
// Skip it only when every filled sense is a şablon sense
// a completely empty entry with no şablon chosen still gets the placeholder
var dfnSenses = steps.dfn.getSenses($("#wiktku-start-dfn"));
var hasFilledTplSense = dfnSenses.some(function (s) {
return !!s.tpl && !!s.tplTitle;
});
var hasRegularMane = dfnSenses.some(function (s) {
return !s.tpl && (s.mane !== "" || senseHasExtraContent(s));
});
if (hasFilledTplSense && !hasRegularMane) return "";
return "\n==== Etîmolojî ====\n{{ji?|" + values.lang + "}}\n";
} },
dunde: {
id: "dunde",
name: "dûnde",
question_fmt: "Eger ev kelîme ji vî zimanî ketibe zimanekî din, vî zimanî û kelîmeya wî binivîse",
visible: function (values) {
return !!values.pos;
},
disabledKeys: function (values) {
return {"navz": true, [values.lang]: true}
},
// Language dropdown + growing word-input list; a new row appends
// when the dropdown gets a value. Mirrors steps.trans, but flat.
buildRow: function (stepDiv) {
var row = $("<li class='wiktku-dunde-row wiktku-lang-row'></li>");
// Language selector — the searchable picker is applied after insertion into DOM.
var langSel = $(mw.html.element("select", {
"class": "wiktku-start-step-keyfield wiktku-start-narrow" }));
langSel.attr("data-placeholder", "Li zimanekî bigere");
populateMenus(langSel, steps.dunde.keys || [], steps.dunde.disabledKeys);
// When a language is chosen, ensure a next empty row exists.
langSel.on("change", function () {
steps.dunde.onLangChange(stepDiv, row);
});
// Word list for this language.
var wordList = $("<ul class='wiktku-dunde-words wiktku-lang-row-words'></ul>");
var firstWord = steps.dunde.makeWordInput();
wordList.append($("<li></li>").append(firstWord));
// The searchable picker is attached by initSelects() once the row
// is in the DOM (see onLangChange/build below).
row.append(langSel).append(wordList);
return row;
},
makeWordInput: function () {
var input = $("<textarea></textarea>")
.attr("name", "wiktku-dunde-word-" + $.now() + "-" + Math.random().toString(36).substr(2, 9))
.attr("rows", 1)
.attr("class", "wiktku-dfn-subfield wiktku-start-narrow")
.attr("placeholder", "Kelîme…");
input.on("input", function () {
var list = $(this).closest("ul.wiktku-dunde-words");
var item = $(this).parent();
var val = $.trim($(this).val());
if (val && item.is(list.children("li:last-child"))) {
var next = steps.dunde.makeWordInput();
list.append($("<li></li>").append(next));
}
});
return input;
},
onLangChange: function (stepDiv, row) {
var list = stepDiv.find("ul.wiktku-dunde-list");
var isLast = row.is(list.children("li.wiktku-dunde-row:last-child"));
if (isLast) {
var newRow = steps.dunde.buildRow(stepDiv);
list.append(newRow);
// Attach the searchable picker now the row is in the DOM.
initSelects(newRow);
}
// Keep disabled keys in sync across all lang selectors.
steps.dunde.syncDisabledKeys(stepDiv);
},
/** Disables already-selected languages in all other dropdowns. */
syncDisabledKeys: function (stepDiv) {
var taken = $.extend({}, steps.dunde.disabledKeys);
stepDiv.find("li.wiktku-dunde-row select").each(function () {
var v = $(this).val();
if (v) taken[v] = true;
});
stepDiv.find("li.wiktku-dunde-row select").each(function () {
var self = $(this);
var own = self.val();
self.find("option").each(function () {
var code = $(this).val();
if (!code) return;
$(this).prop("disabled", taken[code] && code !== own);
});
self.trigger("wiktku:refresh");
});
},
build: function (stepDiv) {
if (stepDiv.find("ul.wiktku-dunde-list").length) return null;
var list = $("<ul class='wiktku-dunde-list wiktku-lang-row-list'></ul>");
list.append(steps.dunde.buildRow(stepDiv));
stepDiv.append(list);
// Attach the searchable picker now the select is in the DOM.
initSelects(list);
return null;
},
/** Reads all [langcode, words[]] rows from the DOM. */
getRows: function (stepDiv) {
var result = [];
stepDiv.find("li.wiktku-dunde-row").each(function () {
var lang = $(this).find("select").val();
if (!lang) return;
var words = [];
$(this).find("ul.wiktku-dunde-words textarea").each(function () {
var v = $.trim($(this).val());
if (v) words.push(v);
});
if (words.length) result.push([lang, words]);
});
return result;
},
output: function () {
var stepDiv = $("#wiktku-start-dunde");
var rows = steps.dunde.getRows(stepDiv);
if (!rows.length) return "";
var lines = $.map(rows, function (row) {
var lang = row[0], words = row[1];
return "* {{dû|" + lang + "|" + words.join("|") + "}}";
});
return "\n==== Dûnde ====\n" + lines.join("\n") + "\n";
}
},
zarava: {
id: "zarava",
name: "bi zaravayên din",
question_fmt: "'"+ pageName + "' di zaravayên din de çawa tê gotin?",
visible: function (values) {
return steps.trans.visible(values);
},
disabledKeys: {},
buildRow: function (group) {
var row = $("<li class='wiktku-zarava-row wiktku-lang-row'></li>");
var langSel = $(mw.html.element("select", {
"class": "wiktku-start-step-keyfield wiktku-start-narrow" }));
langSel.attr("data-placeholder", "Li zaravayekî bigere");
populateMenus(langSel, steps.zarava.keys || [], steps.zarava.disabledKeys);
langSel.on("change", function () {
steps.zarava.onLangChange(group, row);
});
var wordList = $("<ul class='wiktku-zarava-words wiktku-lang-row-words'></ul>");
var firstWord = steps.zarava.makeWordInput();
wordList.append($("<li></li>").append(firstWord));
row.append(langSel).append(wordList);
return row;
},
makeWordInput: function () {
var input = $("<textarea></textarea>")
.attr("name", "wiktku-zarava-word-" + $.now() + "-" + Math.random().toString(36).substr(2, 9))
.attr("rows", 1)
.attr("class", "wiktku-dfn-subfield wiktku-start-narrow")
.attr("placeholder", "Tercime…");
input.on("input", function () {
var list = $(this).closest("ul.wiktku-zarava-words");
var item = $(this).parent();
var val = $.trim($(this).val());
if (val && item.is(list.children("li:last-child"))) {
var next = steps.zarava.makeWordInput();
list.append($("<li></li>").append(next));
}
});
return input;
},
onLangChange: function (group, row) {
var list = group.find("ul.wiktku-zarava-list");
var isLast = row.is(list.children("li.wiktku-zarava-row:last-child"));
if (isLast) {
var newRow = steps.zarava.buildRow(group);
list.append(newRow);
// Attach the searchable picker now the row is in the DOM.
initSelects(newRow);
}
steps.zarava.syncDisabledKeys(group);
},
/** Disables already-selected dialects in all other dropdowns within one group. */
syncDisabledKeys: function (group) {
var taken = $.extend({}, steps.zarava.disabledKeys);
group.find("li.wiktku-zarava-row select").each(function () {
var v = $(this).val();
if (v) taken[v] = true;
});
group.find("li.wiktku-zarava-row select").each(function () {
var self = $(this);
var own = self.val();
self.find("option").each(function () {
var code = $(this).val();
if (!code) return;
$(this).prop("disabled", taken[code] && code !== own);
});
self.trigger("wiktku:refresh");
});
},
/** Builds (or fetches) the .wiktku-zarava-group for one gloss. */
buildGroup: function (stepDiv, gi) {
var group = $("<div class='wiktku-zarava-group'></div>").attr("data-gloss-pos", gi);
var list = $("<ul class='wiktku-zarava-list wiktku-lang-row-list'></ul>");
list.append(steps.zarava.buildRow(group));
group.append(list);
stepDiv.append(group);
// Attach the searchable picker now the select is in the DOM.
initSelects(list);
return group;
},
/** Syncs one .wiktku-zarava-group per current gloss (same logic as steps.trans.build). */
build: function (stepDiv) {
var glosses = steps.trans.glossList();
if (!glosses.length) {
stepDiv.find(".wiktku-zarava-group").remove();
return null;
}
var existingGroups = stepDiv.find(".wiktku-zarava-group");
if (existingGroups.length > glosses.length) {
existingGroups.slice(glosses.length).remove();
}
$.each(glosses, function (gi, gloss) {
var group = stepDiv.find(".wiktku-zarava-group[data-gloss-pos='" + gi + "']");
if (!group.length) group = steps.zarava.buildGroup(stepDiv, gi);
var label = group.find(".wiktku-zarava-group-label");
if (glosses.length > 1) {
if (!label.length) {
label = $("<div class='wiktku-zarava-group-label'></div>");
group.prepend(label);
}
label.text(gloss.index + " " + gloss.text);
} else if (label.length) {
label.remove();
}
});
return null;
},
/** Reads the dialect rows for a single gloss group. */
getGroupTranslations: function (group) {
var result = [];
group.find("li.wiktku-zarava-row").each(function () {
var lang = $(this).find("select").val();
if (!lang) return;
var words = [];
$(this).find("ul.wiktku-zarava-words textarea").each(function () {
var v = $.trim($(this).val());
if (v) words.push(v);
});
if (words.length) result.push([lang, words]);
});
return result;
},
/** Reads all rows from the DOM, grouped by gloss position. */
getTranslations: function (stepDiv) {
var result = [];
stepDiv.find(".wiktku-zarava-group").each(function () {
result.push(steps.zarava.getGroupTranslations($(this)));
});
return result;
},
output: function (values) {
if (values.lang !== "ku") return "";
var stepDiv = $("#wiktku-start-zarava");
var glosses = steps.trans.glossList();
if (!glosses.length) return "";
// Item 6 (Wikihez, 14 Tebax 2026): "Bi zaravayên din" now
// auto-appears empty for lang=ku exactly like Werger
// already does (steps.trans.output, same rule below) —
// a completely empty entry still gets a placeholder
// section to fill in later; an individual placeholder
// gloss is only skipped once some other sense already has
// real content, making that particular one redundant.
var dfnSenses = steps.dfn.getSenses($("#wiktku-start-dfn"));
var hasRegularMane = dfnSenses.some(function (s) {
return !s.tpl && (s.mane !== "" || senseHasExtraContent(s));
});
var blocks = $.map(glosses, function (gloss, gi) {
var group = stepDiv.find(".wiktku-zarava-group[data-gloss-pos='" + gi + "']");
var rows = group.length ? steps.zarava.getGroupTranslations(group) : [];
if (!gloss.text && !rows.length && hasRegularMane) return undefined;
if (rows.length) {
rows.sort(function (a, b) {
var aLang = langsByCode[a[0]] || {};
var bLang = langsByCode[b[0]] || {};
return (aLang.sortKey || "").localeCompare(bLang.sortKey || "", "ku");
});
}
var wordLines = $.map(rows, function (row) {
var lang = row[0];
var words = row[1];
var wikiWords = words.map(function (w) {
return "{{W|" + lang + "|" + w + "}}";
}).join(", ");
return "* {{Z|" + lang + "}}: " + wikiWords;
}).join("\n");
var block = "{{werger-ser|" + (gloss.text || "?") + "|" + gloss.index + "}}";
if (wordLines) block += "\n" + wordLines;
block += "\n{{werger-bin}}";
return block;
});
if (!blocks.length) return "";
return "\n==== Bi zaravayên din ====\n" + blocks.join("\n") + "\n";
}
},
trans: {
id: "trans",
name: "werger",
question_fmt: "Tercimeyên vê maneyê bi zimanên din binivîse",
visible: function (values) {
if (!(values.lang === "ku" && values.pos)) return false;
// Hide only when every sense is a filled template sense (no plain
// gloss to attach translations to). A mix, or nothing filled in
// yet, still shows Werger.
var dfnSenses = steps.dfn.getSenses($("#wiktku-start-dfn"));
var hasRealSense = dfnSenses.some(function (s) {
return !s.tpl && (s.mane !== "" || senseHasExtraContent(s));
});
var hasFilledTplSense = dfnSenses.some(function (s) {
return s.tpl && s.tplTitle;
});
return hasRealSense || !hasFilledTplSense;
},
disabledKeys: {
"navz": true,
"ku": true,
"ckb": true,
"sdh": true,
"lki": true,
"hac": true,
"zza": true },
// Language dropdown + growing word-input list, scoped to one gloss's
// group (each gloss has its own group and row list).
buildRow: function (group) {
var row = $("<li class='wiktku-trans-row wiktku-lang-row'></li>");
// Language selector — the searchable picker is applied after insertion into DOM.
var langSel = $(mw.html.element("select", {
"class": "wiktku-start-step-keyfield wiktku-start-narrow" }));
langSel.attr("data-placeholder", "Li zimanekî bigere");
populateMenus(langSel, steps.trans.keys || [], steps.trans.disabledKeys);
// When a language is chosen, ensure a next empty row exists.
langSel.on("change", function () {
steps.trans.onLangChange(group, row);
});
// Word list for this language.
var wordList = $("<ul class='wiktku-trans-words wiktku-lang-row-words'></ul>");
var firstWord = steps.trans.makeWordInput();
wordList.append($("<li></li>").append(firstWord));
// The searchable picker is attached by initSelects() once the row
// is in the DOM (see onLangChange/buildGroup below).
row.append(langSel).append(wordList);
return row;
},
makeWordInput: function () {
var input = $("<textarea></textarea>")
.attr("name", "wiktku-trans-word-" + $.now() + "-" + Math.random().toString(36).substr(2, 9))
.attr("rows", 1)
.attr("class", "wiktku-dfn-subfield wiktku-start-narrow")
.attr("placeholder", "Tercime…");
input.on("input", function () {
var list = $(this).closest("ul.wiktku-trans-words");
var item = $(this).parent();
var val = $.trim($(this).val());
if (val && item.is(list.children("li:last-child"))) {
var next = steps.trans.makeWordInput();
list.append($("<li></li>").append(next));
}
});
return input;
},
onLangChange: function (group, row) {
var list = group.find("ul.wiktku-trans-list");
var isLast = row.is(list.children("li.wiktku-trans-row:last-child"));
if (isLast) {
var newRow = steps.trans.buildRow(group);
list.append(newRow);
// Attach the searchable picker now the row is in the DOM.
initSelects(newRow);
}
// Keep disabled keys in sync across this gloss's lang selectors
// only — the same language can be used for different senses.
steps.trans.syncDisabledKeys(group);
},
/** Disables already-selected languages in all other dropdowns within one group. */
syncDisabledKeys: function (group) {
var taken = $.extend({}, steps.trans.disabledKeys);
group.find("li.wiktku-trans-row select").each(function () {
var v = $(this).val();
if (v) taken[v] = true;
});
group.find("li.wiktku-trans-row select").each(function () {
var self = $(this);
var own = self.val();
self.find("option").each(function () {
var code = $(this).val();
if (!code) return;
$(this).prop("disabled", taken[code] && code !== own);
});
self.trigger("wiktku:refresh");
});
},
// Builds (or fetches) the .wiktku-trans-group for one gloss.
buildGroup: function (stepDiv, gi) {
var group = $("<div class='wiktku-trans-group'></div>").attr("data-gloss-pos", gi);
var list = $("<ul class='wiktku-trans-list wiktku-lang-row-list'></ul>");
list.append(steps.trans.buildRow(group));
group.append(list);
stepDiv.append(group);
// Attach the searchable picker now the select is in the DOM.
initSelects(list);
return group;
},
// Syncs one .wiktku-trans-group per current gloss, keyed by
// data-gloss-pos so groups stay matched across rebuilds.
build: function (stepDiv) {
var glosses = steps.trans.glossList();
if (!glosses.length) {
stepDiv.find(".wiktku-trans-group").remove();
return null;
}
// Drop groups for glosses that no longer exist (always from the
// tail — groups are only ever appended in gloss order below).
var existingGroups = stepDiv.find(".wiktku-trans-group");
if (existingGroups.length > glosses.length) {
existingGroups.slice(glosses.length).remove();
}
$.each(glosses, function (gi, gloss) {
var group = stepDiv.find(".wiktku-trans-group[data-gloss-pos='" + gi + "']");
if (!group.length) group = steps.trans.buildGroup(stepDiv, gi);
// Only label groups when there's more than one gloss to
// distinguish between — a single gloss needs no caption.
var label = group.find(".wiktku-trans-group-label");
if (glosses.length > 1) {
if (!label.length) {
label = $("<div class='wiktku-trans-group-label'></div>");
group.prepend(label);
}
label.text(gloss.index + " " + gloss.text);
} else if (label.length) {
label.remove();
}
});
return null;
},
/** Reads the translation rows for a single gloss group. */
getGroupTranslations: function (group) {
var result = [];
group.find("li.wiktku-trans-row").each(function () {
var lang = $(this).find("select").val();
if (!lang) return;
var words = [];
$(this).find("ul.wiktku-trans-words textarea").each(function () {
var v = $.trim($(this).val());
if (v) words.push(v);
});
if (words.length) result.push([lang, words]);
});
return result;
},
// Reads all translation rows, grouped by gloss position.
getTranslations: function (stepDiv) {
var result = [];
stepDiv.find(".wiktku-trans-group").each(function () {
result.push(steps.trans.getGroupTranslations($(this)));
});
return result;
},
// Builds the numbered "{ index, gloss }" list, one per dfn sense
// with a real mane (skips template senses). index is 1-based and
// matches the sense's position in the "#" definition list.
// When nothing's filled in, returns one placeholder entry so
// Werger still has a group to attach to; when every sense is a
// filled template sense, stays empty (matches trans.visible()).
glossList: function () {
var dfnSenses = steps.dfn.getSenses($("#wiktku-start-dfn"));
var glosses = [];
var hasFilledTplSense = false;
$.each(dfnSenses, function (i, s) {
if (s.tpl) {
if (s.tplTitle) hasFilledTplSense = true;
return; // template sense — no gloss to caption with
}
var dfn = s.mane;
if (!dfn) {
// No mane, but other fields are filled — still gets a
// gloss group since dfn.getOutput() emits {{mane?}} for it.
if (senseHasExtraContent(s)) glosses.push({ index: i + 1, text: "" });
return;
}
if (dfn[0] !== dfn[0].toLowerCase()) dfn = decapitalize(dfn);
dfn = stripWikilinks(dfn).replace(/[.…?!)\]،؟]+$/, "");
glosses.push({ index: i + 1, text: dfn });
});
if (!glosses.length && !hasFilledTplSense) {
glosses.push({ index: 1, text: "" });
}
return glosses;
},
output: function (values) {
if (values.lang !== "ku") return "";
var stepDiv = $("#wiktku-start-trans");
var glosses = steps.trans.glossList();
// Every sense is a template sense — there's no real gloss
// anywhere and no group in the DOM either (glossList() only
// returns empty in that case), so skip the section entirely.
if (!glosses.length) return "";
// A completely empty entry (nothing filled in dfn at all, no
// şablon chosen either) still gets a placeholder Werger section
// to fill in later. Only
// skip an individual placeholder gloss below when some other
// sense actually has real content, making that particular
// placeholder redundant.
var dfnSenses = steps.dfn.getSenses($("#wiktku-start-dfn"));
var hasRegularMane = dfnSenses.some(function (s) {
return !s.tpl && (s.mane !== "" || senseHasExtraContent(s));
});
// Each gloss now has its own group of translation rows —
// attach every gloss's own words under its own werger-ser/-bin
// pair instead of dumping everything under the first one.
var blocks = $.map(glosses, function (gloss, gi) {
var group = stepDiv.find(".wiktku-trans-group[data-gloss-pos='" + gi + "']");
var rows = group.length ? steps.trans.getGroupTranslations(group) : [];
// Placeholder gloss (no real mane entered yet) with nothing
// translated into it. If some other sense already has real
// content, this placeholder is redundant — skip it. If the
// whole entry is empty, keep it so Werger still gets a
// section to fill in.
if (!gloss.text && !rows.length && hasRegularMane) return undefined;
if (rows.length) {
// Sort by Kurdish sort key.
rows.sort(function (a, b) {
var aLang = langsByCode[a[0]] || {};
var bLang = langsByCode[b[0]] || {};
return (aLang.sortKey || "").localeCompare(bLang.sortKey || "", "ku");
});
}
var wordLines = $.map(rows, function (row) {
var lang = row[0];
var words = row[1];
var wikiWords = words.map(function (w) {
return "{{W|" + lang + "|" + w + "}}";
}).join(", ");
return "* {{Z|" + lang + "}}: " + wikiWords;
}).join("\n");
var block = "{{werger-ser|" + (gloss.text || "?") + "|" + gloss.index + "}}";
if (wordLines) block += "\n" + wordLines;
block += "\n{{werger-bin}}";
return block;
});
if (!blocks.length) return "";
return "\n==== Werger ====\n" + blocks.join("\n") + "\n";
}
},
cavkani: {
id: "cavkani",
name: "çavkanî",
question_fmt: "Çavkaniyên din (ne jêgirtin) lê zêde bike",
visible: function (values) {
return !!values.pos;
},
// Fills the insert-dropdown from the members of [[Kategorî:Çavkanî]].
refreshTplSelect: function () {
var sel = $("#wiktku-start-cavkani .wiktku-tpl-insert-select");
if (!sel.length) return;
sel.find("option[value!='']").remove();
$.each(catSrcTemplates || [], function (_, name) {
sel.append($("<option></option>").val(name).text(name));
});
// Tell the picker the option list changed.
sel.trigger("wiktku:refresh");
},
build: function (stepDiv) {
if (stepDiv.find(".wiktku-cavkani-wrap").length) return null;
var wrap = $("<div class='wiktku-cavkani-wrap'></div>");
var ta = $("<textarea></textarea>")
.attr("name", "wiktku-cavkani-" + $.now())
.attr("class", "wiktku-start-step-field wiktku-cavkani-text")
.attr("rows", 4)
.attr("placeholder", "Şablonekî ji lîsteyê hilbijêre an rasterast binivîse…");
// Template insert dropdown, populated from [[Kategorî:Çavkanî]] —
// options refreshed once the category members are fetched.
var sel = $("<select class='wiktku-tpl-insert-select'></select>");
sel.attr("data-placeholder", "Şablonek lê zêde bike…");
sel.append($("<option value=''>— şablonek lê zêde bike —</option>"));
var status = $("<span class='wiktku-cavkani-status'></span>");
sel.on("change", function () {
var name = $(this).val();
if (!name) return;
insertAtCursor(ta[0], "\n* {{" + name + "}}");
$(this).val("");
sel.trigger("wiktku:refresh");
ta.focus();
});
wrap.append(sel);
wrap.append(status).append(ta);
stepDiv.append(wrap);
// build() runs again for every new beş (see the "+ Beş zêde bike"
// handler), after the initial page-wide pass — so this select needs
// its own init or it stays a plain, unsearchable native <select>.
initSelects(wrap);
if (catSrcTemplates) {
steps.cavkani.refreshTplSelect();
} else {
status.text("Şablon tên barkirin…");
fetchCatSrcTemplates().then(function () {
steps.cavkani.refreshTplSelect();
status.text("");
}, function () {
status.text("Şablon nehatin barkirin.");
});
}
return ta;
},
output: function () {
var text = $.trim($("#wiktku-start-cavkani .wiktku-cavkani-text").val());
if (!text) return "";
return "\n==== Çavkanî ====\n" + text + "\n";
}
},
};
steps.trans.keys = steps.lang.choices;
steps.dunde.keys = steps.lang.choices;
steps.zarava.keys = getZaravaKeys(steps.lang.choices);
// Ghybu, 14 Tebax 2026: bnrh/resim/pron used to sit here, always visible,
// well above the tab bar (which starts right before "dfn"). They're now
// tab-gated (see STEP_GROUPS below), so their DOM position moves down to
// sit right next to it instead of rendering as always-open fields between
// Ziman and Cureyê rêzimanî. This array only controls DOM build order —
// nothing else keys off it (see the comment above stepIdToGroup).
// Wikihez, 14 Tebax 2026: Mane tab's internal order is now Mane → malûmatên
// pêşketî (nested inside dfn's own div, see steps.dfn.build) → Wêne →
// Bi zaravayên din → Werger, so dfn/resim/zarava/trans need to sit
// adjacent to each other, in that order, in the DOM. zarava/trans moved
// out of the "Beşên din" cluster entirely — see STEP_GROUPS below.
var ordered_steps = [
steps.lang, steps.pos, steps.posparams,
steps.cinsiyet, steps.jimar, steps.lektur, steps.tr,
steps.dfn, steps.trans,
steps.pron,
steps.resim, steps.zarava,
steps.bnrh, steps.tewandin, steps.bikaranin, steps.alfabeyendin, steps.je, steps.tekildar, steps.binereherwiha, steps.formalt, steps.hevmane, steps.dijmane, steps.jornav, steps.jernav,
steps.etym, steps.dunde, steps.cavkani, steps.xwendin];
// ── Step-group tabs ──────────────────────────────────────────────────────
// Ghybu, 14 Tebax 2026 (revised): originally 5 tabs (Bingehîn/Bilêvkirin/
// Lînkkirin/Bikaranîn/Din), split by topic. Ghybu's follow-up flattened
// that to exactly 3: "Mane", "Bilêvkirin", "Beşên din" ("other
// sections") — with Wêne and Nimûne folded INTO "Mane" specifically
// (not left in a misc tab), and everything that isn't Mane/Bilêvkirin
// dumped into one single "Beşên din" catch-all rather than split across
// topic tabs. Nimûne doesn't appear below as its own entry because it's
// not a separate step — it's already rendered inside each dfn/Mane
// sense block (see buildSenseBlock's allGroups), so it's under "Mane"
// automatically. "mane" stays first (and so the default-active tab)
// since required content — Mane itself — has to be what's seen by
// default.
// Wikihez, 14 Tebax 2026: zarava/trans moved from "besendin" into "mane" —
// both are already gated to lang===ku (zarava.visible just delegates to
// trans.visible), so they show/hide automatically with no picker
// involvement, same as before; they just render inside the Mane tab
// now instead of behind the Beşên din picker (see openedOtherSections
// below, which only applies to "besendin" members).
// Wikihez, 15 Tebax 2026: pared back again after Ghybu's "Tu jî dizanî ku
// kesên ku tên vira çito peyv çêdikin: Ziman > Mane > Mînak > Hevmane >
// Dijmane". That path is now what the form shows by default and nothing
// else: Mane holds the senses (whose own blocks carry Nimûne, Jêgirtin,
// Hevmane and Dijmane — see steps.dfn.allGroups) plus Werger. Wêne and
// "Bi zaravayên din" moved out to the Beşên din picker with everything
// else; they aren't gone, they're one dropdown pick away.
var STEP_GROUPS = [
{ id: "mane", label: "Mane", steps: ["dfn", "trans"] },
{ id: "bilevkirin", label: "Bilêvkirin", steps: ["pron"] },
{ id: "besendin", label: "Beşên din", steps: ["resim", "zarava", "tewandin", "etym", "je", "tekildar", "binereherwiha", "formalt", "hevmane", "dijmane", "jornav", "jernav", "bikaranin", "alfabeyendin", "dunde", "cavkani", "xwendin", "bnrh"] },
];
// Steps that live behind the "Beşên din" picker (point 3) — only these
// need an explicit "open" before they're shown, even when their tab is
// active. Derived from the group above so it can't drift out of sync.
var BESENDIN_STEP_IDS = STEP_GROUPS[2].steps;
// Reverse lookup: step id -> index into STEP_GROUPS (undefined for
// ungrouped steps — now only lang/pos/posparams/cinsiyet/lektur/tr,
// which stay always-visible since they're required to get to everything
// else).
var stepIdToGroup = {};
$.each(STEP_GROUPS, function (gi, g) {
$.each(g.steps, function (_, sid) { stepIdToGroup[sid] = gi; });
});
// Step ids that belong to each section (not shared across sections).
var PER_SECTION_STEP_IDS = [
"pos", "posparams", "cinsiyet", "jimar", "lektur", "tr",
"resim", "dfn", "tewandin", "formalt", "bikaranin", "alfabeyendin", "hevmane", "dijmane", "jornav", "jernav", "je", "tekildar", "etym", "dunde", "binereherwiha", "zarava", "trans", "cavkani", "xwendin"
];
// ── Multi-section state ──────────────────────────────────────────────────
// Each entry is a plain snapshot: { pos, cinsiyet, lektur, tr, dfn (senses[]),
// je, tekildar, binereherwiha, trans (rows[]) }.
var sections = [{}]; // section 0 starts empty (DOM is the truth)
var activeSection = 0;
// Which STEP_GROUPS tab is currently shown. Lives out here (like
// activeSection above) so refresh() — which is not nested inside build()
// — can read it and so renderGroupTabs()/updateGroupTabIndicators() below
// can be called from refresh() too. Both operate on the tab bar via its
// #wiktku-group-tabs id rather than a closured element reference, for the
// same reason.
var activeGroup = 0;
// Unsaved-changes / autosave state. Lives out here (same reason as
// activeGroup above) so destroy() — which runs on final submit and on
// switching to the source editor, and is not nested inside build() —
// can clear the timers and the beforeunload warning. build() assigns
// into these; it doesn't re-declare them.
var formDirty = false;
var autosaveDebounceTimer = null;
var autosaveInterval = null;
/** Re-renders the step-group tab bar to reflect the current activeGroup. */
function renderGroupTabs() {
var groupTabsDiv = $("#wiktku-group-tabs");
if (!groupTabsDiv.length) return;
groupTabsDiv.empty();
$.each(STEP_GROUPS, function (i, g) {
var tab = $("<span></span>")
.addClass("wiktku-group-tab")
.attr("data-group-idx", i)
.text(g.label)
.toggleClass("wiktku-tab-active", i === activeGroup);
(function (idx) {
tab.on("click", function () {
if (idx === activeGroup) return;
activeGroup = idx;
renderGroupTabs();
if (idx === BESENDIN_GROUP_IDX) renderBesenDinPicker();
refresh();
});
}(i));
groupTabsDiv.append(tab);
});
}
/**
* Toggles a "needs attention" dot on any group tab that still has a
* required, unfilled field hidden inside it — so switching tabs doesn't
* leave the person wondering why "Bişîne" stays disabled.
*/
function updateGroupTabIndicators(values) {
var tabs = $("#wiktku-group-tabs .wiktku-group-tab");
if (!tabs.length) return;
$.each(STEP_GROUPS, function (i, g) {
var missing = false;
$.each(g.steps, function (_, sid) {
var step = steps[sid];
if (!step || !step.required) return;
var val = values[sid];
if (val === "" || (step.multiple && $.isArray(val) && val.join("") === "")) {
missing = true;
}
});
tabs.eq(i).toggleClass("wiktku-tab-missing", missing && i !== activeGroup);
});
}
// Wikihez, 14 Tebax 2026: "Beşên din" no longer shows all 16 fields
// stacked at once — a picker reveals one at a time instead. This is
// per-section state (like the field values themselves), snapshotted in
// saveCurrentSection() and restored in restoreSection() below, and
// auto-seeded from any field that already has content (so a returning
// draft, or an older cache saved before this existed, doesn't hide
// something the person already filled in).
var openedOtherSections = {};
var BESENDIN_SET = {};
$.each(BESENDIN_STEP_IDS, function (_, sid) { BESENDIN_SET[sid] = true; });
var BESENDIN_GROUP_IDX = 2; // "besendin"'s index in STEP_GROUPS above
/** Re-renders the "Beşên din" picker to list only the not-yet-opened sections. */
function renderBesenDinPicker() {
var wrap = $("#wiktku-besendin-picker");
if (!wrap.length) return;
wrap.empty();
var pickerValues = getValues();
var unopened = $.grep(BESENDIN_STEP_IDS, function (sid) {
if (openedOtherSections[sid]) return false;
// Don't offer a section that would open onto nothing: several of
// these are gated (Bi zaravayên din / Werger need lang=ku, most
// need a pos). refresh() would hide it again straight away, so
// picking it would read as a broken dropdown.
var step = steps[sid];
if (step && typeof step.visible === "function") {
try {
if (!step.visible(pickerValues)) return false;
} catch (e) { /* a step whose visible() needs DOM we lack yet — offer it */ }
}
return true;
});
if (!unopened.length) return; // everything's open — nothing left to pick
var sel = $("<select class='wiktku-besendin-select'></select>");
sel.attr("data-placeholder", "— beşek hilbijêre —");
sel.append($("<option value=''>— beşek hilbijêre —</option>"));
$.each(unopened, function (_, sid) {
var step = steps[sid];
if (!step) return;
sel.append($("<option></option>").val(sid).text(capitalize(step.name)));
});
sel.on("change", function () {
var sid = $(this).val();
if (!sid) return;
openedOtherSections[sid] = true;
renderBesenDinPicker();
refresh();
});
wrap.append(sel);
initSelects(wrap);
}
/** Marks any BESENDIN_STEP_IDS field that already has real content as
* "opened", so restoring a draft doesn't bury filled-in sections behind
* the picker. Reuses each step's own output() as the emptiness check —
* it already knows what "empty" means per field, and it reads the DOM
* the restore just populated. Call this AFTER the DOM has the restored
* values in it. */
function seedOpenedFromContent() {
var values = getValues();
$.each(BESENDIN_STEP_IDS, function (_, sid) {
if (openedOtherSections[sid]) return;
var step = steps[sid];
if (!step || typeof step.output !== "function") return;
try {
if (step.output(values)) openedOtherSections[sid] = true;
} catch (e) { /* a step whose output() needs more state than we have yet — skip it */ }
});
}
function snapshotDfn() {
return steps.dfn.getSenses($("#wiktku-start-dfn"));
}
// Rebuilds the dfn DOM from a previously snapshotted senses array.
function restoreDfn(senses) {
var stepDiv = $("#wiktku-start-dfn");
// Tear down the existing list so build() recreates it cleanly.
stepDiv.find("ol.wiktku-dfn-list").remove();
steps.dfn.build(stepDiv);
var list = stepDiv.find("ol.wiktku-dfn-list");
$.each(senses, function (i, sense) {
// Ensure enough blocks exist (build() seeds one).
var blocks = list.find("li.wiktku-dfn-sense");
var block = blocks.eq(i);
if (!block.length) {
var nb = steps.dfn.buildSenseBlock(stepDiv);
list.append(nb);
block = list.find("li.wiktku-dfn-sense").last();
}
// Template selector.
block.find("select.wiktku-dfn-tpl-select").val(sense.tpl || "");
if (sense.tpl) {
block.find("textarea.wiktku-dfn-mane").hide();
block.find("input.wiktku-dfn-tpl-title").val(sense.tplTitle || "").show();
} else {
block.find("textarea.wiktku-dfn-mane").val(sense.mane || "").show();
block.find("input.wiktku-dfn-tpl-title").hide().val("");
}
// dfnArea is the only thing actually saved, so split it back into
// tercime/îzah for editing (mirrors syncNonKuToMane's join format).
var maneParts = splitTercimeIzah(sense.mane);
block.find(".wiktku-dfn-tercime").val(maneParts ? maneParts.tercime : (sense.mane || ""));
block.find(".wiktku-dfn-izah").val(maneParts ? maneParts.izah : "");
// Re-sync the formên alternatîv/hevmane/… hide state now that
// tplSelect's value was set (its own "change"
// handler doesn't fire from .val(), so this doesn't happen otherwise).
var updateVis = block.data("updateFieldVisibility");
if (updateVis) updateVis();
// Same for the mane-box mode (plain vs tercime+îzah), since this
// also depends on tplSelect's (and lang's) value.
var updateMane = block.data("updateManeMode");
if (updateMane) updateMane();
// Restore a sub-list (etiket, formên alternatîv, hevmane …) from a values array.
function restoreSubList(cls, values) {
if (!values || !values.length) return;
var groupDiv = block.find("." + cls + "-group");
var subList = groupDiv.find("ol, ul").first();
if (!subList.length) return; // group not found
var useModifiers = !!MODIFIER_SUBGROUPS[cls];
// Fill existing items, append new ones as needed.
$.each(values, function (j, val) {
var items = subList.find("li");
if (j < items.length) {
items.eq(j).find("textarea").val(val);
} else {
var ta = $("<textarea></textarea>")
.attr("name", "wiktku-dfn-restore-" + $.now() + "-" + Math.random().toString(36).substr(2, 9))
.attr("rows", 1)
.attr("class", "wiktku-dfn-subfield wiktku-start-narrow")
.val(val);
ta.on("input", function () {
steps.dfn.onSubInput(subList, this, 1, true, useModifiers);
});
subList.append(useModifiers ? makeModifierLi(ta) : $("<li></li>").append(ta));
}
});
}
// Reveal and populate lazy groups that have data.
var lazyMap = {
"wiktku-dfn-etiket": sense.etiket,
"wiktku-dfn-kategori": sense.kategori,
"wiktku-dfn-alternativ": sense.alternativ,
"wiktku-dfn-hevmane": sense.hevmane,
"wiktku-dfn-dijmane": sense.dijmane,
"wiktku-dfn-koordine": sense.koordine,
"wiktku-dfn-jornav": sense.jornav,
"wiktku-dfn-jernav": sense.jernav
};
$.each(lazyMap, function (cls, vals) {
if (vals && vals.length) restoreSubList(cls, vals);
});
// Nimûne items are objects { text, tr?, t? } — restore using the builder.
if (sense.nimune && sense.nimune.length) {
var nimuneGroupDiv = block.find(".wiktku-dfn-nimune-group");
var nimuneList = nimuneGroupDiv.find("ol.wiktku-dfn-nimune-list");
var buildFn = nimuneGroupDiv.data("buildNimuneLi");
nimuneList.empty();
$.each(sense.nimune, function (_, n) {
var text = typeof n === "object" ? (n.text || "") : n;
if (!text) return;
var li = buildFn ? buildFn() : $("<li class='wiktku-dfn-nimune-li'></li>");
li.find(".wiktku-dfn-nimune-text").val(text).each(function () { highlightLinebreak(this); });
if (n.tr) li.find(".wiktku-dfn-nimune-tr").val(n.tr);
if (n.t) li.find(".wiktku-dfn-nimune-t").val(n.t);
nimuneList.append(li);
});
// Always leave a blank trailing item.
if (buildFn) nimuneList.append(buildFn());
}
// Restore jêder entries — accepts current array shape or a legacy
// single object (older saved sections) for backwards compat.
var jederArr = $.isArray(sense.jeder) ? sense.jeder : (sense.jeder ? [sense.jeder] : []);
if (jederArr.length) {
var jederGroupDiv = block.find(".wiktku-dfn-jeder-group");
var jederList = jederGroupDiv.find("ol.wiktku-dfn-jeder-list");
var buildJederFn = jederGroupDiv.data("buildJederLi");
jederList.empty();
$.each(jederArr, function (_, j) {
if (!j || !j.quote) return;
var li = buildJederFn ? buildJederFn() : $("<li class='wiktku-dfn-jeder-li'></li>");
li.find(".wiktku-dfn-nimune-quote").val(j.quote).each(function () { highlightLinebreak(this); });
if (j.quoteTr) li.find(".wiktku-dfn-nimune-quote-tr").val(j.quoteTr);
if (j.quoteT) li.find(".wiktku-dfn-nimune-quote-t").val(j.quoteT);
if (j.jederManual) {
var manualSel = li.find(".wiktku-dfn-quote-src-sel");
manualSel.val("__manual__").trigger("change");
li.find(".wiktku-dfn-quote-src-manual").val(j.jederManual);
} else if (j.jederCatTpl) {
// Legacy format from before the şablon search switched rows to
// manual mode directly — convert it the same way now, so it's
// editable like any other free-form source.
var catSelEl = li.find(".wiktku-dfn-quote-src-sel");
catSelEl.val("__manual__").trigger("change");
li.find(".wiktku-dfn-quote-src-manual").val("{{" + j.jederCatTpl + "}}");
} else if (j.jederTpl) {
var srcSel = li.find(".wiktku-dfn-quote-src-sel");
srcSel.val(j.jederTpl).trigger("change");
if (j.jêderFields) {
$.each(j.jêderFields, function (key, val) {
li.find(".wiktku-dfn-quote-src-input[data-field-key='" + key + "']").val(val);
});
}
}
jederList.append(li);
});
// Always leave a blank trailing item, same as Nimûne.
if (buildJederFn) jederList.append(buildJederFn());
}
});
}
// Snapshots simple (non-dfn) per-section steps from the DOM into obj.
function saveCurrentSection() {
var snap = {};
$.each(PER_SECTION_STEP_IDS, function (_, id) {
if (id === "dfn") {
snap.dfn = snapshotDfn();
return;
}
if (id === "etym") {
snap.etym = $.trim($("#wiktku-start-etym .wiktku-etym-text").val());
return;
}
if (id === "cavkani") {
snap.cavkani = $.trim($("#wiktku-start-cavkani .wiktku-cavkani-text").val());
return;
}
if (id === "posparams") {
snap.posparams = $.trim($("#wiktku-start-posparams .wiktku-posparams-text").val());
return;
}
if (id === "resim") {
// One entry per row, including blank ones, so a mid-edit draft
// (e.g. a filename typed but no caption yet) survives a cache
// restore instead of being silently dropped.
snap.resim = $("#wiktku-start-resim li.wiktku-resim-item").map(function () {
return {
file: $.trim($(this).find(".wiktku-resim-file").val()),
caption: $.trim($(this).find(".wiktku-resim-caption").val()),
alt: $.trim($(this).find(".wiktku-resim-alt").val())
};
}).get();
return;
}
var step = steps[id];
if (!step) return;
var stepDiv = $("#wiktku-start-" + id);
if (id === "trans") {
snap.trans = steps.trans.getTranslations(stepDiv);
return;
}
if (id === "zarava") {
snap.zarava = steps.zarava.getTranslations(stepDiv);
return;
}
if (id === "dunde") {
snap.dunde = steps.dunde.getRows(stepDiv);
return;
}
// Generic: read all step fields.
var fields = stepDiv.find(".wiktku-start-step-field");
if (step.multiple) {
snap[id] = fields.map(function () { return $(this).val(); }).get();
} else {
snap[id] = fields.val();
}
});
// Item 3: which "Beşên din" sub-sections this section has already
// opened via the picker — per-section, like everything else here.
snap.openedOtherSections = $.extend({}, openedOtherSections);
sections[activeSection] = snap;
}
// Restores a previously saved snapshot into the form DOM.
function restoreSection(snap) {
$.each(PER_SECTION_STEP_IDS, function (_, id) {
if (id === "dfn") {
restoreDfn(snap.dfn || []);
return;
}
if (id === "etym") {
$("#wiktku-start-etym .wiktku-etym-wrap").remove();
steps.etym.build($("#wiktku-start-etym"));
$("#wiktku-start-etym .wiktku-etym-text").val(snap.etym || "");
return;
}
if (id === "cavkani") {
$("#wiktku-start-cavkani .wiktku-cavkani-wrap").remove();
steps.cavkani.build($("#wiktku-start-cavkani"));
$("#wiktku-start-cavkani .wiktku-cavkani-text").val(snap.cavkani || "");
return;
}
if (id === "posparams") {
var ppDiv = $("#wiktku-start-posparams");
ppDiv.find(".wiktku-posparams-wrap").remove();
steps.posparams.build(ppDiv);
var savedTa = snap.posparams || "";
ppDiv.find(".wiktku-posparams-text").val(savedTa);
// Re-parse saved textarea to restore helper widget states.
if (savedTa) {
var cMatch = savedTa.match(/\|c=([^|}\s]+)/);
var jMatch = savedTa.match(/\|j=([^|}\s]+)/);
var trMatch = savedTa.match(/\|tr=([^|}\s]+)/);
// Write into the shared hidden field (not the visible
// select, which has no <option>s yet) — syncHelpers()
// below reads it back to restore the dropdown once the
// gender/number options for this language are populated.
if (cMatch) $("#wiktku-start-cinsiyet-field").val(cMatch[1]);
if (jMatch) $("#wiktku-start-jimar-field").val(jMatch[1]);
if (trMatch) ppDiv.find(".wiktku-posparams-field[data-pp-key='tr']").val(trMatch[1]);
// For lêker, c= holds the verb-type code instead of a
// gender — split it back across the two dropdowns it is
// now assembled from ("x-gh" → form "x" + base "gh").
if (cMatch && /^lêker/.test(snap.pos || "")) {
var lekturParts = /^(?:([xphb])-)?(n?gh)$/.exec(cMatch[1]);
if (lekturParts) {
ppDiv.find(".wiktku-posparams-lektur-sel").val(lekturParts[2]);
ppDiv.find(".wiktku-posparams-lekturform-sel").val(lekturParts[1] || "");
}
}
// Restore checked optional params. "form" is stored as
// "erê" rather than "1" (see rebuildTa), so it needs its
// own check here.
ppDiv.find(".wiktku-posparams-opt-panel input[type='checkbox']").each(function () {
var key = $(this).val();
var expected = key === "form" ? "erê" : "1";
$(this).prop("checked", savedTa.indexOf("|" + key + "=" + expected) !== -1);
});
}
steps.posparams.syncHelpers(ppDiv);
return;
}
if (id === "resim") {
var resimDiv = $("#wiktku-start-resim");
resimDiv.find(".wiktku-resim-wrap").remove();
steps.resim.build(resimDiv);
// Accept both the new array-of-rows format and the older
// single {file, caption} object saved before multi-image
// support existed.
var resimSnap = snap.resim;
var rows = $.isArray(resimSnap) ? resimSnap : (resimSnap ? [resimSnap] : []);
if (rows.length) {
var list = resimDiv.find("ol.wiktku-resim-list");
list.empty();
$.each(rows, function (_, r) {
var item = steps.resim.buildItem(resimDiv);
item.find(".wiktku-resim-file").val(r.file || "");
item.find(".wiktku-resim-caption").val(r.caption || "");
item.find(".wiktku-resim-alt").val(r.alt || "");
list.append(item);
});
// Always keep a blank trailing row, same as Nimûne/Dûnde.
var lastItem = list.children("li.wiktku-resim-item").last();
if ($.trim(lastItem.find(".wiktku-resim-file").val())) {
list.append(steps.resim.buildItem(resimDiv));
}
}
return;
}
if (id === "trans") {
// Rebuild trans groups (dfn must already be restored by this
// point in the $.each loop, so glossList() reflects it).
var transDiv = $("#wiktku-start-trans");
transDiv.find(".wiktku-trans-group").remove();
steps.trans.build(transDiv);
var groupsSnap = snap.trans || [];
$.each(groupsSnap, function (gi, rows) {
var group = transDiv.find(".wiktku-trans-group[data-gloss-pos='" + gi + "']");
if (!group.length) return; // gloss no longer exists — drop its rows
var list = group.find("ul.wiktku-trans-list");
$.each(rows, function (j, row) {
var lang = row[0], words = row[1];
var lastRow = list.find("li.wiktku-trans-row").last();
lastRow.find("select").val(lang).trigger("change");
var wordList = lastRow.find("ul.wiktku-trans-words");
$.each(words, function (k, word) {
var wordItems = wordList.find("li");
if (k < wordItems.length) {
wordItems.eq(k).find("textarea").val(word);
} else {
// .val() below doesn't fire "input", so the normal
// auto-grow never runs — append a matching item
// ourselves instead of silently dropping the word.
var extraInput = steps.trans.makeWordInput();
wordList.append($("<li></li>").append(extraInput));
extraInput.val(word);
}
});
// Leave one trailing empty field so the row can still grow
// when the user types, matching a freshly-built row.
if ($.trim(wordList.children("li").last().find("textarea").val())) {
wordList.append($("<li></li>").append(steps.trans.makeWordInput()));
}
});
});
return;
}
if (id === "zarava") {
// Rebuild zarava groups (dfn must already be restored by this
// point in the $.each loop, so glossList() reflects it).
var zaravaDiv = $("#wiktku-start-zarava");
zaravaDiv.find(".wiktku-zarava-group").remove();
steps.zarava.build(zaravaDiv);
var zaravaGroupsSnap = snap.zarava || [];
$.each(zaravaGroupsSnap, function (gi, rows) {
var group = zaravaDiv.find(".wiktku-zarava-group[data-gloss-pos='" + gi + "']");
if (!group.length) return; // gloss no longer exists — drop its rows
var list = group.find("ul.wiktku-zarava-list");
$.each(rows, function (j, row) {
var lang = row[0], words = row[1];
var lastRow = list.find("li.wiktku-zarava-row").last();
lastRow.find("select").val(lang).trigger("change");
var wordList = lastRow.find("ul.wiktku-zarava-words");
$.each(words, function (k, word) {
var wordItems = wordList.find("li");
if (k < wordItems.length) {
wordItems.eq(k).find("textarea").val(word);
} else {
var extraInput = steps.zarava.makeWordInput();
wordList.append($("<li></li>").append(extraInput));
extraInput.val(word);
}
});
if ($.trim(wordList.children("li").last().find("textarea").val())) {
wordList.append($("<li></li>").append(steps.zarava.makeWordInput()));
}
});
});
return;
}
if (id === "dunde") {
// Rebuild dunde rows.
var dundeDiv = $("#wiktku-start-dunde");
dundeDiv.find("ul.wiktku-dunde-list").remove();
steps.dunde.build(dundeDiv);
var dundeRows = snap.dunde || [];
$.each(dundeRows, function (i, row) {
var lang = row[0], words = row[1];
var list = dundeDiv.find("ul.wiktku-dunde-list");
var lastRow = list.find("li.wiktku-dunde-row").last();
lastRow.find("select").val(lang).trigger("change");
var wordList = lastRow.find("ul.wiktku-dunde-words");
$.each(words, function (j, word) {
var wordItems = wordList.find("li");
if (j < wordItems.length) {
wordItems.eq(j).find("textarea").val(word);
} else {
// .val() below doesn't fire "input", so the normal
// auto-grow never runs — append a matching item
// ourselves instead of silently dropping the word.
var extraInput = steps.dunde.makeWordInput();
wordList.append($("<li></li>").append(extraInput));
extraInput.val(word);
}
});
// Leave one trailing empty field so the row can still grow
// when the user types, matching a freshly-built row.
if ($.trim(wordList.children("li").last().find("textarea").val())) {
wordList.append($("<li></li>").append(steps.dunde.makeWordInput()));
}
});
return;
}
var step = steps[id];
if (!step) return;
var stepDiv = $("#wiktku-start-" + id);
var fields = stepDiv.find(".wiktku-start-step-field");
var val = snap[id];
if (val === undefined || val === null) return;
if (step.multiple) {
var arr = val;
fields.each(function (i) {
if (i < arr.length) $(this).val(arr[i]);
});
} else {
fields.val(val);
}
// Tell the pickers about the programmatic value change.
fields.filter("select").trigger("wiktku:refresh");
});
// Item 3: restore which "Beşên din" sub-sections were already opened
// for this section, then seed in anything the DOM restore above just
// filled in but that wasn't marked opened yet (e.g. an older cache
// saved before this existed).
openedOtherSections = $.extend({}, snap.openedOtherSections || {});
seedOpenedFromContent();
renderBesenDinPicker();
}
function getWikitextForCurrentSection(callback) {
var values = getValues();
var entry = steps.pos.output(values);
// Bilêvkirin now nests under the POS section (Ghybu, 14 Tebax 2026)
// instead of printing once, shared, above every POS section — see
// steps.pron.output's own comment for the header-level change this
// pairs with. steps.pron.output() reads the shared #wiktku-start-pron
// textarea directly (not the "values" arg), and that field isn't
// per-section, so calling it once per section prints the same text
// under each POS — the intended effect of nesting it "under Cureyê
// peyvê" rather than once under Ziman.
entry += steps.pron.output(values);
steps.dfn.getOutput(values, function (output) {
entry += output;
entry += steps.tewandin.output(values);
entry += steps.bikaranin.output(values);
entry += steps.alfabeyendin.output(values);
entry += steps.formalt.output(values);
entry += steps.hevmane.output(values);
entry += steps.dijmane.output(values);
entry += steps.jornav.output(values);
entry += steps.jernav.output(values);
entry += steps.je.output(values);
entry += steps.tekildar.output(values);
entry += steps.etym.output(values);
entry += steps.dunde.output(values);
entry += steps.binereherwiha.output(values);
entry += steps.zarava.output(values);
entry += steps.trans.output(values);
entry += steps.cavkani.output(values);
entry += steps.xwendin.output(values);
callback(entry, values);
});
}
function getWikitextAllSections(callback) {
saveCurrentSection();
var results = new Array(sections.length);
var sharedValues = getValues(); // lang/pron are shared
function processSection(i) {
// Each hop through here can be reached asynchronously: the dfn
// step waits on mw.loader.using("ext.gadget.linkify") before
// calling back, so from that point on the submit handler's own
// try/catch is no longer on the stack. Guard every hop instead,
// or a throw after linkify loads vanishes into an unhandled
// rejection and the form just sits there looking busy.
try {
if (i >= sections.length) {
// All done — restore original active section.
restoreSection(sections[activeSection]);
refresh();
callback(results, sharedValues);
return;
}
restoreSection(sections[i]);
refresh();
getWikitextForCurrentSection(function (sectionText) {
results[i] = sectionText;
processSection(i + 1);
});
} catch (e) {
if (typeof onSubmitError === "function") onSubmitError(e);
else throw e;
}
}
processSection(0);
}
// Assembles wikitext for all sections plus the shared lang header.
// pron used to be prepended here too (shared, above every section) —
// it now nests inside each section instead, via getWikitextForCurrentSection.
function getWikitext(callback) {
getWikitextAllSections(function (sectionTexts, sharedValues) {
var bnrh = steps.bnrh.output(sharedValues);
var entry = steps.lang.output(sharedValues);
entry += sectionTexts.join("\n");
// bnr-h goes before the language section — only prepended when
// generating fresh wikitext (not addLangMode, which handles it separately).
if (!addLangMode && bnrh) entry = bnrh + entry;
// Edit summary uses section 0's values. Read from the saved snapshot
// (not the live DOM) so it doesn't mix section 0's pos with whichever
// section happens to be active/restored at this point.
var dfnSenses = (sections[0] && sections[0].dfn) || [];
var dfnSummary = dfnSenses.map(function (s) {
if (s.mane) return s.mane;
// Template sense (e.g. {{guharto|ku|somepage}}) — same
// construction as the tplCall built in getOutput, so the
// summary shows what actually gets written to the entry
// instead of going blank.
if (s.tpl && s.tplTitle) {
return s.tplNoLang
? "{{" + s.tpl + "|" + s.tplTitle + "}}"
: "{{" + s.tpl + "|" + sharedValues.lang + "|" + s.tplTitle + "}}";
}
return "";
}).filter(Boolean).join("; ");
var summary = "([[Mediawiki:Gadget-start.js|WF:NÛ]] v.2.0) +" +
sharedValues.lang + ":" + sections[0].pos + ":" + dfnSummary;
var summaryField = document.getElementById("wpSummary");
if (addLangMode && summaryField.value) {
summary = summaryField.value + " " + summary;
}
summaryField.value = summary;
callback(entry);
});
}
var continueBtn;
// Set by build() to its submitFailed(). Lives out here because the
// wikitext-assembly functions below are outside build()'s closure but
// still need a way to report a failure to the person rather than dying
// silently in the console.
var onSubmitError = null;
// Item 7: whether Mane/Bi zaravayên din/Werger has anything in it —
// kept outside refresh() so the click handler (defined separately,
// where continueBtn is built) can read the latest value.
var wiktkuContentGateOk = true;
function getValuesForStep(stepId) {
var fields = $("#wiktku-start-" + stepId + " .wiktku-start-step-field");
var step = steps[stepId];
if (step.keys) {
var values = {};
fields.each(function (i, field) {
var key = $(field).prevAll(".wiktku-start-step-keyfield").val();
if (key) values[key] = $(field).val();
});
return values;
}
else if (step.multiple) {
return fields.map(function () {
return $(this).val();
}).get();
}
return fields.val();
}
function getValues() {
var values = {};
$.each(steps, function (stepId) {
values[stepId] = getValuesForStep(stepId);
});
return values;
}
function populateMenus(inputs, choices, disabledValues, placeholderText) {
if (!disabledValues) disabledValues = {};
var vals = inputs.map(function (i, input) {
return $(input).val();
});
inputs.empty();
inputs.append($("<option></option>").text(placeholderText || ""));
$.each(choices, function (j, choice) {
// Append the language code in parentheses so that typing a code
// (e.g. "ku") in the search box still finds the language name.
var displayText = capitalize(choice.label);
if (choice.sortKey !== undefined) {
// This is a language choice {code, label, sortKey} — show code.
displayText = capitalize(choice.label) + " (" + choice.code + ")";
}
var option = $(mw.html.element("option", {
value: choice.code }, displayText));
if (disabledValues[choice.code]) option.prop("disabled", true);
inputs.append(option);
});
inputs.val(function (i) {
return vals[i];
});
}
// Keys to disable for a key menu: already-taken or explicitly disabled.
function getDisabledKeys(step) {
var occupiedKeys = {};
$("#wiktku-start-" + step.id + " .wiktku-start-step-keyfield").each(function () {
occupiedKeys[$(this).val()] = true;
});
if (step.disabledKeys) $.extend(occupiedKeys, step.disabledKeys);
return occupiedKeys;
}
function buildKeyInput(step) {
if (!step.keys) return undefined;
var input = $(mw.html.element("select", {
"class": "wiktku-start-step-keyfield wiktku-start-narrow" }));
input.attr("data-placeholder", "Hilbijêre " + step.keyName);
populateMenus(input, step.keys, getDisabledKeys(step));
// Keep the key menus mutually exclusive: whatever one row selects is
// disabled in every other row. Recomputed from the DOM on each change.
input.on("change", function () {
var all = $("#wiktku-start-" + step.id + " .wiktku-start-step-keyfield");
var taken = {};
all.each(function () {
var v = $(this).val();
if (v) taken[v] = true;
});
all.not(this).each(function () {
var self = $(this), own = self.val();
self.find("option").each(function () {
var code = $(this).val();
if (code) $(this).prop("disabled", !!taken[code] && code !== own);
});
self.trigger("wiktku:refresh");
});
});
// Return the wrapper; the select lives inside it and still fires change.
return wrapNativeSelect(input);
}
// Adds another text field to the list if the last one now has text.
function refreshForTextField(currentInput, step) {
currentInput = $(currentInput);
var value = currentInput.val();
var item = currentInput.parent();
if (value && !item.next("li").length) {
var nextInput = $("<textarea></textarea>")
.attr("name", "wiktku-field-" + $.now() + "-" + Math.random().toString(36).substr(2, 9))
.attr("class", currentInput.attr("class"))
.attr("rows", currentInput.attr("rows") || 1);
if (step.placeholder) {
nextInput.attr("placeholder", typeof step.placeholder === "function" ? step.placeholder() : step.placeholder);
}
nextInput.on("input", function (evt) {
refreshForTextField(evt.target, step);
});
var nextKeyInput = buildKeyInput(step);
var nextItem = step.modifiers
? makeModifierLi(nextInput).prepend(nextKeyInput || "")
: $("<li></li>").append(nextKeyInput).append(nextInput);
item.parent().append(nextItem);
if (nextKeyInput) initSelects(nextItem);
}
var canContinue = !continueBtn.isDisabled();
if ((value && !canContinue) || (!value && canContinue)) {
refresh(step);
}
}
function prepareInput(input, step) {
if (!input) return;
if (step.required) input.prop('required', true);
input.change(step, refresh);
}
// Shows/hides steps based on whether their prerequisites are met, and
// updates placeholders where applicable.
function refresh(evt) {
var values = getValues();
var changedStep = evt && evt.data;
var canContinue = true;
// Re-filter template options in every sense block whenever lang changes.
$("#wiktku-start-dfn .wiktku-dfn-tpl-select").each(function () {
var fn = $(this).data("updateOptions");
if (typeof fn === "function") fn();
});
// Re-filter pronunciation and etymology template dropdowns when language changes.
steps.pron.refreshTplSelect();
steps.etym.refreshTplSelect();
steps.cavkani.refreshTplSelect();
// Re-render any step's question label that depends on current values
// (e.g. dfn's Werger-section reminder, which only applies to ku).
$.each(steps, function (stepId, step) {
if (typeof step.question_fmt === "function") {
$("#wiktku-start-" + stepId + " .wiktku-start-step-question")
.text(step.question_fmt(values));
}
});
// Sync every sense block's mane-box mode (plain mane vs tercime+îzah)
// to the current language, in case lang changes after blocks exist.
$("#wiktku-start-dfn li.wiktku-dfn-sense").each(function () {
var updateMane = $(this).data("updateManeMode");
if (updateMane) updateMane();
});
// Sync tr/t sub-fields in every nimûne item to the current language.
// tr shown when language needs transliteration; t shown when lang !== "ku".
(function () {
var lang = values.lang || "";
var showTr = needsTransliteration(lang);
var showT = lang && lang !== "ku";
$("#wiktku-start-dfn .wiktku-dfn-nimune-list li.wiktku-dfn-nimune-li").each(function () {
var li = $(this);
// Ensure the sub-wrapper exists when we need it.
var subWrap = li.find(".wiktku-dfn-nimune-sub");
// tr field
var trTa = li.find(".wiktku-dfn-nimune-tr");
if (showTr && !trTa.length) {
if (!subWrap.length) {
subWrap = $("<div></div>").addClass("wiktku-dfn-nimune-sub");
li.append(subWrap);
}
trTa = $("<textarea></textarea>")
.attr("name", "wiktku-dfn-nimune-tr-" + $.now() + "-" + Math.random().toString(36).substr(2, 9))
.attr("rows", 5)
.attr("class", "wiktku-dfn-subfield wiktku-dfn-nimune-tr")
.attr("placeholder", "Transliterasyon…");
subWrap.prepend(trTa);
} else if (!showTr && trTa.length) {
trTa.remove();
}
// t field
var tTa = li.find(".wiktku-dfn-nimune-t");
if (showT && !tTa.length) {
if (!subWrap.length) {
subWrap = $("<div></div>").addClass("wiktku-dfn-nimune-sub");
li.append(subWrap);
}
tTa = $("<textarea></textarea>")
.attr("name", "wiktku-dfn-nimune-t-" + $.now() + "-" + Math.random().toString(36).substr(2, 9))
.attr("rows", 5)
.attr("class", "wiktku-dfn-subfield wiktku-dfn-nimune-t")
.attr("placeholder", "Tercimeya nimûneyê bi kurmancî…");
subWrap.append(tTa);
} else if (!showT && tTa.length) {
tTa.remove();
}
// Remove the wrapper if it ended up empty.
subWrap = li.find(".wiktku-dfn-nimune-sub");
if (subWrap.length && !subWrap.children().length) subWrap.remove();
});
}());
// Re-sync the "<label> bi <ziman>…" placeholder on every always-visible
// sub-field list (etîket, kategorî, hevmane, …), since the language may
// not have been chosen yet when these lists were first built, or may
// have changed since.
$("#wiktku-start-dfn .wiktku-dfn-sublist").each(function () {
var upd = $(this).data("updatePlaceholders");
if (typeof upd === "function") upd();
});
// Same idea for word-list steps (jê, têkildar, binêre herwiha, …)
// whose placeholder is a function of the current language.
$.each(steps, function (stepId, step) {
if (typeof step.placeholder === "function") {
$("#wiktku-start-" + stepId + " textarea.wiktku-start-step-field")
.attr("placeholder", step.placeholder());
}
});
// Sync tr/t sub-fields in every jêder citation to the current language.
// tr shown when language needs transliteration; t shown when lang !== "ku".
(function () {
var lang = values.lang || "";
var showTr = needsTransliteration(lang);
var showT = lang && lang !== "ku";
$("#wiktku-start-dfn .wiktku-dfn-jeder-list li.wiktku-dfn-jeder-li").each(function () {
var li = $(this);
// Ensure the sub-wrapper exists when we need it. It must sit right
// after the quote textarea and before the source selector.
var subWrap = li.find(".wiktku-dfn-quote-sub");
// tr field
var trTa = li.find(".wiktku-dfn-nimune-quote-tr");
if (showTr && !trTa.length) {
if (!subWrap.length) {
subWrap = $("<div></div>").addClass("wiktku-dfn-quote-sub");
// Insert after the quote textarea's resize-wrap (if the manual
// resize handle has already been attached to it), not after the
// bare textarea -- otherwise this lands *inside* that wrap,
// between the textarea and its own grip, breaking jêgirtin's
// handle and nesting the tr/t boxes inside it.
var quoteTa = li.find(".wiktku-dfn-nimune-quote");
var quoteResizeWrap = quoteTa.closest(".wiktku-resize-wrap");
(quoteResizeWrap.length ? quoteResizeWrap : quoteTa).after(subWrap);
}
trTa = $("<textarea></textarea>")
.attr("name", "wiktku-dfn-nimune-quote-tr-" + $.now() + "-" + Math.random().toString(36).substr(2, 9))
.attr("rows", 2)
.attr("class", "wiktku-dfn-subfield wiktku-dfn-nimune-quote-tr")
.attr("placeholder", "Transliterasyona jêgirtinê…");
subWrap.prepend(trTa);
} else if (!showTr && trTa.length) {
trTa.remove();
}
// t field
var tTa = li.find(".wiktku-dfn-nimune-quote-t");
if (showT && !tTa.length) {
if (!subWrap.length) {
subWrap = $("<div></div>").addClass("wiktku-dfn-quote-sub");
// See the tr-field branch above for why this targets the
// resize-wrap instead of the bare textarea.
var quoteTa2 = li.find(".wiktku-dfn-nimune-quote");
var quoteResizeWrap2 = quoteTa2.closest(".wiktku-resize-wrap");
(quoteResizeWrap2.length ? quoteResizeWrap2 : quoteTa2).after(subWrap);
}
tTa = $("<textarea></textarea>")
.attr("name", "wiktku-dfn-nimune-quote-t-" + $.now() + "-" + Math.random().toString(36).substr(2, 9))
.attr("rows", 2)
.attr("class", "wiktku-dfn-subfield wiktku-dfn-nimune-quote-t")
.attr("placeholder", "Tercimeya jêgirtinê bi kurmancî…");
subWrap.append(tTa);
} else if (!showT && tTa.length) {
tTa.remove();
}
// Remove the wrapper if it ended up empty.
subWrap = li.find(".wiktku-dfn-quote-sub");
if (subWrap.length && !subWrap.children().length) subWrap.remove();
});
}());
$.each(steps, function (stepId, step) {
var groupIdx = stepIdToGroup[stepId];
var hiddenByTab = (groupIdx !== undefined && groupIdx !== activeGroup) ||
// Beşên din picker (point 3): stays hidden even while its tab
// is active until explicitly opened from the dropdown.
(BESENDIN_SET[stepId] && !openedOtherSections[stepId]);
if (hiddenByTab || (typeof(step.visible) === "function" && !step.visible(values))) {
$("#wiktku-start-" + stepId).hide();
}
else {
var stepDiv = $("#wiktku-start-" + stepId);
if (changedStep !== step && typeof(step.build) === "function") {
prepareInput(step.build(stepDiv, values), step);
}
// After build, sync the posparams helper widgets whenever pos or lang changes.
if (step.id === "posparams" && typeof step.syncHelpers === "function") {
step.syncHelpers(stepDiv);
}
var input = stepDiv.find(".wiktku-start-step-field");
if (typeof(step.example) === "function") {
// .find() above already reaches nested fields (e.g. the dfn
// step's mane textareas inside each sense block), so one
// assignment covers every step; dfn keeps its own fallback.
var exampleText = step.example(values) || (step.id === "dfn" ? "Mane…" : "");
input.attr("placeholder", exampleText);
}
stepDiv.slideDown();
}
if (step.required &&
(values[stepId] === "" ||
(step.multiple && values[stepId].join("") === ""))) {
canContinue = false;
}
});
$("#wiktku-group-tabs").toggle(!!values.pos);
var besenDinActive = activeGroup === BESENDIN_GROUP_IDX;
$("#wiktku-besendin-picker").toggle(besenDinActive);
// The option list is filtered by each step's visible(), which depends
// on lang/pos — so it has to be rebuilt when those change, not just
// when a section is opened. Safe to call from here: rendering the
// picker doesn't itself call refresh(), only picking an option does.
if (besenDinActive) renderBesenDinPicker();
updateGroupTabIndicators(values);
continueBtn.setDisabled(!canContinue);
// Soft gate (item 7): stays a real, clickable OOUI button — a hard
// setDisabled(true) here would swallow the click entirely, and then
// there'd be no way to tell the person *why* nothing happened. The
// CSS-only "looks disabled" class lets the click handler still run
// and show wiktkuNotify's explanation.
wiktkuContentGateOk = !canContinue || hasMinRequiredContent(values);
continueBtn.$element.toggleClass("wiktku-btn-soft-disabled", !wiktkuContentGateOk);
}
function destroy() {
if (autosaveDebounceTimer) clearTimeout(autosaveDebounceTimer);
if (autosaveInterval) clearInterval(autosaveInterval);
formDirty = false;
$(window).off("beforeunload.wiktkuUnsaved");
$("#wiktku-start-form, .noafterwizard").slideUp(function () {
$(this).remove();
});
$(".noarticletext .nowizard").slideDown();
// #editform was kept laid-out but off-screen (see build()) instead of
// display:none, precisely so the editor never had to size itself
// against a zero-width/height box. Just bring it back on-screen —
// no slideDown needed since it was never actually collapsed.
$("#editform").removeClass("wiktku-offscreen");
// Belt-and-braces: if WikiEditor/CodeMirror/mobile's auto-grow still
// cached a stale size from some earlier point, nudge them to
// recalculate now that the box is genuinely visible.
$(window).trigger("resize");
if (window.CodeMirror) {
var cm = $("#wpTextbox1").data("CodeMirror") || $("#wpTextbox1").data("cmInstance");
if (cm && typeof cm.refresh === "function") cm.refresh();
}
$("#ca-edit").removeClass("selected");
$("#ca-wiktku-nowizard").addClass("selected");
}
// Priority order for Kurdish dialects and navz.
// Codes listed here come before all other languages; unlisted codes
// are sorted alphabetically by their display name via localeCompare.
var LANG_PRIORITY = ["navz", "ku", "hac", "sdh", "lki", "ckb", "zza"];
// Inserts a new "== {{ziman|code}} ==" section at the correct sorted
// position: navz, then ku/hac/sdh/lki/ckb/zza, then alphabetical by name.
function insertNewLangSection(existing, wikitext) {
var newCodeMatch = wikitext.match(new RegExp("^" + langHeaderSource("[^}]+")));
var newCode = newCodeMatch ? newCodeMatch[1] : "";
var sections = [];
var preamble = "";
var anyHeaderSrc = langHeaderSource("[^}]+");
var firstMatch = new RegExp("^" + anyHeaderSrc, "m").exec(existing);
if (!firstMatch) {
// No existing lang sections — just write the new section.
// Add \n\n only when there is real non-whitespace content above.
var trimmed = existing.replace(/\s+$/, "");
return trimmed ? trimmed + "\n\n" + wikitext : wikitext;
}
// Everything before the first == {{ziman|...}} == is the preamble.
var firstSectionStart = firstMatch.index;
// Walk back to the start of that line.
var lineStart = existing.lastIndexOf("\n", firstSectionStart - 1);
var preambleEnd = lineStart !== -1 ? lineStart + 1 : 0;
preamble = existing.slice(0, preambleEnd);
// Parse each language section: header line + everything until the next header.
var body = existing.slice(preambleEnd);
// (?![\s\S]) matches only true end-of-string, since a bare "$" with
// /m would stop at the section's first line break instead.
var langSectionRe = new RegExp(
"^(" + anyHeaderSrc + "\\n?)([\\s\\S]*?)(?=\\n" + anyHeaderSrc + "|(?![\\s\\S]))",
"gm"
);
var m;
while ((m = langSectionRe.exec(body)) !== null) {
sections.push({
code: m[2],
content: m[0] // full text of this section including header
});
}
// Determine sort rank: priority list first (by index), then alphabetical.
function getLangName(code) {
var entry = langsByCode[code];
return entry ? entry.label : code;
}
function sortRank(code) {
var idx = LANG_PRIORITY.indexOf(code);
return idx !== -1 ? idx : LANG_PRIORITY.length;
}
function compareLangs(a, b) {
var ra = sortRank(a), rb = sortRank(b);
if (ra !== rb) return ra - rb;
// Both are outside priority list — sort by display name.
return getLangName(a).localeCompare(getLangName(b), userLang);
}
// Insert the new section into the sorted list.
var newSection = { code: newCode, content: wikitext };
var inserted = false;
for (var i = 0; i < sections.length; i++) {
if (compareLangs(newCode, sections[i].code) < 0) {
sections.splice(i, 0, newSection);
inserted = true;
break;
}
}
if (!inserted) sections.push(newSection);
// Re-join: preamble + sections, each separated by exactly \n\n.
// Trim trailing whitespace off each section's content first so we
// control the spacing precisely.
var joined = sections.map(function (s) {
return s.content.replace(/\s+$/, "");
}).join("\n\n");
// Only add a separator after the preamble when it has real content.
var preambleTrimmed = preamble.replace(/\s+$/, "");
var prefix = preambleTrimmed ? preambleTrimmed + "\n\n" : "";
return prefix + joined + "\n";
}
function build() {
$(".nowizard, .nowizard .noafterwizard").hide();
var callToAction = $("#wiktku-calltoaction");
var origCallToActionText = callToAction.text();
$(mw.util.addPortletLink("p-views", "#", "Edîtora çavkaniyê veke",
"ca-wiktku-nowizard", "Vê rûpelê bi edîtora çavkaniyê çêke",
undefined, "#ca-watch")).click(function (evt) {
evt.preventDefault();
callToAction.text(origCallToActionText);
destroy();
});
if (callToAction.length) {
callToAction.text(origCallToActionText +
" Forma li jêr ji bo çêkirina madeyeke nû bi kar bîne.");
}
var startForm = $("<form id='wiktku-start-form'></form>");
var clearPageCheck = null;
if (addLangMode) {
startForm.append($("<p class='wiktku-addlang-notice'></p>").html(
"Bi vê formê tu yê zimanekî nû li rûpelê îlawe bikî. Eger ev ziman jixwe hebe, beşa nû li dawiya vî zimanî dê were îlawekirin. " +
"Ji kerema xwe netîceya dawî kontrol bike, eger problemek derkeve, li <a href='" +
mw.util.getUrl('Mediawiki talk:Gadget-start.js') +
"'>nîqaşa vê amûrê</a> problemê ragihîne."
));
clearPageCheck = $("<input type='checkbox' id='wiktku-clear-page-check'>");
var clearPageLabel = $("<label for='wiktku-clear-page-check'></label>")
.text(" Muhtewaya rûpelê paqij bike (her tiştî jê bibe û rûpelê ji nû ve binivîse)");
startForm.append(
$("<p class='wiktku-addlang-notice'></p>")
.append(clearPageCheck)
.append(clearPageLabel)
);
// Re-evaluate step visibility (e.g. the pron step) whenever this
// is toggled, since it changes what counts as "existing content".
clearPageCheck.on("change", function () {
refresh();
});
}
var spinner;
// Tab bar for switching between POS sections.
var sectionTabsDiv = $("<div id='wiktku-section-tabs'></div>");
// Tab bar for switching between step-groups (topics) within a section.
// renderGroupTabs()/updateGroupTabIndicators() (which populate and
// maintain it) live outside build() — see near "var activeSection".
var groupTabsDiv = $("<div id='wiktku-group-tabs'></div>");
// Wikihez, 14 Tebax 2026 (item 3): "Beşên din" picker — sits right under
// the group tab bar, only shown while that tab is active (toggled in
// refresh(), see BESENDIN_GROUP_IDX); renderBesenDinPicker() fills it.
var besenDinPickerDiv = $("<div id='wiktku-besendin-picker' class='wiktku-besendin-picker'></div>");
/** Puts the form back in a usable state after a failed submit and
* says what happened. Without this the button stays disabled and
* the spinner spins forever on any exception — the person is left
* staring at a form that looks busy but is dead, with the reason
* visible only in the browser console. */
function submitFailed(err) {
spinner.hide();
continueBtn.setDisabled(false);
continueBtn.$element.removeClass("wiktku-btn-sending");
var detail = (err && (err.message || err.toString())) || "sedem nediyar";
mw.notify(
"Şandin bi ser neket: " + detail +
" — tiştê ku te nivîsî winda nebûye. Heke ev dubare bibe, " +
"bi 'Edîtora çavkaniyê veke' berdewam bike.",
{ type: "error", tag: "wiktku-submit", autoHide: false }
);
// Deliberately console.error as well: the notification is for the
// person, this is for whoever they report the bug to.
if (window.console && console.error) console.error("[wiktku] submit failed", err);
}
onSubmitError = submitFailed;
startForm.submit(function (evt) {
evt.preventDefault();
continueBtn.setDisabled(true);
continueBtn.$element.addClass("wiktku-btn-sending");
spinner.show();
try {
getWikitext(function (wikitext) {
try {
if (addLangMode && clearPageCheck && clearPageCheck.prop("checked")) {
// User asked to wipe the page — write fresh content.
$("#wpTextbox1").val(wikitext);
} else if (addLangMode) {
var textbox = $("#wpTextbox1");
var existing = textbox.val() || "";
// ── bnr-h merge ──────────────────────────────────────────
// If the user filled bnr-h inputs, either merge into the
// existing {{bnr-h|…}} call or prepend a new one.
var bnrhOut = steps.bnrh.output(getValues());
if (bnrhOut) {
var newPages = bnrhOut.replace(/^\{\{bnr-h\|/, "").replace(/\}\}\n?$/, "").split("|");
var bnrhRe = /\{\{bnr-h\|([^}]*)\}\}/i;
if (bnrhRe.test(existing)) {
existing = existing.replace(bnrhRe, function (_, inner) {
var existingPages = inner.split("|").map(function (p) { return p.trim(); });
$.each(newPages, function (_, p) {
p = p.trim();
if (p && existingPages.indexOf(p) === -1) existingPages.push(p);
});
return "{{bnr-h|" + existingPages.join("|") + "}}";
});
} else {
existing = bnrhOut + existing;
}
}
// If this language's section already exists (whitespace
// differences aside), merge into it; otherwise insert new.
var langHeaderMatch = wikitext.match(new RegExp("^(" + langHeaderSource("[^}]+") + "\\n)"));
if (langHeaderMatch) {
var langHeader = langHeaderMatch[1]; // e.g. "== {{ziman|ku}} ==\n"
var newCode = langHeaderMatch[2];
var existingHeader = findLangHeader(existing, newCode);
if (existingHeader) {
// Strip the header from the new output.
var newContent = wikitext.slice(langHeader.length);
// Find the insertion point: end of the existing lang section.
// A new L2 heading marks the start of the next language block.
var searchFrom = existingHeader.index + existingHeader.match.length;
// Find the next == … == heading after this section's start.
var nextL2 = existing.indexOf("\n== ", searchFrom);
var insertAt = nextL2 !== -1 ? nextL2 : existing.length;
// Ensure there's a blank line before the inserted block.
var before = existing.slice(0, insertAt);
var after = existing.slice(insertAt);
var sep = /\n\s*$/.test(before) ? "" : "\n";
textbox.val(before + sep + newContent + after);
} else {
// New language — insert at the correct sorted position.
textbox.val(insertNewLangSection(existing, wikitext));
}
} else {
// Unexpected format — insert at sorted position anyway.
textbox.val(insertNewLangSection(existing, wikitext));
}
} else {
$("#wpTextbox1").val(wikitext);
}
$("html, body").animate({scrollTop: 0});
callToAction.text("Hindik ma!");
destroy();
} catch (e) {
// Thrown while writing the result into #wpTextbox1.
submitFailed(e);
}
});
} catch (e) {
// Thrown synchronously inside getWikitext — this is where the
// splitTercimeIzah ReferenceError surfaced, and it produced no
// message at all before this guard existed.
submitFailed(e);
}
});
// Tracks whether groupTabsDiv has been inserted yet — see the
// step.id-driven check below, replaced because it silently broke
// when bnrh/resim/pron moved ahead of "dfn" in ordered_steps.
var groupTabsInserted = false;
$.each(ordered_steps, function (i, step) {
var stepDiv = $(mw.html.element("div", {
"class": "wiktku-start-step",
id: "wiktku-start-" + step.id }));
var name = capitalize(step.name);
var nameH3 = $("<h3></h3>").addClass("wiktku-start-step-name");
var nameLabel = $("<label></label>")
.attr("for", "wiktku-start-" + step.id + "-field")
.text(name);
nameH3.append(nameLabel);
stepDiv.append(nameH3);
if (step.question_fmt) {
// question_fmt can be a plain string, or a function of the
// current values (used by steps whose question text depends
// on e.g. the chosen language) — refresh() keeps it in sync
// afterwards via the .wiktku-start-step-question class.
var questionText = typeof step.question_fmt === "function"
? step.question_fmt(getValues())
: step.question_fmt;
stepDiv.append($(mw.html.element("label", {
"class": "wiktku-start-step-question",
"for": "wiktku-start-" + step.id + "-field" }, questionText)));
if (step.question_br) stepDiv.append($("<br>"));
}
var input;
if (step.choices) {
input = $(mw.html.element("select", {
"class": "wiktku-start-step-field",
id: "wiktku-start-" + step.id + "-field" }));
input.attr("data-placeholder",
capitalize(step.name) + " hilbijêre ");
populateMenus(input, step.choices);
if (step.multiple) input.attr("multiple", true);
// initSelects() runs over the whole form once it is in the DOM.
stepDiv.append(input);
} else if (typeof(step.build) === "function") {
input = step.build(stepDiv);
} else {
input = $("<textarea></textarea>")
.attr("class", "wiktku-start-step-field")
.attr("id", "wiktku-start-" + step.id + "-field")
.attr("rows", step.rows || 2);
if (step.narrow) input.addClass("wiktku-start-narrow");
if (step.placeholder) {
input.attr("placeholder", typeof step.placeholder === "function" ? step.placeholder() : step.placeholder);
}
if (step.multiple) {
input.on("input", function (evt) {
refreshForTextField(evt.target, step);
});
var keyInput = buildKeyInput(step);
var list = $(step.ordered ? "<ol></ol>" : "<ul></ul>")
.append(step.modifiers
? makeModifierLi(input)
: $("<li></li>").append(keyInput).append(input));
stepDiv.append(list);
}
else stepDiv.append(input);
}
prepareInput(input, step);
stepDiv.hide();
// Section tabs (switch between POS sections) sit above the
// per-section fields, starting at "pos".
if (step.id === "pos") {
startForm.append(sectionTabsDiv);
}
// Step-group tabs sit just before the first grouped step in
// ordered_steps — whichever one that is. This USED to be a
// hardcoded "dfn" check, back when dfn was the first grouped
// step. Once bnrh/resim/pron moved into STEP_GROUPS too (and
// earlier in ordered_steps than dfn, so they render near
// pos/posparams), that check stopped matching anything: dfn was
// no longer first, so groupTabsDiv never got appended at all,
// and every grouped step's div — bnrh/resim/pron included — sat
// there with no tab bar above it to reveal them. Deriving the
// insertion point from stepIdToGroup instead means this keeps
// working no matter how STEP_GROUPS/ordered_steps get reordered
// later.
if (!groupTabsInserted && stepIdToGroup[step.id] !== undefined) {
startForm.append(groupTabsDiv);
startForm.append(besenDinPickerDiv);
groupTabsInserted = true;
}
startForm.append(stepDiv);
});
// ── Section tab helpers ──────────────────────────────────────────────
// ── Add-section button — lives in the tab bar, disabled until pos chosen ──
var addSectionBtn = new OO.ui.ButtonWidget({
label: "+ Beş zêde bike",
disabled: true
});
addSectionBtn.on("click", function () {
saveCurrentSection();
sections.push({});
activeSection = sections.length - 1;
$.each(PER_SECTION_STEP_IDS, function (_, id) {
if (id === "dfn") {
var stepDiv = $("#wiktku-start-dfn");
stepDiv.find("ol.wiktku-dfn-list").remove();
steps.dfn.build(stepDiv);
return;
}
if (id === "etym") {
$("#wiktku-start-etym .wiktku-etym-wrap").remove();
steps.etym.build($("#wiktku-start-etym"));
return;
}
if (id === "cavkani") {
$("#wiktku-start-cavkani .wiktku-cavkani-wrap").remove();
steps.cavkani.build($("#wiktku-start-cavkani"));
return;
}
if (id === "posparams") {
var ppDiv = $("#wiktku-start-posparams");
ppDiv.find(".wiktku-posparams-wrap").remove();
return;
}
if (id === "resim") {
$("#wiktku-start-resim .wiktku-resim-wrap").remove();
return;
}
if (id === "trans") {
var transDiv = $("#wiktku-start-trans");
transDiv.find(".wiktku-trans-group").remove();
return;
}
if (id === "zarava") {
var zaravaDiv = $("#wiktku-start-zarava");
zaravaDiv.find(".wiktku-zarava-group").remove();
return;
}
if (id === "dunde") {
var dundeDiv = $("#wiktku-start-dunde");
dundeDiv.find("ul.wiktku-dunde-list").remove();
return;
}
var stepDiv = $("#wiktku-start-" + id);
stepDiv.find(".wiktku-start-step-field").val("");
stepDiv.find("select.wiktku-start-step-field").trigger("wiktku:refresh");
});
// Fresh section — no "Beşên din" sub-section has been opened yet.
openedOtherSections = {};
renderBesenDinPicker();
renderSectionTabs();
refresh();
});
/** Re-render the tab bar to reflect current sections[] and activeSection. */
function renderSectionTabs() {
// Detach (not remove) the button first: .empty() strips bound
// event data from any children left inside it, which would
// silently kill addSectionBtn's click handler on every re-render.
addSectionBtn.$element.detach();
sectionTabsDiv.empty();
var lang = getValues().lang || "";
if (!lang) {
sectionTabsDiv.hide();
return;
}
sectionTabsDiv.show();
$.each(sections, function (i) {
var posVal = sections[i].pos || "";
var tabLabel = posVal ? capitalize(posVal) : ("Beş " + (i + 1));
var tab = $("<span></span>")
.addClass("wiktku-section-tab")
.text(tabLabel)
.toggleClass("wiktku-tab-active", i === activeSection);
(function (idx) {
tab.on("click", function () {
if (idx === activeSection) return;
saveCurrentSection();
activeSection = idx;
restoreSection(sections[activeSection]);
refresh();
renderSectionTabs();
});
}(i));
sectionTabsDiv.append(tab);
});
// Enable "Beş zêde bike" only when the active section has a pos chosen.
var activePos = sections[activeSection] && sections[activeSection].pos
? sections[activeSection].pos
: getValues().pos;
addSectionBtn.setDisabled(!activePos);
sectionTabsDiv.append(addSectionBtn.$element);
}
renderSectionTabs();
/**
* Re-populates a dynamically-growing "multiple" field list (bnrh, je,
* tekildar, …) from a saved array of strings. Sets each value via
* .val() + a triggered "input" event rather than touching the DOM
* structure directly, so the normal refreshForTextField() growth
* logic adds exactly as many rows as needed — the same thing that
* happens when a person types into the last (empty) row.
*/
function restoreMultiField(id, values) {
var container = $("#wiktku-start-" + id);
$.each(values || [], function (i, v) {
var field = container.find(".wiktku-start-step-field").eq(i);
if (!field.length || !v) return;
field.val(v).trigger("input");
});
}
/**
* Restores a full cached draft: shared lang/pron/bnrh fields, then
* every section (via the same restoreSection()/refresh()/
* renderSectionTabs() sequence already used when switching tabs).
* @param cached {{lang: string, pron: string, bnrh: Array, sections: Array, activeSection: number}}
*/
function restoreFromCache(cached) {
if (cached.lang) {
$("#wiktku-start-lang-field").val(cached.lang);
$("#wiktku-start-lang-field").trigger("wiktku:refresh");
}
// Rebuild dependent steps (pos, pron wrap, etc.) now that lang is set.
refresh();
if (cached.pron !== undefined) {
$("#wiktku-start-pron .wiktku-pron-text").val(cached.pron);
}
if (cached.bnrh) {
restoreMultiField("bnrh", cached.bnrh);
}
sections = (cached.sections && cached.sections.length) ? cached.sections : [{}];
activeSection = (typeof cached.activeSection === "number" &&
cached.activeSection >= 0 && cached.activeSection < sections.length)
? cached.activeSection : 0;
restoreSection(sections[activeSection]);
refresh();
renderSectionTabs();
updateLastSavedIndicator(cached.savedAt || null);
formDirty = false;
wiktkuNotify("Danûstandina berê ya qeydkirî ji cache hate barkirin.",
{ type: "info", tag: "wiktku-cache-restore" });
}
// Update the active tab's label whenever pos changes.
startForm.on("change", "#wiktku-start-pos-field", function () {
renderSectionTabs();
// A new cureyê rêzimanî means any previously chosen cinsiyet/
// cureyê lêkerê no longer applies — clear both selections (and
// the shared hidden cinsiyet field, since rebuildTa()/syncHelpers()
// fall back to it) before wiping the textarea, so nothing stale
// gets carried over into the rebuilt template.
var ppDiv = $("#wiktku-start-posparams");
ppDiv.find(".wiktku-posparams-cinsiyet-sel").val("");
ppDiv.find(".wiktku-posparams-jimar-sel").val("");
ppDiv.find(".wiktku-posparams-lektur-sel").prop("selectedIndex", 0);
ppDiv.find(".wiktku-posparams-lekturform-sel").prop("selectedIndex", 0);
$("#wiktku-start-cinsiyet-field").val("");
$("#wiktku-start-jimar-field").val("");
ppDiv.find(".wiktku-posparams-text").val("");
// refresh() runs steps.posparams.syncHelpers(), which toggles the
// param rows for the new pos and — since the textarea is now
// empty — calls rebuildTa() to repopulate it. Just clearing the
// textarea (as before) never triggered this, so the params
// section was left stale until some other field's change event
// happened to fire a refresh().
refresh();
});
// Show the tab bar as soon as a language is selected.
startForm.on("change", "#wiktku-start-lang-field", function () {
renderSectionTabs();
});
var footer = $("<div id='wiktku-start-footer'></div>");
spinner = $(mw.html.element("img", {
id: "wiktku-start-spinner",
src: "//upload.wikimedia.org/wikipedia/commons/d/de/Ajax-loader.gif",
alt: "Tê barkirin…",
title: "Tê barkirin…" }));
footer.append(spinner.hide());
continueBtn = new OO.ui.ButtonWidget({
id: "wiktku-unhide-editform",
label: "Bişîne",
flags: [ "primary", "progressive" ]
});
continueBtn.on("click", function () {
// Immediate feedback that the click registered
continueBtn.$element.addClass("wiktku-btn-flash");
setTimeout(function () {
continueBtn.$element.removeClass("wiktku-btn-flash");
}, 500);
// Item 7: Ziman/Cureyê rêzimanî already block submission via the
// real OOUI setDisabled (see canContinue in refresh()) — this is
// a second, softer check that still lets the click through so we
// can explain *why*, instead of the button just silently doing
// nothing.
if (!wiktkuContentGateOk) {
wiktkuNotify(
"Berî şandinê, tiştekî binivîse: Mane, Bi zaravayên din, an jî Werger — kêmasî yek ji van sê beşan divê tijî be.",
{ type: "warn", tag: "wiktku-mincontent" }
);
return;
}
wiktkuNotify("Tê şandin…", { type: "info", tag: "wiktku-submit" });
startForm.trigger("submit");
});
footer.append(continueBtn.$element);
// "Edîtora çavkaniyê veke" button — inline fallback for the portlet link
var sourceEditorBtn = new OO.ui.ButtonWidget({
label: "Edîtora çavkaniyê veke",
flags: [ "destructive" ],
});
sourceEditorBtn.on("click", function () {
destroy();
});
footer.append(sourceEditorBtn.$element);
// ── Cache save/clear buttons ─────────────────────────────────────────
// Manual, page-scoped save of the entire wizard (all sections, not
// just the active one) via [[MediaWiki:Gadget-StorageUtils.js]]'s
// ObjectStorage. Restoring happens silently on load at the end of
// build(), once the full language list is available.
//
// Saving also happens automatically (debounced while typing, plus a
// periodic fallback) — see "Autosave" below — since relying on the
// person to remember to click "Li cache qeyd bike" before an
// accidental tab close/reload defeats the point of having a cache
// at all.
function buildCacheSnapshot() {
return {
lang: getValues().lang || "",
pron: $("#wiktku-start-pron .wiktku-pron-text").val() || "",
// bnrh is shared (page-level), same as lang/pron above — not
// per-section, so it doesn't live in sections[].
bnrh: getValuesForStep("bnrh"),
sections: sections,
activeSection: activeSection,
savedAt: Date.now()
};
}
// ── Last-saved indicator ─────────────────────────────────────────────
var lastSavedEl = $("<span id='wiktku-last-saved'></span>");
function formatSavedTime(ts) {
try {
return new Date(ts).toLocaleTimeString(mw.config.get("wgUserLanguage"),
{ hour: "2-digit", minute: "2-digit" });
} catch (e) {
return new Date(ts).toLocaleTimeString();
}
}
function updateLastSavedIndicator(ts) {
lastSavedEl.text(ts ? ("Cache: qeydkirî di saet " + formatSavedTime(ts) + " de") : "");
}
// ── Dirty-state tracking + autosave ──────────────────────────────────
// formDirty mirrors "does the live form differ from what's in cache".
// Anything the person types/selects sets it; a successful save (auto
// or manual) clears it; destroy() (final submit, or switching to the
// source editor) also clears it since the wizard's job is over at
// that point either way. formDirty/autosaveDebounceTimer/autosaveInterval
// are declared in the outer scope (near activeGroup) — assigned here,
// not re-declared — so destroy() can reach them too.
var AUTOSAVE_DEBOUNCE_MS = 8000; // save shortly after typing pauses
var AUTOSAVE_INTERVAL_MS = 60000; // …and at least this often regardless
function performAutosave() {
if (!formDirty) return;
saveCurrentSection();
try {
formCache.Set(buildCacheSnapshot());
formDirty = false;
updateLastSavedIndicator(Date.now());
} catch (e) {
// Silent on autosave failure (storage blocked/full, etc.) — the
// manual button still surfaces a proper error if the person
// tries it directly, no need to interrupt typing with a toast.
}
}
function scheduleAutosave() {
formDirty = true;
if (autosaveDebounceTimer) clearTimeout(autosaveDebounceTimer);
autosaveDebounceTimer = setTimeout(performAutosave, AUTOSAVE_DEBOUNCE_MS);
}
startForm.on("input change", "input, textarea, select", scheduleAutosave);
autosaveInterval = setInterval(performAutosave, AUTOSAVE_INTERVAL_MS);
// Warn on accidental tab close/reload while there's anything unsaved.
$(window).on("beforeunload.wiktkuUnsaved", function (e) {
if (!formDirty) return undefined;
e.preventDefault();
e.returnValue = "";
return "";
});
var saveCacheBtn = new OO.ui.ButtonWidget({
label: "Li cache qeyd bike",
title: "Halê vê formê yê niha (ziman, bilêvkirin û hemû beş) li cache (localStorage) qeyd bike, da ku eger rûpel bêyî xwestin were girtin an ji nû ve were barkirin, tu karibî berdewam bikî."
});
saveCacheBtn.on("click", function () {
saveCurrentSection();
// ObjectStorage.Set() doesn't return a success/failure value, so
// the only way to detect a real failure (storage blocked, quota
// exceeded, JSON.stringify choking on something unexpected) is to
// catch it here rather than inspect a (nonexistent) return value.
try {
var snapshot = buildCacheSnapshot();
formCache.Set(snapshot);
formDirty = false;
updateLastSavedIndicator(snapshot.savedAt);
wiktkuNotify("Halê formê li cache hate qeydkirin.", { type: "success", tag: "wiktku-cache-save" });
} catch (e) {
mw.notify("Qeydkirina li cache bi ser neket.", { type: "error", tag: "wiktku-cache-save" });
}
});
footer.append(saveCacheBtn.$element);
var clearCacheBtn = new OO.ui.ButtonWidget({
label: "Cache paqij bike",
flags: [ "destructive" ],
title: "Datayên qeydkirî yên vê rûpelê ji cache jê bibe (forma ku niha xuya dike naguherîne)."
});
clearCacheBtn.on("click", function () {
formCache.Set({});
// The live form still has whatever the person typed — it's just no
// longer backed up anywhere, so treat this like a fresh unsaved edit.
formDirty = true;
updateLastSavedIndicator(null);
wiktkuNotify("Cache hate paqijkirin.", { type: "success", tag: "wiktku-cache-clear" });
});
footer.append(clearCacheBtn.$element);
footer.append(lastSavedEl);
// Icon-only settings button — opens the Tercîh dialog. Plain OOUI
// icon names depend on which icon-pack module happens to be loaded,
// so this uses the actual Codex "settings" (color-subtle) SVG from
// Commons directly, the same way the spinner above hotlinks its gif.
var prefsBtn = $("<button></button>", {
type: "button",
"class": "wiktku-prefs-btn",
title: "Tercîh — sazkariyên vê amûrê biguherîne"
});
prefsBtn.on("click", function (e) {
e.preventDefault();
wiktkuOpenPrefsDialog();
});
footer.append(prefsBtn);
startForm.append(footer);
// NOTE: deliberately NOT .hide() (display:none). WikiEditor/CodeMirror/
// the mobile editor's auto-grow logic measure #wpTextbox1's real
// dimensions during their own init, which happens while the wizard is
// up. A display:none ancestor reports 0 for offsetWidth/offsetHeight/
// scrollHeight, so those scripts bake in a near-zero height that never
// gets recalculated later — slideDown() in destroy() only animates the
// outer box, it doesn't re-trigger their sizing. Pushing #editform
// off-screen instead keeps it laid out (real width/height available to
// measure) without being visible, so the editbox opens at full size.
$("#editform").addClass("wiktku-offscreen").before(startForm);
// renderGroupTabs() looks up #wiktku-group-tabs via a live DOM
// selector, so it must run after startForm is actually in the
// document — calling it back in the build loop (while startForm was
// still detached) silently no-op'd and left the tab bar empty.
renderGroupTabs();
renderBesenDinPicker();
// One pass over the whole form: every select that hasn't already been
// initialised, and isn't opted out with .wiktku-plain-select, gets
// the searchable picker.
initSelects(startForm);
refresh();
// Give every draggable textarea a custom resize grip (works
// consistently on Safari/iOS, unlike the native corner grip — see
// the "Manual drag-to-resize handle" comment in styles.css), and
// keep applying it to textareas added later on (new sense blocks,
// quote-source fields, nimûne rows, …).
wiktkuInitManualResize(startForm);
new MutationObserver(function (mutations) {
mutations.forEach(function (mutation) {
$(mutation.addedNodes).each(function () {
if (this.nodeType !== 1) return;
wiktkuInitManualResize(this);
});
});
}).observe(startForm[0], { childList: true, subtree: true });
// Now that the full language list is loaded, silently restore any
// draft the editor previously saved for this page.
var cachedDraft = formCache.Get();
if (cachedDraft && cachedDraft.sections && cachedDraft.sections.length) {
restoreFromCache(cachedDraft);
}
}
mw.loader.using(["oojs-ui-core"], function () {
function wiktkuProceedWithData(wiktkuData) {
var d = wiktkuData || {};
// Populate metadata.
if (d.metadata) $.extend(metadata, d.metadata);
// Populate gender labels.
if (d.genderLabels) $.extend(GENDER_BASE_LABELS, d.genderLabels);
// Item 1: Jimar (number) code definitions — same shape as the wiki's
// own Lua number-type table (code -> {cat, display[, req]}).
if (d.numberLabels) $.extend(NUMBER_LABELS, d.numberLabels);
// Populate lang choices (pinned list).
if (d.langChoices) steps.lang.choices = choicesFromObject(d.langChoices, true);
// Populate langsByCode and merge full language list from d.ziman.
// d.ziman is a {code: name} object with all known languages.
$.each(steps.lang.choices, function (i, choice) {
if (choice.sortKey === undefined) choice.sortKey = choice.label;
langsByCode[choice.code] = choice;
});
if (d.ziman) {
var pinnedCodes = {};
$.each(steps.lang.choices, function (i, c) { pinnedCodes[c.code] = true; });
var extraChoices = [];
$.each(d.ziman, function (code, name) {
if (/-pro$/i.test(code)) return;
if (/ziman[eê]\s+destan/i.test(name)) return;
if (pinnedCodes[code]) return;
var choice = { code: code, label: name, sortKey: name };
extraChoices.push(choice);
langsByCode[code] = choice;
});
extraChoices.sort(function (a, b) {
return a.sortKey.localeCompare(b.sortKey, userLang);
});
steps.lang.choices = steps.lang.choices.concat(extraChoices);
}
// Keep the full merged list around for trans/dunde/zarava — those
// should still be able to reference any language even when the
// Tercîh panel restricts the main "ziman" step below — then, if
// the user set a restriction there, narrow steps.lang.choices
// itself to just those codes.
var wiktkuFullLangChoices = steps.lang.choices;
if (wiktkuPrefs.langCodes && wiktkuPrefs.langCodes.length) {
var wiktkuAllowedLangSet = {};
$.each(wiktkuPrefs.langCodes, function (i, code) { wiktkuAllowedLangSet[code] = true; });
var wiktkuRestrictedChoices = $.grep(wiktkuFullLangChoices, function (c) {
return !!wiktkuAllowedLangSet[c.code];
});
// Fall back to the full list instead of showing an empty
// dropdown if none of the saved codes matched anything
// (typo'd code, data.json changed since, …).
steps.lang.choices = wiktkuRestrictedChoices.length ? wiktkuRestrictedChoices : wiktkuFullLangChoices;
}
// Populate POS choices — also a plain {code: label} object in data.json.
if (d.posChoices) steps.pos.choices = choicesFromObject(d.posChoices, false);
// Populate template definitions for the dfn sense-block builder.
if (d.tplDefs) steps.dfn.tplDefs = d.tplDefs;
// Populate pos placeholder examples.
if (d.posExamples) steps.dfn.posExamples = d.posExamples;
// Populate citation template definitions for the quote widget.
if (d.jederDefs) steps.dfn.jederDefs = d.jederDefs;
// Populate pronunciation and etymology template insert lists.
if (d.pronTpls) {
steps.pron.pronTpls = d.pronTpls;
steps.pron.refreshTplSelect();
}
if (d.etymTpls) {
steps.etym.etymTpls = d.etymTpls;
steps.etym.refreshTplSelect();
}
// Sync trans/dunde/zarava keys with the full language list
// (not the possibly Tercîh-restricted steps.lang.choices).
steps.trans.keys = wiktkuFullLangChoices;
steps.dunde.keys = wiktkuFullLangChoices;
steps.zarava.keys = getZaravaKeys(wiktkuFullLangChoices);
build();
}
// data.json ships inside this package module, so it is already parsed
// and in memory — no action=raw round trip, and no Testing switch to
// forget to flip back before deploying.
wiktkuProceedWithData(require("./start/data.json"));
});
});
//</nowiki>
0dbudg5kmngzo7rz3jrdd6jxbuz9d89
6333771
6333762
2026-08-15T10:00:25Z
Wikihez
7344
6333771
javascript
text/javascript
// Li ser [[vi:MediaWiki:Gadget-start.js]] hatiye refaktorkirin.
// implicit dependencies: StorageUtils (ObjectStorage)
//<nowiki>
$(function () {
if (window.location.href.includes("editintro=User:Wikihez/creation/intro")) {
return; // Do not run the script wextê WF:Bilez dişuxile
}
var ns = mw.config.get("wgNamespaceNumber");
if (ns &&
!(ns === 2 && mw.config.get("wgPageName").match(/\/ceribandin$|\/test$/))) {
return;
}
var addLangMode = mw.util.getParamValue("wiktkuaddlang") === "1";
// ── Tercîh (user settings) panel stored via mw.storage (localStorage), globally
var WIKTKU_PREFS_KEY = "wiktku_start_prefs";
var WIKTKU_PREFS_DEFAULTS = {
// [] = show the full language list in the "ziman" step; otherwise
// only these codes are shown there (data.json codes, not names).
langCodes: [],
// true = never auto-open on a new/empty page — only via the
// "+Ziman/beşeke din" portlet link.
onlyOnClick: false,
// "auto" | "p-cactions" | "p-tb" | "p-views" — where the
// "+Ziman/beşeke din" portlet link is added.
portlet: "auto",
// true = suppress routine/informational mw.notify toasts (page
// loading, cache auto-restored, cache saved/cleared, "tê şandin…").
// Errors and direct results of an explicit action (like saving
// Tercîh itself) always show regardless of this setting.
quiet: false
};
function wiktkuLoadPrefs() {
if (!(window.mw && mw.storage)) return $.extend({}, WIKTKU_PREFS_DEFAULTS);
var raw;
try { raw = mw.storage.get(WIKTKU_PREFS_KEY); } catch (e) { raw = null; }
if (!raw) return $.extend({}, WIKTKU_PREFS_DEFAULTS);
var parsed;
try { parsed = JSON.parse(raw); } catch (e) { parsed = {}; }
return $.extend({}, WIKTKU_PREFS_DEFAULTS, parsed);
}
function wiktkuSavePrefs(prefs) {
if (!(window.mw && mw.storage)) return false;
try {
mw.storage.set(WIKTKU_PREFS_KEY, JSON.stringify(prefs));
return true;
} catch (e) { return false; }
}
var wiktkuPrefs = wiktkuLoadPrefs();
// Routine/informational notices go through here so "quiet mode" can
// suppress them; errors and explicit-action confirmations (like the
// Tercîh save toast) call mw.notify directly instead, and always show.
function wiktkuNotify(message, options) {
if (wiktkuPrefs.quiet) return;
mw.notify(message, options);
}
// Lazily built the first time it's opened; reused after that (see
// wiktkuOpenPrefsDialog below, defined once we know OOUI is available).
var wiktkuPrefsWindowManager = null;
var wiktkuPrefsDialog = null;
function wiktkuOpenPrefsDialog() {
mw.loader.using(["oojs-ui-core", "oojs-ui-windows"], function () {
function WiktkuPrefsDialog(config) {
WiktkuPrefsDialog.super.call(this, config);
}
if (!wiktkuPrefsDialog) {
OO.inheritClass(WiktkuPrefsDialog, OO.ui.ProcessDialog);
WiktkuPrefsDialog.static.name = "wiktkuPrefsDialog";
WiktkuPrefsDialog.static.title = "Tercîhên min";
WiktkuPrefsDialog.static.actions = [
{ action: "save", label: "Qeyd bike", flags: ["primary", "progressive"] },
{ action: "cancel", label: "Betal bike", flags: "safe" }
];
WiktkuPrefsDialog.prototype.initialize = function () {
WiktkuPrefsDialog.super.prototype.initialize.call(this);
this.langCodesInput = new OO.ui.TextInputWidget({
placeholder: "ku, zza, ckb (vala bihêle ji bo hemû zimanan)"
});
this.onlyOnClickCheckbox = new OO.ui.CheckboxInputWidget({});
this.quietCheckbox = new OO.ui.CheckboxInputWidget({});
this.portletDropdown = new OO.ui.DropdownInputWidget({
options: [
{ data: "auto", label: "Otomatîk (li gorî rûyê wîkiyê)" },
{ data: "p-cactions", label: "p-cactions - Li qismê Amûran" },
{ data: "left-navigation", label: "left-navigation - Li qismê Gotar-Gotûbêj" },
{ data: "p-tb", label: "p-tb - Li qismê Giştî" },
{ data: "p-views", label: "p-views - Li qismê Bixwîne" }
]
});
var fieldset = new OO.ui.FieldsetLayout({ label: "Eyar" });
fieldset.addItems([
new OO.ui.FieldLayout(this.langCodesInput, {
label: "Kodên zimanan ku tê xuyakirin li qismê \"ziman\"",
align: "top",
help: "Kodan bi virgulê (,) ji hev veqetîne. Vala bihêle da ku hemû ziman were nîşandan.",
helpInline: true
}),
new OO.ui.FieldLayout(this.onlyOnClickCheckbox, {
label: "Tenê veke wextê \"+Ziman/beşeke din\" were tikandin",
align: "inline",
help: "Eger were hilbijartin, ev amûr êdî otomatîk li ser rûpelên nû/vala dest pê nake — divê meriv her carê pêl \"+Ziman/beşeke din\" bike.",
helpInline: true
}),
new OO.ui.FieldLayout(this.portletDropdown, {
label: "Cihê lînka \"+Ziman/beşeke din\"",
align: "top",
help: "\"Otomatîk\" li gorî rûyê wîkiyê hildibijêre.",
helpInline: true
}),
new OO.ui.FieldLayout(this.quietCheckbox, {
label: "Moda bêdeng (kêmtir agahdarî nîşan bide)",
align: "inline",
help: "Agahdariyên normal nîşan nede. Xeta her tim tên xuyakirin.",
helpInline: true
})
]);
this.$body.addClass("wiktku-prefs-dialog-body").append(fieldset.$element);
};
WiktkuPrefsDialog.prototype.getSetupProcess = function (data) {
return WiktkuPrefsDialog.super.prototype.getSetupProcess.call(this, data)
.next(function () {
this.langCodesInput.setValue(wiktkuPrefs.langCodes.join(", "));
this.onlyOnClickCheckbox.setSelected(!!wiktkuPrefs.onlyOnClick);
this.portletDropdown.setValue(wiktkuPrefs.portlet || "auto");
this.quietCheckbox.setSelected(!!wiktkuPrefs.quiet);
}, this);
};
WiktkuPrefsDialog.prototype.getActionProcess = function (action) {
var dialog = this;
if (action === "save") {
return new OO.ui.Process(function () {
var codes = dialog.langCodesInput.getValue()
.split(/[,\s]+/)
.map(function (c) { return c.trim().toLowerCase(); })
.filter(function (c) { return !!c; });
wiktkuPrefs = {
langCodes: codes,
onlyOnClick: dialog.onlyOnClickCheckbox.isSelected(),
portlet: dialog.portletDropdown.getValue() || "auto",
quiet: dialog.quietCheckbox.isSelected()
};
wiktkuSavePrefs(wiktkuPrefs);
mw.notify(
"Tercîh hatin qeydkirin. Rûpelê ji nû ve bar bike (F5).",
{ type: "success", tag: "wiktku-prefs-save" }
);
dialog.close({ action: "save" });
});
}
if (action === "cancel") {
return new OO.ui.Process(function () {
dialog.close({ action: "cancel" });
});
}
return WiktkuPrefsDialog.super.prototype.getActionProcess.call(this, action);
};
wiktkuPrefsWindowManager = new OO.ui.WindowManager();
$(document.body).append(wiktkuPrefsWindowManager.$element);
wiktkuPrefsDialog = new WiktkuPrefsDialog();
wiktkuPrefsWindowManager.addWindows([wiktkuPrefsDialog]);
}
wiktkuPrefsWindowManager.openWindow(wiktkuPrefsDialog);
});
}
var targetContainer;
var skin = mw.config.get('skin');
if (wiktkuPrefs.portlet && wiktkuPrefs.portlet !== "auto") {
targetContainer = wiktkuPrefs.portlet;
} else if (skin === 'vector-2022') {
targetContainer = 'p-cactions';
} else if (skin === 'vector') {
targetContainer = 'p-tb';
} else {
targetContainer = 'p-views';
}
mw.util.addPortletLink(targetContainer,
mw.util.getUrl(mw.config.get("wgPageName"), { action: "submit", wiktkuaddlang: "1" }),
"+Ziman/beşeke din", "ca-wiktku-addlang",
"Li vê rûpelê, ziman an jî beşeke nû zêde bike");
// If "onlyOnClick" is set, the wizard should ONLY ever open via the
// "+Ziman/beşeke din" link — never automatically
var wiktkuNewPageDetected = $(".mw-newarticletext, .mw-newarticletextanon").length > 0;
if (wiktkuPrefs.onlyOnClick ? !addLangMode : (!addLangMode && !wiktkuNewPageDetected)) {
return;
}
// ── Shared helpers ───────────────────────────────────────────────────
// Generic text/UI utilities live in their own package file now — see the
// header of util.js for why. Aliased to bare names here so the ~400 call
// sites below read exactly as they did when these were local functions.
var wiktkuUtil = require("./start/util.js");
var capitalize = wiktkuUtil.capitalize;
var decapitalize = wiktkuUtil.decapitalize;
var escapeRegExp = wiktkuUtil.escapeRegExp;
var stripWikilinks = wiktkuUtil.stripWikilinks;
var splitTercimeIzah = wiktkuUtil.splitTercimeIzah;
var insertAtCursor = wiktkuUtil.insertAtCursor;
var foldDiacritics = wiktkuUtil.foldDiacritics;
var wrapNativeSelect = wiktkuUtil.wrapNativeSelect;
var initSelects = wiktkuUtil.initSelects;
var wiktkuInitManualResize = wiktkuUtil.initManualResize;
function langHeaderSource(codePattern) {
return "\n?==\\s*\\{\\{\\s*ziman\\s*\\|\\s*(" + codePattern + ")\\s*\\}\\}\\s*==";
}
function findLangHeader(text, code) {
var m = new RegExp(langHeaderSource(escapeRegExp(code))).exec(text);
return m ? { index: m.index, match: m[0] } : null;
}
var catSrcTemplates = null;
var catSrcTemplatesPromise = null;
function fetchCatSrcTemplates() {
if (catSrcTemplatesPromise) return catSrcTemplatesPromise;
catSrcTemplatesPromise = new mw.Api().get({
action: "query",
list: "categorymembers",
cmtitle: "Kategorî:Çavkanî",
cmnamespace: 10,
cmlimit: "max",
formatversion: 2
}).then(function (data) {
var members = (data.query && data.query.categorymembers) || [];
catSrcTemplates = $.map(members, function (m) {
// Pêşgira navî ya "Şablon:" rake.
return m.title.replace(/^[^:]+:/, "");
});
catSrcTemplates.sort(function (a, b) { return a.localeCompare(b, userLang); });
return catSrcTemplates;
}, function () {
catSrcTemplates = [];
return catSrcTemplates;
});
return catSrcTemplatesPromise;
}
var pageName = mw.config.get("wgPageName").replaceAll(/_/g, " ");
if (ns) pageName = pageName.replace(/.*\//, "");
var pageNameRe = escapeRegExp(pageName);
var userLang = mw.config.get("wgUserLanguage");
var formCache = new ObjectStorage("wiktku_start_draft_" + mw.config.get("wgPageName"), 1);
var langsByCode = {};
// Looks up the display label for a language code, falling back to the
// code itself if it isn't known yet (e.g. langsByCode not loaded).
function getLangLabel(code) {
var entry = langsByCode[code];
return entry ? entry.label : code;
}
// Populated from [[MediaWiki:Gadget-start.js/data.json]] at runtime.
var metadata = {};
var ZARAVA_LANG_CODES = ["ckb", "sdh", "lki", "hac", "zza"];
// Converts a {code: label} object (langChoices/posChoices in data.json)
// into the {code, label[, sortKey]} array the rest of the script uses.
// isLang: true adds a sortKey and shows "(code)" after the label —
// language choices only.
function choicesFromObject(obj, isLang) {
var result = [];
$.each(obj || {}, function (code, label) {
var choice = { code: code, label: label };
if (isLang) choice.sortKey = label;
result.push(choice);
});
return result;
}
function getZaravaKeys(choices) {
var byCode = {};
$.each(choices || [], function (_, c) { byCode[c.code] = c; });
var result = [];
$.each(ZARAVA_LANG_CODES, function (_, code) {
if (byCode[code]) result.push(byCode[code]);
});
return result;
}
function needsTransliteration(langCode) {
var meta = metadata[langCode];
if (!meta || !meta.sc) return false;
var scripts = Array.isArray(meta.sc) ? meta.sc : [meta.sc];
return scripts.length > 0 && scripts[0] !== "Latn";
}
// Kodên cinsiyetê yên di metadata.g de — ji data.json tê dagirtin
var GENDER_BASE_LABELS = {};
// Item 1 (Wikihez, 14 Tebax 2026): kodên jimarê (y, s, d, p, p+, tp, j, j+,
// j/nj, nj, nj+, hj!, hj?) — ji data.json's "numberLabels" tê dagirtin.
// Same {code: {cat, display[, req]}} shape as the wiki's own Lua
// number-type table; "display" can contain HTML (<abbr>) or wikilinks
// ([[...]]), so it's only used as-is inside the wikitext output — never
// dropped straight into an <option>, which can't render either (see
// stripMarkupForOption below).
var NUMBER_LABELS = {};
// metadata[lang].g used to list gender AND number codes together (see
// cinsiyet/posparams below) — this tells the two dropdowns apart: any
// code that's a key in NUMBER_LABELS is a number code (goes in the new
// Jimar dropdown / j= param), everything else is a gender code (stays
// in the existing Cîns dropdown / c= param). Compound codes like "m-p"
// or "n-p" are gender+plural pairs, not plain "p" — they don't match a
// NUMBER_LABELS key, so they correctly stay on the gender side.
function isNumberCode(code) {
return Object.prototype.hasOwnProperty.call(NUMBER_LABELS, code);
}
// Strips the bit of markup "display" is allowed to contain so it's safe
// to use as plain <option> text (options can't render HTML or wikilinks):
// <abbr title="X">Y</abbr> -> "Y (X)", [[a|b]] -> "b", [[a]] -> "a".
function stripMarkupForOption(html) {
if (!html) return "";
return $.trim(
String(html)
.replace(/<abbr[^>]*title="([^"]*)"[^>]*>([\s\S]*?)<\/abbr>/gi, "$2 ($1)")
.replace(/\[\[[^\]|]*\|([^\]]*)\]\]/g, "$1")
.replace(/\[\[([^\]]*)\]\]/g, "$1")
.replace(/<[^>]+>/g, "")
);
}
// Builds the Jimar dropdown's <option> text for one code: "j — jimarbar".
function numberOptionLabel(code) {
var def = NUMBER_LABELS[code];
if (!def) return code;
var text = stripMarkupForOption(def.display);
return text ? (code + " — " + text) : code;
}
// Sub-lists that only make sense for a plain (non-şablon) sense — hidden
// when a şablon (e.g. {{guharto|…}}) is chosen for that sense
var HIDDEN_ON_TPL_GROUPS = [
"wiktku-dfn-alternativ",
"wiktku-dfn-hevmane",
"wiktku-dfn-dijmane",
"wiktku-dfn-koordine",
"wiktku-dfn-jornav",
"wiktku-dfn-jernav"
];
function genderLabel(code) {
if (code === "p") return "Pirjimar";
var pluralMatch = code.match(/^(.+)-p$/);
if (pluralMatch && GENDER_BASE_LABELS[pluralMatch[1]]) {
return GENDER_BASE_LABELS[pluralMatch[1]] + " (pirjimar)";
}
return GENDER_BASE_LABELS[code] || code;
}
// ── Template explanations (v3 spec) ──────────────────────────────────
// Every place a template can be picked shows the same row: a status
// dot, the name, a link to the template page, and an ⓘ. This is the ⓘ.
//
// Text comes from the template's own TemplateData where it has any, so
// the explanation stays right without anyone maintaining a second copy
// by hand — with the desc already in data.json as the fallback for
// templates that have none.
var wiktkuTplDataCache = {}; // name -> {desc, params[]} or null when absent
/** Fetches TemplateData for one template. Resolves to null if the
* template has none (a plain, undocumented template — very common). */
function fetchTemplateData(name) {
if (Object.prototype.hasOwnProperty.call(wiktkuTplDataCache, name)) {
return $.Deferred().resolve(wiktkuTplDataCache[name]).promise();
}
return new mw.Api().get({
action: "templatedata",
titles: "Şablon:" + name,
redirects: 1,
formatversion: 2
}).then(function (data) {
var pages = (data && data.pages) || {};
var first = null;
$.each(pages, function (_, p) { if (!first) first = p; });
var out = null;
if (first) {
var desc = first.description;
// TemplateData descriptions are language maps when the
// template is documented in more than one language.
if (desc && typeof desc === "object") desc = desc[userLang] || desc.en || desc[Object.keys(desc)[0]];
var params = [];
$.each(first.params || {}, function (key, p) {
var label = p && p.label;
if (label && typeof label === "object") label = label[userLang] || label.en || label[Object.keys(label)[0]];
params.push({ name: key, label: label || "", required: !!(p && p.required) });
});
out = { desc: desc || "", params: params };
}
wiktkuTplDataCache[name] = out;
return out;
}, function () {
// No TemplateData, or the API is unhappy — cache the miss so a
// repeated ⓘ click doesn't re-request it every time.
wiktkuTplDataCache[name] = null;
return null;
});
}
/** Hand-written fallback description, from data.json. */
function localTplDesc(name) {
var pools = [steps.pron.pronTpls, steps.etym.etymTpls, steps.dfn.tplDefs, steps.dfn.jederDefs];
var found = "";
$.each(pools, function (_, pool) {
if (pool && pool[name] && pool[name].desc) { found = pool[name].desc; return false; }
});
return found;
}
/** Opens the inline explanation panel for `name`, anchored under the
* picker it was opened from. */
function showTemplateInfo(name, anchorWrap) {
$(".wiktku-tpl-info").remove();
var panel = $("<div class='wiktku-tpl-info'></div>");
panel.append($("<div class='wiktku-tpl-info-name'></div>").text("{{" + name + "}}"));
var body = $("<div class='wiktku-tpl-info-desc'></div>").text("Tê barkirin…");
panel.append(body);
var params = $("<div class='wiktku-tpl-info-params'></div>");
panel.append(params);
panel.append($("<a class='wiktku-tpl-info-link' target='_blank' rel='noopener'></a>")
.attr("href", wiktkuUtil.tplPageUrl(name))
.text("Rûpela şablonê veke →"));
var close = $("<button type='button' class='wiktku-tpl-info-close' title='Bigire'>✕</button>");
close.on("click", function () { panel.remove(); });
panel.prepend(close);
$(anchorWrap).after(panel);
fetchTemplateData(name).then(function (td) {
var desc = (td && td.desc) || localTplDesc(name);
body.text(desc || "Ji bo vê şablonê ravek nehatiye nivîsandin.");
if (td && td.params && td.params.length) {
params.append($("<div class='wiktku-tpl-info-params-title'></div>").text("Parametre:"));
var listEl = $("<ul></ul>");
$.each(td.params, function (_, p) {
var line = p.name + (p.label ? " — " + p.label : "") + (p.required ? " (pêwîst)" : "");
listEl.append($("<li></li>").text(line));
});
params.append(listEl);
}
});
}
/** Marks a picker's <option>s as template rows so the searchable widget
* renders them with the dot / 🔗 / ⓘ affordances, and wires the ⓘ
* handler for that picker. `nameOf` maps an <option> to a template
* name — the pickers store different things in value= (a snippet for
* the insert dropdowns, the bare name for the sense selector). */
function markTemplateOptions(sel, nameOf) {
if (!sel || !sel.length) return;
sel.find("option").each(function () {
var opt = $(this);
var name = nameOf(opt);
if (!name) return;
opt.attr("data-tpl", name);
// Deprecated/typo templates are the "special cases only" ones.
opt.attr("data-tpl-status", /kevnbûyî|şaşnivîs|kêmpeyda/i.test(opt.text()) ? "yellow" : "green");
});
sel.data("wiktkuTplInfo", showTemplateInfo);
}
/** Pulls the template name out of a snippet like "* {{ku-IPA}}" or
* "{{ji|SOURCELANG|CODE|…}}". */
function tplNameFromSnippet(snippet) {
var m = /\{\{\s*([^|}\n]+)/.exec(snippet || "");
return m ? $.trim(m[1]) : "";
}
// True if a sense has content beyond mane worth keeping (etîket, word
// lists, nimûne, jêder) — so it's still emitted with {{mane?}} if empty.
function senseHasExtraContent(s) {
if (s.etiket && $.grep(s.etiket, function (e) { return $.trim(e) !== ""; }).length) return true;
if (s.kategori && $.grep(s.kategori, function (k) { return $.trim(k) !== ""; }).length) return true;
if (s.alternativ.length || s.hevmane.length || s.dijmane.length ||
s.koordine.length || s.jornav.length || s.jernav.length) return true;
if (s.nimune && $.grep(s.nimune, function (n) {
return (typeof n === "object" ? n.text : n) !== "";
}).length > 0) return true;
if (senseHasJeder(s)) return true;
return false;
}
// Wikihez, 14 Tebax 2026 (item 7): the real submit-blocking requirement
// (Ziman + Cureyê rêzimanî, via step.required/canContinue) is already
// obvious since Bişîne stays visibly disabled until it's met. What
// wasn't obvious is that a technically-"complete" entry with nothing
// in Mane, Bi zaravayên din or Werger is still empty in any meaningful
// sense — so this is checked separately, at click time, with its own
// message, instead of another star/legend marker on the page.
function hasMinRequiredContent(values) {
var dfnSenses = steps.dfn.getSenses($("#wiktku-start-dfn"));
var hasMane = dfnSenses.some(function (s) {
return (s.tpl && s.tplTitle) || (!s.tpl && (s.mane !== "" || senseHasExtraContent(s)));
});
if (hasMane) return true;
if (values.lang === "ku") {
var hasWerger = false;
$("#wiktku-start-trans .wiktku-trans-group").each(function () {
if (steps.trans.getGroupTranslations($(this)).length) hasWerger = true;
});
if (hasWerger) return true;
var hasZarava = false;
$("#wiktku-start-zarava .wiktku-zarava-group").each(function () {
if (steps.zarava.getGroupTranslations($(this)).length) hasZarava = true;
});
if (hasZarava) return true;
}
return false;
}
// Bolds the *first* occurrence of the page name
function boldPageNameOnce(text) {
if (!text || !pageNameRe) return text;
var re = new RegExp("(" + pageNameRe + "([^( |,|;|\\?|\\.|\\!)]+)?)", "i");
return text.replace(re, "'''$1'''");
}
// Converts literal line breaks typed into a nimûne/jêgirtin box into
// wikitext <br> tags,
function nlToBr(text) {
return text ? text.replace(/\r\n|\r|\n/g, "<br>") : text;
}
function escapeHtmlForBackdrop(str) {
return String(str)
.replace(/&/g, "&")
.replace(/</g, "<")
.replace(/>/g, ">");
}
// Mirrors a textarea's text, with a small highlighted marker placed
// right after each line that's followed by an actual typed/pasted
// linebreak. Rendered into a transparent backdrop layer behind the
// textarea (see ensureLinebreakBackdrop()), so only the point of the
// break is marked instead of the whole box.
function buildLinebreakBackdropHtml(text) {
var lines = text.split(/\r\n|\r|\n/);
return $.map(lines, function (line, i) {
var isLast = i === lines.length - 1;
return escapeHtmlForBackdrop(line) +
(isLast ? "" : "<mark class='wiktku-linebreak-mark'>↵</mark>\n");
}).join("");
}
// Copies the metrics that affect where text wraps/lands (font, line
// height, padding, border) from the real textarea onto its backdrop,
// via computed style rather than shared CSS classes — most of the
// box's own rules are written as "textarea.foo", which a <div> with
// the same class wouldn't match. Re-run on every update in case a
// responsive breakpoint changed the textarea's own font-size.
function syncLinebreakBackdropMetrics(textarea, backdrop) {
var cs = window.getComputedStyle(textarea[0]);
backdrop.css({
"box-sizing": cs.boxSizing,
"padding-top": cs.paddingTop,
"padding-right": cs.paddingRight,
"padding-bottom": cs.paddingBottom,
"padding-left": cs.paddingLeft,
"border-width": cs.borderWidth,
"border-style": "solid",
"font-family": cs.fontFamily,
"font-size": cs.fontSize,
"font-weight": cs.fontWeight,
"line-height": cs.lineHeight,
"letter-spacing": cs.letterSpacing
});
}
// Lazily wraps a textarea in its own positioning anchor (independent
// of .wiktku-resize-wrap, so this doesn't depend on load order versus
// wiktkuMakeManualResizable) and inserts the transparent backdrop
// layer used to mark the exact point of a linebreak. Safe to call
// more than once on the same textarea — the backdrop is cached.
function ensureLinebreakBackdrop(textarea) {
var existing = textarea.data("wiktkuLinebreakBackdrop");
if (existing) return existing;
textarea.wrap("<div class='wiktku-linebreak-wrap'></div>");
var backdrop = $("<div aria-hidden='true'></div>").addClass("wiktku-linebreak-backdrop");
textarea.before(backdrop);
textarea.data("wiktkuLinebreakBackdrop", backdrop);
textarea.on("scroll.wiktkuLinebreak", function () {
backdrop.scrollTop(textarea.scrollTop()).scrollLeft(textarea.scrollLeft());
});
return backdrop;
}
// Flags a nimûne/jêgirtin textarea (via CSS class, for the border
// tint + tooltip) while it contains a typed/pasted linebreak, so the
// user notices before it's silently turned into <br> on output.
// Marks only the exact point of the break via a mirrored backdrop,
// rather than tinting the whole box.
function highlightLinebreak(el) {
var textarea = $(el);
var text = textarea.val();
var hasBreak = /\r|\n/.test(text);
textarea
.toggleClass("wiktku-has-linebreak", hasBreak)
.attr("title", hasBreak ? "Xeta nû dê wek <br> bê nivîsandin" : "");
if (!hasBreak) {
var cached = textarea.data("wiktkuLinebreakBackdrop");
if (cached) cached.hide();
textarea.removeClass("wiktku-has-linebreak-source");
return;
}
var backdrop = ensureLinebreakBackdrop(textarea);
textarea.addClass("wiktku-has-linebreak-source");
syncLinebreakBackdropMetrics(textarea, backdrop);
backdrop.html(buildLinebreakBackdropHtml(text)).show();
backdrop.scrollTop(textarea.scrollTop()).scrollLeft(textarea.scrollLeft());
}
// Each nimûne item can be { text, tr, t }: text, transliteration, translation.
function formatNimune(nimunes, lang, hasJeder) {
var hasNimune = nimunes && $.grep(nimunes, function (n) {
return (typeof n === "object" ? n.text : n) !== "";
}).length > 0;
if (!hasNimune) {
return hasJeder ? "" : "\n#* {{nimûne?|" + lang + "}}";
}
return $.map(nimunes, function (n) {
var text = typeof n === "object" ? n.text : n;
if (!text) return undefined;
var bolded = nlToBr(boldPageNameOnce(text));
var tpl = "\n#: {{nm|" + lang + "|" + bolded;
if (typeof n === "object") {
if (n.tr) tpl += "|tr=" + nlToBr(n.tr);
// Translation as third positional param (no key needed).
if (n.t) tpl += "|" + nlToBr(n.t);
}
// Short examples fit on one line together with their translation.
// rêz=1 is not used for ku — definitions are shown on separate lines there.
if (text.length < 60 && lang !== "ku") tpl += "|rêz=1";
tpl += "}}";
return tpl;
}).join("");
}
// Formats jêder (citation) entries into "#* {{jêder…|…}}" lines; skips
// entries with no quote text. Falls back to the generic {{jêder}}
// template when no specific template was chosen.
function formatJeder(jederList, lang) {
if (!jederList || !jederList.length) return "";
return $.map(jederList, function (jeder) {
if (!jeder || !jeder.quote) return undefined;
var quote = nlToBr(boldPageNameOnce(jeder.quote));
var quoteTr = nlToBr(jeder.quoteTr);
var quoteT = nlToBr(jeder.quoteT);
if (jeder.jederTpl) {
var cite = "\n#* {{" + jeder.jederTpl + "|" + lang;
cite += "|jêgirtin=" + quote;
if (quoteTr) cite += "|tr=" + quoteTr;
if (quoteT) cite += "|tercime=" + quoteT;
$.each(jeder.jêderFields || {}, function (key, val) {
if (val) cite += "|" + key + "=" + val;
});
cite += "}}";
return cite;
}
var out = "\n#* {{jêder|" + lang + "|jêgirtin=" + quote;
if (quoteTr) out += "|tr=" + quoteTr;
if (quoteT) out += "|tercime=" + quoteT;
// A şablon picked from Kategorî:Çavkanî is transcluded as the
// source param (e.g. |{{Kovara X}}); manual text is used as-is.
var srcParam = jeder.jederCatTpl ? ("{{" + jeder.jederCatTpl + "}}") :
(jeder.jederManual ? jeder.jederManual : "çavkanî?");
// A positional param containing "=" gets parsed as its own key=value
// pair by MediaWiki and breaks the template, so force it to be
// explicitly named (|2=) whenever that's the case.
out += (srcParam.indexOf("=") !== -1 ? "|2=" : "|") + srcParam;
out += "}}";
return out;
}).join("");
}
// True if a sense has at least one jêder entry with quote text.
function senseHasJeder(sense) {
return !!(sense.jeder && $.grep(sense.jeder, function (j) {
return j && j.quote;
}).length > 0);
}
// Builds "{{tplName|lang|part1|part2|…}}" from a sense field (kategori,
// etiket), wrapped inline (" {{…}} ") or on its own line ("\n#: {{…}}").
function buildSenseTpl(sense, field, lang, tplName) {
if (!sense[field] || !sense[field].length) return "";
var parts = sense[field].map(function (p) { return $.trim(p); })
.filter(function (p) { return p !== ""; });
if (!parts.length) return "";
var call = "{{" + tplName + "|" + lang + "|" + parts.join("|") + "}}";
return call
}
/**
* Assembles the nimûne + jêder wikitext block for a sense. Shared by
* both the template-sense and normal-mane-sense branches below.
*/
function buildCite(sense, lang) {
return formatNimune(sense.nimune, lang, senseHasJeder(sense)) +
formatJeder(sense.jeder, lang);
}
// ── Inline modifier system ───────────────────────────────────────────────
// Appends a ⊕ button to a word input <li>. Clicking it shows a compact
// modifier picker; selecting one prompts for the value and appends
// <modifier:value> to the textarea's current content.
var WORD_MODIFIERS = [
{ key: "t", label: "t: tercime / îzah", hint: "Tercimeya kelîmeyê an îzaha wê" },
{ key: "cuda", label: "cuda: alt display", hint: "Forma nîşankirinê ya alternatîf" },
{ key: "c", label: "c: cinsiyet", hint: "Cinsiyeta kelîmeyê" },
{ key: "e", label: "e: etîket (li pêşiyê)", hint: "Etîketek li pêşiya kelîmeyê" },
{ key: "ee", label: "ee: etîket (li dawiyê)", hint: "Etîketek li dawiya kelîmeyê" },
{ key: "q", label: "q: qualifier (li pêşiyê)", hint: "Wesf li pêşiya kelîmeyê" },
{ key: "qq", label: "qq: qualifier (li dawiyê)", hint: "Wesf li dawiya kelîmeyê" },
{ key: "crz", label: "crz: cureyê rêzimanî", hint: "Cureyê rêzimanî yê kelîmeyê" },
{ key: "hrf", label: "hrf: herfiyen", hint: "Herfiyen, manaya rasterast" },
{ key: "ref", label: "ref: çavkanî", hint: "Çavkanî" }
];
// Sub-groups (inside a sense/definition block) that get the same ⊕
// modifier button as makeWordListStep fields.
var MODIFIER_SUBGROUPS = {
"wiktku-dfn-alternativ": true,
"wiktku-dfn-hevmane": true,
"wiktku-dfn-dijmane": true,
"wiktku-dfn-koordine": true,
"wiktku-dfn-jornav": true,
"wiktku-dfn-jernav": true
};
/**
* Wraps a freshly-created textarea in a <li> with a ⊕ modifier button.
* `ta` — the jQuery textarea element.
* Returns the <li>.
*/
function makeModifierLi(ta) {
var li = $("<li class='wiktku-word-li'></li>");
var btn = $("<button type='button' class='wiktku-mod-btn' title='Modifiyerê lê zêde bike'>⊕</button>");
var picker = $("<div class='wiktku-mod-picker'></div>").hide();
// Which modifier keys are already present in the textarea's current
// text — e.g. "<t:...>" → "t" used. Each modifier can only be
// applied once per word, so its pill gets disabled once used.
function usedKeys() {
var used = {};
var re = /<([a-zA-Z]+):/g;
var val = ta.val() || "";
var m;
while ((m = re.exec(val)) !== null) used[m[1]] = true;
return used;
}
$.each(WORD_MODIFIERS, function (_, mod) {
var pill = $("<button type='button' class='wiktku-mod-pill'></button>").text(mod.label);
pill.attr("title", mod.hint);
pill.data("mod-key", mod.key);
pill.on("click", function (e) {
e.preventDefault();
if (pill.prop("disabled")) return; // already used on this word
picker.hide();
// Show a tiny inline input for the modifier value.
var valWrap = $("<span class='wiktku-mod-val-wrap'></span>");
var valInp = $("<input type='text' class='wiktku-mod-val-input'>")
.attr("placeholder", mod.hint + "…")
.attr("size", 20);
var confirm = $("<button type='button' class='wiktku-mod-confirm'>✓</button>");
var cancel = $("<button type='button' class='wiktku-mod-cancel'>✕</button>");
function applyModifier() {
var v = $.trim(valInp.val());
if (v) {
ta.val(ta.val() + "<" + mod.key + ":" + v + ">");
ta.trigger("input");
}
valWrap.remove();
ta.focus();
}
confirm.on("click", applyModifier);
cancel.on("click", function () { valWrap.remove(); ta.focus(); });
valInp.on("keydown", function (e) {
if (e.which === 13) { e.preventDefault(); applyModifier(); }
if (e.which === 27) { valWrap.remove(); ta.focus(); }
});
valWrap.append(valInp).append(confirm).append(cancel);
li.append(valWrap);
valInp.focus();
});
picker.append(pill);
});
btn.on("click", function (e) {
e.preventDefault();
// Close any other open pickers in the same list.
li.closest("ol, ul").find(".wiktku-mod-picker").not(picker).hide();
// Grey out modifiers already used on this word — refreshed on
// every open since the text (and thus what's "used") can change.
var used = usedKeys();
picker.find(".wiktku-mod-pill").each(function () {
var isUsed = !!used[$(this).data("mod-key")];
$(this).prop("disabled", isUsed).toggleClass("wiktku-mod-pill-used", isUsed);
});
picker.toggle();
});
// Close picker when focus leaves the li entirely.
li.on("focusout", function () {
setTimeout(function () {
if (!$.contains(li[0], document.activeElement)) picker.hide();
}, 150);
});
li.append(ta).append(btn).append(picker);
return li;
}
function makeWordListStep(id, name, question_fmt) {
return {
id: id,
name: name,
question_fmt: question_fmt,
multiple: true,
narrow: true,
modifiers: true,
// Function instead of a plain string so it can name the current
// language — computed fresh at build time and re-applied by
// refresh() whenever the language changes.
placeholder: function () {
var lang = getValues().lang || "";
var langLabel = lang ? getLangLabel(lang) : "";
return "Kelîme" + (langLabel ? " bi " + langLabel : "") + "…";
},
visible: function (values) {
return values.lang && values.pos;
},
output: function (values) {
var words = $.grep(values[id] || [], function (w) { return !!w; });
var header = capitalize(name);
if (!words.length) return "";
var lang = values.lang;
var section = "\n==== " + header + " ====\n";
var params = "cure=" + header + "\n" +
$.map(words, function (w) {
return "|" + w;
}).join("\n");
return section +
"{{kol3|" + lang + "|" + params + "\n}}\n";
} };
}
var steps = {
lang: {
id: "lang",
required: true,
name: "ziman",
question_fmt: '"' + pageName + '" bi çi zimanî ye?',
question_br: true,
// Populated from [[MediaWiki:Gadget-start.js/data.json]] (langChoices).
choices: [],
output: function (values) {
return "== {{ziman|" + values.lang + "}} ==\n";
}
},
pron: {
id: "pron",
name: "bilêvkirin",
question_fmt: '"' + pageName + '" çawa tê telafûzkirin?',
// pronTpls populated from data.json
pronTpls: {},
visible: function (values) {
if (!values.lang) return false;
// addLangMode: skip pron only if this lang already has a section.
if (addLangMode) {
// Clearing the page makes existing content irrelevant.
var clearPageCheck = $("#wiktku-clear-page-check");
if (clearPageCheck.length && clearPageCheck.prop("checked")) {
return true;
}
var existing = $("#wpTextbox1").val() || "";
return !findLangHeader(existing, values.lang);
}
return true;
},
// Fills the insert-dropdown from pronTpls, filtered by language.
refreshTplSelect: function () {
var sel = $("#wiktku-start-pron .wiktku-tpl-insert-select");
if (!sel.length) return;
var lang = getValues().lang || "";
sel.find("option[value!='']").remove();
$.each(steps.pron.pronTpls, function (name, tpl) {
// Filter: if tpl.langs exists, only show if lang is in that list; otherwise show always
var allowed = !tpl.langs || tpl.langs.indexOf(lang) !== -1;
if (allowed) {
sel.append($("<option></option>")
.val(tpl.snippet)
.text(name + " — " + tpl.desc)
.attr("data-nolang", tpl.noLang ? "1" : ""));
}
});
markTemplateOptions(sel, function (opt) { return tplNameFromSnippet(opt.val()); });
// Tell the picker the option list changed.
sel.trigger("wiktku:refresh");
},
build: function (stepDiv) {
if (stepDiv.find(".wiktku-pron-wrap").length) return null;
var wrap = $("<div class='wiktku-pron-wrap'></div>");
// Rewiye tine, 14 Tebax 2026: "berê bilêvkirin otomatîk
// çêdibû, niha zehmettir e ji bo yekî nezan — gelek şablon
// hene, kîjan were hilbijartin?" A one-line reassurance:
// this field is optional, and the dropdown below writes the
// template for you — no need to know the syntax up front.
wrap.append(
$("<p class='wiktku-step-hint'></p>").text(
"Ev qad ne mecbûrî ye. Heke tu nizanî kîjan şablonî hilbijêrî, vale bihêle — an ji pêşkêşkariya jêrîn şablonekî hilbijêre, ew ê bixweber li vir were nivîsandin."
)
);
var ta = $("<textarea></textarea>")
.attr("name", "wiktku-pron-" + $.now())
.attr("class", "wiktku-start-step-field wiktku-pron-text")
.attr("rows", 4)
.attr("placeholder", "Nimûne: {{IPA|ku|/pɛɪ̯n/}} yan {{kîte|ku|he|ce|ki|rin}}");
// Template insert dropdown — filtered by language.
var sel = $("<select class='wiktku-tpl-insert-select'></select>");
sel.attr("data-placeholder", "Şablonek lê zêde bike ");
sel.append($("<option value=''>— şablonek lê zêde bike —</option>"));
var lang = getValues().lang || "";
$.each(steps.pron.pronTpls, function (name, tpl) {
// Filter: if tpl.langs exists, only show if lang is in that list; otherwise show always
var allowed = !tpl.langs || tpl.langs.indexOf(lang) !== -1;
if (allowed) {
sel.append($("<option></option>")
.val(tpl.snippet)
.text(name + " — " + tpl.desc)
.attr("data-nolang", tpl.noLang ? "1" : ""));
}
});
sel.on("change", function () {
var snippet = $(this).val();
if (!snippet) return;
var lang = getValues().lang || "";
// Check if the selected option has noLang flag
var selectedOption = sel.find("option:selected");
var hasNoLang = selectedOption.attr("data-nolang") === "1";
if (!hasNoLang) {
snippet = snippet.replace(/CODE/g, lang).replace(/SOURCELANG/g, "?");
insertAtCursor(ta[0], snippet);
$(this).val("");
// Clear the picker's search box
sel.trigger("wiktku:refresh");
ta.focus();
return;
}
// Item 5 (Wikihez, 14 Tebax 2026): the noLang templates
// (ku-IPA, ku-kîte, zza-IPA, zza-kîte) auto-generate
// their actual content from a Lua module reading the
// page title — "{{ku-IPA}}" alone gives no hint what
// that'll render as, so show a live preview and require
// confirmation before inserting, instead of an inline
// prompt()/confirm() dialog.
var tplLabel = selectedOption.text();
$(this).val("");
sel.trigger("wiktku:refresh");
steps.pron.showTplPreview(stepDiv, ta, snippet, tplLabel);
});
wrap.append(sel).append(ta);
stepDiv.append(wrap);
steps.pron.buildIpaPalette(wrap, ta);
initSelects(wrap);
return ta;
},
// ── IPA character palette (v3 spec, 15 Tebax 2026) ───────────
// Modelled on fr.wiktionary's: every character is a button that
// drops itself in at the cursor. Two sub-tabs, because the full
// IPA chart is ~180 symbols and roughly twenty of them ever
// appear in Kurmancî — "IPA (kurdî)" opens by default and the
// full chart is one click away for loanwords and other
// languages. Grouped with a label down the left so it reads as
// a chart rather than one long line of glyphs.
IPA_KU: [
{ label: "Kît/stres", chars: ["ˈ", "ˌ", "ː"] },
{ label: "Bêdeng", chars: ["d͡ʒ", "t͡ʃ", "ʒ", "ʃ", "ɫ", "ŋ", "ɾ", "r", "ʋ", "ħ", "ʕ", "ɣ", "χ", "ʔ"] },
{ label: "Dengdêr", chars: ["ɑː", "eː", "ɛ", "ɪ", "iː", "ɯ", "ʊ", "uː", "yː", "ø", "œ"] }
],
IPA_FULL: [
{ label: "Bêdeng 1", chars: ["m", "ɱ", "n", "ɳ", "ɲ", "ŋ", "ɴ", "p", "b", "t", "d", "t̪", "d̪", "ʈ", "ɖ", "c", "ɟ", "k", "ɡ", "q", "ɢ", "ʡ", "ʔ"] },
{ label: "Bêdeng 2", chars: ["ɸ", "β", "f", "v", "θ", "ð", "s", "z", "ʃ", "ʒ", "ʂ", "ʐ", "ɕ", "ʑ", "ç", "ʝ", "x", "ɣ", "χ", "ʁ", "ħ", "ʕ", "h", "ɦ", "ʜ", "ʢ", "ɧ"] },
{ label: "Bêdeng 3", chars: ["ʋ", "ɹ", "ɻ", "j", "ɥ", "ɰ", "ʍ", "w", "ʙ", "ⱱ", "ɾ", "ɽ", "r", "ʀ", "ɺ", "l", "ɫ", "ɬ", "ɮ", "ɭ", "ʎ", "ʟ"] },
{ label: "Bêdeng 4", chars: ["ɓ", "ɗ", "ᶑ", "ʄ", "ɠ", "ʛ", "ʘ", "ǀ", "ǃ", "ǂ", "ǁ"] },
{ label: "Dengdêr", chars: ["i", "y", "ɪ", "ʏ", "ɨ", "ʉ", "ɯ", "u", "ʊ", "e", "ø", "ɘ", "ɵ", "ɤ", "o", "ə", "ɚ", "ɛ", "œ", "ɜ", "ɝ", "ɞ", "ʌ", "ɔ", "æ", "ɶ", "ɐ", "a", "ɑ", "ɒ"] },
{ label: "Suprasegmental", chars: ["ˈ", "ˌ", "ː", "ˑ", "ʼ", "ˀ", "ˤ", "ᵝ", "ᵊ", "ˠ", "ʰ", "ʱ", "ʲ", "ˡ", "ⁿ", "ᵑ", "ʷ", "ᶣ", "˞", "‿"] },
{ label: "Dîakrîtîk", chars: ["̚", "̪", "̺", "̻", "̼", "̬", "̊", "̥", "̞", "̝", "̘", "̙", "̽", "̟", "̠", "̈", "̤", "̹", "̜", "̍", "̩", "̆", "̯", "̃", "̰", "͡", "͜"] },
{ label: "Ton", chars: ["̋", "́", "̄", "̀", "̏", "̌", "̂", "˥", "˦", "˧", "˨", "˩", "ꜛ", "ꜜ", "↗", "↘", "‖"] }
],
/** Builds the two-sub-tab character palette under the textarea. */
buildIpaPalette: function (wrap, ta) {
if (wrap.find(".wiktku-ipa-palette").length) return;
var panel = $("<div class='wiktku-ipa-panel'></div>").hide();
var toggle = $("<a href='#' class='wiktku-adv-toggle'></a>")
.attr("aria-expanded", "false")
.append($("<span class='wiktku-adv-toggle-chevron'>▾</span>"))
.append($("<span class='wiktku-adv-toggle-text'>Tîpên bilêvkirinê</span>"));
toggle.on("click", function (e) {
e.preventDefault();
var open = panel.is(":visible");
panel.toggle(!open);
$(this).attr("aria-expanded", open ? "false" : "true")
.toggleClass("wiktku-adv-open", !open);
});
wrap.append($("<div class='wiktku-adv-toggle-row'></div>").append(toggle));
// Sub-tab bar, with the two template buttons pinned right.
var subTabs = $("<div class='wiktku-ipa-subtabs'></div>");
var kuTab = $("<span class='wiktku-ipa-subtab wiktku-tab-active'>IPA (kurdî)</span>");
var fullTab = $("<span class='wiktku-ipa-subtab'>IPA</span>");
subTabs.append(kuTab).append(fullTab);
var tplBtns = $("<span class='wiktku-ipa-tplbtns'></span>");
$.each([
{ label: "{{ku-IPA|+}}", snippet: "{{ku-IPA|}}", back: 2 },
{ label: "{{IPA|+}}", snippet: "{{IPA|ku|}}", back: 2 }
], function (_, t) {
var b = $("<button type='button' class='wiktku-ipa-tplbtn'></button>").text(t.label);
b.on("click", function (e) {
e.preventDefault();
insertAtCursor(ta[0], t.snippet);
// Park the cursor inside the braces, where the value goes.
var pos = ta[0].selectionStart - t.back;
ta[0].selectionStart = ta[0].selectionEnd = pos;
ta.focus();
});
tplBtns.append(b);
});
subTabs.append(tplBtns);
panel.append(subTabs);
function buildGrid(groups) {
var grid = $("<div class='wiktku-ipa-grid'></div>");
$.each(groups, function (_, g) {
var row = $("<div class='wiktku-ipa-row'></div>");
row.append($("<span class='wiktku-ipa-rowlabel'></span>").text(g.label));
var keys = $("<span class='wiktku-ipa-keys'></span>");
$.each(g.chars, function (_, ch) {
var btn = $("<button type='button' class='wiktku-ipa-key'></button>");
// A combining mark on its own renders as a stray
// accent floating over whatever precedes it, so
// show it on a dotted circle — but insert only
// the mark itself.
var combining = /^[̀-ͯ҃-҉]$/.test(ch);
btn.text(combining ? "◌" + ch : ch);
if (combining) btn.addClass("wiktku-ipa-key-combining");
btn.attr("title", ch);
btn.on("click", function (e) {
e.preventDefault();
insertAtCursor(ta[0], ch);
ta.focus();
});
keys.append(btn);
});
row.append(keys);
grid.append(row);
});
return grid;
}
var kuGrid = buildGrid(steps.pron.IPA_KU);
var fullGrid = buildGrid(steps.pron.IPA_FULL).hide();
panel.append(kuGrid).append(fullGrid);
kuTab.on("click", function () {
kuTab.addClass("wiktku-tab-active"); fullTab.removeClass("wiktku-tab-active");
kuGrid.show(); fullGrid.hide();
});
fullTab.on("click", function () {
fullTab.addClass("wiktku-tab-active"); kuTab.removeClass("wiktku-tab-active");
fullGrid.show(); kuGrid.hide();
});
panel.addClass("wiktku-ipa-palette");
wrap.append(panel);
},
/** Item 5: inline preview + confirm panel for a "noLang" (auto-
* content) pronunciation template — fetches what the snippet
* actually expands to for this page (via action=expandtemplates,
* so the preview is exactly what {{ku-IPA}} etc. would produce)
* and only inserts it into the textarea if the user confirms. */
showTplPreview: function (stepDiv, ta, snippet, tplLabel) {
// Only one preview panel open at a time.
stepDiv.find(".wiktku-pron-preview").remove();
var panel = $("<div class='wiktku-pron-preview'></div>");
panel.append($("<div class='wiktku-pron-preview-label'></div>")
.text("Pêşdîtina " + tplLabel + ":"));
var body = $("<div class='wiktku-pron-preview-body'></div>").text("Tê barkirin…");
panel.append(body);
var actions = $("<div class='wiktku-pron-preview-actions'></div>");
var confirmBtn = $("<button type='button' class='wiktku-pron-preview-confirm'>✓ Tevlî bike</button>")
.prop("disabled", true);
var cancelBtn = $("<button type='button' class='wiktku-pron-preview-cancel'>✕ Betal bike</button>");
actions.append(confirmBtn).append(cancelBtn);
panel.append(actions);
ta.before(panel);
confirmBtn.on("click", function () {
insertAtCursor(ta[0], snippet);
panel.remove();
ta.focus();
});
cancelBtn.on("click", function () {
panel.remove();
});
new mw.Api().post({
action: "expandtemplates",
text: snippet,
title: pageName,
prop: "wikitext",
formatversion: 2
}).done(function (data) {
var wikitext = $.trim((data && data.expandtemplates && data.expandtemplates.wikitext) || "");
// Drop the leading "* " bullet (part of the wikitext
// list-item syntax, not the template's own output) so
// the preview shows just what the template rendered.
wikitext = wikitext.replace(/^\*\s*/, "");
body.text(wikitext || "(vala — vê rûpelê re tiştek nehate afirandin)");
confirmBtn.prop("disabled", false);
}).fail(function () {
body.text("Pêşdîtin nehate barkirin — tu dikarî hîn jî wê tevlî bikî.");
confirmBtn.prop("disabled", false);
});
},
output: function () {
var text = $.trim($("#wiktku-start-pron .wiktku-pron-text").val());
if (!text) return "";
var lines = text.split("\n");
var out = $.map(lines, function (line) {
line = $.trim(line);
if (!line) return undefined;
return line;
}).join("\n");
// Back to "===", under Ziman and above the POS sections
// (v3 spec, 15 Tebax 2026). It had been nested at "===="
// inside each POS section per Ghybu's earlier note, but the
// field is shared across sections, so a two-POS entry
// printed the identical pronunciation twice — once under
// Navdêr and once under Lêker. Emitted once by getWikitext()
// now, not by getWikitextForCurrentSection().
return "\n=== Bilêvkirin ===\n" + out + "\n";
} },
pos: {
id: "pos",
required: true,
name: "Cureyê rêzimanî",
question_fmt: 'Cureyê rêzimanî yê "' + pageName + '" çi ye?',
visible: function (values) {
return values.lang;
},
question_br: true,
// Populated from [[MediaWiki:Gadget-start.js/data.json]] (posChoices).
choices: [],
output: function (values) {
var pos = values.pos || "";
var capitalizedPos = capitalize(pos);
// "form" opt-param (checked in posparams) marks this as a
// form-of/inflected entry — the section title becomes
// "Formeke <pos>ê" instead of the plain pos name. The
// template call itself still uses the unchanged pos name.
var isForm = $("#wiktku-posparams-opt-form").is(":checked");
var header = isForm
? "\n=== Formeke " + pos + "ê ===\n"
: "\n=== " + capitalizedPos + " ===\n";
// Image line (between header and template call)
var imageLine = steps.resim.output(values);
// Read the live wikitext from the posparams textarea.
// Fall back to a plain {{pos|lang}} if the step hasn't been built yet.
var tplLine = $.trim($("#wiktku-start-posparams .wiktku-posparams-text").val());
if (!tplLine) {
tplLine = "{{" + pos + "|" + (values.lang || "") + "}}";
}
return header + imageLine + tplLine + "\n";
}
},
// cinsiyet (gender) — shown for navdêr/serenav only, with choices built
// from metadata[lang].g since not every language has grammatical gender.
cinsiyet: {
id: "cinsiyet",
name: "cinsiyet",
question_fmt: 'Cinsiyeta "' + pageName + '" çi ye?',
question_br: true,
visible: function () { return false; }, // handled inside posparams
// Single source of truth for the selected gender code. The visible
// dropdown lives inside the posparams step (see steps.posparams),
// but it must always read/write THIS hidden field — not a field of
// its own — since getValuesForStep("cinsiyet") reads from here.
build: function (stepDiv) {
var field = stepDiv.find(".wiktku-start-step-field");
if (field.length) return field;
field = $("<input type='hidden'>")
.addClass("wiktku-start-step-field")
.attr("id", "wiktku-start-cinsiyet-field")
.val("");
stepDiv.append(field);
return field;
},
output: function () { return ""; } // consumed by posparams/pos.output
},
// Item 1 (Wikihez, 14 Tebax 2026): jimar (grammatical number) — same
// hidden-field pattern as cinsiyet just above, but writes into its
// own j= template parameter instead of sharing c=. Shown for
// navdêr/serenav only, with choices built from whichever of
// metadata[lang].g are number codes (see isNumberCode) — mirrors
// cinsiyet exactly, just filtered to the other half of that list.
jimar: {
id: "jimar",
name: "jimar",
question_fmt: 'Jimara "' + pageName + '" çi ye?',
question_br: true,
visible: function () { return false; }, // handled inside posparams
build: function (stepDiv) {
var field = stepDiv.find(".wiktku-start-step-field");
if (field.length) return field;
field = $("<input type='hidden'>")
.addClass("wiktku-start-step-field")
.attr("id", "wiktku-start-jimar-field")
.val("");
stepDiv.append(field);
return field;
},
output: function () { return ""; } // consumed by posparams/pos.output
},
// Lêker transitivity — hidden step, handled inside posparams
lektur: {
id: "lektur",
name: "Cureyê lêkerê (fiîlê)",
question_fmt: "Cureyê lêkerê (fiîlê) çi ye?",
question_br: true,
visible: function () { return false; },
choices: [
{ code: "gh", label: "gerguhêz" },
{ code: "x-gh", label: "xwerû-gerguhêz" },
{ code: "p-gh", label: "pêkhatî-gerguhêz" },
{ code: "h-gh", label: "hevedudanî-gerguhêz" },
{ code: "b-gh", label: "biwêjî-gerguhêz" },
{ code: "ngh", label: "negerguhêz" },
{ code: "x-ngh", label: "xwerû-negerguhêz" },
{ code: "p-ngh", label: "pêkhatî-negerguhêz" },
{ code: "h-ngh", label: "hevedudanî-negerguhêz" },
{ code: "b-ngh", label: "biwêjî-negerguhêz" } ],
output: function () { return ""; }
},
// tr — hidden step, handled inside posparams
tr: {
id: "tr",
name: "transliterasyon",
question_fmt: "Transliterasyona vê kelîmeyê",
multiple: false,
narrow: true,
visible: function () { return false; }
},
posparams: {
id: "posparams",
// Fused onto the "pos" card visually (see #wiktku-start-posparams
// in styles.css) so the two read as ONE question, per Ghybu's
// 14 Tebax 2026 feedback — this name is only a no-CSS/no-JS
// fallback, since the h3 that would show it is hidden by CSS.
name: "taybetmendî",
// The old static "Parametreyên cureyê rêzimanî" label named the
// mechanism, not the content. Show what's actually being asked
// for instead: gender for nouns, verb type for verbs, a generic
// fallback (transliteration/forms etc. still apply) otherwise.
question_fmt: function (values) {
var pos = values.pos || "";
if (pos === "navdêr" || pos === "serenav") return "Cins/zayend";
if (/^lêker/.test(pos)) return "Cureyê lêkerê";
return "Taybetmendî";
},
visible: function (values) {
return !!(values.lang && values.pos);
},
build: function (stepDiv) {
if (stepDiv.find(".wiktku-posparams-wrap").length) return null;
var wrap = $("<div class='wiktku-posparams-wrap'></div>");
var helpers = $("<div class='wiktku-posparams-helpers'></div>");
var ta = $("<textarea></textarea>")
.attr("name", "wiktku-posparams-" + $.now())
.attr("class", "wiktku-start-step-field wiktku-posparams-text")
.attr("rows", 2);
var _rebuilding = false;
function safeRebuild() {
if (_rebuilding) return;
_rebuilding = true;
steps.posparams.rebuildTa(stepDiv);
_rebuilding = false;
refresh();
}
// Generic text-input row factory
function makeTextRow(key, labelText, placeholder) {
var row = $("<div class='wiktku-posparams-row'></div>")
.attr("id", "wiktku-posparams-row-" + key).hide();
var inp = $("<input type='text'>")
.addClass("wiktku-start-narrow wiktku-posparams-field")
.attr("data-pp-key", key)
.attr("placeholder", placeholder || "");
inp.on("input", safeRebuild);
row.append($("<label></label>").text(labelText + ": ")).append(inp);
return row;
}
// cinsiyet
var cinsiyetRow = $("<div class='wiktku-posparams-row' id='wiktku-posparams-row-c'></div>")
.append($("<label></label>").text("Cinsiyet: ")).hide();
var cinsiyetSel = $("<select></select>")
.addClass("wiktku-plain-select wiktku-start-narrow wiktku-posparams-cinsiyet-sel")
.append($("<option value=''>— hilbijêre —</option>"));
// Writes into the real, shared #wiktku-start-cinsiyet-field (owned by
// steps.cinsiyet) rather than a field of its own — see the comment
// on steps.cinsiyet.build for why that matters.
cinsiyetSel.on("change", function () {
$("#wiktku-start-cinsiyet-field").val($(this).val()).trigger("change");
safeRebuild();
});
cinsiyetRow.append(cinsiyetSel);
// Item 1 (Wikihez, 14 Tebax 2026): jimar (number) — a second
// dropdown next to Cinsiyet, same pattern (writes into the
// shared hidden #wiktku-start-jimar-field), but into its own
// j= param instead of sharing c=. Options + the title
// tooltip (explanation) are built in syncHelpers, once the
// language's number codes are known.
var jimarRow = $("<div class='wiktku-posparams-row' id='wiktku-posparams-row-jimar'></div>")
.append($("<label></label>").text("Jimar: ")).hide();
var jimarSel = $("<select></select>")
.addClass("wiktku-plain-select wiktku-start-narrow wiktku-posparams-jimar-sel")
.append($("<option value=''>— hilbijêre —</option>"));
jimarSel.on("change", function () {
$("#wiktku-start-jimar-field").val($(this).val()).trigger("change");
safeRebuild();
});
jimarRow.append(jimarSel);
// lektur — Ghybu, 14 Tebax 2026: "'Cureyê lêkerê' nayê fêm
// kirin, bi min pêşta 'gerguhez/negerguhêz' were hilbijartin,
// paşê jî form 'hevdudanî/pêkatî/…' ji ber ku her kes vana
// nizanî." So the one 10-option dropdown ("xwerû-gerguhêz",
// "biwêjî-negerguhêz", …) becomes two plain questions. The
// emitted code is unchanged: base alone ("gh"), or prefix +
// "-" + base ("x-gh") — exactly the codes steps.lektur.choices
// already listed, just assembled from two answers instead of
// asked as one.
var lekturRow = $("<div class='wiktku-posparams-row' id='wiktku-posparams-row-lektur'></div>")
.append($("<label></label>").text("Lêker derbasdar e? ")).hide();
var lekturSel = $("<select></select>")
.addClass("wiktku-plain-select wiktku-start-narrow wiktku-posparams-lektur-sel")
.append($("<option value=''>— hilbijêre —</option>"))
.append($("<option value='gh'>gerguhêz (bireser digire)</option>"))
.append($("<option value='ngh'>negerguhêz (bireser nagire)</option>"));
lekturSel.on("change", safeRebuild);
lekturRow.append(lekturSel);
// Second half of the same question — the structural form.
// Blank = xwerû/sade, which is the common case.
var lekturFormRow = $("<div class='wiktku-posparams-row' id='wiktku-posparams-row-lekturform'></div>")
.append($("<label></label>").text("Şiklê lêkerê: ")).hide();
var lekturFormSel = $("<select></select>")
.addClass("wiktku-plain-select wiktku-start-narrow wiktku-posparams-lekturform-sel")
.append($("<option value=''>sade (asayî)</option>"))
.append($("<option value='x'>xwerû</option>"))
.append($("<option value='p'>pêkhatî</option>"))
.append($("<option value='h'>hevedudanî</option>"))
.append($("<option value='b'>biwêjî</option>"));
lekturFormSel.on("change", safeRebuild);
lekturFormRow.append(lekturFormSel);
helpers.append(cinsiyetRow).append(jimarRow).append(lekturRow).append(lekturFormRow);
// ── Everything below here is "Tercîhên pêşketî" ──────────────
// Ghybu, 14 Tebax 2026: "Tenê 'cîns' û 'jimar' bes e. 'Forma
// mê', 'Forma nêr', … nayê fêm kirin. Bi min wekî 'Tercîhên
// pêşketî' bi navkî din veşartî çêke." The rows themselves are
// unchanged and syncHelpers still shows/hides each one by id
// exactly as before — they just live inside a collapsed panel
// now, so the default view of this card is two dropdowns
// instead of twenty-odd fields.
var advPanel = $("<div class='wiktku-posparams-adv-panel'></div>").hide();
advPanel
.append(makeTextRow("cuda", "nîşankirina alternatîv", "cuda…"))
.append(makeTextRow("tr", "Transliterasyon (tr)", "Transliterasyon…"))
.append(makeTextRow("ts", "Transkrîpsiyon (ts)", "Transkrîpsiyon…"))
.append(makeTextRow("m", "Forma mê (m)", "Forma mê…"))
.append(makeTextRow("mtr", "Translit. mê (mtr)", "Transliterasyona mê…"))
.append(makeTextRow("n", "Forma nêr (n)", "Forma nêr…"))
.append(makeTextRow("ntr", "Translit. nêr (ntr)", "Transliterasyona nêr…"))
.append(makeTextRow("p", "Forma pirjimar (p)", "Forma pirjimar…"))
.append(makeTextRow("ptr", "Translit. pirjimar", "Transliterasyona pirjimar…"))
.append(makeTextRow("y", "Forma yekjimar (y)", "Forma yekjimar…"))
.append(makeTextRow("ytr", "Translit. yekjimar", "Transliterasyona yekjimar…"))
.append(makeTextRow("sûp", "Forma sûperlatîv (sûp)", "Forma sûperlatîv…"))
.append(makeTextRow("sûptr", "Translit. sûperlatîv", "Transliterasyona sûperlatîv…"))
.append(makeTextRow("komp", "Forma komparatîv (komp)", "Forma komparatîv…"))
.append(makeTextRow("komptr", "Translit. komparatîv", "Transliterasyona komparatîv…"))
.append(makeTextRow("gir", "Forma girdêk (gir)", "gir=…"))
.append(makeTextRow("girtr", "Translit. gir", "girtr=…"))
.append(makeTextRow("hûr", "Forma hûrek (hûr)", "hûr=…"))
.append(makeTextRow("hûrtr", "Translit. hûr", "hûrtr=…"))
.append(makeTextRow("hanja", "Forma hanja", "hanja=…"))
.append(makeTextRow("hanjaTr","Translit. hanja", "hanjaTr=…"))
// Lêker rehên demê (only shown when pos is lêker — see syncHelpers)
.append(makeTextRow("niha", "Rehê dema niha (niha)", "Rehê dema niha…"))
.append(makeTextRow("nihatr", "Translit. rehê dema niha", "Transliterasyona rehê dema niha…"))
.append(makeTextRow("borî", "Rehê dema borî (borî)", "Rehê dema borî…"))
.append(makeTextRow("borîtr", "Translit. rehê dema borî", "Transliterasyona rehê dema borî…"))
.append(makeTextRow("subj", "Rehê dema bilanî (subj)", "Rehê dema bilanî…"))
.append(makeTextRow("subjtr", "Translit. rehê dema bilanî", "Transliterasyona rehê dema bilanî…"));
// Optional boolean params — nested inside the advanced panel
// (they were already the most niche thing on the card).
var optPanel = $("<div class='wiktku-posparams-opt-panel'></div>");
$.each([
{ key: "form", label: "form — ev made forma tewandî ye" },
{ key: "formaalt", label: "formaalt — vê madeyê bike forma alternatîv" },
{ key: "nekatcure", label: "nekatcure — sinifa rêzimanî kategorîze neke" },
{ key: "nekatcins", label: "nekatcins — kategoriya cinsiyetê neyîne" },
{ key: "nekatçendterm", label: "nekatçendterm — kategoriya çend-term neyîne" },
{ key: "serlînkneke", label: "serlînkneke — sernavê madeyê lînk neke" },
{ key: "nekatpalîndrom", label: "nekatpalîndrom — kategoriya palîndromê neyîne" },
{ key: "neformtr", label: "neformtr — transliterasyona forman neyîne" }
], function (_, p) {
var cb = $("<input type='checkbox'>")
.attr("id", "wiktku-posparams-opt-" + p.key).val(p.key).on("change", safeRebuild);
var lbl = $("<label></label>").attr("for", "wiktku-posparams-opt-" + p.key).text(" " + p.label);
optPanel.append($("<div class='wiktku-posparams-opt-row'></div>").append(cb).append(lbl));
});
advPanel.append(optPanel);
var optToggle = $("<a href='#' class='wiktku-posparams-opt-toggle wiktku-adv-toggle'></a>")
.attr("aria-expanded", "false")
.append($("<span class='wiktku-adv-toggle-chevron'>▾</span>"))
.append($("<span class='wiktku-adv-toggle-text'>Tercîhên pêşketî</span>"));
var optCount = $("<span class='wiktku-adv-toggle-count'></span>");
/** "N zevî · M tije" for whatever the advanced panel is
* currently showing — the row set changes with pos/lang (see
* syncHelpers), so this counts visible rows, not all of them. */
function syncAdvCount() {
var rows = advPanel.find(".wiktku-posparams-row").filter(function () {
return $(this).css("display") !== "none";
});
var filled = rows.filter(function () {
return $.trim($(this).find("input").val() || "") !== "";
}).length;
var checked = advPanel.find(".wiktku-posparams-opt-panel input:checked").length;
optCount.text(rows.length + " zevî · " + (filled + checked) + " tije");
}
stepDiv.data("syncAdvCount", syncAdvCount);
optToggle.on("click", function (e) {
e.preventDefault();
var open = advPanel.is(":visible");
advPanel.toggle(!open);
$(this).attr("aria-expanded", open ? "false" : "true")
.toggleClass("wiktku-adv-open", !open);
syncAdvCount();
});
advPanel.on("input change", "input", syncAdvCount);
helpers.append($("<div class='wiktku-adv-toggle-row'></div>")
.append(optToggle).append(optCount));
helpers.append(advPanel);
wrap.append(helpers).append(ta);
// Typing directly in textarea keeps cinsiyet/jimar hidden
// fields in sync, but does NOT call refresh() — preserves
// manual edits.
ta.on("input", function () {
var text = $(this).val();
var cMatch = text.match(/\|c=([^|}\s]+)/);
$("#wiktku-start-cinsiyet-field").val(cMatch ? cMatch[1] : "");
var jMatch = text.match(/\|j=([^|}\s]+)/);
$("#wiktku-start-jimar-field").val(jMatch ? jMatch[1] : "");
});
stepDiv.append(wrap);
return null;
},
/** Reads all helper widget values and rewrites the textarea.
* Called only by safeRebuild (user interaction) — never by syncHelpers,
* so manual textarea edits are never overwritten by a refresh cycle. */
rebuildTa: function (stepDiv) {
var values = getValues();
var pos = values.pos || "";
var lang = values.lang || "";
if (!pos || !lang) return;
var cinsiyet = stepDiv.find(".wiktku-posparams-cinsiyet-sel").val() || "";
var jimar = stepDiv.find(".wiktku-posparams-jimar-sel").val() || "";
// Two dropdowns, one code: "gh" / "ngh" on their own, or
// prefixed with the structural form ("x-gh", "b-ngh", …).
var lekturBase = stepDiv.find(".wiktku-posparams-lektur-sel").val() || "";
var lekturForm = stepDiv.find(".wiktku-posparams-lekturform-sel").val() || "";
var lektur = lekturBase ? (lekturForm ? lekturForm + "-" + lekturBase : lekturBase) : "";
function v(key) {
return $.trim(stepDiv.find(".wiktku-posparams-field[data-pp-key='" + key + "']").val());
}
var out = "{{" + pos + "|" + lang;
if (pos === "navdêr" || pos === "serenav") {
out += cinsiyet ? "|c=" + cinsiyet : (lang === "ku" ? "|c=?" : "");
// Item 1: number is its own j= param now, separate from
// c= — c= keeps holding gender (and gender+plural
// compounds like m-p/n-p, unaffected by this change).
if (jimar) out += "|j=" + jimar;
} else if (/^lêker/.test(pos) && lektur) {
out += "|c=" + lektur;
}
if (v("cuda")) out += "|" + v("cuda");
if (v("tr")) out += "|tr=" + v("tr");
if (v("ts")) out += "|ts=" + v("ts");
$.each(["m","n","p","y"], function (_, k) {
if (v(k)) out += "|" + k + "=" + v(k);
if (v(k+"tr")) out += "|" + k + "tr=" + v(k+"tr");
});
if (v("sûp")) out += "|sûp=" + v("sûp");
if (v("sûptr")) out += "|sûptr=" + v("sûptr");
if (v("komp")) out += "|komp=" + v("komp");
if (v("komptr")) out += "|komptr=" + v("komptr");
if (v("gir")) out += "|gir=" + v("gir");
if (v("girtr")) out += "|girtr=" + v("girtr");
if (v("hûr")) out += "|hûr=" + v("hûr");
if (v("hûrtr")) out += "|hûrtr=" + v("hûrtr");
if (v("hanja")) out += "|hanja=" + v("hanja");
if (v("hanjaTr")) out += "|hanjaTr=" + v("hanjaTr");
if (v("niha")) out += "|niha=" + v("niha");
if (v("nihatr")) out += "|nihatr=" + v("nihatr");
if (v("borî")) out += "|borî=" + v("borî");
if (v("borîtr")) out += "|borîtr=" + v("borîtr");
if (v("subj")) out += "|subj=" + v("subj");
if (v("subjtr")) out += "|subjtr=" + v("subjtr");
stepDiv.find(".wiktku-posparams-opt-panel input:checked").each(function () {
var key = $(this).val();
// "form" marks this entry as a form-of/inflected entry — it
// takes "erê" rather than the plain "1" the other boolean
// opt params use.
out += "|" + key + "=" + (key === "form" ? "erê" : "1");
});
out += "}}";
stepDiv.find(".wiktku-posparams-text").val(out);
$("#wiktku-start-cinsiyet-field").val(cinsiyet);
$("#wiktku-start-jimar-field").val(jimar);
},
/** Called from refresh() — controls row visibility only.
* Does NOT rewrite textarea so user edits are preserved.
* Rebuilds only when textarea is empty (first pos selection). */
syncHelpers: function (stepDiv) {
var values = getValues();
var pos = values.pos || "";
var lang = values.lang || "";
var needsTr = needsTransliteration(lang);
var isNom = pos === "navdêr" || pos === "serenav" || pos === "rengdêr";
var isAdj = pos === "rengdêr";
var isTîp = pos === "tîp";
var isJa = lang === "ja";
var isLeker = /^lêker/.test(pos);
// Item 1: metadata[lang].g used to list gender AND number
// codes together — split them here (see isNumberCode) so
// Cîns only ever offers gender codes (and gender+plural
// compounds like m-p/n-p, which aren't NUMBER_LABELS keys)
// and the new Jimar dropdown only offers number codes.
var meta = metadata[lang];
var allCodes = (meta && meta.g) || [];
var genderCodes = $.grep(allCodes, function (c) { return !isNumberCode(c); });
var jimarCodes = $.grep(allCodes, function (c) { return isNumberCode(c); });
var showC = (pos === "navdêr" || pos === "serenav") && genderCodes.length > 0;
var cRow = stepDiv.find("#wiktku-posparams-row-c");
cRow.toggle(showC);
if (showC) {
var sel = cRow.find(".wiktku-posparams-cinsiyet-sel");
// Prefer the select's own current value (normal in-session
// use); fall back to the shared hidden field, which is how
// a cache/section restore communicates a saved gender
// before this select has any <option>s to hold it.
var prev = sel.val() || $("#wiktku-start-cinsiyet-field").val() || "";
sel.find("option[value!='']").remove();
$.each(genderCodes, function (_, code) {
sel.append($("<option></option>").val(code).text(genderLabel(code)));
});
if (prev) sel.val(prev);
}
var showJimar = (pos === "navdêr" || pos === "serenav") && jimarCodes.length > 0;
var jimarRowEl = stepDiv.find("#wiktku-posparams-row-jimar");
jimarRowEl.toggle(showJimar);
if (showJimar) {
var jimarSelEl = jimarRowEl.find(".wiktku-posparams-jimar-sel");
var prevJimar = jimarSelEl.val() || $("#wiktku-start-jimar-field").val() || "";
jimarSelEl.find("option[value!='']").remove();
$.each(jimarCodes, function (_, code) {
var def = NUMBER_LABELS[code] || {};
var opt = $("<option></option>").val(code).text(numberOptionLabel(code));
// The explanation (cat, e.g. "dualia tantum") shows as a
// hover tooltip — <option> can't hold richer markup.
if (def.cat) opt.attr("title", def.cat);
jimarSelEl.append(opt);
});
if (prevJimar) jimarSelEl.val(prevJimar);
}
stepDiv.find("#wiktku-posparams-row-lektur").toggle(isLeker);
// Only ask for the structural form once the person has said
// gerguhêz/negerguhêz — "paşê jî form", per Ghybu.
stepDiv.find("#wiktku-posparams-row-lekturform")
.toggle(isLeker && !!stepDiv.find(".wiktku-posparams-lektur-sel").val());
stepDiv.find("#wiktku-posparams-row-tr").toggle(needsTr);
stepDiv.find("#wiktku-posparams-row-ts").toggle(needsTr);
stepDiv.find("#wiktku-posparams-row-m").toggle(isNom);
stepDiv.find("#wiktku-posparams-row-mtr").toggle(isNom && needsTr);
stepDiv.find("#wiktku-posparams-row-n").toggle(isNom);
stepDiv.find("#wiktku-posparams-row-ntr").toggle(isNom && needsTr);
stepDiv.find("#wiktku-posparams-row-p").toggle(isNom);
stepDiv.find("#wiktku-posparams-row-ptr").toggle(isNom && needsTr);
stepDiv.find("#wiktku-posparams-row-y").toggle(isNom);
stepDiv.find("#wiktku-posparams-row-ytr").toggle(isNom && needsTr);
stepDiv.find("#wiktku-posparams-row-sûp").toggle(isAdj);
stepDiv.find("#wiktku-posparams-row-sûptr").toggle(isAdj && needsTr);
stepDiv.find("#wiktku-posparams-row-komp").toggle(isAdj);
stepDiv.find("#wiktku-posparams-row-komptr").toggle(isAdj && needsTr);
stepDiv.find("#wiktku-posparams-row-gir").toggle(isTîp);
stepDiv.find("#wiktku-posparams-row-girtr").toggle(isTîp && needsTr);
stepDiv.find("#wiktku-posparams-row-hûr").toggle(isTîp);
stepDiv.find("#wiktku-posparams-row-hûrtr").toggle(isTîp && needsTr);
stepDiv.find("#wiktku-posparams-row-hanja").toggle(isJa);
stepDiv.find("#wiktku-posparams-row-hanjaTr").toggle(isJa);
stepDiv.find("#wiktku-posparams-row-niha").toggle(isLeker);
stepDiv.find("#wiktku-posparams-row-nihatr").toggle(isLeker && needsTr);
stepDiv.find("#wiktku-posparams-row-borî").toggle(isLeker);
stepDiv.find("#wiktku-posparams-row-borîtr").toggle(isLeker && needsTr);
stepDiv.find("#wiktku-posparams-row-subj").toggle(isLeker);
stepDiv.find("#wiktku-posparams-row-subjtr").toggle(isLeker && needsTr);
// Row visibility just changed, so the "N zevî" half of the
// advanced toggle's badge is stale — recount.
var syncAdvCount = stepDiv.data("syncAdvCount");
if (typeof syncAdvCount === "function") syncAdvCount();
if (!$.trim(stepDiv.find(".wiktku-posparams-text").val())) {
steps.posparams.rebuildTa(stepDiv);
}
},
output: function () { return ""; } // pos.output reads the textarea directly
},
dfn: {
id: "dfn",
name: "Mane",
// Field types that live behind "Malûmatên pêşketî". Kept as one
// list so the collapse CSS, the count badge and the allGroups
// adv: flags below can't drift apart.
ADV_SUBGROUPS: [
"wiktku-dfn-etiket",
"wiktku-dfn-kategori",
"wiktku-dfn-alternativ",
"wiktku-dfn-koordine",
"wiktku-dfn-jornav",
"wiktku-dfn-jernav"
],
question_fmt: function (values) {
var base = "Maneya kelîmeyê binivîse. Mane otomatîk tê lînkkirin!";
if (values.lang === "ku") {
return base + " Ji bo tercimeyan beşa 'Werger' bi kar bîne!";
}
return base;
},
multiple: true,
ordered: true,
rows: 3,
visible: function (values) {
return values.lang && values.pos;
},
example: function (values) {
// posExamples loaded from [[MediaWiki:Gadget-start.js/data.json]].
var examples = steps.dfn.posExamples || {};
var full = values.pos || "";
return examples[full] || "";
},
// Builds one sense block (<li>): mane textarea, nimûne list, and
// sub-lists for alternatîv/hevmane/dijmane/etc.
buildSenseBlock: function (stepDiv) {
var block = $("<li class='wiktku-dfn-sense'></li>");
// — Mane textarea (declared first so the template handler can reference it) —
var dfnArea = $("<textarea></textarea>")
.attr("name", "wiktku-dfn-mane-" + $.now() + "-" + Math.random().toString(36).substr(2, 9))
.attr("class", "wiktku-start-step-field wiktku-dfn-mane")
.attr("rows", 6)
.attr("placeholder", "Mane…");
dfnArea.on("input", function () {
steps.dfn.onDfnInput(stepDiv, block, this);
});
// — Tercime + Îzah boxes (non-ku alternative to the plain mane box) —
// Non-ku entries get a direct translation plus a {{îzah|…}}-wrapped
// gloss instead of a Kurdish-style gloss. Rather than teach every
// consumer (getSenses/getOutput/linkify) a second data shape, these
// boxes just write their combined text into dfnArea and re-fire its
// "input" event, so dfnArea stays the single source of truth.
var tercimeArea = $("<textarea></textarea>")
.attr("name", "wiktku-dfn-tercime-" + $.now() + "-" + Math.random().toString(36).substr(2, 9))
.attr("class", "wiktku-dfn-subfield wiktku-dfn-tercime")
.attr("rows", 2)
.attr("placeholder", "Tercimeyên rasterast ên kurmancî… Ji bo school-a îngilîzî li vir 'mekteb, medrese' binivîse");
var izahArea = $("<textarea></textarea>")
.attr("name", "wiktku-dfn-izah-" + $.now() + "-" + Math.random().toString(36).substr(2, 9))
.attr("class", "wiktku-dfn-subfield wiktku-dfn-izah")
.attr("rows", 3)
.attr("placeholder", "Îzaha kurmancî… Ji bo school-a îngilîzî li vir 'cihê tehsîlgirtinê' binivîse");
var nonKuWrap = $("<div class='wiktku-dfn-nonku-wrap'></div>")
.append(tercimeArea).append(izahArea)
.hide();
function syncNonKuToMane() {
var t = $.trim(tercimeArea.val());
var iz = $.trim(izahArea.val());
// if tercime is blank, use îzah as definition
var combined = t ? (iz ? t + " {{îzah|" + iz + "}}" : t) : iz;
dfnArea.val(combined);
// Re-fires onDfnInput so the sense list still grows and
// refresh() still runs, exactly as if this were typed
// directly into the mane textarea.
dfnArea.trigger("input");
}
tercimeArea.on("input", syncNonKuToMane);
izahArea.on("input", syncNonKuToMane);
// Switches between the plain mane box and the tercime+îzah pair —
// only for non-ku entries with no tplSelect selected.
function updateManeMode() {
var lang = getValues().lang || "";
var isTpl = !!tplSelect.val();
if (lang && lang !== "ku" && !isTpl) {
dfnArea.hide();
nonKuWrap.show();
} else {
nonKuWrap.hide();
if (!isTpl) dfnArea.show();
}
}
// Store on the block so refresh() can re-sync every block when
// lang changes, and restoreDfn() can re-sync after restoring.
block.data("updateManeMode", updateManeMode);
// — Template selector (optional — replaces mane when chosen) —
// Template definitions loaded from [[MediaWiki:Gadget-start.js/data.json]].
var tplDefs = steps.dfn.tplDefs || {};
// Cache of all non-placeholder option elements, so updateTplOptions
// can detach/re-attach them without losing the full list.
var _allTplOptions = [];
var tplSelect = $(mw.html.element("select", { "class": "wiktku-dfn-tpl-select" }));
tplSelect.attr("data-placeholder", "Li şablonekê bigere");
tplSelect.append($("<option value=''>— yan jî şablonek hilbijêre —</option>"));
$.each(tplDefs, function (name, tpl) {
// Rewiye tine, 14 Tebax 2026: "guharto? kevnbûyî? ku-Latn?
// şaşnivîs? famkirina van zehmet e" — these 13 names had
// zero explanation in the dropdown (unlike steps.pron's
// template picker, which already shows "name — tpl.desc").
// Mirrors that same pattern here: if tpl.desc is ever
// added to a tplDefs entry in data.json, it'll show up
// automatically. It's optional per-entry, not required,
// since data.json doesn't have desc text for these yet —
// writing accurate one-line explanations for each needs
// someone who actually knows what each template does.
var opt = $("<option></option>")
.val(name)
.text(tpl.desc ? name + " — " + tpl.desc : name)
.attr("data-langs", tpl.langs ? tpl.langs.join(",") : "")
.attr("data-nolang", tpl.noLang ? "1" : "");
tplSelect.append(opt);
_allTplOptions.push(opt[0]);
});
// v3: the same status-dot / 🔗 / ⓘ row treatment as every
// other template picker. This one carries the bare name in
// value=, so the name mapper is the identity rather than a
// snippet parse. It also answers Rewiye tine's "famkirina
// van zehmet e" about these thirteen names properly — the
// explanation now comes from each template's own
// TemplateData instead of waiting for someone to hand-write
// thirteen desc strings into data.json.
markTemplateOptions(tplSelect, function (opt) { return opt.val(); });
function updateTplOptions() {
var lang = getValues().lang || "";
var currentVal = tplSelect.val();
var currentStillValid = false;
// Detach all non-placeholder options, then re-attach only the visible
// ones — native <select> won't reliably hide options any other way.
tplSelect.find("option[value!='']").detach();
$.each(_allTplOptions, function (_, opt) {
var allowed = $(opt).attr("data-langs");
var visible = !allowed || allowed.split(",").indexOf(lang) !== -1;
if (visible) {
tplSelect.append(opt);
if ($(opt).val() === currentVal) currentStillValid = true;
}
});
tplSelect.trigger("wiktku:refresh");
if (currentVal && !currentStillValid) {
tplSelect.val("");
tplTitleInput.hide().val("");
updateManeMode();
}
}
// Store updater on the element so refresh() can call it for all blocks.
tplSelect.data("updateOptions", updateTplOptions);
var tplTitleInput = $("<input type='text'>")
.addClass("wiktku-dfn-tpl-title wiktku-start-narrow")
.attr("placeholder", "Navê rûpela hedefê…")
.hide();
// Grow the sense list when the title field of the last block gets content,
// mirroring what onDfnInput does for the plain mane textarea.
tplTitleInput.on("input", function () {
steps.dfn.onDfnInput(stepDiv, block, this);
});
// Şablon senses have no plain gloss, so hide alternatîv/hevmane/
// dijmane/etc. Etîket, Nimûne and Jêgirtin stay visible either way.
function updateFieldVisibility() {
var isTpl = !!tplSelect.val();
$.each(HIDDEN_ON_TPL_GROUPS, function (_, cls) {
block.find("." + cls + "-group").toggle(!isTpl);
});
}
// Store on the block so restoreDfn() can re-sync visibility
// after setting tplSelect's value.
block.data("updateFieldVisibility", updateFieldVisibility);
tplSelect.on("change", function () {
var chosen = $(this).val();
if (chosen) {
dfnArea.hide();
nonKuWrap.hide();
tplTitleInput.show().focus();
} else {
tplTitleInput.hide().val("");
updateManeMode();
}
updateFieldVisibility();
// Re-run refresh so the Werger step visibility updates.
refresh();
});
var tplRow = $("<div></div>").addClass("wiktku-dfn-tpl-row")
.append(tplSelect).append(" ").append(tplTitleInput);
block.append(tplRow);
block.append(dfnArea);
block.append(nonKuWrap);
// Apply lang filter on initial build.
updateTplOptions();
updateManeMode();
// — Sub-field groups. —
// Ghybu, 14 Tebax 2026: "Bi min beşên 'Hevmane' û dijmane jî
// bike de nav beşa Mane ji ber ku pirr tên xwestin" — and,
// separately, that showing all nine at once is what makes this
// form read as long and tevlihev. So the four people actually
// reach for (Nimûne, Jêgirtin, Hevmane, Dijmane) stay open, in
// that order, and the other five sit behind the "Malûmatên
// pêşketî" toggle (adv: true → .wiktku-dfn-subgroup-adv, which
// is what the collapse CSS keys off now).
// Jêgirtin isn't in this array — it's a compound widget built
// after the loop — but it's inserted right after Nimûne so the
// visible order matches the list above.
var allGroups = [
{ cls: "wiktku-dfn-nimune", label: "Nimûne", rows: 2, narrow: false },
{ cls: "wiktku-dfn-hevmane", label: "Hevmane", rows: 1, narrow: true, izah: "Spehî hevmaneya Bedew e." },
{ cls: "wiktku-dfn-dijmane", label: "Dijmane", rows: 1, narrow: true, izah: "Zengîn dijmaneya feqîr e." },
{ cls: "wiktku-dfn-etiket", label: "Etîket", rows: 1, narrow: true, izah: "xisûsen, Mêrdîn, anatomî, Badînî", noLangSuffix: true, adv: true },
{ cls: "wiktku-dfn-kategori", label: "Kategorî", rows: 1, narrow: true, izah: "wekî etîket lê xuya nabe tenê kategorîze dike", noLangSuffix: true, adv: true },
{ cls: "wiktku-dfn-alternativ", label: "Formên alternatîv", rows: 1, narrow: true, izah: "Varyantên vê kelîmeyê", adv: true },
{ cls: "wiktku-dfn-koordine", label: "Termên koordîne", rows: 1, narrow: true, izah: "Pisîk û kûçik termên koordîne ne çunkî Jornavên wan gelek in", adv: true },
{ cls: "wiktku-dfn-jornav", label: "Jornav", rows: 1, narrow: true, izah: "Heywan jornavê guhandar e", adv: true },
{ cls: "wiktku-dfn-jernav", label: "Jêrnav", rows: 1, narrow: true, izah: "Guhandar jêrnavê heywan e", adv: true }
];
$.each(allGroups, function (_, g) {
var groupDiv = $("<div></div>").addClass("wiktku-dfn-subgroup " + g.cls + "-group");
if (g.adv) groupDiv.addClass("wiktku-dfn-subgroup-adv");
function buildNimuneLi() {
var lang = getValues().lang || "";
var li = $("<li></li>").addClass("wiktku-dfn-nimune-li");
var mainTa = $("<textarea></textarea>")
.attr("name", "wiktku-dfn-nimune-text-" + $.now() + "-" + Math.random().toString(36).substr(2, 9))
.attr("rows", g.rows)
.attr("class", "wiktku-dfn-subfield wiktku-dfn-nimune-text")
.attr("placeholder", "Nimûneya emilandina kelîmeyê tu bi xwe binivîse…");
mainTa.on("input", function () {
highlightLinebreak(this);
var val = $.trim($(this).val());
var isLast = li.is(list.children("li:last-child"));
if (val && isLast) {
list.append(buildNimuneLi());
}
});
li.append(mainTa);
var subWrap = $("<div></div>").addClass("wiktku-dfn-nimune-sub");
if (needsTransliteration(lang)) {
subWrap.append(
$("<textarea></textarea>")
.attr("name", "wiktku-dfn-nimune-tr-" + $.now() + "-" + Math.random().toString(36).substr(2, 9))
.attr("rows", 5)
.attr("class", "wiktku-dfn-subfield wiktku-dfn-nimune-tr")
.attr("placeholder", "Transliterasyona bi alfabeya latînî")
);
}
if (lang && lang !== "ku") {
subWrap.append(
$("<textarea></textarea>")
.attr("name", "wiktku-dfn-nimune-t-" + $.now() + "-" + Math.random().toString(36).substr(2, 9))
.attr("rows", 5)
.attr("class", "wiktku-dfn-subfield wiktku-dfn-nimune-t")
.attr("placeholder", "Tercimeya nimûneyê bi kurmancî")
);
}
if (subWrap.children().length) li.append(subWrap);
return li;
}
// The placeholder names the current language, but that's
// often not chosen yet when this block is first built —
// so keep a function around that refresh() (and onSubInput,
// for newly-grown fields) can call again once lang is set
// or changes.
function subPlaceholder() {
if (g.noLangSuffix) return g.label + "…";
var lang = getValues().lang || "";
var langLabel = lang ? getLangLabel(lang) : "";
return g.label + (langLabel ? " bi " + langLabel : "") + "…";
}
function updateSubPlaceholders() {
list.find("> li > textarea.wiktku-dfn-subfield").attr("placeholder", subPlaceholder());
}
if (g.cls === "wiktku-dfn-nimune") {
// Nimûne — compound widget with tr/t sub-fields.
var lbl = $("<span></span>").addClass("wiktku-dfn-sublabel")
.append($("<span></span>").addClass("wiktku-dfn-sublabel-term").text(g.label))
.append(": ");
var list = $("<ol></ol>").addClass("wiktku-dfn-sublist " + g.cls + "-list");
groupDiv.data("buildNimuneLi", buildNimuneLi);
list.append(buildNimuneLi());
groupDiv.append(lbl).append(list);
block.append(groupDiv);
} else {
// Regular always-visible group — label + growing textarea list.
var lbl = $("<span></span>").addClass("wiktku-dfn-sublabel")
.append($("<span></span>").addClass("wiktku-dfn-sublabel-term").text(g.label))
.append(": ")
.append($("<span></span>").addClass("wiktku-dfn-sublabel-hint").text(g.izah));
var list = $("<ol></ol>").addClass("wiktku-dfn-sublist " + g.cls + "-list");
var useModifiers = !!MODIFIER_SUBGROUPS[g.cls];
list.data("updatePlaceholders", updateSubPlaceholders);
var firstInput = $("<textarea></textarea>")
.attr("name", g.cls + "-" + $.now() + "-" + Math.random().toString(36).substr(2, 9))
.attr("rows", g.rows)
.attr("class", "wiktku-dfn-subfield" + (g.narrow ? " wiktku-start-narrow" : ""))
.attr("placeholder", subPlaceholder());
firstInput.on("input", function () {
steps.dfn.onSubInput(list, this, g.rows, g.narrow, useModifiers);
});
list.append(useModifiers ? makeModifierLi(firstInput) : $("<li></li>").append(firstInput));
groupDiv.append(lbl).append(list);
block.append(groupDiv);
}
});
// — Jêder group — growing list, same structure as Nimûne. —
(function () {
var jederGroupDiv = $("<div></div>").addClass("wiktku-dfn-subgroup wiktku-dfn-jeder-group");
var jederLbl = $("<span></span>").addClass("wiktku-dfn-sublabel")
.append($("<span></span>").addClass("wiktku-dfn-sublabel-term").text("Jêgirtin"))
.append(": ");
var jederList = $("<ol></ol>").addClass("wiktku-dfn-sublist wiktku-dfn-jeder-list");
function buildJederLi() {
var lang = getValues().lang || "";
var li = $("<li></li>").addClass("wiktku-dfn-jeder-li");
// Quote text textarea
var quoteTa = $("<textarea></textarea>")
.attr("name", "wiktku-dfn-nimune-quote-" + $.now() + "-" + Math.random().toString(36).substr(2, 9))
.attr("rows", 2)
.attr("class", "wiktku-dfn-subfield wiktku-dfn-nimune-quote")
.attr("placeholder", "Nimûneya emilandinê ji kitêb an çavkaniyeke din binivîse");
quoteTa.on("input", function () {
highlightLinebreak(this);
var val = $.trim($(this).val());
var isLast = li.is(jederList.children("li:last-child"));
if (val && isLast) {
jederList.append(buildJederLi());
}
});
li.append(quoteTa);
// tr/t sub-fields for the quote — shown as needed for the language.
var quoteSubWrap = $("<div></div>").addClass("wiktku-dfn-quote-sub");
if (needsTransliteration(lang)) {
quoteSubWrap.append(
$("<textarea></textarea>")
.attr("name", "wiktku-dfn-nimune-quote-tr-" + $.now() + "-" + Math.random().toString(36).substr(2, 9))
.attr("rows", 2)
.attr("class", "wiktku-dfn-subfield wiktku-dfn-nimune-quote-tr")
.attr("placeholder", "Transliterasyona jêgirtinê…")
);
}
if (lang && lang !== "ku") {
quoteSubWrap.append(
$("<textarea></textarea>")
.attr("name", "wiktku-dfn-nimune-quote-t-" + $.now() + "-" + Math.random().toString(36).substr(2, 9))
.attr("rows", 2)
.attr("class", "wiktku-dfn-subfield wiktku-dfn-nimune-quote-t")
.attr("placeholder", "Tercimeya jêgirtinê bi kurmancî")
);
}
if (quoteSubWrap.children().length) li.append(quoteSubWrap);
// Citoid auto-fill: fetch citation data from a URL, DOI or ISBN and
// prefill the source şablon + fields below (see Gadget-citoid-helper.js).
var citoidWrap = $("<div></div>").addClass("wiktku-dfn-quote-citoid");
var citoidInput = $("<textarea></textarea>")
.addClass("wiktku-dfn-subfield wiktku-dfn-quote-citoid-input")
.attr("rows", 1)
.attr("placeholder", "URL, DOI an ISBN binivîse ku otomatîk were tijekirin…");
var citoidBtn = new OO.ui.ButtonWidget({
label: "Bi otomatîk tijî bike",
classes: [ "wiktku-dfn-quote-citoid-btn" ]
});
var citoidStatus = $("<span></span>").addClass("wiktku-dfn-quote-citoid-status");
// Fetches citation data from Citoid and fills this citation's
// şablon + fields — only rebuilds fields on template change,
// and never overwrites values the user already typed.
function runCitoidFetch() {
var query = $.trim(citoidInput.val());
if (!query) {
mw.notify("Ji kerema xwe re pêşî URL, DOI an ISBNyekê binivîse.");
return;
}
citoidBtn.setDisabled(true);
citoidStatus.text("Tê anîn…");
wikt.citoid.fetchJederFields(query).then(function (result) {
var jederKey = result.jederKey;
var hasTpl = !!jederKey && srcSel.find("option[value='" + jederKey + "']").length > 0;
var targetVal = hasTpl ? jederKey : "__manual__";
// Only rebuild if switching şablon, so a repeat fetch
// doesn't clear fields already filled in by hand.
if (srcSel.val() !== targetVal) {
srcSel.val(targetVal).trigger("change");
}
if (hasTpl) {
// Tenê qadên vala tijî bike.
$.each(result.fields, function (key, val) {
var input = srcFields.find("[data-field-key='" + key + "']");
if (input.length && !$.trim(input.val())) {
input.val(val);
}
});
} else {
// Şablonek nehat naskirin ji bo vê itemType — rêzikeke
// çavkaniyê ya bi destan a ji qadên Citoid tê çêkirin,
// lê tenê ger qada destan vala be.
var manualField = srcFields.find(".wiktku-dfn-quote-src-manual");
if (!$.trim(manualField.val())) {
var parts = [];
$.each(["nivîskar", "sernav", "websîte", "kovar", "weşanxane", "sal", "url"], function (_, k) {
if (result.fields[k]) parts.push(result.fields[k]);
});
manualField.val(parts.join(", "));
}
}
citoidStatus.text("");
}, function (errorMsg) {
citoidStatus.text(typeof errorMsg === "string" ? errorMsg : "Nehat dîtin. Kontrol bike ka URL/DOI/ISBN rast e.");
}).always(function () {
citoidBtn.setDisabled(false);
});
}
citoidBtn.on("click", runCitoidFetch);
citoidInput.on("keydown", function (e) {
if (e.which === 13) { // Enter
e.preventDefault();
runCitoidFetch();
}
});
citoidWrap.append(citoidInput).append(citoidBtn.$element).append(citoidStatus);
// Source template selector, specific to this citation.
var srcSel = $("<select></select>").addClass("wiktku-dfn-quote-src-sel wiktku-plain-select");
srcSel.append($("<option value=''>— Çavkaniyê hilbijêre —</option>"));
srcSel.append($("<option></option>").val("__manual__").text("Bi destê xwe binivîsim"));
srcSel.append($("<option></option>").val("__category__").text("Ji Kategorî:Çavkanî şablonekê hilbijêre"));
var jederDefs = steps.dfn.jederDefs || {};
$.each(jederDefs, function (tplName, def) {
srcSel.append($("<option></option>").val(tplName).text(def.label));
});
// Dynamic source fields container.
var srcFields = $("<div></div>").addClass("wiktku-dfn-quote-src-fields");
srcSel.on("change", function () {
srcFields.empty();
var chosen = $(this).val();
// Citoid is only useful before a source is chosen —
// hide it once a selection is made, restore on reset.
if (chosen) {
citoidWrap.hide();
} else {
citoidWrap.show();
return;
}
if (chosen === "__manual__") {
// Freeform source, written by the user — becomes the 2nd
// positional param of {{jêder|lang|…}} instead of çavkanî?.
srcFields.append(
$("<textarea></textarea>")
.attr("rows", 4)
.addClass("wiktku-dfn-subfield wiktku-dfn-quote-src-manual")
.attr("placeholder", "Çavkaniyê bi destê xwe binivîse…")
);
return;
}
if (chosen === "__category__") {
// Search widget over the members of [[Kategorî:Çavkanî]].
// Picking a şablon here immediately switches the row to
// "Bi destê xwe binivîsim" mode with {{Şablon}} pre-filled,
var catWrap = $("<span></span>").addClass("wiktku-native-select-wrap wiktku-dfn-quote-src-cat");
var catInput = $("<input type='search' autocomplete='off'>")
.addClass("wiktku-start-narrow wiktku-dfn-quote-src-cat-input")
.attr("placeholder", "Li navê şablonê bigere…");
var catResults = $("<ul></ul>").addClass("wiktku-ac-results wiktku-dfn-quote-src-cat-results").hide();
var catStatus = $("<span></span>").addClass("wiktku-dfn-quote-src-cat-status").text("Şablon tên barkirin…");
var showCatResults = function (query) {
var q = $.trim(query).toLowerCase();
catResults.empty();
var list = catSrcTemplates || [];
var matched = q ?
$.grep(list, function (name) { return name.toLowerCase().indexOf(q) !== -1; }) :
list;
if (!matched.length) {
catResults.hide();
return;
}
$.each(matched.slice(0, 50), function (_, name) {
var li = $("<li></li>").text(name).attr("data-value", name);
var touchMoved = false;
li.on("touchstart", function () { touchMoved = false; });
li.on("touchmove", function () { touchMoved = true; });
li.on("touchend", function (e) {
if (touchMoved) return;
e.preventDefault();
selectCatTpl(name);
});
li.on("mousedown", function (e) {
e.preventDefault();
selectCatTpl(name);
});
catResults.append(li);
});
catResults.show();
};
// Wraps the chosen şablon as {{Name}}, drops it into the
// manual textarea, and switches the row into manual mode
// so the user can keep editing it (add params, etc.).
var selectCatTpl = function (name) {
catResults.hide();
srcSel.val("__manual__");
srcSel.trigger("change");
srcFields.find(".wiktku-dfn-quote-src-manual")
.val("{{" + name + "}}")
.trigger("focus");
};
catInput.on("input", function () {
showCatResults($(this).val());
});
catInput.on("focus", function () {
showCatResults($(this).val());
});
catInput.on("blur", function () {
setTimeout(function () { catResults.hide(); }, 200);
});
catWrap.append(catInput).append(catResults).append(catStatus);
srcFields.append(catWrap);
fetchCatSrcTemplates().then(function () {
catStatus.text("");
}, function () {
catStatus.text("Şablon nehatin barkirin.");
});
return;
}
var def = (steps.dfn.jederDefs || {})[chosen];
if (!def) return;
$.each(def.fields, function (key, label) {
var row = $("<div></div>").addClass("wiktku-dfn-quote-src-row");
var fieldLbl = $("<label></label>").text(label + ": ");
var inp = $("<textarea></textarea>")
.attr("rows", 2)
.addClass("wiktku-dfn-quote-src-input wiktku-start-narrow")
.attr("data-field-key", key)
.attr("placeholder", label + "…");
// "Sernav" / "Sernavê orjînal" (title fields, e.g. for
// kitêb/kovar/malper) get a taller, draggable box; every
// other field in the template stays as-is. Field labels
// come from the on-wiki jederDefs data, so match on the
// (diacritic-folded) label text rather than a fixed key.
var foldedLabel = foldDiacritics(label);
if (/^sernav$/.test(foldedLabel) || /orjin/.test(foldedLabel)) {
inp.addClass("wiktku-dfn-quote-src-input--title");
}
row.append(fieldLbl).append(inp);
srcFields.append(row);
});
});
li.append(citoidWrap).append(srcSel).append(srcFields);
return li;
}
jederGroupDiv.data("buildJederLi", buildJederLi);
jederList.append(buildJederLi());
jederGroupDiv.append(jederLbl).append(jederList);
// Straight after Nimûne rather than last: Jêgirtin is the
// same kind of thing (an attested use of the word) and the
// two belong together — see the allGroups comment above.
var nimuneGroup = block.find(".wiktku-dfn-nimune-group");
if (nimuneGroup.length) jederGroupDiv.insertAfter(nimuneGroup);
else block.append(jederGroupDiv);
}());
// Apply the initial hide/show state for the sub-groups (matches
// tplSelect's starting value, which is normally empty).
updateFieldVisibility();
// ── Accordion wrapper (v3 spec) ──────────────────────────
// Everything built above becomes the collapsible body, and a
// header row goes in front of it. Done here, at the end,
// rather than by threading a container through the ~500 lines
// of field-building above — every one of those appends to
// `block`, and getSenses/restoreDfn reach fields with .find(),
// which doesn't care how deep they sit.
var body = $("<div class='wiktku-dfn-sense-body'></div>").append(block.children());
var header = $("<div class='wiktku-dfn-sense-header'></div>");
header
.append($("<span class='wiktku-dfn-sense-num'></span>"))
.append($("<span class='wiktku-dfn-sense-title'></span>"))
.append($("<span class='wiktku-dfn-sense-summary'></span>"))
.append($("<span class='wiktku-dfn-sense-chevron'>▾</span>"));
header.on("click", function () {
// Collapsed → open it (and close whichever was open).
// Open → collapse it, unless it's the only one.
if (block.hasClass("wiktku-sense-collapsed")) steps.dfn.setOpenSense(stepDiv, block);
else block.addClass("wiktku-sense-collapsed");
steps.dfn.syncSenseHeaders(stepDiv);
});
block.append(header).append(body);
// Typing (or clicking) anywhere in a sense makes it the open
// one — "tenê maneya ku tê nivîsandin vekirî ye".
body.on("focusin", function () {
if (!block.hasClass("wiktku-sense-collapsed")) {
steps.dfn.setOpenSense(stepDiv, block);
}
});
return block;
},
/** True if a sense block has anything worth summarising. */
senseBlockHasContent: function (block) {
var found = false;
block.find("textarea, input[type='text']").each(function () {
if ($.trim($(this).val() || "")) { found = true; return false; }
});
if (found) return true;
return !!block.find(".wiktku-dfn-tpl-select").val();
},
/** Opens `block` and collapses every other sense that has content.
* A sense with nothing in it is never collapsed — the trailing
* empty one is how you add the next meaning, so hiding it would
* hide the only way forward. */
setOpenSense: function (stepDiv, block) {
stepDiv.find("li.wiktku-dfn-sense").each(function () {
var li = $(this);
var collapse = !li.is(block) && steps.dfn.senseBlockHasContent(li);
li.toggleClass("wiktku-sense-collapsed", collapse);
});
steps.dfn.syncSenseHeaders(stepDiv);
},
/** Renumbers the sense badges and refreshes each collapsed row's
* one-line summary. Cheap enough to just re-run on any change. */
syncSenseHeaders: function (stepDiv) {
stepDiv.find("li.wiktku-dfn-sense").each(function (i) {
var li = $(this);
li.find("> .wiktku-dfn-sense-header .wiktku-dfn-sense-num").text(i + 1);
li.find("> .wiktku-dfn-sense-header .wiktku-dfn-sense-title").text("Mane " + (i + 1));
var summary = $.trim(li.find("textarea.wiktku-dfn-mane").first().val() || "");
if (!summary) {
// A template sense has no prose — show the call itself.
var tpl = li.find(".wiktku-dfn-tpl-select").val();
var title = $.trim(li.find(".wiktku-dfn-tpl-title").val() || "");
if (tpl) summary = "{{" + tpl + (title ? "|" + title : "") + "}}";
}
summary = summary.split("\n")[0];
if (summary.length > 70) summary = summary.slice(0, 70) + "…";
li.find("> .wiktku-dfn-sense-header .wiktku-dfn-sense-summary").text(summary);
});
},
/** Grows the sense list when the last mane textarea gets content. */
onDfnInput: function (stepDiv, block, textarea) {
var val = $.trim($(textarea).val());
var list = stepDiv.find("ol.wiktku-dfn-list");
var isLast = block.is(list.children("li:last-child"));
if (val && isLast) {
var newBlock = steps.dfn.buildSenseBlock(stepDiv);
list.append(newBlock);
// Give the new block's template selector the searchable picker.
initSelects(newBlock);
}
steps.dfn.syncSenseHeaders(stepDiv);
refresh();
},
/** Grows a sub-list (nimûne/formên alternatîv/hevmane/dijmane/termên koordîne) on input. */
onSubInput: function (list, input, rows, narrow, modifiers) {
var val = $.trim($(input).val());
var item = $(input).parent();
var isLast = item.is(list.children("li:last-child"));
if (val && isLast) {
var next = $("<textarea></textarea>")
.attr("name", "wiktku-dfn-sub-" + $.now() + "-" + Math.random().toString(36).substr(2, 9))
.attr("rows", rows)
.attr("class", "wiktku-dfn-subfield" + (narrow ? " wiktku-start-narrow" : ""));
next.on("input", function () {
steps.dfn.onSubInput(list, this, rows, narrow, modifiers);
});
list.append(modifiers ? makeModifierLi(next) : $("<li></li>").append(next));
// New field starts with no placeholder — give it (and any
// others in the list) the current one.
var updatePlaceholders = list.data("updatePlaceholders");
if (typeof updatePlaceholders === "function") updatePlaceholders();
}
},
// Populated from [[MediaWiki:Gadget-start.js/data.json]] (tplDefs, posExamples, jederDefs).
tplDefs: {},
posExamples: {},
jederDefs: {},
build: function (stepDiv) {
if (stepDiv.find("ol.wiktku-dfn-list").length) return null;
// Rewiye tine, 14 Tebax 2026: "şablonên mana jî dikare serê
// yekî tevlîhev bike... famkirina van zehmet e" — the "an jî
// şablonek hilbijêre" dropdown inside each sense (guharto,
// kevnbûyî, ku-Latn, şaşnivîs, …) had no explanation at all.
// One reassurance, shown once for the whole Mane step rather
// than repeated per sense: it's optional, plain text is the
// normal path.
if (!stepDiv.find(".wiktku-dfn-tpl-hint").length) {
stepDiv.append(
$("<p class='wiktku-step-hint wiktku-dfn-tpl-hint'></p>").text(
"Ji bo her maneyekê, dropdown-a \"an jî şablonek hilbijêre\" ne mecbûrî ye — bi gelemperî tu tenê maneyê bi tîpên asayî dinivîsî. Ew şablon tenê ji bo rewşên taybet in (mînak: guherto, kevnbûyî, şaşnivîs); heke tu nizanî kîjan divê, vale bihêle."
)
);
}
// One-time "hide/show all" link for the etîket/kategorî/hevmane/…/
// nimûne/jêgirtin subgroups. Wikihez, 14 Tebax 2026: starts
// collapsed now (was expanded by default) — this is "malûmatên
// pêşketî" in the Mane tab's new Mane → malûmatên pêşketî →
// Wêne → Bi zaravayên din → Werger ordering.
if (!stepDiv.find(".wiktku-dfn-subs-toggle").length) {
stepDiv.addClass("wiktku-dfn-subs-hidden");
var subsRow = $("<div class='wiktku-adv-toggle-row'></div>");
var subsToggle = $("<a href='#' class='wiktku-dfn-subs-toggle wiktku-adv-toggle'></a>");
var subsLabel = $("<span class='wiktku-adv-toggle-text'></span>");
subsToggle
.append($("<span class='wiktku-adv-toggle-chevron'>▾</span>"))
.append(subsLabel);
// Count badge: the panel is collapsed by default, so without
// this nothing on screen says what is behind it or whether
// anything in there is already filled in.
var subsCount = $("<span class='wiktku-adv-toggle-count'></span>");
function syncSubsToggle() {
var hidden = stepDiv.hasClass("wiktku-dfn-subs-hidden");
subsLabel.text(hidden ? "Malûmatên pêşketî nîşan bide" : "Malûmatên pêşketî veşêre");
subsToggle.attr("aria-expanded", hidden ? "false" : "true");
// One count per field TYPE (not per sense) — "Etîket" is
// one row in the person's head even when three senses
// each have one.
var total = 0, filled = 0;
$.each(steps.dfn.ADV_SUBGROUPS, function (_, cls) {
total++;
var any = false;
stepDiv.find("." + cls + "-group textarea").each(function () {
if ($.trim($(this).val())) any = true;
});
if (any) filled++;
});
subsCount.text(total + " zevî · " + filled + " tije");
}
subsToggle.on("click", function (e) {
e.preventDefault();
stepDiv.toggleClass("wiktku-dfn-subs-hidden");
syncSubsToggle();
});
// Recount as the person types anywhere in the step.
stepDiv.on("input", "textarea", function () { syncSubsToggle(); });
stepDiv.data("syncSubsToggle", syncSubsToggle);
subsRow.append(subsToggle).append(subsCount);
stepDiv.append(subsRow);
syncSubsToggle();
}
var list = $("<ol class='wiktku-dfn-list'></ol>");
list.append(steps.dfn.buildSenseBlock(stepDiv));
stepDiv.append(list);
steps.dfn.syncSenseHeaders(stepDiv);
return null;
},
/** Reads all sense blocks from the DOM and returns an array of sense objects. */
getSenses: function (stepDiv) {
var senses = [];
stepDiv.find("li.wiktku-dfn-sense").each(function () {
var block = $(this);
var tplSel = block.find("select.wiktku-dfn-tpl-select");
var tpl = tplSel.val() || "";
// noLang: template already encodes the language — don't add |lang| param.
var tplNoLang = tpl
? tplSel.find("option[value='" + tpl + "']").attr("data-nolang") === "1"
: false;
var tplTitle = $.trim(block.find("input.wiktku-dfn-tpl-title").val());
var mane = $.trim(block.find("textarea.wiktku-dfn-mane").val());
function readList(cls) {
var vals = [];
block.find("." + cls + "-list textarea").each(function () {
var v = $.trim($(this).val());
if (v) vals.push(v);
});
return vals;
}
// Nimûne items are compound: { text, tr?, t? }
function readNimuneList() {
var items = [];
block.find(".wiktku-dfn-nimune-list li.wiktku-dfn-nimune-li").each(function () {
var text = $.trim($(this).find(".wiktku-dfn-nimune-text").val());
if (!text) return;
var obj = { text: text };
var tr = $.trim($(this).find(".wiktku-dfn-nimune-tr").val());
var t = $.trim($(this).find(".wiktku-dfn-nimune-t").val());
if (tr) obj.tr = tr;
if (t) obj.t = t;
items.push(obj);
});
return items;
}
// Jêder is a growing list of citations, one per li — mirrors readNimuneList().
function readJederList() {
var items = [];
block.find(".wiktku-dfn-jeder-list li.wiktku-dfn-jeder-li").each(function () {
var li = $(this);
var quote = $.trim(li.find(".wiktku-dfn-nimune-quote").val());
if (!quote) return;
var obj = { quote: quote };
var qtr = $.trim(li.find(".wiktku-dfn-nimune-quote-tr").val());
var qt = $.trim(li.find(".wiktku-dfn-nimune-quote-t").val());
if (qtr) obj.quoteTr = qtr;
if (qt) obj.quoteT = qt;
var tplName = li.find(".wiktku-dfn-quote-src-sel").val();
if (tplName === "__manual__") {
var manual = $.trim(li.find(".wiktku-dfn-quote-src-manual").val());
if (manual) obj.jederManual = manual;
} else if (tplName === "__category__") {
// Reachable only if the user opened the category search but
// never picked a şablon — picking one switches the row to
// __manual__ (see selectCatTpl above), so there's nothing
// meaningful to save here.
} else if (tplName) {
obj.jederTpl = tplName;
var fields = {};
li.find(".wiktku-dfn-quote-src-input").each(function () {
var k = $(this).attr("data-field-key");
var v = $.trim($(this).val());
if (k && v) fields[k] = v;
});
obj.jêderFields = fields;
}
items.push(obj);
});
return items;
}
senses.push({
tpl: tpl,
tplNoLang: tplNoLang,
tplTitle: tplTitle,
mane: mane,
etiket: readList("wiktku-dfn-etiket"),
kategori: readList("wiktku-dfn-kategori"),
nimune: readNimuneList(),
jeder: readJederList(),
alternativ: readList("wiktku-dfn-alternativ"),
hevmane: readList("wiktku-dfn-hevmane"),
dijmane: readList("wiktku-dfn-dijmane"),
koordine: readList("wiktku-dfn-koordine"),
jornav: readList("wiktku-dfn-jornav"),
jernav: readList("wiktku-dfn-jernav")
});
});
return senses;
},
getOutput: function (values, callback) {
var stepDiv = $("#wiktku-start-dfn");
var senses = steps.dfn.getSenses(stepDiv);
var lang = values.lang;
// A sense counts as "filled" if it has a mane, a chosen template + title,
// or any other content (etîket/hevmane/nimûne/jêder…) worth keeping.
var hasMane = senses.some(function (s) {
return s.mane !== "" || (s.tpl && s.tplTitle) || senseHasExtraContent(s);
});
var defLines = []; // one entry per kept sense (goes to linkify)
var citeLines = []; // parallel — nimûne+jêder for that same sense
var izahLines = []; // parallel — raw îzah gloss for that same sense
// True only once some sense's *actual* dfn text (post tercime/îzah
// split) is non-empty.
var hasLinkableMane = false;
$.each(senses, function (_, sense) {
// — Template sense (e.g. {{guharto|ku|somepage}}) —
if (sense.tpl) {
if (!sense.tplTitle) return; // skip empty template senses
var tplKatTpl = buildSenseTpl(sense, "kategori", lang, "K");
var tplLabelTpl = buildSenseTpl(sense, "etiket", lang, "e");
var tplCall = sense.tplNoLang
? "{{" + sense.tpl + "|" + sense.tplTitle + "}}"
: "{{" + sense.tpl + "|" + lang + "|" + sense.tplTitle + "}}";
var idx = defLines.length;
var cite = buildCite(sense, lang);
defLines.push("# " + (tplKatTpl ? tplKatTpl + " " : "") + (tplLabelTpl ? tplLabelTpl + " " : "") + tplCall +
(cite ? "{{wiktku-cite-" + idx + "}}" : ""));
citeLines.push(cite);
izahLines.push(""); // template senses have no îzah
return;
}
// — Normal mane sense —
var dfn = sense.mane;
if (!dfn && !senseHasExtraContent(sense)) return; // truly empty
// Pull the îzah gloss (if any) out of the combined tercime+îzah
// string — it's spliced back in separately below, after its
// own linkify pass (see izahLines / the second linkifyText call).
var izahRaw = null;
var tercimeIzah = splitTercimeIzah(dfn);
if (tercimeIzah) {
dfn = tercimeIzah.tercime;
izahRaw = stripWikilinks(tercimeIzah.izah);
}
if (dfn) {
dfn = stripWikilinks(dfn);
// Sentence-case + trailing period are for ku definitions,
// which are written as full glosses.
if (lang === "ku") {
if (dfn[0] !== dfn[0].toUpperCase()) dfn = capitalize(dfn);
if (!dfn.match(/[.…?!)\]]$/)) dfn += ".";
}
// Real prose — this is what makes the sense worth running
// through the main linkify pass.
hasLinkableMane = true;
} else if (izahRaw === null) {
// No mane at all — this is just the "{{mane?|lang}}"
// placeholder, a bare template call with no plain words
// in it. Do NOT count it as linkable: sending nothing but
// bracketed templates through the main linkify pass hangs
// the linkify gadget (see the hasLinkableMane/hasIzah
// check below).
dfn = lang === "ku" ? "{{mane?|" + lang + "}}" : "";
}
var katTpl = buildSenseTpl(sense, "kategori", lang, "K");
var labelTpl = buildSenseTpl(sense, "etiket", lang, "e");
var out = "# " + (katTpl ? katTpl + " " : "") + (labelTpl ? labelTpl + " " : "") + dfn;
var idx = defLines.length;
var hasThisIzah = izahRaw !== null && $.trim(izahRaw) !== "";
// Bare {{...}} token — like {{wiktku-cite-N}}, this survives
// linkify's first pass untouched (it treats template calls as
// opaque), then gets swapped for {{îzah|…}} once the actual
// gloss text has been linkified in its own separate pass.
if (hasThisIzah) {
out += (dfn ? " " : "") + "{{wiktku-izah-" + idx + "}}";
}
function wordLine(tpl, words) {
if (!words.length) return "";
return "\n#: {{" + tpl + "|" + lang + "|" + words.join("|") + "}}";
}
out += wordLine("alt-r", sense.alternativ);
out += wordLine("hevmane", sense.hevmane);
out += wordLine("dijmane", sense.dijmane);
out += wordLine("koordîne", sense.koordine);
out += wordLine("jornav", sense.jornav);
out += wordLine("jêrnav", sense.jernav);
var cite = buildCite(sense, lang);
defLines.push(out + (cite ? "{{wiktku-cite-" + idx + "}}" : ""));
citeLines.push(cite);
izahLines.push(hasThisIzah ? izahRaw : "");
});
// Splice citeLines back into a linkified string, replacing each
// {{wiktku-cite-N}} token with its stored nimûne/jêder block.
function restoreCites(t) {
return t.replace(/\{\{wiktku-cite-(\d+)\}\}/g, function (_, n) {
return citeLines[parseInt(n, 10)] || "";
});
}
// Runs text through the linkify gadget if it's loaded, otherwise
// just passes it through unchanged. Shared by both linkify passes
// below (main mane text, and — separately — îzah glosses).
function linkifyText(t, cb) {
if (typeof $.kuLinkify === "function") {
$.kuLinkify(t, cb);
} else {
cb(t);
}
}
var hasIzah = izahLines.some(function (t) { return t && $.trim(t) !== ""; });
var text = defLines.join("\n") + "\n";
if (!hasMane) {
// No definitions entered — emit {{mane?}} with nimûne?.
text = "# {{mane?|" + lang + "}}\n#* {{nimûne?|" + lang + "}}\n";
callback(text);
return;
}
// Runs the îzah-only linkify pass against `base` (either the raw
// text, when there's no linkable mane to run the main pass on
// first, or the already-linkified main text). Shared by both
// branches below so the token-splice logic only lives once.
function runIzahPass(base) {
var izahJoined = $.map(izahLines, function (raw, idx) {
if (!raw) return undefined;
return "{{wiktku-izah-open-" + idx + "}}" + raw + "{{wiktku-izah-close-" + idx + "}}";
}).join("\n");
linkifyText(izahJoined, function (izahLinked) {
var izahByIdx = {};
var re = /\{\{wiktku-izah-open-(\d+)\}\}([\s\S]*?)\{\{wiktku-izah-close-\1\}\}/g;
var m;
while ((m = re.exec(izahLinked)) !== null) {
izahByIdx[parseInt(m[1], 10)] = m[2];
}
var withIzah = base.replace(/\{\{wiktku-izah-(\d+)\}\}/g, function (_, n) {
var linked = izahByIdx[parseInt(n, 10)];
return linked !== undefined ? "{{îzah|" + linked + "}}" : "";
});
callback(restoreCites(withIzah));
});
}
if (!hasLinkableMane) {
if (!hasIzah) {
// All filled senses are template senses (or otherwise have
// no plain text at all) — nothing here needs linkify.
callback(restoreCites(text));
return;
}
// There's no plain mane text anywhere (e.g. tercime left blank
// with only îzah filled in), so every defLine is just a bare
// template call with nothing to word-link. Sending a line
// like "# {{wiktku-izah-0}}" through the main linkify pass
// gives it no plain words to work with, makes the linkify
// gadget hang — so skip that pass entirely and run only
// the îzah pass, splicing straight into the unlinkified text.
var loadIzahOnly = function () { runIzahPass(text); };
mw.loader.using("ext.gadget.linkify", loadIzahOnly, loadIzahOnly);
return;
}
var didTryToLoad = function () {
// First pass: the main definition text (mane), same as before.
linkifyText(text, function (mainLinked) {
if (!hasIzah) {
callback(restoreCites(mainLinked));
return;
}
// Second pass: îzah glosses, linkified via their own
// separate call. Each gloss is wrapped in its own
// {{wiktku-izah-open/close-N}} pair; like the existing
// {{wiktku-cite-N}} tokens, these sit inside double
// braces so linkify leaves the tokens themselves alone —
// only the raw gloss text between each pair gets linked.
runIzahPass(mainLinked);
});
};
mw.loader.using("ext.gadget.linkify", didTryToLoad, didTryToLoad);
}
},
tewandin: {
id: "tewandin",
name: "tewandin",
question_fmt: 'Tewandina "' + pageName + '" binivîse',
visible: function (values) {
return values.lang && values.pos;
},
build: function (stepDiv) {
if (stepDiv.find(".wiktku-tewandin-wrap").length) return null;
var wrap = $("<div class='wiktku-tewandin-wrap'></div>");
var ta = $("<textarea></textarea>")
.attr("name", "wiktku-tewandin-" + $.now())
.attr("class", "wiktku-start-step-field wiktku-tewandin-text")
.attr("rows", 4)
.attr("placeholder", "{{ku-tewîn-nav|nêr}}");
wrap.append(ta);
stepDiv.append(wrap);
function autoPopulate() {
if (!ta.length) return;
var vals = getValues();
var c = vals.cinsiyet || "";
var p = vals.pos || "";
if (!pageName.includes(" ") && c && GENDER_BASE_LABELS[c] &&
(p === "navdêr" || p === "serenav") && vals.lang === "ku" &&
c !== "mndudil") {
var label = (c === "mnmane") ? "mê û nêr" : GENDER_BASE_LABELS[c];
var out = "{{ku-tewîn-nav|" + label;
if (p === "serenav") out += "|y";
out += "}}";
if (!$.trim(ta.val())) ta.val(out);
}
}
setTimeout(function () {
autoPopulate();
$("#wiktku-start-form").on("change.tewandin",
"#wiktku-start-lang-field, #wiktku-start-cinsiyet-field, #wiktku-start-pos-field",
autoPopulate);
}, 0);
return ta;
},
output: function () {
var manualText = $.trim($("#wiktku-start-tewandin .wiktku-tewandin-text").val());
if (manualText) {
return "\n==== Tewandin ====\n" + manualText + "\n";
}
return "";
}
},
// resim — one or more images
resim: {
id: "resim",
name: "resim",
question_fmt: "Resmekê lê zêde bike",
visible: function (values) { return !!(values.lang && values.pos); },
/** Builds one image row: filename + caption + alt text. */
buildItem: function (stepDiv) {
var item = $("<li class='wiktku-resim-item'></li>");
var fileRow = $("<div class='wiktku-posparams-row'></div>");
var fileInp = $("<input type='text'>")
.addClass("wiktku-start-step-field wiktku-start-narrow wiktku-resim-file")
.attr("placeholder", "navê_dosyayê.jpg");
fileRow.append($("<label></label>").text("Navê dosyayê: ")).append(fileInp);
var capRow = $("<div class='wiktku-posparams-row'></div>");
var capInp = $("<input type='text'>")
.addClass("wiktku-start-step-field wiktku-start-narrow wiktku-resim-caption")
.attr("placeholder", "Danasîna resimê…");
capRow.append($("<label></label>").text("Danasîn: ")).append(capInp);
// Alt text: what a screen reader announces for this image
var altRow = $("<div class='wiktku-posparams-row'></div>");
var altInp = $("<input type='text'>")
.addClass("wiktku-start-step-field wiktku-start-narrow wiktku-resim-alt")
.attr("placeholder", "Ji bo kesên nabînin, çi tê dîtin? (ne mecbûrî)");
altRow.append($("<label></label>").text("Nivîsa alternatîf: ")).append(altInp);
// Auto-fill the caption with the plain page name when a filename
// is typed
fileInp.on("input", function () {
var file = $.trim($(this).val());
var curCap = $.trim(capInp.val());
var isDefault = !curCap || curCap === pageName;
if (file && isDefault) {
capInp.val(pageName);
} else if (!file && isDefault) {
capInp.val("");
}
steps.resim.onFileInput(stepDiv, item, this);
});
item.append(fileRow).append(capRow).append(altRow);
return item;
},
/** Grows the image list when the last row's filename gets content. */
onFileInput: function (stepDiv, item, input) {
var val = $.trim($(input).val());
var list = stepDiv.find("ol.wiktku-resim-list");
var isLast = item.is(list.children("li:last-child"));
if (val && isLast) {
list.append(steps.resim.buildItem(stepDiv));
}
},
build: function (stepDiv) {
if (stepDiv.find(".wiktku-resim-wrap").length) return null;
var wrap = $("<div class='wiktku-resim-wrap'></div>");
var list = $("<ol class='wiktku-resim-list'></ol>");
list.append(steps.resim.buildItem(stepDiv));
wrap.append(list);
stepDiv.append(wrap);
return null;
},
/** Reads every filled row from the DOM into an array of {file, caption, alt}
* objects — blank rows (missing filename or caption) are skipped.
* Non-Kurdish captions get wrapped in {{zim|lang|…}} here, unless
* the user already typed their own {{zim|…}} template. Alt text is
* optional and left as plain text either way. */
getImages: function (values) {
var lang = (values && values.lang) || getValues().lang || "";
var images = [];
$("#wiktku-start-resim li.wiktku-resim-item").each(function () {
var file = $.trim($(this).find(".wiktku-resim-file").val());
var caption = $.trim($(this).find(".wiktku-resim-caption").val());
var alt = $.trim($(this).find(".wiktku-resim-alt").val());
if (!file || !caption) return;
// Strip leading "Wêne:" or "File:" if the user typed it — we add it ourselves.
file = file.replace(/^(wêne|file|image)\s*:\s*/i, "");
if (lang && lang !== "ku" && !/^\{\{zim\s*\|/i.test(caption)) {
caption = "{{zim|" + lang + "|" + caption + "}}";
}
images.push({ file: file, caption: caption, alt: alt });
});
return images;
},
output: function (values) {
var images = steps.resim.getImages(values);
if (!images.length) return "";
return images.map(function (img) {
var altPart = img.alt ? "|alt=" + img.alt : "";
return "[[Wêne:" + img.file + "|thumb" + altPart + "|" + img.caption + "]]";
}).join("\n") + "\n";
}
},
// bnr-h — {{bnr-h|Page1|Page2|…}} prepended before the lang section (shared, not per-section)
bnrh: {
id: "bnrh",
name: "binêre herwiha (bnr-h)",
question_fmt: "Şablona bnr-h li qismê herî jor a rûpelê",
//visible: function (values) { return !!values.lang; },
multiple: true,
narrow: true,
placeholder: "Ji bo 'test' bnr 'Test', 'teşt'",
output: function (values) {
var pages = $.grep(values.bnrh || [], function (p) { return !!$.trim(p); });
if (!pages.length) return "";
return "{{bnr-h|" + pages.map(function (p) { return $.trim(p); }).join("|") + "}}\n";
}
},
bikaranin: {
id: "bikaranin",
name: "Notên bikaranînê",
question_fmt: "Notên bikaranînê yên li ser vê kelîmeyê",
visible: function (values) {
return values.lang && values.pos;
},
multiple: false,
narrow: false,
output: function (values) {
var text = $.trim(values.bikaranin || "");
if (!text) return "";
return "\n==== Notên bikaranînê ====\n" + text + "\n";
},
},
xwendin: {
id: "xwendin",
name: "Bêhtir bixwîne",
question_fmt: "Lînkên derveyî eleqedarî vê madeyê",
visible: function (values) {
return values.lang && values.pos;
},
multiple: false,
narrow: false,
placeholder: function (values) {
if (!values || !values.lang) {
return `* {{wpedî}} ji bo ku meqaleya Wîkîpediyayê lînk bidî`;
}
const ziman = values.lang === "ku" ? "" : `|ziman=${values.lang}`;
return `* {{wpedî${ziman}}} ji bo ku meqaleya Wîkîpediyayê lînk bidî`;
},
output: function (values) {
var text = $.trim(values.xwendin || "");
if (!text) return "";
return "\n==== Bêhtir bixwîne ====\n" + text + "\n";
},
},
alfabeyendin: {
id: "alfabeyendin",
name: "Bi alfabeyên din",
question_fmt: function (values) {
var base = "Nivîsîna vê kelîmeyê bi alfabeyên din"
var langLabel = values.lang ? getLangLabel(values.lang) : "";
if (langLabel) {
return base + " ên " + langLabel;
}
return base;
},
visible: function (values) {
return values.lang && values.pos;
},
multiple: false,
narrow: false,
placeholder: "Ji bo kurmancî: * {{ku-ar|şiklê alfaba erebî}}",
output: function (values) {
var text = $.trim(values.alfabeyendin || "");
if (!text) return "";
return "\n==== Bi alfabeyên din ====\n" + text + "\n";
},
},
formalt: makeWordListStep("formalt", "formên alternatîv", "Formên alternatîv ên vê kelîmeyê ji bo hemû maneyan eger te li binê maneyê nenivîsandibe"),
hevmane: makeWordListStep("hevmane", "hevmane", "Hevmaneyên vê kelîmeyê ji bo hemû maneyan eger te li binê maneyê nenivîsandibe"),
dijmane: makeWordListStep("dijmane", "dijmane", "Dijmaneyên vê kelîmeyê ji bo hemû maneyan eger te li binê maneyê nenivîsandibe"),
jornav: makeWordListStep("jornav", "jornav", "Jornavên vê kelîmeyê ji bo hemû maneyan eger te li binê maneyê nenivîsandibe"),
jernav: makeWordListStep("jernav", "jêrnav", "Jêrnavên vê kelîmeyê ji bo hemû maneyan eger te li binê maneyê nenivîsandibe"),
je: makeWordListStep("je", "jê", "Kelîmeyên jê çêbûyî binivîse"),
tekildar: makeWordListStep("tekildar", "têkildar", "Kelîmeyên ji aliyê etîmolojiyê ve têkildarî vê kelîmeyê binivîse"),
binereherwiha: makeWordListStep("binereherwiha", "herwiha binêre", "Kelîmeyên din ên eleqedar binivîse"),
etym: {
id: "etym",
name: "etîmolojî",
question_fmt: "Etîmolojiya kelîmeyê binivîse",
// etymTpls populated from data.json
etymTpls: {},
visible: function (values) {
return values.lang && values.pos;
},
// Fills the insert-dropdown from the current etymTpls object.
refreshTplSelect: function () {
var sel = $("#wiktku-start-etym .wiktku-tpl-insert-select");
if (!sel.length) return;
sel.find("option[value!='']").remove();
$.each(steps.etym.etymTpls, function (name, tpl) {
sel.append($("<option></option>").val(tpl.snippet).text(name + " — " + tpl.desc));
});
markTemplateOptions(sel, function (opt) { return tplNameFromSnippet(opt.val()); });
// Tell the picker the option list changed.
sel.trigger("wiktku:refresh");
},
build: function (stepDiv) {
if (stepDiv.find(".wiktku-etym-wrap").length) return null;
var wrap = $("<div class='wiktku-etym-wrap'></div>");
var ta = $("<textarea></textarea>")
.attr("name", "wiktku-etym-" + $.now())
.attr("class", "wiktku-start-step-field wiktku-etym-text")
.attr("rows", 4)
.attr("placeholder", "Ji {{ji|en|ku|apple}}. yan rasterast binivîse…");
// Template insert dropdown — options also refreshed after data.json loads.
var sel = $("<select class='wiktku-tpl-insert-select'></select>");
sel.attr("data-placeholder", "Şablonek lê zêde bike…");
sel.append($("<option value=''>— şablonek lê zêde bike —</option>"));
$.each(steps.etym.etymTpls, function (name, tpl) {
sel.append($("<option></option>").val(tpl.snippet).text(name + " — " + tpl.desc));
});
sel.on("change", function () {
var snippet = $(this).val();
if (!snippet) return;
var lang = getValues().lang || "";
snippet = snippet.replace(/CODE/g, lang).replace(/SOURCELANG/g, "?");
insertAtCursor(ta[0], snippet);
$(this).val("");
sel.trigger("wiktku:refresh");
ta.focus();
});
wrap.append(sel);
wrap.append(ta);
stepDiv.append(wrap);
initSelects(wrap);
return ta;
},
output: function (values) {
var text = $.trim($("#wiktku-start-etym .wiktku-etym-text").val());
if (text) {
return "\n==== Etîmolojî ====\n" + text + "\n";
}
// No etymology entered — emit {{ji?|lang}} as a placeholder.
// Skip it only when every filled sense is a şablon sense
// a completely empty entry with no şablon chosen still gets the placeholder
var dfnSenses = steps.dfn.getSenses($("#wiktku-start-dfn"));
var hasFilledTplSense = dfnSenses.some(function (s) {
return !!s.tpl && !!s.tplTitle;
});
var hasRegularMane = dfnSenses.some(function (s) {
return !s.tpl && (s.mane !== "" || senseHasExtraContent(s));
});
if (hasFilledTplSense && !hasRegularMane) return "";
return "\n==== Etîmolojî ====\n{{ji?|" + values.lang + "}}\n";
} },
dunde: {
id: "dunde",
name: "dûnde",
question_fmt: "Eger ev kelîme ji vî zimanî ketibe zimanekî din, vî zimanî û kelîmeya wî binivîse",
visible: function (values) {
return !!values.pos;
},
disabledKeys: function (values) {
return {"navz": true, [values.lang]: true}
},
// Language dropdown + growing word-input list; a new row appends
// when the dropdown gets a value. Mirrors steps.trans, but flat.
buildRow: function (stepDiv) {
var row = $("<li class='wiktku-dunde-row wiktku-lang-row'></li>");
// Language selector — the searchable picker is applied after insertion into DOM.
var langSel = $(mw.html.element("select", {
"class": "wiktku-start-step-keyfield wiktku-start-narrow" }));
langSel.attr("data-placeholder", "Li zimanekî bigere");
populateMenus(langSel, steps.dunde.keys || [], steps.dunde.disabledKeys);
// When a language is chosen, ensure a next empty row exists.
langSel.on("change", function () {
steps.dunde.onLangChange(stepDiv, row);
});
// Word list for this language.
var wordList = $("<ul class='wiktku-dunde-words wiktku-lang-row-words'></ul>");
var firstWord = steps.dunde.makeWordInput();
wordList.append($("<li></li>").append(firstWord));
// The searchable picker is attached by initSelects() once the row
// is in the DOM (see onLangChange/build below).
row.append(langSel).append(wordList);
return row;
},
makeWordInput: function () {
var input = $("<textarea></textarea>")
.attr("name", "wiktku-dunde-word-" + $.now() + "-" + Math.random().toString(36).substr(2, 9))
.attr("rows", 1)
.attr("class", "wiktku-dfn-subfield wiktku-start-narrow")
.attr("placeholder", "Kelîme…");
input.on("input", function () {
var list = $(this).closest("ul.wiktku-dunde-words");
var item = $(this).parent();
var val = $.trim($(this).val());
if (val && item.is(list.children("li:last-child"))) {
var next = steps.dunde.makeWordInput();
list.append($("<li></li>").append(next));
}
});
return input;
},
onLangChange: function (stepDiv, row) {
var list = stepDiv.find("ul.wiktku-dunde-list");
var isLast = row.is(list.children("li.wiktku-dunde-row:last-child"));
if (isLast) {
var newRow = steps.dunde.buildRow(stepDiv);
list.append(newRow);
// Attach the searchable picker now the row is in the DOM.
initSelects(newRow);
}
// Keep disabled keys in sync across all lang selectors.
steps.dunde.syncDisabledKeys(stepDiv);
},
/** Disables already-selected languages in all other dropdowns. */
syncDisabledKeys: function (stepDiv) {
var taken = $.extend({}, steps.dunde.disabledKeys);
stepDiv.find("li.wiktku-dunde-row select").each(function () {
var v = $(this).val();
if (v) taken[v] = true;
});
stepDiv.find("li.wiktku-dunde-row select").each(function () {
var self = $(this);
var own = self.val();
self.find("option").each(function () {
var code = $(this).val();
if (!code) return;
$(this).prop("disabled", taken[code] && code !== own);
});
self.trigger("wiktku:refresh");
});
},
build: function (stepDiv) {
if (stepDiv.find("ul.wiktku-dunde-list").length) return null;
var list = $("<ul class='wiktku-dunde-list wiktku-lang-row-list'></ul>");
list.append(steps.dunde.buildRow(stepDiv));
stepDiv.append(list);
// Attach the searchable picker now the select is in the DOM.
initSelects(list);
return null;
},
/** Reads all [langcode, words[]] rows from the DOM. */
getRows: function (stepDiv) {
var result = [];
stepDiv.find("li.wiktku-dunde-row").each(function () {
var lang = $(this).find("select").val();
if (!lang) return;
var words = [];
$(this).find("ul.wiktku-dunde-words textarea").each(function () {
var v = $.trim($(this).val());
if (v) words.push(v);
});
if (words.length) result.push([lang, words]);
});
return result;
},
output: function () {
var stepDiv = $("#wiktku-start-dunde");
var rows = steps.dunde.getRows(stepDiv);
if (!rows.length) return "";
var lines = $.map(rows, function (row) {
var lang = row[0], words = row[1];
return "* {{dû|" + lang + "|" + words.join("|") + "}}";
});
return "\n==== Dûnde ====\n" + lines.join("\n") + "\n";
}
},
zarava: {
id: "zarava",
name: "bi zaravayên din",
question_fmt: "'"+ pageName + "' di zaravayên din de çawa tê gotin?",
visible: function (values) {
return steps.trans.visible(values);
},
disabledKeys: {},
buildRow: function (group) {
var row = $("<li class='wiktku-zarava-row wiktku-lang-row'></li>");
var langSel = $(mw.html.element("select", {
"class": "wiktku-start-step-keyfield wiktku-start-narrow" }));
langSel.attr("data-placeholder", "Li zaravayekî bigere");
populateMenus(langSel, steps.zarava.keys || [], steps.zarava.disabledKeys);
langSel.on("change", function () {
steps.zarava.onLangChange(group, row);
});
var wordList = $("<ul class='wiktku-zarava-words wiktku-lang-row-words'></ul>");
var firstWord = steps.zarava.makeWordInput();
wordList.append($("<li></li>").append(firstWord));
row.append(langSel).append(wordList);
return row;
},
makeWordInput: function () {
var input = $("<textarea></textarea>")
.attr("name", "wiktku-zarava-word-" + $.now() + "-" + Math.random().toString(36).substr(2, 9))
.attr("rows", 1)
.attr("class", "wiktku-dfn-subfield wiktku-start-narrow")
.attr("placeholder", "Tercime…");
input.on("input", function () {
var list = $(this).closest("ul.wiktku-zarava-words");
var item = $(this).parent();
var val = $.trim($(this).val());
if (val && item.is(list.children("li:last-child"))) {
var next = steps.zarava.makeWordInput();
list.append($("<li></li>").append(next));
}
});
return input;
},
onLangChange: function (group, row) {
var list = group.find("ul.wiktku-zarava-list");
var isLast = row.is(list.children("li.wiktku-zarava-row:last-child"));
if (isLast) {
var newRow = steps.zarava.buildRow(group);
list.append(newRow);
// Attach the searchable picker now the row is in the DOM.
initSelects(newRow);
}
steps.zarava.syncDisabledKeys(group);
},
/** Disables already-selected dialects in all other dropdowns within one group. */
syncDisabledKeys: function (group) {
var taken = $.extend({}, steps.zarava.disabledKeys);
group.find("li.wiktku-zarava-row select").each(function () {
var v = $(this).val();
if (v) taken[v] = true;
});
group.find("li.wiktku-zarava-row select").each(function () {
var self = $(this);
var own = self.val();
self.find("option").each(function () {
var code = $(this).val();
if (!code) return;
$(this).prop("disabled", taken[code] && code !== own);
});
self.trigger("wiktku:refresh");
});
},
/** Builds (or fetches) the .wiktku-zarava-group for one gloss. */
buildGroup: function (stepDiv, gi) {
var group = $("<div class='wiktku-zarava-group'></div>").attr("data-gloss-pos", gi);
var list = $("<ul class='wiktku-zarava-list wiktku-lang-row-list'></ul>");
list.append(steps.zarava.buildRow(group));
group.append(list);
stepDiv.append(group);
// Attach the searchable picker now the select is in the DOM.
initSelects(list);
return group;
},
/** Syncs one .wiktku-zarava-group per current gloss (same logic as steps.trans.build). */
build: function (stepDiv) {
var glosses = steps.trans.glossList();
if (!glosses.length) {
stepDiv.find(".wiktku-zarava-group").remove();
return null;
}
var existingGroups = stepDiv.find(".wiktku-zarava-group");
if (existingGroups.length > glosses.length) {
existingGroups.slice(glosses.length).remove();
}
$.each(glosses, function (gi, gloss) {
var group = stepDiv.find(".wiktku-zarava-group[data-gloss-pos='" + gi + "']");
if (!group.length) group = steps.zarava.buildGroup(stepDiv, gi);
var label = group.find(".wiktku-zarava-group-label");
if (glosses.length > 1) {
if (!label.length) {
label = $("<div class='wiktku-zarava-group-label'></div>");
group.prepend(label);
}
label.text(gloss.index + " " + gloss.text);
} else if (label.length) {
label.remove();
}
});
return null;
},
/** Reads the dialect rows for a single gloss group. */
getGroupTranslations: function (group) {
var result = [];
group.find("li.wiktku-zarava-row").each(function () {
var lang = $(this).find("select").val();
if (!lang) return;
var words = [];
$(this).find("ul.wiktku-zarava-words textarea").each(function () {
var v = $.trim($(this).val());
if (v) words.push(v);
});
if (words.length) result.push([lang, words]);
});
return result;
},
/** Reads all rows from the DOM, grouped by gloss position. */
getTranslations: function (stepDiv) {
var result = [];
stepDiv.find(".wiktku-zarava-group").each(function () {
result.push(steps.zarava.getGroupTranslations($(this)));
});
return result;
},
output: function (values) {
if (values.lang !== "ku") return "";
var stepDiv = $("#wiktku-start-zarava");
var glosses = steps.trans.glossList();
if (!glosses.length) return "";
// Item 6 (Wikihez, 14 Tebax 2026): "Bi zaravayên din" now
// auto-appears empty for lang=ku exactly like Werger
// already does (steps.trans.output, same rule below) —
// a completely empty entry still gets a placeholder
// section to fill in later; an individual placeholder
// gloss is only skipped once some other sense already has
// real content, making that particular one redundant.
var dfnSenses = steps.dfn.getSenses($("#wiktku-start-dfn"));
var hasRegularMane = dfnSenses.some(function (s) {
return !s.tpl && (s.mane !== "" || senseHasExtraContent(s));
});
var blocks = $.map(glosses, function (gloss, gi) {
var group = stepDiv.find(".wiktku-zarava-group[data-gloss-pos='" + gi + "']");
var rows = group.length ? steps.zarava.getGroupTranslations(group) : [];
if (!gloss.text && !rows.length && hasRegularMane) return undefined;
if (rows.length) {
rows.sort(function (a, b) {
var aLang = langsByCode[a[0]] || {};
var bLang = langsByCode[b[0]] || {};
return (aLang.sortKey || "").localeCompare(bLang.sortKey || "", "ku");
});
}
var wordLines = $.map(rows, function (row) {
var lang = row[0];
var words = row[1];
var wikiWords = words.map(function (w) {
return "{{W|" + lang + "|" + w + "}}";
}).join(", ");
return "* {{Z|" + lang + "}}: " + wikiWords;
}).join("\n");
var block = "{{werger-ser|" + (gloss.text || "?") + "|" + gloss.index + "}}";
if (wordLines) block += "\n" + wordLines;
block += "\n{{werger-bin}}";
return block;
});
if (!blocks.length) return "";
return "\n==== Bi zaravayên din ====\n" + blocks.join("\n") + "\n";
}
},
trans: {
id: "trans",
name: "werger",
question_fmt: "Tercimeyên vê maneyê bi zimanên din binivîse",
visible: function (values) {
if (!(values.lang === "ku" && values.pos)) return false;
// Hide only when every sense is a filled template sense (no plain
// gloss to attach translations to). A mix, or nothing filled in
// yet, still shows Werger.
var dfnSenses = steps.dfn.getSenses($("#wiktku-start-dfn"));
var hasRealSense = dfnSenses.some(function (s) {
return !s.tpl && (s.mane !== "" || senseHasExtraContent(s));
});
var hasFilledTplSense = dfnSenses.some(function (s) {
return s.tpl && s.tplTitle;
});
return hasRealSense || !hasFilledTplSense;
},
disabledKeys: {
"navz": true,
"ku": true,
"ckb": true,
"sdh": true,
"lki": true,
"hac": true,
"zza": true },
// Language dropdown + growing word-input list, scoped to one gloss's
// group (each gloss has its own group and row list).
buildRow: function (group) {
var row = $("<li class='wiktku-trans-row wiktku-lang-row'></li>");
// Language selector — the searchable picker is applied after insertion into DOM.
var langSel = $(mw.html.element("select", {
"class": "wiktku-start-step-keyfield wiktku-start-narrow" }));
langSel.attr("data-placeholder", "Li zimanekî bigere");
populateMenus(langSel, steps.trans.keys || [], steps.trans.disabledKeys);
// When a language is chosen, ensure a next empty row exists.
langSel.on("change", function () {
steps.trans.onLangChange(group, row);
});
// Word list for this language.
var wordList = $("<ul class='wiktku-trans-words wiktku-lang-row-words'></ul>");
var firstWord = steps.trans.makeWordInput();
wordList.append($("<li></li>").append(firstWord));
// The searchable picker is attached by initSelects() once the row
// is in the DOM (see onLangChange/buildGroup below).
row.append(langSel).append(wordList);
return row;
},
makeWordInput: function () {
var input = $("<textarea></textarea>")
.attr("name", "wiktku-trans-word-" + $.now() + "-" + Math.random().toString(36).substr(2, 9))
.attr("rows", 1)
.attr("class", "wiktku-dfn-subfield wiktku-start-narrow")
.attr("placeholder", "Tercime…");
input.on("input", function () {
var list = $(this).closest("ul.wiktku-trans-words");
var item = $(this).parent();
var val = $.trim($(this).val());
if (val && item.is(list.children("li:last-child"))) {
var next = steps.trans.makeWordInput();
list.append($("<li></li>").append(next));
}
});
return input;
},
onLangChange: function (group, row) {
var list = group.find("ul.wiktku-trans-list");
var isLast = row.is(list.children("li.wiktku-trans-row:last-child"));
if (isLast) {
var newRow = steps.trans.buildRow(group);
list.append(newRow);
// Attach the searchable picker now the row is in the DOM.
initSelects(newRow);
}
// Keep disabled keys in sync across this gloss's lang selectors
// only — the same language can be used for different senses.
steps.trans.syncDisabledKeys(group);
},
/** Disables already-selected languages in all other dropdowns within one group. */
syncDisabledKeys: function (group) {
var taken = $.extend({}, steps.trans.disabledKeys);
group.find("li.wiktku-trans-row select").each(function () {
var v = $(this).val();
if (v) taken[v] = true;
});
group.find("li.wiktku-trans-row select").each(function () {
var self = $(this);
var own = self.val();
self.find("option").each(function () {
var code = $(this).val();
if (!code) return;
$(this).prop("disabled", taken[code] && code !== own);
});
self.trigger("wiktku:refresh");
});
},
// Builds (or fetches) the .wiktku-trans-group for one gloss.
buildGroup: function (stepDiv, gi) {
var group = $("<div class='wiktku-trans-group'></div>").attr("data-gloss-pos", gi);
var list = $("<ul class='wiktku-trans-list wiktku-lang-row-list'></ul>");
list.append(steps.trans.buildRow(group));
group.append(list);
stepDiv.append(group);
// Attach the searchable picker now the select is in the DOM.
initSelects(list);
return group;
},
// Syncs one .wiktku-trans-group per current gloss, keyed by
// data-gloss-pos so groups stay matched across rebuilds.
build: function (stepDiv) {
var glosses = steps.trans.glossList();
if (!glosses.length) {
stepDiv.find(".wiktku-trans-group").remove();
return null;
}
// Drop groups for glosses that no longer exist (always from the
// tail — groups are only ever appended in gloss order below).
var existingGroups = stepDiv.find(".wiktku-trans-group");
if (existingGroups.length > glosses.length) {
existingGroups.slice(glosses.length).remove();
}
$.each(glosses, function (gi, gloss) {
var group = stepDiv.find(".wiktku-trans-group[data-gloss-pos='" + gi + "']");
if (!group.length) group = steps.trans.buildGroup(stepDiv, gi);
// Only label groups when there's more than one gloss to
// distinguish between — a single gloss needs no caption.
var label = group.find(".wiktku-trans-group-label");
if (glosses.length > 1) {
if (!label.length) {
label = $("<div class='wiktku-trans-group-label'></div>");
group.prepend(label);
}
label.text(gloss.index + " " + gloss.text);
} else if (label.length) {
label.remove();
}
});
return null;
},
/** Reads the translation rows for a single gloss group. */
getGroupTranslations: function (group) {
var result = [];
group.find("li.wiktku-trans-row").each(function () {
var lang = $(this).find("select").val();
if (!lang) return;
var words = [];
$(this).find("ul.wiktku-trans-words textarea").each(function () {
var v = $.trim($(this).val());
if (v) words.push(v);
});
if (words.length) result.push([lang, words]);
});
return result;
},
// Reads all translation rows, grouped by gloss position.
getTranslations: function (stepDiv) {
var result = [];
stepDiv.find(".wiktku-trans-group").each(function () {
result.push(steps.trans.getGroupTranslations($(this)));
});
return result;
},
// Builds the numbered "{ index, gloss }" list, one per dfn sense
// with a real mane (skips template senses). index is 1-based and
// matches the sense's position in the "#" definition list.
// When nothing's filled in, returns one placeholder entry so
// Werger still has a group to attach to; when every sense is a
// filled template sense, stays empty (matches trans.visible()).
glossList: function () {
var dfnSenses = steps.dfn.getSenses($("#wiktku-start-dfn"));
var glosses = [];
var hasFilledTplSense = false;
$.each(dfnSenses, function (i, s) {
if (s.tpl) {
if (s.tplTitle) hasFilledTplSense = true;
return; // template sense — no gloss to caption with
}
var dfn = s.mane;
if (!dfn) {
// No mane, but other fields are filled — still gets a
// gloss group since dfn.getOutput() emits {{mane?}} for it.
if (senseHasExtraContent(s)) glosses.push({ index: i + 1, text: "" });
return;
}
if (dfn[0] !== dfn[0].toLowerCase()) dfn = decapitalize(dfn);
dfn = stripWikilinks(dfn).replace(/[.…?!)\]،؟]+$/, "");
glosses.push({ index: i + 1, text: dfn });
});
if (!glosses.length && !hasFilledTplSense) {
glosses.push({ index: 1, text: "" });
}
return glosses;
},
output: function (values) {
if (values.lang !== "ku") return "";
var stepDiv = $("#wiktku-start-trans");
var glosses = steps.trans.glossList();
// Every sense is a template sense — there's no real gloss
// anywhere and no group in the DOM either (glossList() only
// returns empty in that case), so skip the section entirely.
if (!glosses.length) return "";
// A completely empty entry (nothing filled in dfn at all, no
// şablon chosen either) still gets a placeholder Werger section
// to fill in later. Only
// skip an individual placeholder gloss below when some other
// sense actually has real content, making that particular
// placeholder redundant.
var dfnSenses = steps.dfn.getSenses($("#wiktku-start-dfn"));
var hasRegularMane = dfnSenses.some(function (s) {
return !s.tpl && (s.mane !== "" || senseHasExtraContent(s));
});
// Each gloss now has its own group of translation rows —
// attach every gloss's own words under its own werger-ser/-bin
// pair instead of dumping everything under the first one.
var blocks = $.map(glosses, function (gloss, gi) {
var group = stepDiv.find(".wiktku-trans-group[data-gloss-pos='" + gi + "']");
var rows = group.length ? steps.trans.getGroupTranslations(group) : [];
// Placeholder gloss (no real mane entered yet) with nothing
// translated into it. If some other sense already has real
// content, this placeholder is redundant — skip it. If the
// whole entry is empty, keep it so Werger still gets a
// section to fill in.
if (!gloss.text && !rows.length && hasRegularMane) return undefined;
if (rows.length) {
// Sort by Kurdish sort key.
rows.sort(function (a, b) {
var aLang = langsByCode[a[0]] || {};
var bLang = langsByCode[b[0]] || {};
return (aLang.sortKey || "").localeCompare(bLang.sortKey || "", "ku");
});
}
var wordLines = $.map(rows, function (row) {
var lang = row[0];
var words = row[1];
var wikiWords = words.map(function (w) {
return "{{W|" + lang + "|" + w + "}}";
}).join(", ");
return "* {{Z|" + lang + "}}: " + wikiWords;
}).join("\n");
var block = "{{werger-ser|" + (gloss.text || "?") + "|" + gloss.index + "}}";
if (wordLines) block += "\n" + wordLines;
block += "\n{{werger-bin}}";
return block;
});
if (!blocks.length) return "";
return "\n==== Werger ====\n" + blocks.join("\n") + "\n";
}
},
cavkani: {
id: "cavkani",
name: "çavkanî",
question_fmt: "Çavkaniyên din (ne jêgirtin) lê zêde bike",
visible: function (values) {
return !!values.pos;
},
// Fills the insert-dropdown from the members of [[Kategorî:Çavkanî]].
refreshTplSelect: function () {
var sel = $("#wiktku-start-cavkani .wiktku-tpl-insert-select");
if (!sel.length) return;
sel.find("option[value!='']").remove();
$.each(catSrcTemplates || [], function (_, name) {
sel.append($("<option></option>").val(name).text(name));
});
markTemplateOptions(sel, function (opt) { return opt.val(); });
// Tell the picker the option list changed.
sel.trigger("wiktku:refresh");
},
build: function (stepDiv) {
if (stepDiv.find(".wiktku-cavkani-wrap").length) return null;
var wrap = $("<div class='wiktku-cavkani-wrap'></div>");
var ta = $("<textarea></textarea>")
.attr("name", "wiktku-cavkani-" + $.now())
.attr("class", "wiktku-start-step-field wiktku-cavkani-text")
.attr("rows", 4)
.attr("placeholder", "Şablonekî ji lîsteyê hilbijêre an rasterast binivîse…");
// Template insert dropdown, populated from [[Kategorî:Çavkanî]] —
// options refreshed once the category members are fetched.
var sel = $("<select class='wiktku-tpl-insert-select'></select>");
sel.attr("data-placeholder", "Şablonek lê zêde bike…");
sel.append($("<option value=''>— şablonek lê zêde bike —</option>"));
var status = $("<span class='wiktku-cavkani-status'></span>");
sel.on("change", function () {
var name = $(this).val();
if (!name) return;
insertAtCursor(ta[0], "\n* {{" + name + "}}");
$(this).val("");
sel.trigger("wiktku:refresh");
ta.focus();
});
wrap.append(sel);
wrap.append(status).append(ta);
stepDiv.append(wrap);
// build() runs again for every new beş (see the "+ Beş zêde bike"
// handler), after the initial page-wide pass — so this select needs
// its own init or it stays a plain, unsearchable native <select>.
initSelects(wrap);
if (catSrcTemplates) {
steps.cavkani.refreshTplSelect();
} else {
status.text("Şablon tên barkirin…");
fetchCatSrcTemplates().then(function () {
steps.cavkani.refreshTplSelect();
status.text("");
}, function () {
status.text("Şablon nehatin barkirin.");
});
}
return ta;
},
output: function () {
var text = $.trim($("#wiktku-start-cavkani .wiktku-cavkani-text").val());
if (!text) return "";
return "\n==== Çavkanî ====\n" + text + "\n";
}
},
};
steps.trans.keys = steps.lang.choices;
steps.dunde.keys = steps.lang.choices;
steps.zarava.keys = getZaravaKeys(steps.lang.choices);
// Ghybu, 14 Tebax 2026: bnrh/resim/pron used to sit here, always visible,
// well above the tab bar (which starts right before "dfn"). They're now
// tab-gated (see STEP_GROUPS below), so their DOM position moves down to
// sit right next to it instead of rendering as always-open fields between
// Ziman and Cureyê rêzimanî. This array only controls DOM build order —
// nothing else keys off it (see the comment above stepIdToGroup).
// Wikihez, 14 Tebax 2026: Mane tab's internal order is now Mane → malûmatên
// pêşketî (nested inside dfn's own div, see steps.dfn.build) → Wêne →
// Bi zaravayên din → Werger, so dfn/resim/zarava/trans need to sit
// adjacent to each other, in that order, in the DOM. zarava/trans moved
// out of the "Beşên din" cluster entirely — see STEP_GROUPS below.
var ordered_steps = [
steps.lang, steps.pos, steps.posparams,
steps.cinsiyet, steps.jimar, steps.lektur, steps.tr,
// Mane tab, in reading order: the senses, then the two things that
// belong to the entry as a whole rather than to one sense.
steps.dfn, steps.tewandin, steps.trans,
// Etîmolojî tab.
steps.etym, steps.dunde,
// Eleqedar tab — three lists of the same shape.
steps.je, steps.tekildar, steps.binereherwiha,
// Bilêvkirin: no longer in a tab at all (see PRON_SECTION_ID) — it
// still needs a slot here because this array is what builds the DOM.
steps.pron,
// Beşên din, behind the picker.
steps.resim, steps.zarava,
steps.bnrh, steps.bikaranin, steps.alfabeyendin, steps.formalt, steps.hevmane, steps.dijmane, steps.jornav, steps.jernav,
steps.cavkani, steps.xwendin];
// ── Step-group tabs ──────────────────────────────────────────────────────
// Ghybu, 14 Tebax 2026 (revised): originally 5 tabs (Bingehîn/Bilêvkirin/
// Lînkkirin/Bikaranîn/Din), split by topic. Ghybu's follow-up flattened
// that to exactly 3: "Mane", "Bilêvkirin", "Beşên din" ("other
// sections") — with Wêne and Nimûne folded INTO "Mane" specifically
// (not left in a misc tab), and everything that isn't Mane/Bilêvkirin
// dumped into one single "Beşên din" catch-all rather than split across
// topic tabs. Nimûne doesn't appear below as its own entry because it's
// not a separate step — it's already rendered inside each dfn/Mane
// sense block (see buildSenseBlock's allGroups), so it's under "Mane"
// automatically. "mane" stays first (and so the default-active tab)
// since required content — Mane itself — has to be what's seen by
// default.
// Wikihez, 14 Tebax 2026: zarava/trans moved from "besendin" into "mane" —
// both are already gated to lang===ku (zarava.visible just delegates to
// trans.visible), so they show/hide automatically with no picker
// involvement, same as before; they just render inside the Mane tab
// now instead of behind the Beşên din picker (see openedOtherSections
// below, which only applies to "besendin" members).
// Wikihez, 15 Tebax 2026: pared back again after Ghybu's "Tu jî dizanî ku
// kesên ku tên vira çito peyv çêdikin: Ziman > Mane > Mînak > Hevmane >
// Dijmane". That path is now what the form shows by default and nothing
// else: Mane holds the senses (whose own blocks carry Nimûne, Jêgirtin,
// Hevmane and Dijmane — see steps.dfn.allGroups) plus Werger. Wêne and
// "Bi zaravayên din" moved out to the Beşên din picker with everything
// else; they aren't gone, they're one dropdown pick away.
// v3 spec (15 Tebax 2026): four tabs instead of three, and Bilêvkirin
// leaves the tab bar entirely.
//
// The Beşên din picker had grown to eighteen entries, which is its own
// kind of "where do I find anything" problem — splitting the two
// obvious clusters out as their own tabs is what fixes that:
// Etîmolojî — where the word came from, and what came from it
// Eleqedar — the three "related words" lists, which are the same
// shape as each other and nothing like the rest
// Tewandin moves into Mane and out from behind the picker: it is
// commonly wanted and it belongs with the senses it inflects. Note this
// is a PLACEMENT change only — Tewandin keeps its own free-text
// {{ku-tewîn-nav}} field and does NOT absorb the Cins/zayend form
// parameters (m=/n=/p=), which stay on the headword template where
// they belong. The v3 mock merged the two; Wikihez rejected that.
var STEP_GROUPS = [
{ id: "mane", label: "Mane", steps: ["dfn", "tewandin", "trans"] },
{ id: "etimoloji", label: "Etîmolojî", steps: ["etym", "dunde"] },
{ id: "eleqedar", label: "Eleqedar", steps: ["je", "tekildar", "binereherwiha"] },
{ id: "besendin", label: "Beşên din", steps: ["resim", "zarava", "formalt", "hevmane", "dijmane", "jornav", "jernav", "bikaranin", "alfabeyendin", "cavkani", "xwendin", "bnrh"] },
];
// Steps that live behind the "Beşên din" picker — only these need an
// explicit "open" before they're shown, even when their tab is active.
// Derived from the group above so it can't drift out of sync.
var BESENDIN_STEP_IDS = STEP_GROUPS[3].steps;
// Reverse lookup: step id -> index into STEP_GROUPS (undefined for
// ungrouped steps — now only lang/pos/posparams/cinsiyet/lektur/tr,
// which stay always-visible since they're required to get to everything
// else).
var stepIdToGroup = {};
$.each(STEP_GROUPS, function (gi, g) {
$.each(g.steps, function (_, sid) { stepIdToGroup[sid] = gi; });
});
// Step ids that belong to each section (not shared across sections).
var PER_SECTION_STEP_IDS = [
"pos", "posparams", "cinsiyet", "jimar", "lektur", "tr",
"resim", "dfn", "tewandin", "formalt", "bikaranin", "alfabeyendin", "hevmane", "dijmane", "jornav", "jernav", "je", "tekildar", "etym", "dunde", "binereherwiha", "zarava", "trans", "cavkani", "xwendin"
];
// ── Multi-section state ──────────────────────────────────────────────────
// Each entry is a plain snapshot: { pos, cinsiyet, lektur, tr, dfn (senses[]),
// je, tekildar, binereherwiha, trans (rows[]) }.
var sections = [{}]; // section 0 starts empty (DOM is the truth)
var activeSection = 0;
// ── Bilêvkirin as a standalone section (v3 spec) ─────────────────────
// Pronunciation belongs to the word, not to one part of speech, so it
// sits beside Navdêr/Lêker in the section tab bar rather than inside
// any of them, and is added once from "+ Beş zêde bike".
//
// Modelled as a flag rather than an entry in `sections`: activeSection
// is used as an array index in a dozen places (saveCurrentSection,
// restoreSection, sections[activeSection]…), and making it sometimes a
// string would mean auditing all of them. Viewing Bilêvkirin instead
// leaves activeSection pointing at the POS section you were on, so
// coming back is free and nothing else has to change.
var pronSectionAdded = false; // has it been added from the menu yet
var viewingPron = false; // is it the tab currently on screen
// Which STEP_GROUPS tab is currently shown. Lives out here (like
// activeSection above) so refresh() — which is not nested inside build()
// — can read it and so renderGroupTabs()/updateGroupTabIndicators() below
// can be called from refresh() too. Both operate on the tab bar via its
// #wiktku-group-tabs id rather than a closured element reference, for the
// same reason.
var activeGroup = 0;
// Unsaved-changes / autosave state. Lives out here (same reason as
// activeGroup above) so destroy() — which runs on final submit and on
// switching to the source editor, and is not nested inside build() —
// can clear the timers and the beforeunload warning. build() assigns
// into these; it doesn't re-declare them.
var formDirty = false;
var autosaveDebounceTimer = null;
var autosaveInterval = null;
/** Re-renders the step-group tab bar to reflect the current activeGroup. */
function renderGroupTabs() {
var groupTabsDiv = $("#wiktku-group-tabs");
if (!groupTabsDiv.length) return;
groupTabsDiv.empty();
$.each(STEP_GROUPS, function (i, g) {
var tab = $("<span></span>")
.addClass("wiktku-group-tab")
.attr("data-group-idx", i)
.text(g.label)
.toggleClass("wiktku-tab-active", i === activeGroup);
(function (idx) {
tab.on("click", function () {
if (idx === activeGroup) return;
activeGroup = idx;
renderGroupTabs();
if (idx === BESENDIN_GROUP_IDX) renderBesenDinPicker();
refresh();
});
}(i));
groupTabsDiv.append(tab);
});
}
/**
* Toggles a "needs attention" dot on any group tab that still has a
* required, unfilled field hidden inside it — so switching tabs doesn't
* leave the person wondering why "Bişîne" stays disabled.
*/
function updateGroupTabIndicators(values) {
var tabs = $("#wiktku-group-tabs .wiktku-group-tab");
if (!tabs.length) return;
$.each(STEP_GROUPS, function (i, g) {
var missing = false;
$.each(g.steps, function (_, sid) {
var step = steps[sid];
if (!step || !step.required) return;
var val = values[sid];
if (val === "" || (step.multiple && $.isArray(val) && val.join("") === "")) {
missing = true;
}
});
tabs.eq(i).toggleClass("wiktku-tab-missing", missing && i !== activeGroup);
});
}
// Wikihez, 14 Tebax 2026: "Beşên din" no longer shows all 16 fields
// stacked at once — a picker reveals one at a time instead. This is
// per-section state (like the field values themselves), snapshotted in
// saveCurrentSection() and restored in restoreSection() below, and
// auto-seeded from any field that already has content (so a returning
// draft, or an older cache saved before this existed, doesn't hide
// something the person already filled in).
var openedOtherSections = {};
var BESENDIN_SET = {};
$.each(BESENDIN_STEP_IDS, function (_, sid) { BESENDIN_SET[sid] = true; });
// "besendin"'s index in STEP_GROUPS. Derived rather than hardcoded —
// this was a literal 2 and silently pointed at the wrong tab the moment
// Etîmolojî and Eleqedar were inserted ahead of it.
var BESENDIN_GROUP_IDX = (function () {
for (var i = 0; i < STEP_GROUPS.length; i++) {
if (STEP_GROUPS[i].id === "besendin") return i;
}
return STEP_GROUPS.length - 1;
}());
/** Re-renders the "Beşên din" picker to list only the not-yet-opened sections. */
function renderBesenDinPicker() {
var wrap = $("#wiktku-besendin-picker");
if (!wrap.length) return;
wrap.empty();
var pickerValues = getValues();
var unopened = $.grep(BESENDIN_STEP_IDS, function (sid) {
if (openedOtherSections[sid]) return false;
// Don't offer a section that would open onto nothing: several of
// these are gated (Bi zaravayên din / Werger need lang=ku, most
// need a pos). refresh() would hide it again straight away, so
// picking it would read as a broken dropdown.
var step = steps[sid];
if (step && typeof step.visible === "function") {
try {
if (!step.visible(pickerValues)) return false;
} catch (e) { /* a step whose visible() needs DOM we lack yet — offer it */ }
}
return true;
});
if (!unopened.length) return; // everything's open — nothing left to pick
var sel = $("<select class='wiktku-besendin-select'></select>");
sel.attr("data-placeholder", "— beşek hilbijêre —");
sel.append($("<option value=''>— beşek hilbijêre —</option>"));
$.each(unopened, function (_, sid) {
var step = steps[sid];
if (!step) return;
sel.append($("<option></option>").val(sid).text(capitalize(step.name)));
});
sel.on("change", function () {
var sid = $(this).val();
if (!sid) return;
openedOtherSections[sid] = true;
renderBesenDinPicker();
refresh();
});
wrap.append(sel);
initSelects(wrap);
}
/** Marks any BESENDIN_STEP_IDS field that already has real content as
* "opened", so restoring a draft doesn't bury filled-in sections behind
* the picker. Reuses each step's own output() as the emptiness check —
* it already knows what "empty" means per field, and it reads the DOM
* the restore just populated. Call this AFTER the DOM has the restored
* values in it. */
function seedOpenedFromContent() {
var values = getValues();
$.each(BESENDIN_STEP_IDS, function (_, sid) {
if (openedOtherSections[sid]) return;
var step = steps[sid];
if (!step || typeof step.output !== "function") return;
try {
if (step.output(values)) openedOtherSections[sid] = true;
} catch (e) { /* a step whose output() needs more state than we have yet — skip it */ }
});
}
function snapshotDfn() {
return steps.dfn.getSenses($("#wiktku-start-dfn"));
}
// Rebuilds the dfn DOM from a previously snapshotted senses array.
function restoreDfn(senses) {
var stepDiv = $("#wiktku-start-dfn");
// Tear down the existing list so build() recreates it cleanly.
stepDiv.find("ol.wiktku-dfn-list").remove();
steps.dfn.build(stepDiv);
var list = stepDiv.find("ol.wiktku-dfn-list");
$.each(senses, function (i, sense) {
// Ensure enough blocks exist (build() seeds one).
var blocks = list.find("li.wiktku-dfn-sense");
var block = blocks.eq(i);
if (!block.length) {
var nb = steps.dfn.buildSenseBlock(stepDiv);
list.append(nb);
block = list.find("li.wiktku-dfn-sense").last();
}
// Template selector.
block.find("select.wiktku-dfn-tpl-select").val(sense.tpl || "");
if (sense.tpl) {
block.find("textarea.wiktku-dfn-mane").hide();
block.find("input.wiktku-dfn-tpl-title").val(sense.tplTitle || "").show();
} else {
block.find("textarea.wiktku-dfn-mane").val(sense.mane || "").show();
block.find("input.wiktku-dfn-tpl-title").hide().val("");
}
// dfnArea is the only thing actually saved, so split it back into
// tercime/îzah for editing (mirrors syncNonKuToMane's join format).
var maneParts = splitTercimeIzah(sense.mane);
block.find(".wiktku-dfn-tercime").val(maneParts ? maneParts.tercime : (sense.mane || ""));
block.find(".wiktku-dfn-izah").val(maneParts ? maneParts.izah : "");
// Re-sync the formên alternatîv/hevmane/… hide state now that
// tplSelect's value was set (its own "change"
// handler doesn't fire from .val(), so this doesn't happen otherwise).
var updateVis = block.data("updateFieldVisibility");
if (updateVis) updateVis();
// Same for the mane-box mode (plain vs tercime+îzah), since this
// also depends on tplSelect's (and lang's) value.
var updateMane = block.data("updateManeMode");
if (updateMane) updateMane();
// Restore a sub-list (etiket, formên alternatîv, hevmane …) from a values array.
function restoreSubList(cls, values) {
if (!values || !values.length) return;
var groupDiv = block.find("." + cls + "-group");
var subList = groupDiv.find("ol, ul").first();
if (!subList.length) return; // group not found
var useModifiers = !!MODIFIER_SUBGROUPS[cls];
// Fill existing items, append new ones as needed.
$.each(values, function (j, val) {
var items = subList.find("li");
if (j < items.length) {
items.eq(j).find("textarea").val(val);
} else {
var ta = $("<textarea></textarea>")
.attr("name", "wiktku-dfn-restore-" + $.now() + "-" + Math.random().toString(36).substr(2, 9))
.attr("rows", 1)
.attr("class", "wiktku-dfn-subfield wiktku-start-narrow")
.val(val);
ta.on("input", function () {
steps.dfn.onSubInput(subList, this, 1, true, useModifiers);
});
subList.append(useModifiers ? makeModifierLi(ta) : $("<li></li>").append(ta));
}
});
}
// Reveal and populate lazy groups that have data.
var lazyMap = {
"wiktku-dfn-etiket": sense.etiket,
"wiktku-dfn-kategori": sense.kategori,
"wiktku-dfn-alternativ": sense.alternativ,
"wiktku-dfn-hevmane": sense.hevmane,
"wiktku-dfn-dijmane": sense.dijmane,
"wiktku-dfn-koordine": sense.koordine,
"wiktku-dfn-jornav": sense.jornav,
"wiktku-dfn-jernav": sense.jernav
};
$.each(lazyMap, function (cls, vals) {
if (vals && vals.length) restoreSubList(cls, vals);
});
// Nimûne items are objects { text, tr?, t? } — restore using the builder.
if (sense.nimune && sense.nimune.length) {
var nimuneGroupDiv = block.find(".wiktku-dfn-nimune-group");
var nimuneList = nimuneGroupDiv.find("ol.wiktku-dfn-nimune-list");
var buildFn = nimuneGroupDiv.data("buildNimuneLi");
nimuneList.empty();
$.each(sense.nimune, function (_, n) {
var text = typeof n === "object" ? (n.text || "") : n;
if (!text) return;
var li = buildFn ? buildFn() : $("<li class='wiktku-dfn-nimune-li'></li>");
li.find(".wiktku-dfn-nimune-text").val(text).each(function () { highlightLinebreak(this); });
if (n.tr) li.find(".wiktku-dfn-nimune-tr").val(n.tr);
if (n.t) li.find(".wiktku-dfn-nimune-t").val(n.t);
nimuneList.append(li);
});
// Always leave a blank trailing item.
if (buildFn) nimuneList.append(buildFn());
}
// Restore jêder entries — accepts current array shape or a legacy
// single object (older saved sections) for backwards compat.
var jederArr = $.isArray(sense.jeder) ? sense.jeder : (sense.jeder ? [sense.jeder] : []);
if (jederArr.length) {
var jederGroupDiv = block.find(".wiktku-dfn-jeder-group");
var jederList = jederGroupDiv.find("ol.wiktku-dfn-jeder-list");
var buildJederFn = jederGroupDiv.data("buildJederLi");
jederList.empty();
$.each(jederArr, function (_, j) {
if (!j || !j.quote) return;
var li = buildJederFn ? buildJederFn() : $("<li class='wiktku-dfn-jeder-li'></li>");
li.find(".wiktku-dfn-nimune-quote").val(j.quote).each(function () { highlightLinebreak(this); });
if (j.quoteTr) li.find(".wiktku-dfn-nimune-quote-tr").val(j.quoteTr);
if (j.quoteT) li.find(".wiktku-dfn-nimune-quote-t").val(j.quoteT);
if (j.jederManual) {
var manualSel = li.find(".wiktku-dfn-quote-src-sel");
manualSel.val("__manual__").trigger("change");
li.find(".wiktku-dfn-quote-src-manual").val(j.jederManual);
} else if (j.jederCatTpl) {
// Legacy format from before the şablon search switched rows to
// manual mode directly — convert it the same way now, so it's
// editable like any other free-form source.
var catSelEl = li.find(".wiktku-dfn-quote-src-sel");
catSelEl.val("__manual__").trigger("change");
li.find(".wiktku-dfn-quote-src-manual").val("{{" + j.jederCatTpl + "}}");
} else if (j.jederTpl) {
var srcSel = li.find(".wiktku-dfn-quote-src-sel");
srcSel.val(j.jederTpl).trigger("change");
if (j.jêderFields) {
$.each(j.jêderFields, function (key, val) {
li.find(".wiktku-dfn-quote-src-input[data-field-key='" + key + "']").val(val);
});
}
}
jederList.append(li);
});
// Always leave a blank trailing item, same as Nimûne.
if (buildJederFn) jederList.append(buildJederFn());
}
});
// Numbers and one-line summaries for the freshly rebuilt blocks, and
// collapse everything that has content — on a restored draft nothing
// is "the sense being edited" yet, so a five-sense entry would
// otherwise come back fully expanded, which is the state this
// accordion exists to avoid.
steps.dfn.syncSenseHeaders(stepDiv);
stepDiv.find("li.wiktku-dfn-sense").each(function () {
var li = $(this);
li.toggleClass("wiktku-sense-collapsed", steps.dfn.senseBlockHasContent(li));
});
}
// Snapshots simple (non-dfn) per-section steps from the DOM into obj.
function saveCurrentSection() {
var snap = {};
$.each(PER_SECTION_STEP_IDS, function (_, id) {
if (id === "dfn") {
snap.dfn = snapshotDfn();
return;
}
if (id === "etym") {
snap.etym = $.trim($("#wiktku-start-etym .wiktku-etym-text").val());
return;
}
if (id === "cavkani") {
snap.cavkani = $.trim($("#wiktku-start-cavkani .wiktku-cavkani-text").val());
return;
}
if (id === "posparams") {
snap.posparams = $.trim($("#wiktku-start-posparams .wiktku-posparams-text").val());
return;
}
if (id === "resim") {
// One entry per row, including blank ones, so a mid-edit draft
// (e.g. a filename typed but no caption yet) survives a cache
// restore instead of being silently dropped.
snap.resim = $("#wiktku-start-resim li.wiktku-resim-item").map(function () {
return {
file: $.trim($(this).find(".wiktku-resim-file").val()),
caption: $.trim($(this).find(".wiktku-resim-caption").val()),
alt: $.trim($(this).find(".wiktku-resim-alt").val())
};
}).get();
return;
}
var step = steps[id];
if (!step) return;
var stepDiv = $("#wiktku-start-" + id);
if (id === "trans") {
snap.trans = steps.trans.getTranslations(stepDiv);
return;
}
if (id === "zarava") {
snap.zarava = steps.zarava.getTranslations(stepDiv);
return;
}
if (id === "dunde") {
snap.dunde = steps.dunde.getRows(stepDiv);
return;
}
// Generic: read all step fields.
var fields = stepDiv.find(".wiktku-start-step-field");
if (step.multiple) {
snap[id] = fields.map(function () { return $(this).val(); }).get();
} else {
snap[id] = fields.val();
}
});
// Item 3: which "Beşên din" sub-sections this section has already
// opened via the picker — per-section, like everything else here.
snap.openedOtherSections = $.extend({}, openedOtherSections);
sections[activeSection] = snap;
}
// Restores a previously saved snapshot into the form DOM.
function restoreSection(snap) {
$.each(PER_SECTION_STEP_IDS, function (_, id) {
if (id === "dfn") {
restoreDfn(snap.dfn || []);
return;
}
if (id === "etym") {
$("#wiktku-start-etym .wiktku-etym-wrap").remove();
steps.etym.build($("#wiktku-start-etym"));
$("#wiktku-start-etym .wiktku-etym-text").val(snap.etym || "");
return;
}
if (id === "cavkani") {
$("#wiktku-start-cavkani .wiktku-cavkani-wrap").remove();
steps.cavkani.build($("#wiktku-start-cavkani"));
$("#wiktku-start-cavkani .wiktku-cavkani-text").val(snap.cavkani || "");
return;
}
if (id === "posparams") {
var ppDiv = $("#wiktku-start-posparams");
ppDiv.find(".wiktku-posparams-wrap").remove();
steps.posparams.build(ppDiv);
var savedTa = snap.posparams || "";
ppDiv.find(".wiktku-posparams-text").val(savedTa);
// Re-parse saved textarea to restore helper widget states.
if (savedTa) {
var cMatch = savedTa.match(/\|c=([^|}\s]+)/);
var jMatch = savedTa.match(/\|j=([^|}\s]+)/);
var trMatch = savedTa.match(/\|tr=([^|}\s]+)/);
// Write into the shared hidden field (not the visible
// select, which has no <option>s yet) — syncHelpers()
// below reads it back to restore the dropdown once the
// gender/number options for this language are populated.
if (cMatch) $("#wiktku-start-cinsiyet-field").val(cMatch[1]);
if (jMatch) $("#wiktku-start-jimar-field").val(jMatch[1]);
if (trMatch) ppDiv.find(".wiktku-posparams-field[data-pp-key='tr']").val(trMatch[1]);
// For lêker, c= holds the verb-type code instead of a
// gender — split it back across the two dropdowns it is
// now assembled from ("x-gh" → form "x" + base "gh").
if (cMatch && /^lêker/.test(snap.pos || "")) {
var lekturParts = /^(?:([xphb])-)?(n?gh)$/.exec(cMatch[1]);
if (lekturParts) {
ppDiv.find(".wiktku-posparams-lektur-sel").val(lekturParts[2]);
ppDiv.find(".wiktku-posparams-lekturform-sel").val(lekturParts[1] || "");
}
}
// Restore checked optional params. "form" is stored as
// "erê" rather than "1" (see rebuildTa), so it needs its
// own check here.
ppDiv.find(".wiktku-posparams-opt-panel input[type='checkbox']").each(function () {
var key = $(this).val();
var expected = key === "form" ? "erê" : "1";
$(this).prop("checked", savedTa.indexOf("|" + key + "=" + expected) !== -1);
});
}
steps.posparams.syncHelpers(ppDiv);
return;
}
if (id === "resim") {
var resimDiv = $("#wiktku-start-resim");
resimDiv.find(".wiktku-resim-wrap").remove();
steps.resim.build(resimDiv);
// Accept both the new array-of-rows format and the older
// single {file, caption} object saved before multi-image
// support existed.
var resimSnap = snap.resim;
var rows = $.isArray(resimSnap) ? resimSnap : (resimSnap ? [resimSnap] : []);
if (rows.length) {
var list = resimDiv.find("ol.wiktku-resim-list");
list.empty();
$.each(rows, function (_, r) {
var item = steps.resim.buildItem(resimDiv);
item.find(".wiktku-resim-file").val(r.file || "");
item.find(".wiktku-resim-caption").val(r.caption || "");
item.find(".wiktku-resim-alt").val(r.alt || "");
list.append(item);
});
// Always keep a blank trailing row, same as Nimûne/Dûnde.
var lastItem = list.children("li.wiktku-resim-item").last();
if ($.trim(lastItem.find(".wiktku-resim-file").val())) {
list.append(steps.resim.buildItem(resimDiv));
}
}
return;
}
if (id === "trans") {
// Rebuild trans groups (dfn must already be restored by this
// point in the $.each loop, so glossList() reflects it).
var transDiv = $("#wiktku-start-trans");
transDiv.find(".wiktku-trans-group").remove();
steps.trans.build(transDiv);
var groupsSnap = snap.trans || [];
$.each(groupsSnap, function (gi, rows) {
var group = transDiv.find(".wiktku-trans-group[data-gloss-pos='" + gi + "']");
if (!group.length) return; // gloss no longer exists — drop its rows
var list = group.find("ul.wiktku-trans-list");
$.each(rows, function (j, row) {
var lang = row[0], words = row[1];
var lastRow = list.find("li.wiktku-trans-row").last();
lastRow.find("select").val(lang).trigger("change");
var wordList = lastRow.find("ul.wiktku-trans-words");
$.each(words, function (k, word) {
var wordItems = wordList.find("li");
if (k < wordItems.length) {
wordItems.eq(k).find("textarea").val(word);
} else {
// .val() below doesn't fire "input", so the normal
// auto-grow never runs — append a matching item
// ourselves instead of silently dropping the word.
var extraInput = steps.trans.makeWordInput();
wordList.append($("<li></li>").append(extraInput));
extraInput.val(word);
}
});
// Leave one trailing empty field so the row can still grow
// when the user types, matching a freshly-built row.
if ($.trim(wordList.children("li").last().find("textarea").val())) {
wordList.append($("<li></li>").append(steps.trans.makeWordInput()));
}
});
});
return;
}
if (id === "zarava") {
// Rebuild zarava groups (dfn must already be restored by this
// point in the $.each loop, so glossList() reflects it).
var zaravaDiv = $("#wiktku-start-zarava");
zaravaDiv.find(".wiktku-zarava-group").remove();
steps.zarava.build(zaravaDiv);
var zaravaGroupsSnap = snap.zarava || [];
$.each(zaravaGroupsSnap, function (gi, rows) {
var group = zaravaDiv.find(".wiktku-zarava-group[data-gloss-pos='" + gi + "']");
if (!group.length) return; // gloss no longer exists — drop its rows
var list = group.find("ul.wiktku-zarava-list");
$.each(rows, function (j, row) {
var lang = row[0], words = row[1];
var lastRow = list.find("li.wiktku-zarava-row").last();
lastRow.find("select").val(lang).trigger("change");
var wordList = lastRow.find("ul.wiktku-zarava-words");
$.each(words, function (k, word) {
var wordItems = wordList.find("li");
if (k < wordItems.length) {
wordItems.eq(k).find("textarea").val(word);
} else {
var extraInput = steps.zarava.makeWordInput();
wordList.append($("<li></li>").append(extraInput));
extraInput.val(word);
}
});
if ($.trim(wordList.children("li").last().find("textarea").val())) {
wordList.append($("<li></li>").append(steps.zarava.makeWordInput()));
}
});
});
return;
}
if (id === "dunde") {
// Rebuild dunde rows.
var dundeDiv = $("#wiktku-start-dunde");
dundeDiv.find("ul.wiktku-dunde-list").remove();
steps.dunde.build(dundeDiv);
var dundeRows = snap.dunde || [];
$.each(dundeRows, function (i, row) {
var lang = row[0], words = row[1];
var list = dundeDiv.find("ul.wiktku-dunde-list");
var lastRow = list.find("li.wiktku-dunde-row").last();
lastRow.find("select").val(lang).trigger("change");
var wordList = lastRow.find("ul.wiktku-dunde-words");
$.each(words, function (j, word) {
var wordItems = wordList.find("li");
if (j < wordItems.length) {
wordItems.eq(j).find("textarea").val(word);
} else {
// .val() below doesn't fire "input", so the normal
// auto-grow never runs — append a matching item
// ourselves instead of silently dropping the word.
var extraInput = steps.dunde.makeWordInput();
wordList.append($("<li></li>").append(extraInput));
extraInput.val(word);
}
});
// Leave one trailing empty field so the row can still grow
// when the user types, matching a freshly-built row.
if ($.trim(wordList.children("li").last().find("textarea").val())) {
wordList.append($("<li></li>").append(steps.dunde.makeWordInput()));
}
});
return;
}
var step = steps[id];
if (!step) return;
var stepDiv = $("#wiktku-start-" + id);
var fields = stepDiv.find(".wiktku-start-step-field");
var val = snap[id];
if (val === undefined || val === null) return;
if (step.multiple) {
var arr = val;
fields.each(function (i) {
if (i < arr.length) $(this).val(arr[i]);
});
} else {
fields.val(val);
}
// Tell the pickers about the programmatic value change.
fields.filter("select").trigger("wiktku:refresh");
});
// Item 3: restore which "Beşên din" sub-sections were already opened
// for this section, then seed in anything the DOM restore above just
// filled in but that wasn't marked opened yet (e.g. an older cache
// saved before this existed).
openedOtherSections = $.extend({}, snap.openedOtherSections || {});
seedOpenedFromContent();
renderBesenDinPicker();
}
function getWikitextForCurrentSection(callback) {
var values = getValues();
var entry = steps.pos.output(values);
// Bilêvkirin is NOT emitted here — it is one shared field for the
// whole word, so emitting it per section duplicated it. getWikitext()
// prints it once, above the POS sections.
steps.dfn.getOutput(values, function (output) {
entry += output;
entry += steps.tewandin.output(values);
entry += steps.bikaranin.output(values);
entry += steps.alfabeyendin.output(values);
entry += steps.formalt.output(values);
entry += steps.hevmane.output(values);
entry += steps.dijmane.output(values);
entry += steps.jornav.output(values);
entry += steps.jernav.output(values);
entry += steps.je.output(values);
entry += steps.tekildar.output(values);
entry += steps.etym.output(values);
entry += steps.dunde.output(values);
entry += steps.binereherwiha.output(values);
entry += steps.zarava.output(values);
entry += steps.trans.output(values);
entry += steps.cavkani.output(values);
entry += steps.xwendin.output(values);
callback(entry, values);
});
}
function getWikitextAllSections(callback) {
saveCurrentSection();
var results = new Array(sections.length);
var sharedValues = getValues(); // lang/pron are shared
function processSection(i) {
// Each hop through here can be reached asynchronously: the dfn
// step waits on mw.loader.using("ext.gadget.linkify") before
// calling back, so from that point on the submit handler's own
// try/catch is no longer on the stack. Guard every hop instead,
// or a throw after linkify loads vanishes into an unhandled
// rejection and the form just sits there looking busy.
try {
if (i >= sections.length) {
// All done — restore original active section.
restoreSection(sections[activeSection]);
refresh();
callback(results, sharedValues);
return;
}
restoreSection(sections[i]);
refresh();
getWikitextForCurrentSection(function (sectionText) {
results[i] = sectionText;
processSection(i + 1);
});
} catch (e) {
if (typeof onSubmitError === "function") onSubmitError(e);
else throw e;
}
}
processSection(0);
}
// Assembles wikitext for all sections plus the shared lang header.
// pron used to be prepended here too (shared, above every section) —
// it now nests inside each section instead, via getWikitextForCurrentSection.
function getWikitext(callback) {
getWikitextAllSections(function (sectionTexts, sharedValues) {
var bnrh = steps.bnrh.output(sharedValues);
var entry = steps.lang.output(sharedValues);
// One pronunciation per word, printed once between the language
// header and the POS sections — see steps.pron.output.
entry += steps.pron.output(sharedValues);
entry += sectionTexts.join("\n");
// bnr-h goes before the language section — only prepended when
// generating fresh wikitext (not addLangMode, which handles it separately).
if (!addLangMode && bnrh) entry = bnrh + entry;
// Edit summary uses section 0's values. Read from the saved snapshot
// (not the live DOM) so it doesn't mix section 0's pos with whichever
// section happens to be active/restored at this point.
var dfnSenses = (sections[0] && sections[0].dfn) || [];
var dfnSummary = dfnSenses.map(function (s) {
if (s.mane) return s.mane;
// Template sense (e.g. {{guharto|ku|somepage}}) — same
// construction as the tplCall built in getOutput, so the
// summary shows what actually gets written to the entry
// instead of going blank.
if (s.tpl && s.tplTitle) {
return s.tplNoLang
? "{{" + s.tpl + "|" + s.tplTitle + "}}"
: "{{" + s.tpl + "|" + sharedValues.lang + "|" + s.tplTitle + "}}";
}
return "";
}).filter(Boolean).join("; ");
var summary = "([[Mediawiki:Gadget-start.js|WF:NÛ]] v.2.0) +" +
sharedValues.lang + ":" + sections[0].pos + ":" + dfnSummary;
var summaryField = document.getElementById("wpSummary");
if (addLangMode && summaryField.value) {
summary = summaryField.value + " " + summary;
}
summaryField.value = summary;
callback(entry);
});
}
var continueBtn;
// Set by build() to its submitFailed(). Lives out here because the
// wikitext-assembly functions below are outside build()'s closure but
// still need a way to report a failure to the person rather than dying
// silently in the console.
var onSubmitError = null;
// Item 7: whether Mane/Bi zaravayên din/Werger has anything in it —
// kept outside refresh() so the click handler (defined separately,
// where continueBtn is built) can read the latest value.
var wiktkuContentGateOk = true;
function getValuesForStep(stepId) {
var fields = $("#wiktku-start-" + stepId + " .wiktku-start-step-field");
var step = steps[stepId];
if (step.keys) {
var values = {};
fields.each(function (i, field) {
var key = $(field).prevAll(".wiktku-start-step-keyfield").val();
if (key) values[key] = $(field).val();
});
return values;
}
else if (step.multiple) {
return fields.map(function () {
return $(this).val();
}).get();
}
return fields.val();
}
function getValues() {
var values = {};
$.each(steps, function (stepId) {
values[stepId] = getValuesForStep(stepId);
});
return values;
}
function populateMenus(inputs, choices, disabledValues, placeholderText) {
if (!disabledValues) disabledValues = {};
var vals = inputs.map(function (i, input) {
return $(input).val();
});
inputs.empty();
inputs.append($("<option></option>").text(placeholderText || ""));
$.each(choices, function (j, choice) {
// Append the language code in parentheses so that typing a code
// (e.g. "ku") in the search box still finds the language name.
var displayText = capitalize(choice.label);
if (choice.sortKey !== undefined) {
// This is a language choice {code, label, sortKey} — show code.
displayText = capitalize(choice.label) + " (" + choice.code + ")";
}
var option = $(mw.html.element("option", {
value: choice.code }, displayText));
if (disabledValues[choice.code]) option.prop("disabled", true);
inputs.append(option);
});
inputs.val(function (i) {
return vals[i];
});
}
// Keys to disable for a key menu: already-taken or explicitly disabled.
function getDisabledKeys(step) {
var occupiedKeys = {};
$("#wiktku-start-" + step.id + " .wiktku-start-step-keyfield").each(function () {
occupiedKeys[$(this).val()] = true;
});
if (step.disabledKeys) $.extend(occupiedKeys, step.disabledKeys);
return occupiedKeys;
}
function buildKeyInput(step) {
if (!step.keys) return undefined;
var input = $(mw.html.element("select", {
"class": "wiktku-start-step-keyfield wiktku-start-narrow" }));
input.attr("data-placeholder", "Hilbijêre " + step.keyName);
populateMenus(input, step.keys, getDisabledKeys(step));
// Keep the key menus mutually exclusive: whatever one row selects is
// disabled in every other row. Recomputed from the DOM on each change.
input.on("change", function () {
var all = $("#wiktku-start-" + step.id + " .wiktku-start-step-keyfield");
var taken = {};
all.each(function () {
var v = $(this).val();
if (v) taken[v] = true;
});
all.not(this).each(function () {
var self = $(this), own = self.val();
self.find("option").each(function () {
var code = $(this).val();
if (code) $(this).prop("disabled", !!taken[code] && code !== own);
});
self.trigger("wiktku:refresh");
});
});
// Return the wrapper; the select lives inside it and still fires change.
return wrapNativeSelect(input);
}
// Adds another text field to the list if the last one now has text.
function refreshForTextField(currentInput, step) {
currentInput = $(currentInput);
var value = currentInput.val();
var item = currentInput.parent();
if (value && !item.next("li").length) {
var nextInput = $("<textarea></textarea>")
.attr("name", "wiktku-field-" + $.now() + "-" + Math.random().toString(36).substr(2, 9))
.attr("class", currentInput.attr("class"))
.attr("rows", currentInput.attr("rows") || 1);
if (step.placeholder) {
nextInput.attr("placeholder", typeof step.placeholder === "function" ? step.placeholder() : step.placeholder);
}
nextInput.on("input", function (evt) {
refreshForTextField(evt.target, step);
});
var nextKeyInput = buildKeyInput(step);
var nextItem = step.modifiers
? makeModifierLi(nextInput).prepend(nextKeyInput || "")
: $("<li></li>").append(nextKeyInput).append(nextInput);
item.parent().append(nextItem);
if (nextKeyInput) initSelects(nextItem);
}
var canContinue = !continueBtn.isDisabled();
if ((value && !canContinue) || (!value && canContinue)) {
refresh(step);
}
}
function prepareInput(input, step) {
if (!input) return;
if (step.required) input.prop('required', true);
input.change(step, refresh);
}
// Shows/hides steps based on whether their prerequisites are met, and
// updates placeholders where applicable.
function refresh(evt) {
var values = getValues();
var changedStep = evt && evt.data;
var canContinue = true;
// Re-filter template options in every sense block whenever lang changes.
$("#wiktku-start-dfn .wiktku-dfn-tpl-select").each(function () {
var fn = $(this).data("updateOptions");
if (typeof fn === "function") fn();
});
// Re-filter pronunciation and etymology template dropdowns when language changes.
steps.pron.refreshTplSelect();
steps.etym.refreshTplSelect();
steps.cavkani.refreshTplSelect();
// Re-render any step's question label that depends on current values
// (e.g. dfn's Werger-section reminder, which only applies to ku).
$.each(steps, function (stepId, step) {
if (typeof step.question_fmt === "function") {
$("#wiktku-start-" + stepId + " .wiktku-start-step-question")
.text(step.question_fmt(values));
}
});
// Sync every sense block's mane-box mode (plain mane vs tercime+îzah)
// to the current language, in case lang changes after blocks exist.
$("#wiktku-start-dfn li.wiktku-dfn-sense").each(function () {
var updateMane = $(this).data("updateManeMode");
if (updateMane) updateMane();
});
// Sync tr/t sub-fields in every nimûne item to the current language.
// tr shown when language needs transliteration; t shown when lang !== "ku".
(function () {
var lang = values.lang || "";
var showTr = needsTransliteration(lang);
var showT = lang && lang !== "ku";
$("#wiktku-start-dfn .wiktku-dfn-nimune-list li.wiktku-dfn-nimune-li").each(function () {
var li = $(this);
// Ensure the sub-wrapper exists when we need it.
var subWrap = li.find(".wiktku-dfn-nimune-sub");
// tr field
var trTa = li.find(".wiktku-dfn-nimune-tr");
if (showTr && !trTa.length) {
if (!subWrap.length) {
subWrap = $("<div></div>").addClass("wiktku-dfn-nimune-sub");
li.append(subWrap);
}
trTa = $("<textarea></textarea>")
.attr("name", "wiktku-dfn-nimune-tr-" + $.now() + "-" + Math.random().toString(36).substr(2, 9))
.attr("rows", 5)
.attr("class", "wiktku-dfn-subfield wiktku-dfn-nimune-tr")
.attr("placeholder", "Transliterasyon…");
subWrap.prepend(trTa);
} else if (!showTr && trTa.length) {
trTa.remove();
}
// t field
var tTa = li.find(".wiktku-dfn-nimune-t");
if (showT && !tTa.length) {
if (!subWrap.length) {
subWrap = $("<div></div>").addClass("wiktku-dfn-nimune-sub");
li.append(subWrap);
}
tTa = $("<textarea></textarea>")
.attr("name", "wiktku-dfn-nimune-t-" + $.now() + "-" + Math.random().toString(36).substr(2, 9))
.attr("rows", 5)
.attr("class", "wiktku-dfn-subfield wiktku-dfn-nimune-t")
.attr("placeholder", "Tercimeya nimûneyê bi kurmancî…");
subWrap.append(tTa);
} else if (!showT && tTa.length) {
tTa.remove();
}
// Remove the wrapper if it ended up empty.
subWrap = li.find(".wiktku-dfn-nimune-sub");
if (subWrap.length && !subWrap.children().length) subWrap.remove();
});
}());
// Re-sync the "<label> bi <ziman>…" placeholder on every always-visible
// sub-field list (etîket, kategorî, hevmane, …), since the language may
// not have been chosen yet when these lists were first built, or may
// have changed since.
$("#wiktku-start-dfn .wiktku-dfn-sublist").each(function () {
var upd = $(this).data("updatePlaceholders");
if (typeof upd === "function") upd();
});
// Same idea for word-list steps (jê, têkildar, binêre herwiha, …)
// whose placeholder is a function of the current language.
$.each(steps, function (stepId, step) {
if (typeof step.placeholder === "function") {
$("#wiktku-start-" + stepId + " textarea.wiktku-start-step-field")
.attr("placeholder", step.placeholder());
}
});
// Sync tr/t sub-fields in every jêder citation to the current language.
// tr shown when language needs transliteration; t shown when lang !== "ku".
(function () {
var lang = values.lang || "";
var showTr = needsTransliteration(lang);
var showT = lang && lang !== "ku";
$("#wiktku-start-dfn .wiktku-dfn-jeder-list li.wiktku-dfn-jeder-li").each(function () {
var li = $(this);
// Ensure the sub-wrapper exists when we need it. It must sit right
// after the quote textarea and before the source selector.
var subWrap = li.find(".wiktku-dfn-quote-sub");
// tr field
var trTa = li.find(".wiktku-dfn-nimune-quote-tr");
if (showTr && !trTa.length) {
if (!subWrap.length) {
subWrap = $("<div></div>").addClass("wiktku-dfn-quote-sub");
// Insert after the quote textarea's resize-wrap (if the manual
// resize handle has already been attached to it), not after the
// bare textarea -- otherwise this lands *inside* that wrap,
// between the textarea and its own grip, breaking jêgirtin's
// handle and nesting the tr/t boxes inside it.
var quoteTa = li.find(".wiktku-dfn-nimune-quote");
var quoteResizeWrap = quoteTa.closest(".wiktku-resize-wrap");
(quoteResizeWrap.length ? quoteResizeWrap : quoteTa).after(subWrap);
}
trTa = $("<textarea></textarea>")
.attr("name", "wiktku-dfn-nimune-quote-tr-" + $.now() + "-" + Math.random().toString(36).substr(2, 9))
.attr("rows", 2)
.attr("class", "wiktku-dfn-subfield wiktku-dfn-nimune-quote-tr")
.attr("placeholder", "Transliterasyona jêgirtinê…");
subWrap.prepend(trTa);
} else if (!showTr && trTa.length) {
trTa.remove();
}
// t field
var tTa = li.find(".wiktku-dfn-nimune-quote-t");
if (showT && !tTa.length) {
if (!subWrap.length) {
subWrap = $("<div></div>").addClass("wiktku-dfn-quote-sub");
// See the tr-field branch above for why this targets the
// resize-wrap instead of the bare textarea.
var quoteTa2 = li.find(".wiktku-dfn-nimune-quote");
var quoteResizeWrap2 = quoteTa2.closest(".wiktku-resize-wrap");
(quoteResizeWrap2.length ? quoteResizeWrap2 : quoteTa2).after(subWrap);
}
tTa = $("<textarea></textarea>")
.attr("name", "wiktku-dfn-nimune-quote-t-" + $.now() + "-" + Math.random().toString(36).substr(2, 9))
.attr("rows", 2)
.attr("class", "wiktku-dfn-subfield wiktku-dfn-nimune-quote-t")
.attr("placeholder", "Tercimeya jêgirtinê bi kurmancî…");
subWrap.append(tTa);
} else if (!showT && tTa.length) {
tTa.remove();
}
// Remove the wrapper if it ended up empty.
subWrap = li.find(".wiktku-dfn-quote-sub");
if (subWrap.length && !subWrap.children().length) subWrap.remove();
});
}());
$.each(steps, function (stepId, step) {
var groupIdx = stepIdToGroup[stepId];
var hiddenByTab = (groupIdx !== undefined && groupIdx !== activeGroup) ||
// Beşên din picker (point 3): stays hidden even while its tab
// is active until explicitly opened from the dropdown.
(BESENDIN_SET[stepId] && !openedOtherSections[stepId]);
// Bilêvkirin is its own section now, so the two views are
// mutually exclusive: on it, only pron shows (plus Ziman, which
// is shared and stays above every section); off it, pron is
// hidden no matter which tab is active. pron is deliberately
// ungrouped — stepIdToGroup has no entry for it — so without
// this branch it would show on all four tabs at once.
if (stepId === "pron") {
hiddenByTab = hiddenByTab || !viewingPron;
} else if (viewingPron && stepId !== "lang") {
hiddenByTab = true;
}
if (hiddenByTab || (typeof(step.visible) === "function" && !step.visible(values))) {
$("#wiktku-start-" + stepId).hide();
}
else {
var stepDiv = $("#wiktku-start-" + stepId);
if (changedStep !== step && typeof(step.build) === "function") {
prepareInput(step.build(stepDiv, values), step);
}
// After build, sync the posparams helper widgets whenever pos or lang changes.
if (step.id === "posparams" && typeof step.syncHelpers === "function") {
step.syncHelpers(stepDiv);
}
var input = stepDiv.find(".wiktku-start-step-field");
if (typeof(step.example) === "function") {
// .find() above already reaches nested fields (e.g. the dfn
// step's mane textareas inside each sense block), so one
// assignment covers every step; dfn keeps its own fallback.
var exampleText = step.example(values) || (step.id === "dfn" ? "Mane…" : "");
input.attr("placeholder", exampleText);
}
stepDiv.slideDown();
}
if (step.required &&
(values[stepId] === "" ||
(step.multiple && values[stepId].join("") === ""))) {
canContinue = false;
}
});
// The four content tabs belong to a POS section — Bilêvkirin has no
// sub-tabs of its own, so the bar goes away while it's on screen.
$("#wiktku-group-tabs").toggle(!!values.pos && !viewingPron);
var besenDinActive = activeGroup === BESENDIN_GROUP_IDX && !viewingPron;
$("#wiktku-besendin-picker").toggle(besenDinActive);
// The option list is filtered by each step's visible(), which depends
// on lang/pos — so it has to be rebuilt when those change, not just
// when a section is opened. Safe to call from here: rendering the
// picker doesn't itself call refresh(), only picking an option does.
if (besenDinActive) renderBesenDinPicker();
updateGroupTabIndicators(values);
continueBtn.setDisabled(!canContinue);
// Soft gate (item 7): stays a real, clickable OOUI button — a hard
// setDisabled(true) here would swallow the click entirely, and then
// there'd be no way to tell the person *why* nothing happened. The
// CSS-only "looks disabled" class lets the click handler still run
// and show wiktkuNotify's explanation.
wiktkuContentGateOk = !canContinue || hasMinRequiredContent(values);
continueBtn.$element.toggleClass("wiktku-btn-soft-disabled", !wiktkuContentGateOk);
}
function destroy() {
if (autosaveDebounceTimer) clearTimeout(autosaveDebounceTimer);
if (autosaveInterval) clearInterval(autosaveInterval);
formDirty = false;
$(window).off("beforeunload.wiktkuUnsaved");
$("#wiktku-start-form, .noafterwizard").slideUp(function () {
$(this).remove();
});
$(".noarticletext .nowizard").slideDown();
// #editform was kept laid-out but off-screen (see build()) instead of
// display:none, precisely so the editor never had to size itself
// against a zero-width/height box. Just bring it back on-screen —
// no slideDown needed since it was never actually collapsed.
$("#editform").removeClass("wiktku-offscreen");
// Belt-and-braces: if WikiEditor/CodeMirror/mobile's auto-grow still
// cached a stale size from some earlier point, nudge them to
// recalculate now that the box is genuinely visible.
$(window).trigger("resize");
if (window.CodeMirror) {
var cm = $("#wpTextbox1").data("CodeMirror") || $("#wpTextbox1").data("cmInstance");
if (cm && typeof cm.refresh === "function") cm.refresh();
}
$("#ca-edit").removeClass("selected");
$("#ca-wiktku-nowizard").addClass("selected");
}
// Priority order for Kurdish dialects and navz.
// Codes listed here come before all other languages; unlisted codes
// are sorted alphabetically by their display name via localeCompare.
var LANG_PRIORITY = ["navz", "ku", "hac", "sdh", "lki", "ckb", "zza"];
// Inserts a new "== {{ziman|code}} ==" section at the correct sorted
// position: navz, then ku/hac/sdh/lki/ckb/zza, then alphabetical by name.
function insertNewLangSection(existing, wikitext) {
var newCodeMatch = wikitext.match(new RegExp("^" + langHeaderSource("[^}]+")));
var newCode = newCodeMatch ? newCodeMatch[1] : "";
var sections = [];
var preamble = "";
var anyHeaderSrc = langHeaderSource("[^}]+");
var firstMatch = new RegExp("^" + anyHeaderSrc, "m").exec(existing);
if (!firstMatch) {
// No existing lang sections — just write the new section.
// Add \n\n only when there is real non-whitespace content above.
var trimmed = existing.replace(/\s+$/, "");
return trimmed ? trimmed + "\n\n" + wikitext : wikitext;
}
// Everything before the first == {{ziman|...}} == is the preamble.
var firstSectionStart = firstMatch.index;
// Walk back to the start of that line.
var lineStart = existing.lastIndexOf("\n", firstSectionStart - 1);
var preambleEnd = lineStart !== -1 ? lineStart + 1 : 0;
preamble = existing.slice(0, preambleEnd);
// Parse each language section: header line + everything until the next header.
var body = existing.slice(preambleEnd);
// (?![\s\S]) matches only true end-of-string, since a bare "$" with
// /m would stop at the section's first line break instead.
var langSectionRe = new RegExp(
"^(" + anyHeaderSrc + "\\n?)([\\s\\S]*?)(?=\\n" + anyHeaderSrc + "|(?![\\s\\S]))",
"gm"
);
var m;
while ((m = langSectionRe.exec(body)) !== null) {
sections.push({
code: m[2],
content: m[0] // full text of this section including header
});
}
// Determine sort rank: priority list first (by index), then alphabetical.
function getLangName(code) {
var entry = langsByCode[code];
return entry ? entry.label : code;
}
function sortRank(code) {
var idx = LANG_PRIORITY.indexOf(code);
return idx !== -1 ? idx : LANG_PRIORITY.length;
}
function compareLangs(a, b) {
var ra = sortRank(a), rb = sortRank(b);
if (ra !== rb) return ra - rb;
// Both are outside priority list — sort by display name.
return getLangName(a).localeCompare(getLangName(b), userLang);
}
// Insert the new section into the sorted list.
var newSection = { code: newCode, content: wikitext };
var inserted = false;
for (var i = 0; i < sections.length; i++) {
if (compareLangs(newCode, sections[i].code) < 0) {
sections.splice(i, 0, newSection);
inserted = true;
break;
}
}
if (!inserted) sections.push(newSection);
// Re-join: preamble + sections, each separated by exactly \n\n.
// Trim trailing whitespace off each section's content first so we
// control the spacing precisely.
var joined = sections.map(function (s) {
return s.content.replace(/\s+$/, "");
}).join("\n\n");
// Only add a separator after the preamble when it has real content.
var preambleTrimmed = preamble.replace(/\s+$/, "");
var prefix = preambleTrimmed ? preambleTrimmed + "\n\n" : "";
return prefix + joined + "\n";
}
function build() {
$(".nowizard, .nowizard .noafterwizard").hide();
var callToAction = $("#wiktku-calltoaction");
var origCallToActionText = callToAction.text();
$(mw.util.addPortletLink("p-views", "#", "Edîtora çavkaniyê veke",
"ca-wiktku-nowizard", "Vê rûpelê bi edîtora çavkaniyê çêke",
undefined, "#ca-watch")).click(function (evt) {
evt.preventDefault();
callToAction.text(origCallToActionText);
destroy();
});
if (callToAction.length) {
callToAction.text(origCallToActionText +
" Forma li jêr ji bo çêkirina madeyeke nû bi kar bîne.");
}
var startForm = $("<form id='wiktku-start-form'></form>");
var clearPageCheck = null;
if (addLangMode) {
startForm.append($("<p class='wiktku-addlang-notice'></p>").html(
"Bi vê formê tu yê zimanekî nû li rûpelê îlawe bikî. Eger ev ziman jixwe hebe, beşa nû li dawiya vî zimanî dê were îlawekirin. " +
"Ji kerema xwe netîceya dawî kontrol bike, eger problemek derkeve, li <a href='" +
mw.util.getUrl('Mediawiki talk:Gadget-start.js') +
"'>nîqaşa vê amûrê</a> problemê ragihîne."
));
clearPageCheck = $("<input type='checkbox' id='wiktku-clear-page-check'>");
var clearPageLabel = $("<label for='wiktku-clear-page-check'></label>")
.text(" Muhtewaya rûpelê paqij bike (her tiştî jê bibe û rûpelê ji nû ve binivîse)");
startForm.append(
$("<p class='wiktku-addlang-notice'></p>")
.append(clearPageCheck)
.append(clearPageLabel)
);
// Re-evaluate step visibility (e.g. the pron step) whenever this
// is toggled, since it changes what counts as "existing content".
clearPageCheck.on("change", function () {
refresh();
});
}
var spinner;
// Tab bar for switching between POS sections.
var sectionTabsDiv = $("<div id='wiktku-section-tabs'></div>");
// Tab bar for switching between step-groups (topics) within a section.
// renderGroupTabs()/updateGroupTabIndicators() (which populate and
// maintain it) live outside build() — see near "var activeSection".
var groupTabsDiv = $("<div id='wiktku-group-tabs'></div>");
// Wikihez, 14 Tebax 2026 (item 3): "Beşên din" picker — sits right under
// the group tab bar, only shown while that tab is active (toggled in
// refresh(), see BESENDIN_GROUP_IDX); renderBesenDinPicker() fills it.
var besenDinPickerDiv = $("<div id='wiktku-besendin-picker' class='wiktku-besendin-picker'></div>");
/** Puts the form back in a usable state after a failed submit and
* says what happened. Without this the button stays disabled and
* the spinner spins forever on any exception — the person is left
* staring at a form that looks busy but is dead, with the reason
* visible only in the browser console. */
function submitFailed(err) {
spinner.hide();
continueBtn.setDisabled(false);
continueBtn.$element.removeClass("wiktku-btn-sending");
var detail = (err && (err.message || err.toString())) || "sedem nediyar";
mw.notify(
"Şandin bi ser neket: " + detail +
" — tiştê ku te nivîsî winda nebûye. Heke ev dubare bibe, " +
"bi 'Edîtora çavkaniyê veke' berdewam bike.",
{ type: "error", tag: "wiktku-submit", autoHide: false }
);
// Deliberately console.error as well: the notification is for the
// person, this is for whoever they report the bug to.
if (window.console && console.error) console.error("[wiktku] submit failed", err);
}
onSubmitError = submitFailed;
startForm.submit(function (evt) {
evt.preventDefault();
continueBtn.setDisabled(true);
continueBtn.$element.addClass("wiktku-btn-sending");
spinner.show();
try {
getWikitext(function (wikitext) {
try {
if (addLangMode && clearPageCheck && clearPageCheck.prop("checked")) {
// User asked to wipe the page — write fresh content.
$("#wpTextbox1").val(wikitext);
} else if (addLangMode) {
var textbox = $("#wpTextbox1");
var existing = textbox.val() || "";
// ── bnr-h merge ──────────────────────────────────────────
// If the user filled bnr-h inputs, either merge into the
// existing {{bnr-h|…}} call or prepend a new one.
var bnrhOut = steps.bnrh.output(getValues());
if (bnrhOut) {
var newPages = bnrhOut.replace(/^\{\{bnr-h\|/, "").replace(/\}\}\n?$/, "").split("|");
var bnrhRe = /\{\{bnr-h\|([^}]*)\}\}/i;
if (bnrhRe.test(existing)) {
existing = existing.replace(bnrhRe, function (_, inner) {
var existingPages = inner.split("|").map(function (p) { return p.trim(); });
$.each(newPages, function (_, p) {
p = p.trim();
if (p && existingPages.indexOf(p) === -1) existingPages.push(p);
});
return "{{bnr-h|" + existingPages.join("|") + "}}";
});
} else {
existing = bnrhOut + existing;
}
}
// If this language's section already exists (whitespace
// differences aside), merge into it; otherwise insert new.
var langHeaderMatch = wikitext.match(new RegExp("^(" + langHeaderSource("[^}]+") + "\\n)"));
if (langHeaderMatch) {
var langHeader = langHeaderMatch[1]; // e.g. "== {{ziman|ku}} ==\n"
var newCode = langHeaderMatch[2];
var existingHeader = findLangHeader(existing, newCode);
if (existingHeader) {
// Strip the header from the new output.
var newContent = wikitext.slice(langHeader.length);
// Find the insertion point: end of the existing lang section.
// A new L2 heading marks the start of the next language block.
var searchFrom = existingHeader.index + existingHeader.match.length;
// Find the next == … == heading after this section's start.
var nextL2 = existing.indexOf("\n== ", searchFrom);
var insertAt = nextL2 !== -1 ? nextL2 : existing.length;
// Ensure there's a blank line before the inserted block.
var before = existing.slice(0, insertAt);
var after = existing.slice(insertAt);
var sep = /\n\s*$/.test(before) ? "" : "\n";
textbox.val(before + sep + newContent + after);
} else {
// New language — insert at the correct sorted position.
textbox.val(insertNewLangSection(existing, wikitext));
}
} else {
// Unexpected format — insert at sorted position anyway.
textbox.val(insertNewLangSection(existing, wikitext));
}
} else {
$("#wpTextbox1").val(wikitext);
}
$("html, body").animate({scrollTop: 0});
callToAction.text("Hindik ma!");
destroy();
} catch (e) {
// Thrown while writing the result into #wpTextbox1.
submitFailed(e);
}
});
} catch (e) {
// Thrown synchronously inside getWikitext — this is where the
// splitTercimeIzah ReferenceError surfaced, and it produced no
// message at all before this guard existed.
submitFailed(e);
}
});
// Tracks whether groupTabsDiv has been inserted yet — see the
// step.id-driven check below, replaced because it silently broke
// when bnrh/resim/pron moved ahead of "dfn" in ordered_steps.
var groupTabsInserted = false;
$.each(ordered_steps, function (i, step) {
var stepDiv = $(mw.html.element("div", {
"class": "wiktku-start-step",
id: "wiktku-start-" + step.id }));
var name = capitalize(step.name);
var nameH3 = $("<h3></h3>").addClass("wiktku-start-step-name");
var nameLabel = $("<label></label>")
.attr("for", "wiktku-start-" + step.id + "-field")
.text(name);
nameH3.append(nameLabel);
stepDiv.append(nameH3);
if (step.question_fmt) {
// question_fmt can be a plain string, or a function of the
// current values (used by steps whose question text depends
// on e.g. the chosen language) — refresh() keeps it in sync
// afterwards via the .wiktku-start-step-question class.
var questionText = typeof step.question_fmt === "function"
? step.question_fmt(getValues())
: step.question_fmt;
stepDiv.append($(mw.html.element("label", {
"class": "wiktku-start-step-question",
"for": "wiktku-start-" + step.id + "-field" }, questionText)));
if (step.question_br) stepDiv.append($("<br>"));
}
var input;
if (step.choices) {
input = $(mw.html.element("select", {
"class": "wiktku-start-step-field",
id: "wiktku-start-" + step.id + "-field" }));
input.attr("data-placeholder",
capitalize(step.name) + " hilbijêre ");
populateMenus(input, step.choices);
if (step.multiple) input.attr("multiple", true);
// initSelects() runs over the whole form once it is in the DOM.
stepDiv.append(input);
} else if (typeof(step.build) === "function") {
input = step.build(stepDiv);
} else {
input = $("<textarea></textarea>")
.attr("class", "wiktku-start-step-field")
.attr("id", "wiktku-start-" + step.id + "-field")
.attr("rows", step.rows || 2);
if (step.narrow) input.addClass("wiktku-start-narrow");
if (step.placeholder) {
input.attr("placeholder", typeof step.placeholder === "function" ? step.placeholder() : step.placeholder);
}
if (step.multiple) {
input.on("input", function (evt) {
refreshForTextField(evt.target, step);
});
var keyInput = buildKeyInput(step);
var list = $(step.ordered ? "<ol></ol>" : "<ul></ul>")
.append(step.modifiers
? makeModifierLi(input)
: $("<li></li>").append(keyInput).append(input));
stepDiv.append(list);
}
else stepDiv.append(input);
}
prepareInput(input, step);
stepDiv.hide();
// Section tabs (switch between POS sections) sit above the
// per-section fields, starting at "pos".
if (step.id === "pos") {
startForm.append(sectionTabsDiv);
}
// Step-group tabs sit just before the first grouped step in
// ordered_steps — whichever one that is. This USED to be a
// hardcoded "dfn" check, back when dfn was the first grouped
// step. Once bnrh/resim/pron moved into STEP_GROUPS too (and
// earlier in ordered_steps than dfn, so they render near
// pos/posparams), that check stopped matching anything: dfn was
// no longer first, so groupTabsDiv never got appended at all,
// and every grouped step's div — bnrh/resim/pron included — sat
// there with no tab bar above it to reveal them. Deriving the
// insertion point from stepIdToGroup instead means this keeps
// working no matter how STEP_GROUPS/ordered_steps get reordered
// later.
if (!groupTabsInserted && stepIdToGroup[step.id] !== undefined) {
startForm.append(groupTabsDiv);
startForm.append(besenDinPickerDiv);
groupTabsInserted = true;
}
startForm.append(stepDiv);
});
// ── Section tab helpers ──────────────────────────────────────────────
// ── Add-section button — lives in the tab bar, disabled until pos chosen ──
var addSectionBtn = new OO.ui.ButtonWidget({
label: "+ Beş zêde bike",
disabled: true
});
/** Adds a new, empty POS section and switches to it. */
function addPosSection() {
saveCurrentSection();
viewingPron = false;
sections.push({});
activeSection = sections.length - 1;
$.each(PER_SECTION_STEP_IDS, function (_, id) {
if (id === "dfn") {
var stepDiv = $("#wiktku-start-dfn");
stepDiv.find("ol.wiktku-dfn-list").remove();
steps.dfn.build(stepDiv);
return;
}
if (id === "etym") {
$("#wiktku-start-etym .wiktku-etym-wrap").remove();
steps.etym.build($("#wiktku-start-etym"));
return;
}
if (id === "cavkani") {
$("#wiktku-start-cavkani .wiktku-cavkani-wrap").remove();
steps.cavkani.build($("#wiktku-start-cavkani"));
return;
}
if (id === "posparams") {
var ppDiv = $("#wiktku-start-posparams");
ppDiv.find(".wiktku-posparams-wrap").remove();
return;
}
if (id === "resim") {
$("#wiktku-start-resim .wiktku-resim-wrap").remove();
return;
}
if (id === "trans") {
var transDiv = $("#wiktku-start-trans");
transDiv.find(".wiktku-trans-group").remove();
return;
}
if (id === "zarava") {
var zaravaDiv = $("#wiktku-start-zarava");
zaravaDiv.find(".wiktku-zarava-group").remove();
return;
}
if (id === "dunde") {
var dundeDiv = $("#wiktku-start-dunde");
dundeDiv.find("ul.wiktku-dunde-list").remove();
return;
}
var stepDiv = $("#wiktku-start-" + id);
stepDiv.find(".wiktku-start-step-field").val("");
stepDiv.find("select.wiktku-start-step-field").trigger("wiktku:refresh");
});
// Fresh section — no "Beşên din" sub-section has been opened yet.
openedOtherSections = {};
renderBesenDinPicker();
renderSectionTabs();
refresh();
}
// "+ Beş zêde bike" is a menu now, not a single action: it can add
// another part of speech, or the one shared Bilêvkirin section.
// Bilêvkirin drops out of the menu once added — there is only ever
// one pronunciation for a word.
addSectionBtn.on("click", function () {
var existing = $(".wiktku-addsection-menu");
if (existing.length) { existing.remove(); return; } // toggle off
var menu = $("<div class='wiktku-addsection-menu'></div>");
function item(label, hint, fn) {
var row = $("<a href='#' class='wiktku-addsection-item'></a>");
row.append($("<span class='wiktku-addsection-item-label'></span>").text(label));
if (hint) row.append($("<span class='wiktku-addsection-item-hint'></span>").text(hint));
row.on("click", function (e) { e.preventDefault(); menu.remove(); fn(); });
menu.append(row);
}
item("Cureyek rêzimanî", "Navdêr, lêker, rengdêr…", addPosSection);
if (!pronSectionAdded) {
item("Bilêvkirin", "ji bo hemû beşan — carekê", function () {
saveCurrentSection();
pronSectionAdded = true;
viewingPron = true;
renderSectionTabs();
refresh();
});
}
addSectionBtn.$element.append(menu);
// Close on the next click anywhere else.
setTimeout(function () {
$(document).one("click.wiktkuAddSection", function () { menu.remove(); });
}, 0);
});
/** Re-render the tab bar to reflect current sections[] and activeSection. */
function renderSectionTabs() {
// Detach (not remove) the button first: .empty() strips bound
// event data from any children left inside it, which would
// silently kill addSectionBtn's click handler on every re-render.
addSectionBtn.$element.detach();
sectionTabsDiv.empty();
var lang = getValues().lang || "";
if (!lang) {
sectionTabsDiv.hide();
return;
}
sectionTabsDiv.show();
$.each(sections, function (i) {
var posVal = sections[i].pos || "";
var tabLabel = posVal ? capitalize(posVal) : ("Beş " + (i + 1));
var tab = $("<span></span>")
.addClass("wiktku-section-tab")
.text(tabLabel)
.toggleClass("wiktku-tab-active", i === activeSection && !viewingPron);
(function (idx) {
tab.on("click", function () {
if (idx === activeSection && !viewingPron) return;
// Leaving Bilêvkirin doesn't need a save — its field
// is shared and never part of a section snapshot.
if (!viewingPron) saveCurrentSection();
viewingPron = false;
activeSection = idx;
restoreSection(sections[activeSection]);
refresh();
renderSectionTabs();
});
}(i));
sectionTabsDiv.append(tab);
});
// Bilêvkirin sits after the POS sections, as a peer.
if (pronSectionAdded) {
var pronTab = $("<span></span>")
.addClass("wiktku-section-tab wiktku-section-tab-pron")
.text("Bilêvkirin")
.toggleClass("wiktku-tab-active", viewingPron);
pronTab.on("click", function () {
if (viewingPron) return;
saveCurrentSection();
viewingPron = true;
refresh();
renderSectionTabs();
});
sectionTabsDiv.append(pronTab);
}
// Enable "Beş zêde bike" only when the active section has a pos chosen.
var activePos = sections[activeSection] && sections[activeSection].pos
? sections[activeSection].pos
: getValues().pos;
addSectionBtn.setDisabled(!activePos);
sectionTabsDiv.append(addSectionBtn.$element);
}
renderSectionTabs();
/**
* Re-populates a dynamically-growing "multiple" field list (bnrh, je,
* tekildar, …) from a saved array of strings. Sets each value via
* .val() + a triggered "input" event rather than touching the DOM
* structure directly, so the normal refreshForTextField() growth
* logic adds exactly as many rows as needed — the same thing that
* happens when a person types into the last (empty) row.
*/
function restoreMultiField(id, values) {
var container = $("#wiktku-start-" + id);
$.each(values || [], function (i, v) {
var field = container.find(".wiktku-start-step-field").eq(i);
if (!field.length || !v) return;
field.val(v).trigger("input");
});
}
/**
* Restores a full cached draft: shared lang/pron/bnrh fields, then
* every section (via the same restoreSection()/refresh()/
* renderSectionTabs() sequence already used when switching tabs).
* @param cached {{lang: string, pron: string, bnrh: Array, sections: Array, activeSection: number}}
*/
function restoreFromCache(cached) {
if (cached.lang) {
$("#wiktku-start-lang-field").val(cached.lang);
$("#wiktku-start-lang-field").trigger("wiktku:refresh");
}
// Rebuild dependent steps (pos, pron wrap, etc.) now that lang is set.
refresh();
if (cached.pron !== undefined) {
$("#wiktku-start-pron .wiktku-pron-text").val(cached.pron);
// A draft with pronunciation in it must get its section tab
// back, or the text is restored into a section with no way
// to reach it — and it would still be written on submit.
if ($.trim(cached.pron)) pronSectionAdded = true;
}
if (cached.bnrh) {
restoreMultiField("bnrh", cached.bnrh);
}
sections = (cached.sections && cached.sections.length) ? cached.sections : [{}];
activeSection = (typeof cached.activeSection === "number" &&
cached.activeSection >= 0 && cached.activeSection < sections.length)
? cached.activeSection : 0;
restoreSection(sections[activeSection]);
refresh();
renderSectionTabs();
updateLastSavedIndicator(cached.savedAt || null);
formDirty = false;
wiktkuNotify("Danûstandina berê ya qeydkirî ji cache hate barkirin.",
{ type: "info", tag: "wiktku-cache-restore" });
}
// Update the active tab's label whenever pos changes.
startForm.on("change", "#wiktku-start-pos-field", function () {
renderSectionTabs();
// A new cureyê rêzimanî means any previously chosen cinsiyet/
// cureyê lêkerê no longer applies — clear both selections (and
// the shared hidden cinsiyet field, since rebuildTa()/syncHelpers()
// fall back to it) before wiping the textarea, so nothing stale
// gets carried over into the rebuilt template.
var ppDiv = $("#wiktku-start-posparams");
ppDiv.find(".wiktku-posparams-cinsiyet-sel").val("");
ppDiv.find(".wiktku-posparams-jimar-sel").val("");
ppDiv.find(".wiktku-posparams-lektur-sel").prop("selectedIndex", 0);
ppDiv.find(".wiktku-posparams-lekturform-sel").prop("selectedIndex", 0);
$("#wiktku-start-cinsiyet-field").val("");
$("#wiktku-start-jimar-field").val("");
ppDiv.find(".wiktku-posparams-text").val("");
// refresh() runs steps.posparams.syncHelpers(), which toggles the
// param rows for the new pos and — since the textarea is now
// empty — calls rebuildTa() to repopulate it. Just clearing the
// textarea (as before) never triggered this, so the params
// section was left stale until some other field's change event
// happened to fire a refresh().
refresh();
});
// Show the tab bar as soon as a language is selected.
startForm.on("change", "#wiktku-start-lang-field", function () {
renderSectionTabs();
});
var footer = $("<div id='wiktku-start-footer'></div>");
spinner = $(mw.html.element("img", {
id: "wiktku-start-spinner",
src: "//upload.wikimedia.org/wikipedia/commons/d/de/Ajax-loader.gif",
alt: "Tê barkirin…",
title: "Tê barkirin…" }));
footer.append(spinner.hide());
continueBtn = new OO.ui.ButtonWidget({
id: "wiktku-unhide-editform",
label: "Bişîne",
flags: [ "primary", "progressive" ]
});
continueBtn.on("click", function () {
// Immediate feedback that the click registered
continueBtn.$element.addClass("wiktku-btn-flash");
setTimeout(function () {
continueBtn.$element.removeClass("wiktku-btn-flash");
}, 500);
// Item 7: Ziman/Cureyê rêzimanî already block submission via the
// real OOUI setDisabled (see canContinue in refresh()) — this is
// a second, softer check that still lets the click through so we
// can explain *why*, instead of the button just silently doing
// nothing.
if (!wiktkuContentGateOk) {
wiktkuNotify(
"Berî şandinê, tiştekî binivîse: Mane, Bi zaravayên din, an jî Werger — kêmasî yek ji van sê beşan divê tijî be.",
{ type: "warn", tag: "wiktku-mincontent" }
);
return;
}
wiktkuNotify("Tê şandin…", { type: "info", tag: "wiktku-submit" });
startForm.trigger("submit");
});
footer.append(continueBtn.$element);
// "Edîtora çavkaniyê veke" button — inline fallback for the portlet link
var sourceEditorBtn = new OO.ui.ButtonWidget({
label: "Edîtora çavkaniyê veke",
flags: [ "destructive" ],
});
sourceEditorBtn.on("click", function () {
destroy();
});
footer.append(sourceEditorBtn.$element);
// ── Cache save/clear buttons ─────────────────────────────────────────
// Manual, page-scoped save of the entire wizard (all sections, not
// just the active one) via [[MediaWiki:Gadget-StorageUtils.js]]'s
// ObjectStorage. Restoring happens silently on load at the end of
// build(), once the full language list is available.
//
// Saving also happens automatically (debounced while typing, plus a
// periodic fallback) — see "Autosave" below — since relying on the
// person to remember to click "Li cache qeyd bike" before an
// accidental tab close/reload defeats the point of having a cache
// at all.
function buildCacheSnapshot() {
return {
lang: getValues().lang || "",
pron: $("#wiktku-start-pron .wiktku-pron-text").val() || "",
// bnrh is shared (page-level), same as lang/pron above — not
// per-section, so it doesn't live in sections[].
bnrh: getValuesForStep("bnrh"),
sections: sections,
activeSection: activeSection,
savedAt: Date.now()
};
}
// ── Last-saved indicator ─────────────────────────────────────────────
var lastSavedEl = $("<span id='wiktku-last-saved'></span>");
function formatSavedTime(ts) {
try {
return new Date(ts).toLocaleTimeString(mw.config.get("wgUserLanguage"),
{ hour: "2-digit", minute: "2-digit" });
} catch (e) {
return new Date(ts).toLocaleTimeString();
}
}
function updateLastSavedIndicator(ts) {
lastSavedEl.text(ts ? ("Cache: qeydkirî di saet " + formatSavedTime(ts) + " de") : "");
}
// ── Dirty-state tracking + autosave ──────────────────────────────────
// formDirty mirrors "does the live form differ from what's in cache".
// Anything the person types/selects sets it; a successful save (auto
// or manual) clears it; destroy() (final submit, or switching to the
// source editor) also clears it since the wizard's job is over at
// that point either way. formDirty/autosaveDebounceTimer/autosaveInterval
// are declared in the outer scope (near activeGroup) — assigned here,
// not re-declared — so destroy() can reach them too.
var AUTOSAVE_DEBOUNCE_MS = 8000; // save shortly after typing pauses
var AUTOSAVE_INTERVAL_MS = 60000; // …and at least this often regardless
function performAutosave() {
if (!formDirty) return;
saveCurrentSection();
try {
formCache.Set(buildCacheSnapshot());
formDirty = false;
updateLastSavedIndicator(Date.now());
} catch (e) {
// Silent on autosave failure (storage blocked/full, etc.) — the
// manual button still surfaces a proper error if the person
// tries it directly, no need to interrupt typing with a toast.
}
}
function scheduleAutosave() {
formDirty = true;
if (autosaveDebounceTimer) clearTimeout(autosaveDebounceTimer);
autosaveDebounceTimer = setTimeout(performAutosave, AUTOSAVE_DEBOUNCE_MS);
}
startForm.on("input change", "input, textarea, select", scheduleAutosave);
autosaveInterval = setInterval(performAutosave, AUTOSAVE_INTERVAL_MS);
// Warn on accidental tab close/reload while there's anything unsaved.
$(window).on("beforeunload.wiktkuUnsaved", function (e) {
if (!formDirty) return undefined;
e.preventDefault();
e.returnValue = "";
return "";
});
var saveCacheBtn = new OO.ui.ButtonWidget({
label: "Li cache qeyd bike",
title: "Halê vê formê yê niha (ziman, bilêvkirin û hemû beş) li cache (localStorage) qeyd bike, da ku eger rûpel bêyî xwestin were girtin an ji nû ve were barkirin, tu karibî berdewam bikî."
});
saveCacheBtn.on("click", function () {
saveCurrentSection();
// ObjectStorage.Set() doesn't return a success/failure value, so
// the only way to detect a real failure (storage blocked, quota
// exceeded, JSON.stringify choking on something unexpected) is to
// catch it here rather than inspect a (nonexistent) return value.
try {
var snapshot = buildCacheSnapshot();
formCache.Set(snapshot);
formDirty = false;
updateLastSavedIndicator(snapshot.savedAt);
wiktkuNotify("Halê formê li cache hate qeydkirin.", { type: "success", tag: "wiktku-cache-save" });
} catch (e) {
mw.notify("Qeydkirina li cache bi ser neket.", { type: "error", tag: "wiktku-cache-save" });
}
});
var clearCacheBtn = new OO.ui.ButtonWidget({
label: "Cache paqij bike",
flags: [ "destructive" ],
title: "Datayên qeydkirî yên vê rûpelê ji cache jê bibe (forma ku niha xuya dike naguherîne)."
});
clearCacheBtn.on("click", function () {
formCache.Set({});
// The live form still has whatever the person typed — it's just no
// longer backed up anywhere, so treat this like a fresh unsaved edit.
formDirty = true;
updateLastSavedIndicator(null);
wiktkuNotify("Cache hate paqijkirin.", { type: "success", tag: "wiktku-cache-clear" });
});
// ── "⋯" overflow ─────────────────────────────────────────────
// v3: one primary action and one secondary stay on the bar;
// everything else moves in here. Four same-weight buttons — two of
// them red — was the loudest thing on the screen, and on a phone it
// wrapped to three rows of a sticky footer.
var moreBtn = $("<button type='button' class='wiktku-more-btn' title='Vebijarkên din'>⋯</button>");
var moreMenu = $("<div class='wiktku-more-menu'></div>").hide();
/** Moves an existing OOUI button into the overflow menu, keeping its
* handlers — the widgets already carry the behaviour, so this is
* purely about where they are shown. */
function intoMenu(btn, extraClass) {
var row = $("<div class='wiktku-more-item'></div>");
if (extraClass) row.addClass(extraClass);
btn.$element.on("click", function () { moreMenu.hide(); });
row.append(btn.$element);
moreMenu.append(row);
}
intoMenu(saveCacheBtn);
intoMenu(clearCacheBtn, "wiktku-more-item-danger");
moreMenu.append($("<div class='wiktku-more-sep'></div>"));
moreMenu.append($("<div class='wiktku-more-item wiktku-more-note'></div>").append(lastSavedEl));
moreBtn.on("click", function (e) {
e.preventDefault();
e.stopPropagation();
var open = moreMenu.is(":visible");
moreMenu.toggle(!open);
if (!open) {
setTimeout(function () {
$(document).one("click.wiktkuMore", function () { moreMenu.hide(); });
}, 0);
}
});
var moreWrap = $("<span class='wiktku-more-wrap'></span>").append(moreBtn).append(moreMenu);
footer.append(moreWrap);
// Icon-only settings button — opens the Tercîh dialog. Plain OOUI
// icon names depend on which icon-pack module happens to be loaded,
// so this uses the actual Codex "settings" (color-subtle) SVG from
// Commons directly, the same way the spinner above hotlinks its gif.
var prefsBtn = $("<button></button>", {
type: "button",
"class": "wiktku-prefs-btn",
title: "Tercîh — sazkariyên vê amûrê biguherîne"
});
prefsBtn.on("click", function (e) {
e.preventDefault();
wiktkuOpenPrefsDialog();
});
// The gear is icon-only on the bar; inside a text menu it needs a
// label like everything else around it.
prefsBtn.on("click", function () { moreMenu.hide(); });
moreMenu.prepend($("<div class='wiktku-more-sep'></div>"));
moreMenu.prepend($("<div class='wiktku-more-item wiktku-more-item-prefs'></div>")
.append(prefsBtn)
.append($("<span class='wiktku-more-item-label'></span>").text("Tercîh")));
startForm.append(footer);
// NOTE: deliberately NOT .hide() (display:none). WikiEditor/CodeMirror/
// the mobile editor's auto-grow logic measure #wpTextbox1's real
// dimensions during their own init, which happens while the wizard is
// up. A display:none ancestor reports 0 for offsetWidth/offsetHeight/
// scrollHeight, so those scripts bake in a near-zero height that never
// gets recalculated later — slideDown() in destroy() only animates the
// outer box, it doesn't re-trigger their sizing. Pushing #editform
// off-screen instead keeps it laid out (real width/height available to
// measure) without being visible, so the editbox opens at full size.
$("#editform").addClass("wiktku-offscreen").before(startForm);
// renderGroupTabs() looks up #wiktku-group-tabs via a live DOM
// selector, so it must run after startForm is actually in the
// document — calling it back in the build loop (while startForm was
// still detached) silently no-op'd and left the tab bar empty.
renderGroupTabs();
renderBesenDinPicker();
// One pass over the whole form: every select that hasn't already been
// initialised, and isn't opted out with .wiktku-plain-select, gets
// the searchable picker.
initSelects(startForm);
refresh();
// Give every draggable textarea a custom resize grip (works
// consistently on Safari/iOS, unlike the native corner grip — see
// the "Manual drag-to-resize handle" comment in styles.css), and
// keep applying it to textareas added later on (new sense blocks,
// quote-source fields, nimûne rows, …).
wiktkuInitManualResize(startForm);
new MutationObserver(function (mutations) {
mutations.forEach(function (mutation) {
$(mutation.addedNodes).each(function () {
if (this.nodeType !== 1) return;
wiktkuInitManualResize(this);
});
});
}).observe(startForm[0], { childList: true, subtree: true });
// Now that the full language list is loaded, silently restore any
// draft the editor previously saved for this page.
var cachedDraft = formCache.Get();
if (cachedDraft && cachedDraft.sections && cachedDraft.sections.length) {
restoreFromCache(cachedDraft);
}
}
mw.loader.using(["oojs-ui-core"], function () {
function wiktkuProceedWithData(wiktkuData) {
var d = wiktkuData || {};
// Populate metadata.
if (d.metadata) $.extend(metadata, d.metadata);
// Populate gender labels.
if (d.genderLabels) $.extend(GENDER_BASE_LABELS, d.genderLabels);
// Item 1: Jimar (number) code definitions — same shape as the wiki's
// own Lua number-type table (code -> {cat, display[, req]}).
if (d.numberLabels) $.extend(NUMBER_LABELS, d.numberLabels);
// Populate lang choices (pinned list).
if (d.langChoices) steps.lang.choices = choicesFromObject(d.langChoices, true);
// Populate langsByCode and merge full language list from d.ziman.
// d.ziman is a {code: name} object with all known languages.
$.each(steps.lang.choices, function (i, choice) {
if (choice.sortKey === undefined) choice.sortKey = choice.label;
langsByCode[choice.code] = choice;
});
if (d.ziman) {
var pinnedCodes = {};
$.each(steps.lang.choices, function (i, c) { pinnedCodes[c.code] = true; });
var extraChoices = [];
$.each(d.ziman, function (code, name) {
if (/-pro$/i.test(code)) return;
if (/ziman[eê]\s+destan/i.test(name)) return;
if (pinnedCodes[code]) return;
var choice = { code: code, label: name, sortKey: name };
extraChoices.push(choice);
langsByCode[code] = choice;
});
extraChoices.sort(function (a, b) {
return a.sortKey.localeCompare(b.sortKey, userLang);
});
steps.lang.choices = steps.lang.choices.concat(extraChoices);
}
// Keep the full merged list around for trans/dunde/zarava — those
// should still be able to reference any language even when the
// Tercîh panel restricts the main "ziman" step below — then, if
// the user set a restriction there, narrow steps.lang.choices
// itself to just those codes.
var wiktkuFullLangChoices = steps.lang.choices;
if (wiktkuPrefs.langCodes && wiktkuPrefs.langCodes.length) {
var wiktkuAllowedLangSet = {};
$.each(wiktkuPrefs.langCodes, function (i, code) { wiktkuAllowedLangSet[code] = true; });
var wiktkuRestrictedChoices = $.grep(wiktkuFullLangChoices, function (c) {
return !!wiktkuAllowedLangSet[c.code];
});
// Fall back to the full list instead of showing an empty
// dropdown if none of the saved codes matched anything
// (typo'd code, data.json changed since, …).
steps.lang.choices = wiktkuRestrictedChoices.length ? wiktkuRestrictedChoices : wiktkuFullLangChoices;
}
// Populate POS choices — also a plain {code: label} object in data.json.
if (d.posChoices) steps.pos.choices = choicesFromObject(d.posChoices, false);
// Populate template definitions for the dfn sense-block builder.
if (d.tplDefs) steps.dfn.tplDefs = d.tplDefs;
// Populate pos placeholder examples.
if (d.posExamples) steps.dfn.posExamples = d.posExamples;
// Populate citation template definitions for the quote widget.
if (d.jederDefs) steps.dfn.jederDefs = d.jederDefs;
// Populate pronunciation and etymology template insert lists.
if (d.pronTpls) {
steps.pron.pronTpls = d.pronTpls;
steps.pron.refreshTplSelect();
}
if (d.etymTpls) {
steps.etym.etymTpls = d.etymTpls;
steps.etym.refreshTplSelect();
}
// Sync trans/dunde/zarava keys with the full language list
// (not the possibly Tercîh-restricted steps.lang.choices).
steps.trans.keys = wiktkuFullLangChoices;
steps.dunde.keys = wiktkuFullLangChoices;
steps.zarava.keys = getZaravaKeys(wiktkuFullLangChoices);
build();
}
// data.json ships inside this package module, so it is already parsed
// and in memory — no action=raw round trip, and no Testing switch to
// forget to flip back before deploying.
wiktkuProceedWithData(require("./start/data.json"));
});
});
//</nowiki>
tiyz60p12v4hyon2s4zt3sof7p1hybm
6333775
6333771
2026-08-15T10:42:43Z
Wikihez
7344
6333775
javascript
text/javascript
// Li ser [[vi:MediaWiki:Gadget-start.js]] hatiye refaktorkirin.
// implicit dependencies: StorageUtils (ObjectStorage)
//<nowiki>
$(function () {
if (window.location.href.includes("editintro=User:Wikihez/creation/intro")) {
return; // Do not run the script wextê WF:Bilez dişuxile
}
var ns = mw.config.get("wgNamespaceNumber");
if (ns &&
!(ns === 2 && mw.config.get("wgPageName").match(/\/ceribandin$|\/test$/))) {
return;
}
var addLangMode = mw.util.getParamValue("wiktkuaddlang") === "1";
// ── Tercîh (user settings) panel stored via mw.storage (localStorage), globally
var WIKTKU_PREFS_KEY = "wiktku_start_prefs";
var WIKTKU_PREFS_DEFAULTS = {
// [] = show the full language list in the "ziman" step; otherwise
// only these codes are shown there (data.json codes, not names).
langCodes: [],
// true = never auto-open on a new/empty page — only via the
// "+Ziman/beşeke din" portlet link.
onlyOnClick: false,
// "auto" | "p-cactions" | "p-tb" | "p-views" — where the
// "+Ziman/beşeke din" portlet link is added.
portlet: "auto",
// true = suppress routine/informational mw.notify toasts (page
// loading, cache auto-restored, cache saved/cleared, "tê şandin…").
// Errors and direct results of an explicit action (like saving
// Tercîh itself) always show regardless of this setting.
quiet: false
};
function wiktkuLoadPrefs() {
if (!(window.mw && mw.storage)) return $.extend({}, WIKTKU_PREFS_DEFAULTS);
var raw;
try { raw = mw.storage.get(WIKTKU_PREFS_KEY); } catch (e) { raw = null; }
if (!raw) return $.extend({}, WIKTKU_PREFS_DEFAULTS);
var parsed;
try { parsed = JSON.parse(raw); } catch (e) { parsed = {}; }
return $.extend({}, WIKTKU_PREFS_DEFAULTS, parsed);
}
function wiktkuSavePrefs(prefs) {
if (!(window.mw && mw.storage)) return false;
try {
mw.storage.set(WIKTKU_PREFS_KEY, JSON.stringify(prefs));
return true;
} catch (e) { return false; }
}
var wiktkuPrefs = wiktkuLoadPrefs();
// Routine/informational notices go through here so "quiet mode" can
// suppress them; errors and explicit-action confirmations (like the
// Tercîh save toast) call mw.notify directly instead, and always show.
function wiktkuNotify(message, options) {
if (wiktkuPrefs.quiet) return;
mw.notify(message, options);
}
// Lazily built the first time it's opened; reused after that (see
// wiktkuOpenPrefsDialog below, defined once we know OOUI is available).
var wiktkuPrefsWindowManager = null;
var wiktkuPrefsDialog = null;
function wiktkuOpenPrefsDialog() {
mw.loader.using(["oojs-ui-core", "oojs-ui-windows"], function () {
function WiktkuPrefsDialog(config) {
WiktkuPrefsDialog.super.call(this, config);
}
if (!wiktkuPrefsDialog) {
OO.inheritClass(WiktkuPrefsDialog, OO.ui.ProcessDialog);
WiktkuPrefsDialog.static.name = "wiktkuPrefsDialog";
WiktkuPrefsDialog.static.title = "Tercîhên min";
WiktkuPrefsDialog.static.actions = [
{ action: "save", label: "Qeyd bike", flags: ["primary", "progressive"] },
{ action: "cancel", label: "Betal bike", flags: "safe" }
];
WiktkuPrefsDialog.prototype.initialize = function () {
WiktkuPrefsDialog.super.prototype.initialize.call(this);
this.langCodesInput = new OO.ui.TextInputWidget({
placeholder: "ku, zza, ckb (vala bihêle ji bo hemû zimanan)"
});
this.onlyOnClickCheckbox = new OO.ui.CheckboxInputWidget({});
this.quietCheckbox = new OO.ui.CheckboxInputWidget({});
this.portletDropdown = new OO.ui.DropdownInputWidget({
options: [
{ data: "auto", label: "Otomatîk (li gorî rûyê wîkiyê)" },
{ data: "p-cactions", label: "p-cactions - Li qismê Amûran" },
{ data: "left-navigation", label: "left-navigation - Li qismê Gotar-Gotûbêj" },
{ data: "p-tb", label: "p-tb - Li qismê Giştî" },
{ data: "p-views", label: "p-views - Li qismê Bixwîne" }
]
});
var fieldset = new OO.ui.FieldsetLayout({ label: "Eyar" });
fieldset.addItems([
new OO.ui.FieldLayout(this.langCodesInput, {
label: "Kodên zimanan ku tê xuyakirin li qismê \"ziman\"",
align: "top",
help: "Kodan bi virgulê (,) ji hev veqetîne. Vala bihêle da ku hemû ziman were nîşandan.",
helpInline: true
}),
new OO.ui.FieldLayout(this.onlyOnClickCheckbox, {
label: "Tenê veke wextê \"+Ziman/beşeke din\" were tikandin",
align: "inline",
help: "Eger were hilbijartin, ev amûr êdî otomatîk li ser rûpelên nû/vala dest pê nake — divê meriv her carê pêl \"+Ziman/beşeke din\" bike.",
helpInline: true
}),
new OO.ui.FieldLayout(this.portletDropdown, {
label: "Cihê lînka \"+Ziman/beşeke din\"",
align: "top",
help: "\"Otomatîk\" li gorî rûyê wîkiyê hildibijêre.",
helpInline: true
}),
new OO.ui.FieldLayout(this.quietCheckbox, {
label: "Moda bêdeng (kêmtir agahdarî nîşan bide)",
align: "inline",
help: "Agahdariyên normal nîşan nede. Xeta her tim tên xuyakirin.",
helpInline: true
})
]);
this.$body.addClass("wiktku-prefs-dialog-body").append(fieldset.$element);
};
WiktkuPrefsDialog.prototype.getSetupProcess = function (data) {
return WiktkuPrefsDialog.super.prototype.getSetupProcess.call(this, data)
.next(function () {
this.langCodesInput.setValue(wiktkuPrefs.langCodes.join(", "));
this.onlyOnClickCheckbox.setSelected(!!wiktkuPrefs.onlyOnClick);
this.portletDropdown.setValue(wiktkuPrefs.portlet || "auto");
this.quietCheckbox.setSelected(!!wiktkuPrefs.quiet);
}, this);
};
WiktkuPrefsDialog.prototype.getActionProcess = function (action) {
var dialog = this;
if (action === "save") {
return new OO.ui.Process(function () {
var codes = dialog.langCodesInput.getValue()
.split(/[,\s]+/)
.map(function (c) { return c.trim().toLowerCase(); })
.filter(function (c) { return !!c; });
wiktkuPrefs = {
langCodes: codes,
onlyOnClick: dialog.onlyOnClickCheckbox.isSelected(),
portlet: dialog.portletDropdown.getValue() || "auto",
quiet: dialog.quietCheckbox.isSelected()
};
wiktkuSavePrefs(wiktkuPrefs);
mw.notify(
"Tercîh hatin qeydkirin. Rûpelê ji nû ve bar bike (F5).",
{ type: "success", tag: "wiktku-prefs-save" }
);
dialog.close({ action: "save" });
});
}
if (action === "cancel") {
return new OO.ui.Process(function () {
dialog.close({ action: "cancel" });
});
}
return WiktkuPrefsDialog.super.prototype.getActionProcess.call(this, action);
};
wiktkuPrefsWindowManager = new OO.ui.WindowManager();
$(document.body).append(wiktkuPrefsWindowManager.$element);
wiktkuPrefsDialog = new WiktkuPrefsDialog();
wiktkuPrefsWindowManager.addWindows([wiktkuPrefsDialog]);
}
wiktkuPrefsWindowManager.openWindow(wiktkuPrefsDialog);
});
}
var targetContainer;
var skin = mw.config.get('skin');
if (wiktkuPrefs.portlet && wiktkuPrefs.portlet !== "auto") {
targetContainer = wiktkuPrefs.portlet;
} else if (skin === 'vector-2022') {
targetContainer = 'p-cactions';
} else if (skin === 'vector') {
targetContainer = 'p-tb';
} else {
targetContainer = 'p-views';
}
mw.util.addPortletLink(targetContainer,
mw.util.getUrl(mw.config.get("wgPageName"), { action: "submit", wiktkuaddlang: "1" }),
"+Ziman/beşeke din", "ca-wiktku-addlang",
"Li vê rûpelê, ziman an jî beşeke nû zêde bike");
// If "onlyOnClick" is set, the wizard should ONLY ever open via the
// "+Ziman/beşeke din" link — never automatically
var wiktkuNewPageDetected = $(".mw-newarticletext, .mw-newarticletextanon").length > 0;
if (wiktkuPrefs.onlyOnClick ? !addLangMode : (!addLangMode && !wiktkuNewPageDetected)) {
return;
}
// ── Shared helpers ───────────────────────────────────────────────────
// Generic text/UI utilities live in their own package file now — see the
// header of util.js for why. Aliased to bare names here so the ~400 call
// sites below read exactly as they did when these were local functions.
var wiktkuUtil = require("./start/util.js");
var capitalize = wiktkuUtil.capitalize;
var decapitalize = wiktkuUtil.decapitalize;
var escapeRegExp = wiktkuUtil.escapeRegExp;
var stripWikilinks = wiktkuUtil.stripWikilinks;
var splitTercimeIzah = wiktkuUtil.splitTercimeIzah;
var insertAtCursor = wiktkuUtil.insertAtCursor;
var foldDiacritics = wiktkuUtil.foldDiacritics;
var wrapNativeSelect = wiktkuUtil.wrapNativeSelect;
var initSelects = wiktkuUtil.initSelects;
var wiktkuInitManualResize = wiktkuUtil.initManualResize;
function langHeaderSource(codePattern) {
return "\n?==\\s*\\{\\{\\s*ziman\\s*\\|\\s*(" + codePattern + ")\\s*\\}\\}\\s*==";
}
function findLangHeader(text, code) {
var m = new RegExp(langHeaderSource(escapeRegExp(code))).exec(text);
return m ? { index: m.index, match: m[0] } : null;
}
var catSrcTemplates = null;
var catSrcTemplatesPromise = null;
function fetchCatSrcTemplates() {
if (catSrcTemplatesPromise) return catSrcTemplatesPromise;
catSrcTemplatesPromise = new mw.Api().get({
action: "query",
list: "categorymembers",
cmtitle: "Kategorî:Çavkanî",
cmnamespace: 10,
cmlimit: "max",
formatversion: 2
}).then(function (data) {
var members = (data.query && data.query.categorymembers) || [];
catSrcTemplates = $.map(members, function (m) {
// Pêşgira navî ya "Şablon:" rake.
return m.title.replace(/^[^:]+:/, "");
});
catSrcTemplates.sort(function (a, b) { return a.localeCompare(b, userLang); });
return catSrcTemplates;
}, function () {
catSrcTemplates = [];
return catSrcTemplates;
});
return catSrcTemplatesPromise;
}
var pageName = mw.config.get("wgPageName").replaceAll(/_/g, " ");
if (ns) pageName = pageName.replace(/.*\//, "");
var pageNameRe = escapeRegExp(pageName);
var userLang = mw.config.get("wgUserLanguage");
var formCache = new ObjectStorage("wiktku_start_draft_" + mw.config.get("wgPageName"), 1);
var langsByCode = {};
// Looks up the display label for a language code, falling back to the
// code itself if it isn't known yet (e.g. langsByCode not loaded).
function getLangLabel(code) {
var entry = langsByCode[code];
return entry ? entry.label : code;
}
// Populated from [[MediaWiki:Gadget-start.js/data.json]] at runtime.
var metadata = {};
var ZARAVA_LANG_CODES = ["ckb", "sdh", "lki", "hac", "zza"];
// Converts a {code: label} object (langChoices/posChoices in data.json)
// into the {code, label[, sortKey]} array the rest of the script uses.
// isLang: true adds a sortKey and shows "(code)" after the label —
// language choices only.
function choicesFromObject(obj, isLang) {
var result = [];
$.each(obj || {}, function (code, label) {
var choice = { code: code, label: label };
if (isLang) choice.sortKey = label;
result.push(choice);
});
return result;
}
function getZaravaKeys(choices) {
var byCode = {};
$.each(choices || [], function (_, c) { byCode[c.code] = c; });
var result = [];
$.each(ZARAVA_LANG_CODES, function (_, code) {
if (byCode[code]) result.push(byCode[code]);
});
return result;
}
function needsTransliteration(langCode) {
var meta = metadata[langCode];
if (!meta || !meta.sc) return false;
var scripts = Array.isArray(meta.sc) ? meta.sc : [meta.sc];
return scripts.length > 0 && scripts[0] !== "Latn";
}
// Kodên cinsiyetê yên di metadata.g de — ji data.json tê dagirtin
var GENDER_BASE_LABELS = {};
// Item 1 (Wikihez, 14 Tebax 2026): kodên jimarê (y, s, d, p, p+, tp, j, j+,
// j/nj, nj, nj+, hj!, hj?) — ji data.json's "numberLabels" tê dagirtin.
// Same {code: {cat, display[, req]}} shape as the wiki's own Lua
// number-type table; "display" can contain HTML (<abbr>) or wikilinks
// ([[...]]), so it's only used as-is inside the wikitext output — never
// dropped straight into an <option>, which can't render either (see
// stripMarkupForOption below).
var NUMBER_LABELS = {};
// metadata[lang].g used to list gender AND number codes together (see
// cinsiyet/posparams below) — this tells the two dropdowns apart: any
// code that's a key in NUMBER_LABELS is a number code (goes in the new
// Jimar dropdown / j= param), everything else is a gender code (stays
// in the existing Cîns dropdown / c= param). Compound codes like "m-p"
// or "n-p" are gender+plural pairs, not plain "p" — they don't match a
// NUMBER_LABELS key, so they correctly stay on the gender side.
function isNumberCode(code) {
return Object.prototype.hasOwnProperty.call(NUMBER_LABELS, code);
}
// Strips the bit of markup "display" is allowed to contain so it's safe
// to use as plain <option> text (options can't render HTML or wikilinks):
// <abbr title="X">Y</abbr> -> "Y (X)", [[a|b]] -> "b", [[a]] -> "a".
function stripMarkupForOption(html) {
if (!html) return "";
return $.trim(
String(html)
.replace(/<abbr[^>]*title="([^"]*)"[^>]*>([\s\S]*?)<\/abbr>/gi, "$2 ($1)")
.replace(/\[\[[^\]|]*\|([^\]]*)\]\]/g, "$1")
.replace(/\[\[([^\]]*)\]\]/g, "$1")
.replace(/<[^>]+>/g, "")
);
}
// Builds the Jimar dropdown's <option> text for one code: "j — jimarbar".
function numberOptionLabel(code) {
var def = NUMBER_LABELS[code];
if (!def) return code;
var text = stripMarkupForOption(def.display);
return text ? (code + " — " + text) : code;
}
// Sub-lists that only make sense for a plain (non-şablon) sense — hidden
// when a şablon (e.g. {{guharto|…}}) is chosen for that sense
var HIDDEN_ON_TPL_GROUPS = [
"wiktku-dfn-alternativ",
"wiktku-dfn-hevmane",
"wiktku-dfn-dijmane",
"wiktku-dfn-koordine",
"wiktku-dfn-jornav",
"wiktku-dfn-jernav"
];
function genderLabel(code) {
if (code === "p") return "Pirjimar";
var pluralMatch = code.match(/^(.+)-p$/);
if (pluralMatch && GENDER_BASE_LABELS[pluralMatch[1]]) {
return GENDER_BASE_LABELS[pluralMatch[1]] + " (pirjimar)";
}
return GENDER_BASE_LABELS[code] || code;
}
// ── Template explanations (v3 spec) ──────────────────────────────────
// Every place a template can be picked shows the same row: a status
// dot, the name, a link to the template page, and an ⓘ. This is the ⓘ.
//
// Text comes from the template's own TemplateData where it has any, so
// the explanation stays right without anyone maintaining a second copy
// by hand — with the desc already in data.json as the fallback for
// templates that have none.
var wiktkuTplDataCache = {}; // name -> {desc, params[]} or null when absent
/** Fetches TemplateData for one template. Resolves to null if the
* template has none (a plain, undocumented template — very common). */
function fetchTemplateData(name) {
if (Object.prototype.hasOwnProperty.call(wiktkuTplDataCache, name)) {
return $.Deferred().resolve(wiktkuTplDataCache[name]).promise();
}
return new mw.Api().get({
action: "templatedata",
titles: "Şablon:" + name,
redirects: 1,
formatversion: 2
}).then(function (data) {
var pages = (data && data.pages) || {};
var first = null;
$.each(pages, function (_, p) { if (!first) first = p; });
var out = null;
if (first) {
var desc = first.description;
// TemplateData descriptions are language maps when the
// template is documented in more than one language.
if (desc && typeof desc === "object") desc = desc[userLang] || desc.en || desc[Object.keys(desc)[0]];
var params = [];
$.each(first.params || {}, function (key, p) {
var label = p && p.label;
if (label && typeof label === "object") label = label[userLang] || label.en || label[Object.keys(label)[0]];
params.push({ name: key, label: label || "", required: !!(p && p.required) });
});
out = { desc: desc || "", params: params };
}
wiktkuTplDataCache[name] = out;
return out;
}, function () {
// No TemplateData, or the API is unhappy — cache the miss so a
// repeated ⓘ click doesn't re-request it every time.
wiktkuTplDataCache[name] = null;
return null;
});
}
/** Hand-written fallback description, from data.json. */
function localTplDesc(name) {
var pools = [steps.pron.pronTpls, steps.etym.etymTpls, steps.dfn.tplDefs, steps.dfn.jederDefs];
var found = "";
$.each(pools, function (_, pool) {
if (pool && pool[name] && pool[name].desc) { found = pool[name].desc; return false; }
});
return found;
}
/** Opens the inline explanation panel for `name`, anchored under the
* picker it was opened from. */
function showTemplateInfo(name, anchorWrap) {
$(".wiktku-tpl-info").remove();
var panel = $("<div class='wiktku-tpl-info'></div>");
panel.append($("<div class='wiktku-tpl-info-name'></div>").text("{{" + name + "}}"));
var body = $("<div class='wiktku-tpl-info-desc'></div>").text("Tê barkirin…");
panel.append(body);
var params = $("<div class='wiktku-tpl-info-params'></div>");
panel.append(params);
panel.append($("<a class='wiktku-tpl-info-link' target='_blank' rel='noopener'></a>")
.attr("href", wiktkuUtil.tplPageUrl(name))
.text("Rûpela şablonê veke →"));
var close = $("<button type='button' class='wiktku-tpl-info-close' title='Bigire'>✕</button>");
close.on("click", function () { panel.remove(); });
panel.prepend(close);
$(anchorWrap).after(panel);
fetchTemplateData(name).then(function (td) {
var desc = (td && td.desc) || localTplDesc(name);
body.text(desc || "Ji bo vê şablonê ravek nehatiye nivîsandin.");
if (td && td.params && td.params.length) {
params.append($("<div class='wiktku-tpl-info-params-title'></div>").text("Parametre:"));
var listEl = $("<ul></ul>");
$.each(td.params, function (_, p) {
var line = p.name + (p.label ? " — " + p.label : "") + (p.required ? " (pêwîst)" : "");
listEl.append($("<li></li>").text(line));
});
params.append(listEl);
}
});
}
/** Marks a picker's <option>s as template rows so the searchable widget
* renders them with the dot / 🔗 / ⓘ affordances, and wires the ⓘ
* handler for that picker. `nameOf` maps an <option> to a template
* name — the pickers store different things in value= (a snippet for
* the insert dropdowns, the bare name for the sense selector). */
function markTemplateOptions(sel, nameOf) {
if (!sel || !sel.length) return;
sel.find("option").each(function () {
var opt = $(this);
var name = nameOf(opt);
if (!name) return;
opt.attr("data-tpl", name);
// Deprecated/typo templates are the "special cases only" ones.
opt.attr("data-tpl-status", /kevnbûyî|şaşnivîs|kêmpeyda/i.test(opt.text()) ? "yellow" : "green");
});
sel.data("wiktkuTplInfo", showTemplateInfo);
}
/** Pulls the template name out of a snippet like "* {{ku-IPA}}" or
* "{{ji|SOURCELANG|CODE|…}}". */
function tplNameFromSnippet(snippet) {
var m = /\{\{\s*([^|}\n]+)/.exec(snippet || "");
return m ? $.trim(m[1]) : "";
}
// True if a sense has content beyond mane worth keeping (etîket, word
// lists, nimûne, jêder) — so it's still emitted with {{mane?}} if empty.
function senseHasExtraContent(s) {
if (s.etiket && $.grep(s.etiket, function (e) { return $.trim(e) !== ""; }).length) return true;
if (s.kategori && $.grep(s.kategori, function (k) { return $.trim(k) !== ""; }).length) return true;
if (s.alternativ.length || s.hevmane.length || s.dijmane.length ||
s.koordine.length || s.jornav.length || s.jernav.length) return true;
if (s.nimune && $.grep(s.nimune, function (n) {
return (typeof n === "object" ? n.text : n) !== "";
}).length > 0) return true;
if (senseHasJeder(s)) return true;
return false;
}
// Wikihez, 14 Tebax 2026 (item 7): the real submit-blocking requirement
// (Ziman + Cureyê rêzimanî, via step.required/canContinue) is already
// obvious since Bişîne stays visibly disabled until it's met. What
// wasn't obvious is that a technically-"complete" entry with nothing
// in Mane, Bi zaravayên din or Werger is still empty in any meaningful
// sense — so this is checked separately, at click time, with its own
// message, instead of another star/legend marker on the page.
function hasMinRequiredContent(values) {
var dfnSenses = steps.dfn.getSenses($("#wiktku-start-dfn"));
var hasMane = dfnSenses.some(function (s) {
return (s.tpl && s.tplTitle) || (!s.tpl && (s.mane !== "" || senseHasExtraContent(s)));
});
if (hasMane) return true;
if (values.lang === "ku") {
var hasWerger = false;
$("#wiktku-start-trans .wiktku-trans-group").each(function () {
if (steps.trans.getGroupTranslations($(this)).length) hasWerger = true;
});
if (hasWerger) return true;
var hasZarava = false;
$("#wiktku-start-zarava .wiktku-zarava-group").each(function () {
if (steps.zarava.getGroupTranslations($(this)).length) hasZarava = true;
});
if (hasZarava) return true;
}
return false;
}
// Bolds the *first* occurrence of the page name
function boldPageNameOnce(text) {
if (!text || !pageNameRe) return text;
var re = new RegExp("(" + pageNameRe + "([^( |,|;|\\?|\\.|\\!)]+)?)", "i");
return text.replace(re, "'''$1'''");
}
// Converts literal line breaks typed into a nimûne/jêgirtin box into
// wikitext <br> tags,
function nlToBr(text) {
return text ? text.replace(/\r\n|\r|\n/g, "<br>") : text;
}
function escapeHtmlForBackdrop(str) {
return String(str)
.replace(/&/g, "&")
.replace(/</g, "<")
.replace(/>/g, ">");
}
// Mirrors a textarea's text, with a small highlighted marker placed
// right after each line that's followed by an actual typed/pasted
// linebreak. Rendered into a transparent backdrop layer behind the
// textarea (see ensureLinebreakBackdrop()), so only the point of the
// break is marked instead of the whole box.
function buildLinebreakBackdropHtml(text) {
var lines = text.split(/\r\n|\r|\n/);
return $.map(lines, function (line, i) {
var isLast = i === lines.length - 1;
return escapeHtmlForBackdrop(line) +
(isLast ? "" : "<mark class='wiktku-linebreak-mark'>↵</mark>\n");
}).join("");
}
// Copies the metrics that affect where text wraps/lands (font, line
// height, padding, border) from the real textarea onto its backdrop,
// via computed style rather than shared CSS classes — most of the
// box's own rules are written as "textarea.foo", which a <div> with
// the same class wouldn't match. Re-run on every update in case a
// responsive breakpoint changed the textarea's own font-size.
function syncLinebreakBackdropMetrics(textarea, backdrop) {
var cs = window.getComputedStyle(textarea[0]);
backdrop.css({
"box-sizing": cs.boxSizing,
"padding-top": cs.paddingTop,
"padding-right": cs.paddingRight,
"padding-bottom": cs.paddingBottom,
"padding-left": cs.paddingLeft,
"border-width": cs.borderWidth,
"border-style": "solid",
"font-family": cs.fontFamily,
"font-size": cs.fontSize,
"font-weight": cs.fontWeight,
"line-height": cs.lineHeight,
"letter-spacing": cs.letterSpacing
});
}
// Lazily wraps a textarea in its own positioning anchor (independent
// of .wiktku-resize-wrap, so this doesn't depend on load order versus
// wiktkuMakeManualResizable) and inserts the transparent backdrop
// layer used to mark the exact point of a linebreak. Safe to call
// more than once on the same textarea — the backdrop is cached.
function ensureLinebreakBackdrop(textarea) {
var existing = textarea.data("wiktkuLinebreakBackdrop");
if (existing) return existing;
textarea.wrap("<div class='wiktku-linebreak-wrap'></div>");
var backdrop = $("<div aria-hidden='true'></div>").addClass("wiktku-linebreak-backdrop");
textarea.before(backdrop);
textarea.data("wiktkuLinebreakBackdrop", backdrop);
textarea.on("scroll.wiktkuLinebreak", function () {
backdrop.scrollTop(textarea.scrollTop()).scrollLeft(textarea.scrollLeft());
});
return backdrop;
}
// Flags a nimûne/jêgirtin textarea (via CSS class, for the border
// tint + tooltip) while it contains a typed/pasted linebreak, so the
// user notices before it's silently turned into <br> on output.
// Marks only the exact point of the break via a mirrored backdrop,
// rather than tinting the whole box.
function highlightLinebreak(el) {
var textarea = $(el);
var text = textarea.val();
var hasBreak = /\r|\n/.test(text);
textarea
.toggleClass("wiktku-has-linebreak", hasBreak)
.attr("title", hasBreak ? "Xeta nû dê wek <br> bê nivîsandin" : "");
if (!hasBreak) {
var cached = textarea.data("wiktkuLinebreakBackdrop");
if (cached) cached.hide();
textarea.removeClass("wiktku-has-linebreak-source");
return;
}
var backdrop = ensureLinebreakBackdrop(textarea);
textarea.addClass("wiktku-has-linebreak-source");
syncLinebreakBackdropMetrics(textarea, backdrop);
backdrop.html(buildLinebreakBackdropHtml(text)).show();
backdrop.scrollTop(textarea.scrollTop()).scrollLeft(textarea.scrollLeft());
}
// Each nimûne item can be { text, tr, t }: text, transliteration, translation.
function formatNimune(nimunes, lang, hasJeder) {
var hasNimune = nimunes && $.grep(nimunes, function (n) {
return (typeof n === "object" ? n.text : n) !== "";
}).length > 0;
if (!hasNimune) {
return hasJeder ? "" : "\n#* {{nimûne?|" + lang + "}}";
}
return $.map(nimunes, function (n) {
var text = typeof n === "object" ? n.text : n;
if (!text) return undefined;
var bolded = nlToBr(boldPageNameOnce(text));
var tpl = "\n#: {{nm|" + lang + "|" + bolded;
if (typeof n === "object") {
if (n.tr) tpl += "|tr=" + nlToBr(n.tr);
// Translation as third positional param (no key needed).
if (n.t) tpl += "|" + nlToBr(n.t);
}
// Short examples fit on one line together with their translation.
// rêz=1 is not used for ku — definitions are shown on separate lines there.
if (text.length < 60 && lang !== "ku") tpl += "|rêz=1";
tpl += "}}";
return tpl;
}).join("");
}
// Formats jêder (citation) entries into "#* {{jêder…|…}}" lines; skips
// entries with no quote text. Falls back to the generic {{jêder}}
// template when no specific template was chosen.
function formatJeder(jederList, lang) {
if (!jederList || !jederList.length) return "";
return $.map(jederList, function (jeder) {
if (!jeder || !jeder.quote) return undefined;
var quote = nlToBr(boldPageNameOnce(jeder.quote));
var quoteTr = nlToBr(jeder.quoteTr);
var quoteT = nlToBr(jeder.quoteT);
if (jeder.jederTpl) {
var cite = "\n#* {{" + jeder.jederTpl + "|" + lang;
cite += "|jêgirtin=" + quote;
if (quoteTr) cite += "|tr=" + quoteTr;
if (quoteT) cite += "|tercime=" + quoteT;
$.each(jeder.jêderFields || {}, function (key, val) {
if (val) cite += "|" + key + "=" + val;
});
cite += "}}";
return cite;
}
var out = "\n#* {{jêder|" + lang + "|jêgirtin=" + quote;
if (quoteTr) out += "|tr=" + quoteTr;
if (quoteT) out += "|tercime=" + quoteT;
// A şablon picked from Kategorî:Çavkanî is transcluded as the
// source param (e.g. |{{Kovara X}}); manual text is used as-is.
var srcParam = jeder.jederCatTpl ? ("{{" + jeder.jederCatTpl + "}}") :
(jeder.jederManual ? jeder.jederManual : "çavkanî?");
// A positional param containing "=" gets parsed as its own key=value
// pair by MediaWiki and breaks the template, so force it to be
// explicitly named (|2=) whenever that's the case.
out += (srcParam.indexOf("=") !== -1 ? "|2=" : "|") + srcParam;
out += "}}";
return out;
}).join("");
}
// True if a sense has at least one jêder entry with quote text.
function senseHasJeder(sense) {
return !!(sense.jeder && $.grep(sense.jeder, function (j) {
return j && j.quote;
}).length > 0);
}
// Builds "{{tplName|lang|part1|part2|…}}" from a sense field (kategori,
// etiket), wrapped inline (" {{…}} ") or on its own line ("\n#: {{…}}").
function buildSenseTpl(sense, field, lang, tplName) {
if (!sense[field] || !sense[field].length) return "";
var parts = sense[field].map(function (p) { return $.trim(p); })
.filter(function (p) { return p !== ""; });
if (!parts.length) return "";
var call = "{{" + tplName + "|" + lang + "|" + parts.join("|") + "}}";
return call
}
/**
* Assembles the nimûne + jêder wikitext block for a sense. Shared by
* both the template-sense and normal-mane-sense branches below.
*/
function buildCite(sense, lang) {
return formatNimune(sense.nimune, lang, senseHasJeder(sense)) +
formatJeder(sense.jeder, lang);
}
// ── Inline modifier system ───────────────────────────────────────────────
// Appends a ⊕ button to a word input <li>. Clicking it shows a compact
// modifier picker; selecting one prompts for the value and appends
// <modifier:value> to the textarea's current content.
var WORD_MODIFIERS = [
{ key: "t", label: "t: tercime / îzah", hint: "Tercimeya kelîmeyê an îzaha wê" },
{ key: "cuda", label: "cuda: alt display", hint: "Forma nîşankirinê ya alternatîf" },
{ key: "c", label: "c: cinsiyet", hint: "Cinsiyeta kelîmeyê" },
{ key: "e", label: "e: etîket (li pêşiyê)", hint: "Etîketek li pêşiya kelîmeyê" },
{ key: "ee", label: "ee: etîket (li dawiyê)", hint: "Etîketek li dawiya kelîmeyê" },
{ key: "q", label: "q: qualifier (li pêşiyê)", hint: "Wesf li pêşiya kelîmeyê" },
{ key: "qq", label: "qq: qualifier (li dawiyê)", hint: "Wesf li dawiya kelîmeyê" },
{ key: "crz", label: "crz: cureyê rêzimanî", hint: "Cureyê rêzimanî yê kelîmeyê" },
{ key: "hrf", label: "hrf: herfiyen", hint: "Herfiyen, manaya rasterast" },
{ key: "ref", label: "ref: çavkanî", hint: "Çavkanî" }
];
// Sub-groups (inside a sense/definition block) that get the same ⊕
// modifier button as makeWordListStep fields.
var MODIFIER_SUBGROUPS = {
"wiktku-dfn-alternativ": true,
"wiktku-dfn-hevmane": true,
"wiktku-dfn-dijmane": true,
"wiktku-dfn-koordine": true,
"wiktku-dfn-jornav": true,
"wiktku-dfn-jernav": true
};
/**
* Wraps a freshly-created textarea in a <li> with a ⊕ modifier button.
* `ta` — the jQuery textarea element.
* Returns the <li>.
*/
function makeModifierLi(ta) {
var li = $("<li class='wiktku-word-li'></li>");
var btn = $("<button type='button' class='wiktku-mod-btn' title='Modifiyerê lê zêde bike'>⊕</button>");
var picker = $("<div class='wiktku-mod-picker'></div>").hide();
// Which modifier keys are already present in the textarea's current
// text — e.g. "<t:...>" → "t" used. Each modifier can only be
// applied once per word, so its pill gets disabled once used.
function usedKeys() {
var used = {};
var re = /<([a-zA-Z]+):/g;
var val = ta.val() || "";
var m;
while ((m = re.exec(val)) !== null) used[m[1]] = true;
return used;
}
$.each(WORD_MODIFIERS, function (_, mod) {
var pill = $("<button type='button' class='wiktku-mod-pill'></button>").text(mod.label);
pill.attr("title", mod.hint);
pill.data("mod-key", mod.key);
pill.on("click", function (e) {
e.preventDefault();
if (pill.prop("disabled")) return; // already used on this word
picker.hide();
// Show a tiny inline input for the modifier value.
var valWrap = $("<span class='wiktku-mod-val-wrap'></span>");
var valInp = $("<input type='text' class='wiktku-mod-val-input'>")
.attr("placeholder", mod.hint + "…")
.attr("size", 20);
var confirm = $("<button type='button' class='wiktku-mod-confirm'>✓</button>");
var cancel = $("<button type='button' class='wiktku-mod-cancel'>✕</button>");
function applyModifier() {
var v = $.trim(valInp.val());
if (v) {
ta.val(ta.val() + "<" + mod.key + ":" + v + ">");
ta.trigger("input");
}
valWrap.remove();
ta.focus();
}
confirm.on("click", applyModifier);
cancel.on("click", function () { valWrap.remove(); ta.focus(); });
valInp.on("keydown", function (e) {
if (e.which === 13) { e.preventDefault(); applyModifier(); }
if (e.which === 27) { valWrap.remove(); ta.focus(); }
});
valWrap.append(valInp).append(confirm).append(cancel);
li.append(valWrap);
valInp.focus();
});
picker.append(pill);
});
btn.on("click", function (e) {
e.preventDefault();
// Close any other open pickers in the same list.
li.closest("ol, ul").find(".wiktku-mod-picker").not(picker).hide();
// Grey out modifiers already used on this word — refreshed on
// every open since the text (and thus what's "used") can change.
var used = usedKeys();
picker.find(".wiktku-mod-pill").each(function () {
var isUsed = !!used[$(this).data("mod-key")];
$(this).prop("disabled", isUsed).toggleClass("wiktku-mod-pill-used", isUsed);
});
picker.toggle();
});
// Close picker when focus leaves the li entirely.
li.on("focusout", function () {
setTimeout(function () {
if (!$.contains(li[0], document.activeElement)) picker.hide();
}, 150);
});
li.append(ta).append(btn).append(picker);
return li;
}
function makeWordListStep(id, name, question_fmt) {
return {
id: id,
name: name,
question_fmt: question_fmt,
multiple: true,
narrow: true,
modifiers: true,
// Function instead of a plain string so it can name the current
// language — computed fresh at build time and re-applied by
// refresh() whenever the language changes.
placeholder: function () {
var lang = getValues().lang || "";
var langLabel = lang ? getLangLabel(lang) : "";
return "Kelîme" + (langLabel ? " bi " + langLabel : "") + "…";
},
visible: function (values) {
return values.lang && values.pos;
},
output: function (values) {
var words = $.grep(values[id] || [], function (w) { return !!w; });
var header = capitalize(name);
if (!words.length) return "";
var lang = values.lang;
var section = "\n==== " + header + " ====\n";
var params = "cure=" + header + "\n" +
$.map(words, function (w) {
return "|" + w;
}).join("\n");
return section +
"{{kol3|" + lang + "|" + params + "\n}}\n";
} };
}
var steps = {
lang: {
id: "lang",
required: true,
name: "ziman",
question_fmt: '"' + pageName + '" bi çi zimanî ye?',
question_br: true,
// Populated from [[MediaWiki:Gadget-start.js/data.json]] (langChoices).
choices: [],
output: function (values) {
return "== {{ziman|" + values.lang + "}} ==\n";
}
},
pron: {
id: "pron",
name: "bilêvkirin",
question_fmt: '"' + pageName + '" çawa tê telafûzkirin?',
// pronTpls populated from data.json
pronTpls: {},
visible: function (values) {
if (!values.lang) return false;
// addLangMode: skip pron only if this lang already has a section.
if (addLangMode) {
// Clearing the page makes existing content irrelevant.
var clearPageCheck = $("#wiktku-clear-page-check");
if (clearPageCheck.length && clearPageCheck.prop("checked")) {
return true;
}
var existing = $("#wpTextbox1").val() || "";
return !findLangHeader(existing, values.lang);
}
return true;
},
// Fills the insert-dropdown from pronTpls, filtered by language.
refreshTplSelect: function () {
var sel = $("#wiktku-start-pron .wiktku-tpl-insert-select");
if (!sel.length) return;
var lang = getValues().lang || "";
sel.find("option[value!='']").remove();
$.each(steps.pron.pronTpls, function (name, tpl) {
// Filter: if tpl.langs exists, only show if lang is in that list; otherwise show always
var allowed = !tpl.langs || tpl.langs.indexOf(lang) !== -1;
if (allowed) {
sel.append($("<option></option>")
.val(tpl.snippet)
.text(name + " — " + tpl.desc)
.attr("data-nolang", tpl.noLang ? "1" : ""));
}
});
markTemplateOptions(sel, function (opt) { return tplNameFromSnippet(opt.val()); });
// Tell the picker the option list changed.
sel.trigger("wiktku:refresh");
},
build: function (stepDiv) {
if (stepDiv.find(".wiktku-pron-wrap").length) return null;
var wrap = $("<div class='wiktku-pron-wrap'></div>");
// Rewiye tine, 14 Tebax 2026: "berê bilêvkirin otomatîk
// çêdibû, niha zehmettir e ji bo yekî nezan — gelek şablon
// hene, kîjan were hilbijartin?" A one-line reassurance:
// this field is optional, and the dropdown below writes the
// template for you — no need to know the syntax up front.
wrap.append(
$("<p class='wiktku-step-hint'></p>").text(
"Ev qad ne mecbûrî ye. Heke tu nizanî kîjan şablonî hilbijêrî, vale bihêle — an ji pêşkêşkariya jêrîn şablonekî hilbijêre, ew ê bixweber li vir were nivîsandin."
)
);
var ta = $("<textarea></textarea>")
.attr("name", "wiktku-pron-" + $.now())
.attr("class", "wiktku-start-step-field wiktku-pron-text")
.attr("rows", 4)
.attr("placeholder", "Nimûne: {{IPA|ku|/pɛɪ̯n/}} yan {{kîte|ku|he|ce|ki|rin}}");
// Template insert dropdown — filtered by language.
var sel = $("<select class='wiktku-tpl-insert-select'></select>");
sel.attr("data-placeholder", "Şablonek lê zêde bike ");
sel.append($("<option value=''>— şablonek lê zêde bike —</option>"));
var lang = getValues().lang || "";
$.each(steps.pron.pronTpls, function (name, tpl) {
// Filter: if tpl.langs exists, only show if lang is in that list; otherwise show always
var allowed = !tpl.langs || tpl.langs.indexOf(lang) !== -1;
if (allowed) {
sel.append($("<option></option>")
.val(tpl.snippet)
.text(name + " — " + tpl.desc)
.attr("data-nolang", tpl.noLang ? "1" : ""));
}
});
sel.on("change", function () {
var snippet = $(this).val();
if (!snippet) return;
var lang = getValues().lang || "";
// Check if the selected option has noLang flag
var selectedOption = sel.find("option:selected");
var hasNoLang = selectedOption.attr("data-nolang") === "1";
if (!hasNoLang) {
snippet = snippet.replace(/CODE/g, lang).replace(/SOURCELANG/g, "?");
insertAtCursor(ta[0], snippet);
$(this).val("");
// Clear the picker's search box
sel.trigger("wiktku:refresh");
ta.focus();
return;
}
// Item 5 (Wikihez, 14 Tebax 2026): the noLang templates
// (ku-IPA, ku-kîte, zza-IPA, zza-kîte) auto-generate
// their actual content from a Lua module reading the
// page title — "{{ku-IPA}}" alone gives no hint what
// that'll render as, so show a live preview and require
// confirmation before inserting, instead of an inline
// prompt()/confirm() dialog.
var tplLabel = selectedOption.text();
$(this).val("");
sel.trigger("wiktku:refresh");
steps.pron.showTplPreview(stepDiv, ta, snippet, tplLabel);
});
wrap.append(sel).append(ta);
stepDiv.append(wrap);
steps.pron.buildIpaPalette(wrap, ta);
initSelects(wrap);
return ta;
},
// ── IPA character palette (v3 spec, 15 Tebax 2026) ───────────
// Modelled on fr.wiktionary's: every character is a button that
// drops itself in at the cursor. Two sub-tabs, because the full
// IPA chart is ~180 symbols and roughly twenty of them ever
// appear in Kurmancî — "IPA (kurdî)" opens by default and the
// full chart is one click away for loanwords and other
// languages. Grouped with a label down the left so it reads as
// a chart rather than one long line of glyphs.
IPA_KU: [
{ label: "Kît/stres", chars: ["ˈ", "ˌ", "ː"] },
{ label: "Bêdeng", chars: ["d͡ʒ", "t͡ʃ", "ʒ", "ʃ", "ɫ", "ŋ", "ɾ", "r", "ʋ", "ħ", "ʕ", "ɣ", "χ", "ʔ"] },
{ label: "Dengdêr", chars: ["ɑː", "eː", "ɛ", "ɪ", "iː", "ɯ", "ʊ", "uː", "yː", "ø", "œ"] }
],
IPA_FULL: [
{ label: "Bêdeng 1", chars: ["m", "ɱ", "n", "ɳ", "ɲ", "ŋ", "ɴ", "p", "b", "t", "d", "t̪", "d̪", "ʈ", "ɖ", "c", "ɟ", "k", "ɡ", "q", "ɢ", "ʡ", "ʔ"] },
{ label: "Bêdeng 2", chars: ["ɸ", "β", "f", "v", "θ", "ð", "s", "z", "ʃ", "ʒ", "ʂ", "ʐ", "ɕ", "ʑ", "ç", "ʝ", "x", "ɣ", "χ", "ʁ", "ħ", "ʕ", "h", "ɦ", "ʜ", "ʢ", "ɧ"] },
{ label: "Bêdeng 3", chars: ["ʋ", "ɹ", "ɻ", "j", "ɥ", "ɰ", "ʍ", "w", "ʙ", "ⱱ", "ɾ", "ɽ", "r", "ʀ", "ɺ", "l", "ɫ", "ɬ", "ɮ", "ɭ", "ʎ", "ʟ"] },
{ label: "Bêdeng 4", chars: ["ɓ", "ɗ", "ᶑ", "ʄ", "ɠ", "ʛ", "ʘ", "ǀ", "ǃ", "ǂ", "ǁ"] },
{ label: "Dengdêr", chars: ["i", "y", "ɪ", "ʏ", "ɨ", "ʉ", "ɯ", "u", "ʊ", "e", "ø", "ɘ", "ɵ", "ɤ", "o", "ə", "ɚ", "ɛ", "œ", "ɜ", "ɝ", "ɞ", "ʌ", "ɔ", "æ", "ɶ", "ɐ", "a", "ɑ", "ɒ"] },
{ label: "Suprasegmental", chars: ["ˈ", "ˌ", "ː", "ˑ", "ʼ", "ˀ", "ˤ", "ᵝ", "ᵊ", "ˠ", "ʰ", "ʱ", "ʲ", "ˡ", "ⁿ", "ᵑ", "ʷ", "ᶣ", "˞", "‿"] },
{ label: "Dîakrîtîk", chars: ["̚", "̪", "̺", "̻", "̼", "̬", "̊", "̥", "̞", "̝", "̘", "̙", "̽", "̟", "̠", "̈", "̤", "̹", "̜", "̍", "̩", "̆", "̯", "̃", "̰", "͡", "͜"] },
{ label: "Ton", chars: ["̋", "́", "̄", "̀", "̏", "̌", "̂", "˥", "˦", "˧", "˨", "˩", "ꜛ", "ꜜ", "↗", "↘", "‖"] }
],
/** Builds the two-sub-tab character palette under the textarea. */
buildIpaPalette: function (wrap, ta) {
if (wrap.find(".wiktku-ipa-palette").length) return;
var panel = $("<div class='wiktku-ipa-panel'></div>").hide();
var toggle = $("<a href='#' class='wiktku-adv-toggle'></a>")
.attr("aria-expanded", "false")
.append($("<span class='wiktku-adv-toggle-chevron'>▾</span>"))
.append($("<span class='wiktku-adv-toggle-text'>Tîpên bilêvkirinê</span>"));
toggle.on("click", function (e) {
e.preventDefault();
var open = panel.is(":visible");
panel.toggle(!open);
$(this).attr("aria-expanded", open ? "false" : "true")
.toggleClass("wiktku-adv-open", !open);
});
wrap.append($("<div class='wiktku-adv-toggle-row'></div>").append(toggle));
// Sub-tab bar, with the two template buttons pinned right.
var subTabs = $("<div class='wiktku-ipa-subtabs'></div>");
var kuTab = $("<span class='wiktku-ipa-subtab wiktku-tab-active'>IPA (kurdî)</span>");
var fullTab = $("<span class='wiktku-ipa-subtab'>IPA</span>");
subTabs.append(kuTab).append(fullTab);
var tplBtns = $("<span class='wiktku-ipa-tplbtns'></span>");
$.each([
{ label: "{{ku-IPA|+}}", snippet: "{{ku-IPA|}}", back: 2 },
{ label: "{{IPA|+}}", snippet: "{{IPA|ku|}}", back: 2 }
], function (_, t) {
var b = $("<button type='button' class='wiktku-ipa-tplbtn'></button>").text(t.label);
b.on("click", function (e) {
e.preventDefault();
insertAtCursor(ta[0], t.snippet);
// Park the cursor inside the braces, where the value goes.
var pos = ta[0].selectionStart - t.back;
ta[0].selectionStart = ta[0].selectionEnd = pos;
ta.focus();
});
tplBtns.append(b);
});
subTabs.append(tplBtns);
panel.append(subTabs);
function buildGrid(groups) {
var grid = $("<div class='wiktku-ipa-grid'></div>");
$.each(groups, function (_, g) {
var row = $("<div class='wiktku-ipa-row'></div>");
row.append($("<span class='wiktku-ipa-rowlabel'></span>").text(g.label));
var keys = $("<span class='wiktku-ipa-keys'></span>");
$.each(g.chars, function (_, ch) {
var btn = $("<button type='button' class='wiktku-ipa-key'></button>");
// A combining mark on its own renders as a stray
// accent floating over whatever precedes it, so
// show it on a dotted circle — but insert only
// the mark itself.
var combining = /^[̀-ͯ҃-҉]$/.test(ch);
btn.text(combining ? "◌" + ch : ch);
if (combining) btn.addClass("wiktku-ipa-key-combining");
btn.attr("title", ch);
btn.on("click", function (e) {
e.preventDefault();
insertAtCursor(ta[0], ch);
ta.focus();
});
keys.append(btn);
});
row.append(keys);
grid.append(row);
});
return grid;
}
var kuGrid = buildGrid(steps.pron.IPA_KU);
var fullGrid = buildGrid(steps.pron.IPA_FULL).hide();
panel.append(kuGrid).append(fullGrid);
kuTab.on("click", function () {
kuTab.addClass("wiktku-tab-active"); fullTab.removeClass("wiktku-tab-active");
kuGrid.show(); fullGrid.hide();
});
fullTab.on("click", function () {
fullTab.addClass("wiktku-tab-active"); kuTab.removeClass("wiktku-tab-active");
fullGrid.show(); kuGrid.hide();
});
panel.addClass("wiktku-ipa-palette");
wrap.append(panel);
},
/** Item 5: inline preview + confirm panel for a "noLang" (auto-
* content) pronunciation template — fetches what the snippet
* actually expands to for this page (via action=expandtemplates,
* so the preview is exactly what {{ku-IPA}} etc. would produce)
* and only inserts it into the textarea if the user confirms. */
showTplPreview: function (stepDiv, ta, snippet, tplLabel) {
// Only one preview panel open at a time.
stepDiv.find(".wiktku-pron-preview").remove();
var panel = $("<div class='wiktku-pron-preview'></div>");
panel.append($("<div class='wiktku-pron-preview-label'></div>")
.text("Pêşdîtina " + tplLabel + ":"));
var body = $("<div class='wiktku-pron-preview-body'></div>").text("Tê barkirin…");
panel.append(body);
var actions = $("<div class='wiktku-pron-preview-actions'></div>");
var confirmBtn = $("<button type='button' class='wiktku-pron-preview-confirm'>✓ Tevlî bike</button>")
.prop("disabled", true);
var cancelBtn = $("<button type='button' class='wiktku-pron-preview-cancel'>✕ Betal bike</button>");
actions.append(confirmBtn).append(cancelBtn);
panel.append(actions);
ta.before(panel);
confirmBtn.on("click", function () {
insertAtCursor(ta[0], snippet);
panel.remove();
ta.focus();
});
cancelBtn.on("click", function () {
panel.remove();
});
new mw.Api().post({
action: "expandtemplates",
text: snippet,
title: pageName,
prop: "wikitext",
formatversion: 2
}).done(function (data) {
var wikitext = $.trim((data && data.expandtemplates && data.expandtemplates.wikitext) || "");
// Drop the leading "* " bullet (part of the wikitext
// list-item syntax, not the template's own output) so
// the preview shows just what the template rendered.
wikitext = wikitext.replace(/^\*\s*/, "");
body.text(wikitext || "(vala — vê rûpelê re tiştek nehate afirandin)");
confirmBtn.prop("disabled", false);
}).fail(function () {
body.text("Pêşdîtin nehate barkirin — tu dikarî hîn jî wê tevlî bikî.");
confirmBtn.prop("disabled", false);
});
},
output: function () {
var text = $.trim($("#wiktku-start-pron .wiktku-pron-text").val());
if (!text) return "";
var lines = text.split("\n");
var out = $.map(lines, function (line) {
line = $.trim(line);
if (!line) return undefined;
return line;
}).join("\n");
// Back to "===", under Ziman and above the POS sections
// (v3 spec, 15 Tebax 2026). It had been nested at "===="
// inside each POS section per Ghybu's earlier note, but the
// field is shared across sections, so a two-POS entry
// printed the identical pronunciation twice — once under
// Navdêr and once under Lêker. Emitted once by getWikitext()
// now, not by getWikitextForCurrentSection().
return "\n=== Bilêvkirin ===\n" + out + "\n";
} },
pos: {
id: "pos",
required: true,
name: "Cureyê rêzimanî",
question_fmt: 'Cureyê rêzimanî yê "' + pageName + '" çi ye?',
visible: function (values) {
return values.lang;
},
question_br: true,
// Populated from [[MediaWiki:Gadget-start.js/data.json]] (posChoices).
choices: [],
output: function (values) {
var pos = values.pos || "";
var capitalizedPos = capitalize(pos);
// "form" opt-param (checked in posparams) marks this as a
// form-of/inflected entry — the section title becomes
// "Formeke <pos>ê" instead of the plain pos name. The
// template call itself still uses the unchanged pos name.
var isForm = $("#wiktku-posparams-opt-form").is(":checked");
var header = isForm
? "\n=== Formeke " + pos + "ê ===\n"
: "\n=== " + capitalizedPos + " ===\n";
// Image line (between header and template call)
var imageLine = steps.resim.output(values);
// Read the live wikitext from the posparams textarea.
// Fall back to a plain {{pos|lang}} if the step hasn't been built yet.
var tplLine = $.trim($("#wiktku-start-posparams .wiktku-posparams-text").val());
if (!tplLine) {
tplLine = "{{" + pos + "|" + (values.lang || "") + "}}";
}
return header + imageLine + tplLine + "\n";
}
},
// cinsiyet (gender) — shown for navdêr/serenav only, with choices built
// from metadata[lang].g since not every language has grammatical gender.
cinsiyet: {
id: "cinsiyet",
name: "cinsiyet",
question_fmt: 'Cinsiyeta "' + pageName + '" çi ye?',
question_br: true,
visible: function () { return false; }, // handled inside posparams
// Single source of truth for the selected gender code. The visible
// dropdown lives inside the posparams step (see steps.posparams),
// but it must always read/write THIS hidden field — not a field of
// its own — since getValuesForStep("cinsiyet") reads from here.
build: function (stepDiv) {
var field = stepDiv.find(".wiktku-start-step-field");
if (field.length) return field;
field = $("<input type='hidden'>")
.addClass("wiktku-start-step-field")
.attr("id", "wiktku-start-cinsiyet-field")
.val("");
stepDiv.append(field);
return field;
},
output: function () { return ""; } // consumed by posparams/pos.output
},
// Item 1 (Wikihez, 14 Tebax 2026): jimar (grammatical number) — same
// hidden-field pattern as cinsiyet just above, but writes into its
// own j= template parameter instead of sharing c=. Shown for
// navdêr/serenav only, with choices built from whichever of
// metadata[lang].g are number codes (see isNumberCode) — mirrors
// cinsiyet exactly, just filtered to the other half of that list.
jimar: {
id: "jimar",
name: "jimar",
question_fmt: 'Jimara "' + pageName + '" çi ye?',
question_br: true,
visible: function () { return false; }, // handled inside posparams
build: function (stepDiv) {
var field = stepDiv.find(".wiktku-start-step-field");
if (field.length) return field;
field = $("<input type='hidden'>")
.addClass("wiktku-start-step-field")
.attr("id", "wiktku-start-jimar-field")
.val("");
stepDiv.append(field);
return field;
},
output: function () { return ""; } // consumed by posparams/pos.output
},
// Lêker transitivity — hidden step, handled inside posparams
lektur: {
id: "lektur",
name: "Cureyê lêkerê (fiîlê)",
question_fmt: "Cureyê lêkerê (fiîlê) çi ye?",
question_br: true,
visible: function () { return false; },
choices: [
{ code: "gh", label: "gerguhêz" },
{ code: "x-gh", label: "xwerû-gerguhêz" },
{ code: "p-gh", label: "pêkhatî-gerguhêz" },
{ code: "h-gh", label: "hevedudanî-gerguhêz" },
{ code: "b-gh", label: "biwêjî-gerguhêz" },
{ code: "ngh", label: "negerguhêz" },
{ code: "x-ngh", label: "xwerû-negerguhêz" },
{ code: "p-ngh", label: "pêkhatî-negerguhêz" },
{ code: "h-ngh", label: "hevedudanî-negerguhêz" },
{ code: "b-ngh", label: "biwêjî-negerguhêz" } ],
output: function () { return ""; }
},
// tr — hidden step, handled inside posparams
tr: {
id: "tr",
name: "transliterasyon",
question_fmt: "Transliterasyona vê kelîmeyê",
multiple: false,
narrow: true,
visible: function () { return false; }
},
posparams: {
id: "posparams",
// Fused onto the "pos" card visually (see #wiktku-start-posparams
// in styles.css) so the two read as ONE question, per Ghybu's
// 14 Tebax 2026 feedback — this name is only a no-CSS/no-JS
// fallback, since the h3 that would show it is hidden by CSS.
name: "taybetmendî",
// The old static "Parametreyên cureyê rêzimanî" label named the
// mechanism, not the content. Show what's actually being asked
// for instead: gender for nouns, verb type for verbs, a generic
// fallback (transliteration/forms etc. still apply) otherwise.
question_fmt: function (values) {
var pos = values.pos || "";
if (pos === "navdêr" || pos === "serenav") return "Cins/zayend";
if (/^lêker/.test(pos)) return "Cureyê lêkerê";
return "Taybetmendî";
},
visible: function (values) {
return !!(values.lang && values.pos);
},
build: function (stepDiv) {
if (stepDiv.find(".wiktku-posparams-wrap").length) return null;
var wrap = $("<div class='wiktku-posparams-wrap'></div>");
var helpers = $("<div class='wiktku-posparams-helpers'></div>");
var ta = $("<textarea></textarea>")
.attr("name", "wiktku-posparams-" + $.now())
.attr("class", "wiktku-start-step-field wiktku-posparams-text")
.attr("rows", 2);
var _rebuilding = false;
function safeRebuild() {
if (_rebuilding) return;
_rebuilding = true;
steps.posparams.rebuildTa(stepDiv);
_rebuilding = false;
refresh();
}
// Generic text-input row factory
function makeTextRow(key, labelText, placeholder) {
var row = $("<div class='wiktku-posparams-row'></div>")
.attr("id", "wiktku-posparams-row-" + key).hide();
var inp = $("<input type='text'>")
.addClass("wiktku-start-narrow wiktku-posparams-field")
.attr("data-pp-key", key)
.attr("placeholder", placeholder || "");
inp.on("input", safeRebuild);
row.append($("<label></label>").text(labelText + ": ")).append(inp);
return row;
}
// cinsiyet
var cinsiyetRow = $("<div class='wiktku-posparams-row' id='wiktku-posparams-row-c'></div>")
.append($("<label></label>").text("Cinsiyet: ")).hide();
var cinsiyetSel = $("<select></select>")
.addClass("wiktku-plain-select wiktku-start-narrow wiktku-posparams-cinsiyet-sel")
.append($("<option value=''>— hilbijêre —</option>"));
// Writes into the real, shared #wiktku-start-cinsiyet-field (owned by
// steps.cinsiyet) rather than a field of its own — see the comment
// on steps.cinsiyet.build for why that matters.
cinsiyetSel.on("change", function () {
$("#wiktku-start-cinsiyet-field").val($(this).val()).trigger("change");
safeRebuild();
});
cinsiyetRow.append(cinsiyetSel);
// Item 1 (Wikihez, 14 Tebax 2026): jimar (number) — a second
// dropdown next to Cinsiyet, same pattern (writes into the
// shared hidden #wiktku-start-jimar-field), but into its own
// j= param instead of sharing c=. Options + the title
// tooltip (explanation) are built in syncHelpers, once the
// language's number codes are known.
var jimarRow = $("<div class='wiktku-posparams-row' id='wiktku-posparams-row-jimar'></div>")
.append($("<label></label>").text("Jimar: ")).hide();
var jimarSel = $("<select></select>")
.addClass("wiktku-plain-select wiktku-start-narrow wiktku-posparams-jimar-sel")
.append($("<option value=''>— hilbijêre —</option>"));
jimarSel.on("change", function () {
$("#wiktku-start-jimar-field").val($(this).val()).trigger("change");
safeRebuild();
});
jimarRow.append(jimarSel);
// lektur — Ghybu, 14 Tebax 2026: "'Cureyê lêkerê' nayê fêm
// kirin, bi min pêşta 'gerguhez/negerguhêz' were hilbijartin,
// paşê jî form 'hevdudanî/pêkatî/…' ji ber ku her kes vana
// nizanî." So the one 10-option dropdown ("xwerû-gerguhêz",
// "biwêjî-negerguhêz", …) becomes two plain questions. The
// emitted code is unchanged: base alone ("gh"), or prefix +
// "-" + base ("x-gh") — exactly the codes steps.lektur.choices
// already listed, just assembled from two answers instead of
// asked as one.
var lekturRow = $("<div class='wiktku-posparams-row' id='wiktku-posparams-row-lektur'></div>")
.append($("<label></label>").text("Lêker derbasdar e? ")).hide();
var lekturSel = $("<select></select>")
.addClass("wiktku-plain-select wiktku-start-narrow wiktku-posparams-lektur-sel")
.append($("<option value=''>— hilbijêre —</option>"))
.append($("<option value='gh'>gerguhêz (bireser digire)</option>"))
.append($("<option value='ngh'>negerguhêz (bireser nagire)</option>"));
lekturSel.on("change", safeRebuild);
lekturRow.append(lekturSel);
// Second half of the same question — the structural form.
// Blank = xwerû/sade, which is the common case.
var lekturFormRow = $("<div class='wiktku-posparams-row' id='wiktku-posparams-row-lekturform'></div>")
.append($("<label></label>").text("Şiklê lêkerê: ")).hide();
var lekturFormSel = $("<select></select>")
.addClass("wiktku-plain-select wiktku-start-narrow wiktku-posparams-lekturform-sel")
.append($("<option value=''>sade (asayî)</option>"))
.append($("<option value='x'>xwerû</option>"))
.append($("<option value='p'>pêkhatî</option>"))
.append($("<option value='h'>hevedudanî</option>"))
.append($("<option value='b'>biwêjî</option>"));
lekturFormSel.on("change", safeRebuild);
lekturFormRow.append(lekturFormSel);
helpers.append(cinsiyetRow).append(jimarRow).append(lekturRow).append(lekturFormRow);
// ── Everything below here is "Tercîhên pêşketî" ──────────────
// Ghybu, 14 Tebax 2026: "Tenê 'cîns' û 'jimar' bes e. 'Forma
// mê', 'Forma nêr', … nayê fêm kirin. Bi min wekî 'Tercîhên
// pêşketî' bi navkî din veşartî çêke." The rows themselves are
// unchanged and syncHelpers still shows/hides each one by id
// exactly as before — they just live inside a collapsed panel
// now, so the default view of this card is two dropdowns
// instead of twenty-odd fields.
// Transliteration is a primary field, not an advanced one, for
// any language not written in Latin script: for those, an
// entry without it is incomplete. syncHelpers already gates
// the row on needsTransliteration(lang), so for Kurmancî and
// other Latin-script languages it simply never appears.
helpers.append(makeTextRow("tr", "Transliterasyon (tr)", "Transliterasyon…"));
var advPanel = $("<div class='wiktku-posparams-adv-panel'></div>").hide();
advPanel
.append(makeTextRow("cuda", "nîşankirina alternatîv", "cuda…"))
.append(makeTextRow("ts", "Transkrîpsiyon (ts)", "Transkrîpsiyon…"))
.append(makeTextRow("m", "Forma mê (m)", "Forma mê…"))
.append(makeTextRow("mtr", "Translit. mê (mtr)", "Transliterasyona mê…"))
.append(makeTextRow("n", "Forma nêr (n)", "Forma nêr…"))
.append(makeTextRow("ntr", "Translit. nêr (ntr)", "Transliterasyona nêr…"))
.append(makeTextRow("p", "Forma pirjimar (p)", "Forma pirjimar…"))
.append(makeTextRow("ptr", "Translit. pirjimar", "Transliterasyona pirjimar…"))
.append(makeTextRow("y", "Forma yekjimar (y)", "Forma yekjimar…"))
.append(makeTextRow("ytr", "Translit. yekjimar", "Transliterasyona yekjimar…"))
.append(makeTextRow("sûp", "Forma sûperlatîv (sûp)", "Forma sûperlatîv…"))
.append(makeTextRow("sûptr", "Translit. sûperlatîv", "Transliterasyona sûperlatîv…"))
.append(makeTextRow("komp", "Forma komparatîv (komp)", "Forma komparatîv…"))
.append(makeTextRow("komptr", "Translit. komparatîv", "Transliterasyona komparatîv…"))
.append(makeTextRow("gir", "Forma girdêk (gir)", "gir=…"))
.append(makeTextRow("girtr", "Translit. gir", "girtr=…"))
.append(makeTextRow("hûr", "Forma hûrek (hûr)", "hûr=…"))
.append(makeTextRow("hûrtr", "Translit. hûr", "hûrtr=…"))
.append(makeTextRow("hanja", "Forma hanja", "hanja=…"))
.append(makeTextRow("hanjaTr","Translit. hanja", "hanjaTr=…"))
// Lêker rehên demê (only shown when pos is lêker — see syncHelpers)
.append(makeTextRow("niha", "Rehê dema niha (niha)", "Rehê dema niha…"))
.append(makeTextRow("nihatr", "Translit. rehê dema niha", "Transliterasyona rehê dema niha…"))
.append(makeTextRow("borî", "Rehê dema borî (borî)", "Rehê dema borî…"))
.append(makeTextRow("borîtr", "Translit. rehê dema borî", "Transliterasyona rehê dema borî…"))
.append(makeTextRow("subj", "Rehê dema bilanî (subj)", "Rehê dema bilanî…"))
.append(makeTextRow("subjtr", "Translit. rehê dema bilanî", "Transliterasyona rehê dema bilanî…"));
// Optional boolean params — nested inside the advanced panel
// (they were already the most niche thing on the card).
var optPanel = $("<div class='wiktku-posparams-opt-panel'></div>");
$.each([
{ key: "form", label: "form — ev made forma tewandî ye" },
{ key: "formaalt", label: "formaalt — vê madeyê bike forma alternatîv" },
{ key: "nekatcure", label: "nekatcure — sinifa rêzimanî kategorîze neke" },
{ key: "nekatcins", label: "nekatcins — kategoriya cinsiyetê neyîne" },
{ key: "nekatçendterm", label: "nekatçendterm — kategoriya çend-term neyîne" },
{ key: "serlînkneke", label: "serlînkneke — sernavê madeyê lînk neke" },
{ key: "nekatpalîndrom", label: "nekatpalîndrom — kategoriya palîndromê neyîne" },
{ key: "neformtr", label: "neformtr — transliterasyona forman neyîne" }
], function (_, p) {
var cb = $("<input type='checkbox'>")
.attr("id", "wiktku-posparams-opt-" + p.key).val(p.key).on("change", safeRebuild);
var lbl = $("<label></label>").attr("for", "wiktku-posparams-opt-" + p.key).text(" " + p.label);
optPanel.append($("<div class='wiktku-posparams-opt-row'></div>").append(cb).append(lbl));
});
advPanel.append(optPanel);
var optToggle = $("<a href='#' class='wiktku-posparams-opt-toggle wiktku-adv-toggle'></a>")
.attr("aria-expanded", "false")
.append($("<span class='wiktku-adv-toggle-chevron'>▾</span>"))
.append($("<span class='wiktku-adv-toggle-text'>Tercîhên pêşketî</span>"));
var optCount = $("<span class='wiktku-adv-toggle-count'></span>");
/** "N zevî · M tije" for whatever the advanced panel is
* currently showing — the row set changes with pos/lang (see
* syncHelpers), so this counts visible rows, not all of them. */
function syncAdvCount() {
var rows = advPanel.find(".wiktku-posparams-row").filter(function () {
return $(this).css("display") !== "none";
});
var filled = rows.filter(function () {
return $.trim($(this).find("input").val() || "") !== "";
}).length;
var checked = advPanel.find(".wiktku-posparams-opt-panel input:checked").length;
optCount.text(rows.length + " zevî · " + (filled + checked) + " tije");
}
stepDiv.data("syncAdvCount", syncAdvCount);
optToggle.on("click", function (e) {
e.preventDefault();
var open = advPanel.is(":visible");
advPanel.toggle(!open);
$(this).attr("aria-expanded", open ? "false" : "true")
.toggleClass("wiktku-adv-open", !open);
syncAdvCount();
});
advPanel.on("input change", "input", syncAdvCount);
helpers.append($("<div class='wiktku-adv-toggle-row'></div>")
.append(optToggle).append(optCount));
helpers.append(advPanel);
wrap.append(helpers).append(ta);
// Typing directly in textarea keeps cinsiyet/jimar hidden
// fields in sync, but does NOT call refresh() — preserves
// manual edits.
ta.on("input", function () {
var text = $(this).val();
var cMatch = text.match(/\|c=([^|}\s]+)/);
$("#wiktku-start-cinsiyet-field").val(cMatch ? cMatch[1] : "");
var jMatch = text.match(/\|j=([^|}\s]+)/);
$("#wiktku-start-jimar-field").val(jMatch ? jMatch[1] : "");
});
stepDiv.append(wrap);
return null;
},
/** Reads all helper widget values and rewrites the textarea.
* Called only by safeRebuild (user interaction) — never by syncHelpers,
* so manual textarea edits are never overwritten by a refresh cycle. */
rebuildTa: function (stepDiv) {
var values = getValues();
var pos = values.pos || "";
var lang = values.lang || "";
if (!pos || !lang) return;
var cinsiyet = stepDiv.find(".wiktku-posparams-cinsiyet-sel").val() || "";
var jimar = stepDiv.find(".wiktku-posparams-jimar-sel").val() || "";
// Two dropdowns, one code: "gh" / "ngh" on their own, or
// prefixed with the structural form ("x-gh", "b-ngh", …).
var lekturBase = stepDiv.find(".wiktku-posparams-lektur-sel").val() || "";
var lekturForm = stepDiv.find(".wiktku-posparams-lekturform-sel").val() || "";
var lektur = lekturBase ? (lekturForm ? lekturForm + "-" + lekturBase : lekturBase) : "";
function v(key) {
return $.trim(stepDiv.find(".wiktku-posparams-field[data-pp-key='" + key + "']").val());
}
var out = "{{" + pos + "|" + lang;
if (pos === "navdêr" || pos === "serenav") {
out += cinsiyet ? "|c=" + cinsiyet : (lang === "ku" ? "|c=?" : "");
// Item 1: number is its own j= param now, separate from
// c= — c= keeps holding gender (and gender+plural
// compounds like m-p/n-p, unaffected by this change).
if (jimar) out += "|j=" + jimar;
} else if (/^lêker/.test(pos) && lektur) {
out += "|c=" + lektur;
}
if (v("cuda")) out += "|" + v("cuda");
if (v("tr")) out += "|tr=" + v("tr");
if (v("ts")) out += "|ts=" + v("ts");
$.each(["m","n","p","y"], function (_, k) {
if (v(k)) out += "|" + k + "=" + v(k);
if (v(k+"tr")) out += "|" + k + "tr=" + v(k+"tr");
});
if (v("sûp")) out += "|sûp=" + v("sûp");
if (v("sûptr")) out += "|sûptr=" + v("sûptr");
if (v("komp")) out += "|komp=" + v("komp");
if (v("komptr")) out += "|komptr=" + v("komptr");
if (v("gir")) out += "|gir=" + v("gir");
if (v("girtr")) out += "|girtr=" + v("girtr");
if (v("hûr")) out += "|hûr=" + v("hûr");
if (v("hûrtr")) out += "|hûrtr=" + v("hûrtr");
if (v("hanja")) out += "|hanja=" + v("hanja");
if (v("hanjaTr")) out += "|hanjaTr=" + v("hanjaTr");
if (v("niha")) out += "|niha=" + v("niha");
if (v("nihatr")) out += "|nihatr=" + v("nihatr");
if (v("borî")) out += "|borî=" + v("borî");
if (v("borîtr")) out += "|borîtr=" + v("borîtr");
if (v("subj")) out += "|subj=" + v("subj");
if (v("subjtr")) out += "|subjtr=" + v("subjtr");
stepDiv.find(".wiktku-posparams-opt-panel input:checked").each(function () {
var key = $(this).val();
// "form" marks this entry as a form-of/inflected entry — it
// takes "erê" rather than the plain "1" the other boolean
// opt params use.
out += "|" + key + "=" + (key === "form" ? "erê" : "1");
});
out += "}}";
stepDiv.find(".wiktku-posparams-text").val(out);
$("#wiktku-start-cinsiyet-field").val(cinsiyet);
$("#wiktku-start-jimar-field").val(jimar);
},
/** Called from refresh() — controls row visibility only.
* Does NOT rewrite textarea so user edits are preserved.
* Rebuilds only when textarea is empty (first pos selection). */
syncHelpers: function (stepDiv) {
var values = getValues();
var pos = values.pos || "";
var lang = values.lang || "";
var needsTr = needsTransliteration(lang);
var isNom = pos === "navdêr" || pos === "serenav" || pos === "rengdêr";
var isAdj = pos === "rengdêr";
var isTîp = pos === "tîp";
var isJa = lang === "ja";
var isLeker = /^lêker/.test(pos);
// Item 1: metadata[lang].g used to list gender AND number
// codes together — split them here (see isNumberCode) so
// Cîns only ever offers gender codes (and gender+plural
// compounds like m-p/n-p, which aren't NUMBER_LABELS keys)
// and the new Jimar dropdown only offers number codes.
var meta = metadata[lang];
var allCodes = (meta && meta.g) || [];
var genderCodes = $.grep(allCodes, function (c) { return !isNumberCode(c); });
var jimarCodes = $.grep(allCodes, function (c) { return isNumberCode(c); });
var showC = (pos === "navdêr" || pos === "serenav") && genderCodes.length > 0;
var cRow = stepDiv.find("#wiktku-posparams-row-c");
cRow.toggle(showC);
if (showC) {
var sel = cRow.find(".wiktku-posparams-cinsiyet-sel");
// Prefer the select's own current value (normal in-session
// use); fall back to the shared hidden field, which is how
// a cache/section restore communicates a saved gender
// before this select has any <option>s to hold it.
var prev = sel.val() || $("#wiktku-start-cinsiyet-field").val() || "";
sel.find("option[value!='']").remove();
$.each(genderCodes, function (_, code) {
sel.append($("<option></option>").val(code).text(genderLabel(code)));
});
if (prev) sel.val(prev);
}
var showJimar = (pos === "navdêr" || pos === "serenav") && jimarCodes.length > 0;
var jimarRowEl = stepDiv.find("#wiktku-posparams-row-jimar");
jimarRowEl.toggle(showJimar);
if (showJimar) {
var jimarSelEl = jimarRowEl.find(".wiktku-posparams-jimar-sel");
var prevJimar = jimarSelEl.val() || $("#wiktku-start-jimar-field").val() || "";
jimarSelEl.find("option[value!='']").remove();
$.each(jimarCodes, function (_, code) {
var def = NUMBER_LABELS[code] || {};
var opt = $("<option></option>").val(code).text(numberOptionLabel(code));
// The explanation (cat, e.g. "dualia tantum") shows as a
// hover tooltip — <option> can't hold richer markup.
if (def.cat) opt.attr("title", def.cat);
jimarSelEl.append(opt);
});
if (prevJimar) jimarSelEl.val(prevJimar);
}
stepDiv.find("#wiktku-posparams-row-lektur").toggle(isLeker);
// Only ask for the structural form once the person has said
// gerguhêz/negerguhêz — "paşê jî form", per Ghybu.
stepDiv.find("#wiktku-posparams-row-lekturform")
.toggle(isLeker && !!stepDiv.find(".wiktku-posparams-lektur-sel").val());
stepDiv.find("#wiktku-posparams-row-tr").toggle(needsTr);
stepDiv.find("#wiktku-posparams-row-ts").toggle(needsTr);
stepDiv.find("#wiktku-posparams-row-m").toggle(isNom);
stepDiv.find("#wiktku-posparams-row-mtr").toggle(isNom && needsTr);
stepDiv.find("#wiktku-posparams-row-n").toggle(isNom);
stepDiv.find("#wiktku-posparams-row-ntr").toggle(isNom && needsTr);
stepDiv.find("#wiktku-posparams-row-p").toggle(isNom);
stepDiv.find("#wiktku-posparams-row-ptr").toggle(isNom && needsTr);
stepDiv.find("#wiktku-posparams-row-y").toggle(isNom);
stepDiv.find("#wiktku-posparams-row-ytr").toggle(isNom && needsTr);
stepDiv.find("#wiktku-posparams-row-sûp").toggle(isAdj);
stepDiv.find("#wiktku-posparams-row-sûptr").toggle(isAdj && needsTr);
stepDiv.find("#wiktku-posparams-row-komp").toggle(isAdj);
stepDiv.find("#wiktku-posparams-row-komptr").toggle(isAdj && needsTr);
stepDiv.find("#wiktku-posparams-row-gir").toggle(isTîp);
stepDiv.find("#wiktku-posparams-row-girtr").toggle(isTîp && needsTr);
stepDiv.find("#wiktku-posparams-row-hûr").toggle(isTîp);
stepDiv.find("#wiktku-posparams-row-hûrtr").toggle(isTîp && needsTr);
stepDiv.find("#wiktku-posparams-row-hanja").toggle(isJa);
stepDiv.find("#wiktku-posparams-row-hanjaTr").toggle(isJa);
stepDiv.find("#wiktku-posparams-row-niha").toggle(isLeker);
stepDiv.find("#wiktku-posparams-row-nihatr").toggle(isLeker && needsTr);
stepDiv.find("#wiktku-posparams-row-borî").toggle(isLeker);
stepDiv.find("#wiktku-posparams-row-borîtr").toggle(isLeker && needsTr);
stepDiv.find("#wiktku-posparams-row-subj").toggle(isLeker);
stepDiv.find("#wiktku-posparams-row-subjtr").toggle(isLeker && needsTr);
// Row visibility just changed, so the "N zevî" half of the
// advanced toggle's badge is stale — recount.
var syncAdvCount = stepDiv.data("syncAdvCount");
if (typeof syncAdvCount === "function") syncAdvCount();
if (!$.trim(stepDiv.find(".wiktku-posparams-text").val())) {
steps.posparams.rebuildTa(stepDiv);
}
},
output: function () { return ""; } // pos.output reads the textarea directly
},
dfn: {
id: "dfn",
name: "Mane",
// Field types that live behind "Malûmatên pêşketî". Kept as one
// list so the collapse CSS, the count badge and the allGroups
// adv: flags below can't drift apart.
ADV_SUBGROUPS: [
"wiktku-dfn-etiket",
"wiktku-dfn-kategori",
"wiktku-dfn-alternativ",
"wiktku-dfn-koordine",
"wiktku-dfn-jornav",
"wiktku-dfn-jernav"
],
question_fmt: function (values) {
var base = "Maneya kelîmeyê binivîse. Mane otomatîk tê lînkkirin!";
if (values.lang === "ku") {
return base + " Ji bo tercimeyan beşa 'Werger' bi kar bîne!";
}
return base;
},
multiple: true,
ordered: true,
rows: 3,
visible: function (values) {
return values.lang && values.pos;
},
example: function (values) {
// posExamples loaded from [[MediaWiki:Gadget-start.js/data.json]].
var examples = steps.dfn.posExamples || {};
var full = values.pos || "";
return examples[full] || "";
},
// Builds one sense block (<li>): mane textarea, nimûne list, and
// sub-lists for alternatîv/hevmane/dijmane/etc.
buildSenseBlock: function (stepDiv) {
var block = $("<li class='wiktku-dfn-sense'></li>");
// — Mane textarea (declared first so the template handler can reference it) —
var dfnArea = $("<textarea></textarea>")
.attr("name", "wiktku-dfn-mane-" + $.now() + "-" + Math.random().toString(36).substr(2, 9))
.attr("class", "wiktku-start-step-field wiktku-dfn-mane")
.attr("rows", 6)
.attr("placeholder", "Mane…");
dfnArea.on("input", function () {
steps.dfn.onDfnInput(stepDiv, block, this);
});
// — Tercime + Îzah boxes (non-ku alternative to the plain mane box) —
// Non-ku entries get a direct translation plus a {{îzah|…}}-wrapped
// gloss instead of a Kurdish-style gloss. Rather than teach every
// consumer (getSenses/getOutput/linkify) a second data shape, these
// boxes just write their combined text into dfnArea and re-fire its
// "input" event, so dfnArea stays the single source of truth.
var tercimeArea = $("<textarea></textarea>")
.attr("name", "wiktku-dfn-tercime-" + $.now() + "-" + Math.random().toString(36).substr(2, 9))
.attr("class", "wiktku-dfn-subfield wiktku-dfn-tercime")
.attr("rows", 2)
.attr("placeholder", "Tercimeyên rasterast ên kurmancî… Ji bo school-a îngilîzî li vir 'mekteb, medrese' binivîse");
var izahArea = $("<textarea></textarea>")
.attr("name", "wiktku-dfn-izah-" + $.now() + "-" + Math.random().toString(36).substr(2, 9))
.attr("class", "wiktku-dfn-subfield wiktku-dfn-izah")
.attr("rows", 3)
.attr("placeholder", "Îzaha kurmancî… Ji bo school-a îngilîzî li vir 'cihê tehsîlgirtinê' binivîse");
var nonKuWrap = $("<div class='wiktku-dfn-nonku-wrap'></div>")
.append(tercimeArea).append(izahArea)
.hide();
function syncNonKuToMane() {
var t = $.trim(tercimeArea.val());
var iz = $.trim(izahArea.val());
// if tercime is blank, use îzah as definition
var combined = t ? (iz ? t + " {{îzah|" + iz + "}}" : t) : iz;
dfnArea.val(combined);
// Re-fires onDfnInput so the sense list still grows and
// refresh() still runs, exactly as if this were typed
// directly into the mane textarea.
dfnArea.trigger("input");
}
tercimeArea.on("input", syncNonKuToMane);
izahArea.on("input", syncNonKuToMane);
// Switches between the plain mane box and the tercime+îzah pair —
// only for non-ku entries with no tplSelect selected.
function updateManeMode() {
var lang = getValues().lang || "";
var isTpl = !!tplSelect.val();
if (lang && lang !== "ku" && !isTpl) {
dfnArea.hide();
nonKuWrap.show();
} else {
nonKuWrap.hide();
if (!isTpl) dfnArea.show();
}
}
// Store on the block so refresh() can re-sync every block when
// lang changes, and restoreDfn() can re-sync after restoring.
block.data("updateManeMode", updateManeMode);
// — Template selector (optional — replaces mane when chosen) —
// Template definitions loaded from [[MediaWiki:Gadget-start.js/data.json]].
var tplDefs = steps.dfn.tplDefs || {};
// Cache of all non-placeholder option elements, so updateTplOptions
// can detach/re-attach them without losing the full list.
var _allTplOptions = [];
var tplSelect = $(mw.html.element("select", { "class": "wiktku-dfn-tpl-select" }));
tplSelect.attr("data-placeholder", "Li şablonekê bigere");
tplSelect.append($("<option value=''>— yan jî şablonek hilbijêre —</option>"));
$.each(tplDefs, function (name, tpl) {
// Rewiye tine, 14 Tebax 2026: "guharto? kevnbûyî? ku-Latn?
// şaşnivîs? famkirina van zehmet e" — these 13 names had
// zero explanation in the dropdown (unlike steps.pron's
// template picker, which already shows "name — tpl.desc").
// Mirrors that same pattern here: if tpl.desc is ever
// added to a tplDefs entry in data.json, it'll show up
// automatically. It's optional per-entry, not required,
// since data.json doesn't have desc text for these yet —
// writing accurate one-line explanations for each needs
// someone who actually knows what each template does.
var opt = $("<option></option>")
.val(name)
.text(tpl.desc ? name + " — " + tpl.desc : name)
.attr("data-langs", tpl.langs ? tpl.langs.join(",") : "")
.attr("data-nolang", tpl.noLang ? "1" : "");
tplSelect.append(opt);
_allTplOptions.push(opt[0]);
});
// v3: the same status-dot / 🔗 / ⓘ row treatment as every
// other template picker. This one carries the bare name in
// value=, so the name mapper is the identity rather than a
// snippet parse. It also answers Rewiye tine's "famkirina
// van zehmet e" about these thirteen names properly — the
// explanation now comes from each template's own
// TemplateData instead of waiting for someone to hand-write
// thirteen desc strings into data.json.
markTemplateOptions(tplSelect, function (opt) { return opt.val(); });
function updateTplOptions() {
var lang = getValues().lang || "";
var currentVal = tplSelect.val();
var currentStillValid = false;
// Detach all non-placeholder options, then re-attach only the visible
// ones — native <select> won't reliably hide options any other way.
tplSelect.find("option[value!='']").detach();
$.each(_allTplOptions, function (_, opt) {
var allowed = $(opt).attr("data-langs");
var visible = !allowed || allowed.split(",").indexOf(lang) !== -1;
if (visible) {
tplSelect.append(opt);
if ($(opt).val() === currentVal) currentStillValid = true;
}
});
tplSelect.trigger("wiktku:refresh");
if (currentVal && !currentStillValid) {
tplSelect.val("");
tplTitleInput.hide().val("");
updateManeMode();
}
}
// Store updater on the element so refresh() can call it for all blocks.
tplSelect.data("updateOptions", updateTplOptions);
var tplTitleInput = $("<input type='text'>")
.addClass("wiktku-dfn-tpl-title wiktku-start-narrow")
.attr("placeholder", "Navê rûpela hedefê…")
.hide();
// Grow the sense list when the title field of the last block gets content,
// mirroring what onDfnInput does for the plain mane textarea.
tplTitleInput.on("input", function () {
steps.dfn.onDfnInput(stepDiv, block, this);
});
// Şablon senses have no plain gloss, so hide alternatîv/hevmane/
// dijmane/etc. Etîket, Nimûne and Jêgirtin stay visible either way.
function updateFieldVisibility() {
var isTpl = !!tplSelect.val();
$.each(HIDDEN_ON_TPL_GROUPS, function (_, cls) {
block.find("." + cls + "-group").toggle(!isTpl);
});
}
// Store on the block so restoreDfn() can re-sync visibility
// after setting tplSelect's value.
block.data("updateFieldVisibility", updateFieldVisibility);
tplSelect.on("change", function () {
var chosen = $(this).val();
if (chosen) {
dfnArea.hide();
nonKuWrap.hide();
tplTitleInput.show().focus();
} else {
tplTitleInput.hide().val("");
updateManeMode();
}
updateFieldVisibility();
// Re-run refresh so the Werger step visibility updates.
refresh();
});
// The template picker is an alternative to writing a
// definition, not a step before it — so the box comes first
// and this sits under it as a quiet link. It only expands
// for the minority of senses that are a pointer at another
// word (guharto, şaşnivîs, kevnbûyî) rather than a meaning.
var tplRow = $("<div></div>").addClass("wiktku-dfn-tpl-row")
.append(tplSelect).append(" ").append(tplTitleInput)
.hide();
var tplLink = $("<a href='#' class='wiktku-dfn-tpl-link'></a>")
.text("Ev ne pênase ye — şablonek bi kar bîne");
tplLink.on("click", function (e) {
e.preventDefault();
tplRow.show();
$(this).hide();
tplRow.find("input.wiktku-ac-input").first().focus();
});
/** Opens the picker without a click — used on restore, when a
* sense already has a template and hiding it would make the
* chosen value invisible. */
function revealTplRow() { tplRow.show(); tplLink.hide(); }
block.data("revealTplRow", revealTplRow);
block.append(dfnArea);
block.append(nonKuWrap);
block.append(tplLink);
block.append(tplRow);
// Apply lang filter on initial build.
updateTplOptions();
updateManeMode();
// — Sub-field groups. —
// Ghybu, 14 Tebax 2026: "Bi min beşên 'Hevmane' û dijmane jî
// bike de nav beşa Mane ji ber ku pirr tên xwestin" — and,
// separately, that showing all nine at once is what makes this
// form read as long and tevlihev. So the four people actually
// reach for (Nimûne, Jêgirtin, Hevmane, Dijmane) stay open, in
// that order, and the other five sit behind the "Malûmatên
// pêşketî" toggle (adv: true → .wiktku-dfn-subgroup-adv, which
// is what the collapse CSS keys off now).
// Jêgirtin isn't in this array — it's a compound widget built
// after the loop — but it's inserted right after Nimûne so the
// visible order matches the list above.
var allGroups = [
{ cls: "wiktku-dfn-nimune", label: "Nimûne", rows: 2, narrow: false },
{ cls: "wiktku-dfn-hevmane", label: "Hevmane", rows: 1, narrow: true, izah: "Spehî hevmaneya Bedew e." },
{ cls: "wiktku-dfn-dijmane", label: "Dijmane", rows: 1, narrow: true, izah: "Zengîn dijmaneya feqîr e." },
{ cls: "wiktku-dfn-etiket", label: "Etîket", rows: 1, narrow: true, izah: "xisûsen, Mêrdîn, anatomî, Badînî", noLangSuffix: true, adv: true },
{ cls: "wiktku-dfn-kategori", label: "Kategorî", rows: 1, narrow: true, izah: "wekî etîket lê xuya nabe tenê kategorîze dike", noLangSuffix: true, adv: true },
{ cls: "wiktku-dfn-alternativ", label: "Formên alternatîv", rows: 1, narrow: true, izah: "Varyantên vê kelîmeyê", adv: true },
{ cls: "wiktku-dfn-koordine", label: "Termên koordîne", rows: 1, narrow: true, izah: "Pisîk û kûçik termên koordîne ne çunkî Jornavên wan gelek in", adv: true },
{ cls: "wiktku-dfn-jornav", label: "Jornav", rows: 1, narrow: true, izah: "Heywan jornavê guhandar e", adv: true },
{ cls: "wiktku-dfn-jernav", label: "Jêrnav", rows: 1, narrow: true, izah: "Guhandar jêrnavê heywan e", adv: true }
];
$.each(allGroups, function (_, g) {
var groupDiv = $("<div></div>").addClass("wiktku-dfn-subgroup " + g.cls + "-group");
if (g.adv) groupDiv.addClass("wiktku-dfn-subgroup-adv");
function buildNimuneLi() {
var lang = getValues().lang || "";
var li = $("<li></li>").addClass("wiktku-dfn-nimune-li");
var mainTa = $("<textarea></textarea>")
.attr("name", "wiktku-dfn-nimune-text-" + $.now() + "-" + Math.random().toString(36).substr(2, 9))
.attr("rows", g.rows)
.attr("class", "wiktku-dfn-subfield wiktku-dfn-nimune-text")
.attr("placeholder", "Nimûneya emilandina kelîmeyê tu bi xwe binivîse…");
mainTa.on("input", function () {
highlightLinebreak(this);
var val = $.trim($(this).val());
var isLast = li.is(list.children("li:last-child"));
if (val && isLast) {
list.append(buildNimuneLi());
}
});
li.append(mainTa);
var subWrap = $("<div></div>").addClass("wiktku-dfn-nimune-sub");
if (needsTransliteration(lang)) {
subWrap.append(
$("<textarea></textarea>")
.attr("name", "wiktku-dfn-nimune-tr-" + $.now() + "-" + Math.random().toString(36).substr(2, 9))
.attr("rows", 5)
.attr("class", "wiktku-dfn-subfield wiktku-dfn-nimune-tr")
.attr("placeholder", "Transliterasyona bi alfabeya latînî")
);
}
if (lang && lang !== "ku") {
subWrap.append(
$("<textarea></textarea>")
.attr("name", "wiktku-dfn-nimune-t-" + $.now() + "-" + Math.random().toString(36).substr(2, 9))
.attr("rows", 5)
.attr("class", "wiktku-dfn-subfield wiktku-dfn-nimune-t")
.attr("placeholder", "Tercimeya nimûneyê bi kurmancî")
);
}
if (subWrap.children().length) li.append(subWrap);
return li;
}
// The placeholder names the current language, but that's
// often not chosen yet when this block is first built —
// so keep a function around that refresh() (and onSubInput,
// for newly-grown fields) can call again once lang is set
// or changes.
function subPlaceholder() {
if (g.noLangSuffix) return g.label + "…";
var lang = getValues().lang || "";
var langLabel = lang ? getLangLabel(lang) : "";
return g.label + (langLabel ? " bi " + langLabel : "") + "…";
}
function updateSubPlaceholders() {
list.find("> li > textarea.wiktku-dfn-subfield").attr("placeholder", subPlaceholder());
}
if (g.cls === "wiktku-dfn-nimune") {
// Nimûne — compound widget with tr/t sub-fields.
var lbl = $("<span></span>").addClass("wiktku-dfn-sublabel")
.append($("<span></span>").addClass("wiktku-dfn-sublabel-term").text(g.label))
.append(": ");
var list = $("<ol></ol>").addClass("wiktku-dfn-sublist " + g.cls + "-list");
groupDiv.data("buildNimuneLi", buildNimuneLi);
list.append(buildNimuneLi());
groupDiv.append(lbl).append(list);
block.append(groupDiv);
} else {
// Regular always-visible group — label + growing textarea list.
var lbl = $("<span></span>").addClass("wiktku-dfn-sublabel")
.append($("<span></span>").addClass("wiktku-dfn-sublabel-term").text(g.label))
.append(": ")
.append($("<span></span>").addClass("wiktku-dfn-sublabel-hint").text(g.izah));
var list = $("<ol></ol>").addClass("wiktku-dfn-sublist " + g.cls + "-list");
var useModifiers = !!MODIFIER_SUBGROUPS[g.cls];
list.data("updatePlaceholders", updateSubPlaceholders);
var firstInput = $("<textarea></textarea>")
.attr("name", g.cls + "-" + $.now() + "-" + Math.random().toString(36).substr(2, 9))
.attr("rows", g.rows)
.attr("class", "wiktku-dfn-subfield" + (g.narrow ? " wiktku-start-narrow" : ""))
.attr("placeholder", subPlaceholder());
firstInput.on("input", function () {
steps.dfn.onSubInput(list, this, g.rows, g.narrow, useModifiers);
});
list.append(useModifiers ? makeModifierLi(firstInput) : $("<li></li>").append(firstInput));
groupDiv.append(lbl).append(list);
block.append(groupDiv);
}
});
// — Jêder group — growing list, same structure as Nimûne. —
(function () {
var jederGroupDiv = $("<div></div>").addClass("wiktku-dfn-subgroup wiktku-dfn-jeder-group");
var jederLbl = $("<span></span>").addClass("wiktku-dfn-sublabel")
.append($("<span></span>").addClass("wiktku-dfn-sublabel-term").text("Jêgirtin"))
.append(": ");
var jederList = $("<ol></ol>").addClass("wiktku-dfn-sublist wiktku-dfn-jeder-list");
function buildJederLi() {
var lang = getValues().lang || "";
var li = $("<li></li>").addClass("wiktku-dfn-jeder-li");
// Quote text textarea
var quoteTa = $("<textarea></textarea>")
.attr("name", "wiktku-dfn-nimune-quote-" + $.now() + "-" + Math.random().toString(36).substr(2, 9))
.attr("rows", 2)
.attr("class", "wiktku-dfn-subfield wiktku-dfn-nimune-quote")
.attr("placeholder", "Nimûneya emilandinê ji kitêb an çavkaniyeke din binivîse");
quoteTa.on("input", function () {
highlightLinebreak(this);
var val = $.trim($(this).val());
var isLast = li.is(jederList.children("li:last-child"));
if (val && isLast) {
jederList.append(buildJederLi());
}
});
li.append(quoteTa);
// tr/t sub-fields for the quote — shown as needed for the language.
var quoteSubWrap = $("<div></div>").addClass("wiktku-dfn-quote-sub");
if (needsTransliteration(lang)) {
quoteSubWrap.append(
$("<textarea></textarea>")
.attr("name", "wiktku-dfn-nimune-quote-tr-" + $.now() + "-" + Math.random().toString(36).substr(2, 9))
.attr("rows", 2)
.attr("class", "wiktku-dfn-subfield wiktku-dfn-nimune-quote-tr")
.attr("placeholder", "Transliterasyona jêgirtinê…")
);
}
if (lang && lang !== "ku") {
quoteSubWrap.append(
$("<textarea></textarea>")
.attr("name", "wiktku-dfn-nimune-quote-t-" + $.now() + "-" + Math.random().toString(36).substr(2, 9))
.attr("rows", 2)
.attr("class", "wiktku-dfn-subfield wiktku-dfn-nimune-quote-t")
.attr("placeholder", "Tercimeya jêgirtinê bi kurmancî")
);
}
if (quoteSubWrap.children().length) li.append(quoteSubWrap);
// Citoid auto-fill: fetch citation data from a URL, DOI or ISBN and
// prefill the source şablon + fields below (see Gadget-citoid-helper.js).
var citoidWrap = $("<div></div>").addClass("wiktku-dfn-quote-citoid");
var citoidInput = $("<textarea></textarea>")
.addClass("wiktku-dfn-subfield wiktku-dfn-quote-citoid-input")
.attr("rows", 1)
.attr("placeholder", "URL, DOI an ISBN binivîse ku otomatîk were tijekirin…");
var citoidBtn = new OO.ui.ButtonWidget({
label: "Bi otomatîk tijî bike",
classes: [ "wiktku-dfn-quote-citoid-btn" ]
});
var citoidStatus = $("<span></span>").addClass("wiktku-dfn-quote-citoid-status");
// Fetches citation data from Citoid and fills this citation's
// şablon + fields — only rebuilds fields on template change,
// and never overwrites values the user already typed.
function runCitoidFetch() {
var query = $.trim(citoidInput.val());
if (!query) {
mw.notify("Ji kerema xwe re pêşî URL, DOI an ISBNyekê binivîse.");
return;
}
citoidBtn.setDisabled(true);
citoidStatus.text("Tê anîn…");
wikt.citoid.fetchJederFields(query).then(function (result) {
var jederKey = result.jederKey;
var hasTpl = !!jederKey && srcSel.find("option[value='" + jederKey + "']").length > 0;
var targetVal = hasTpl ? jederKey : "__manual__";
// Only rebuild if switching şablon, so a repeat fetch
// doesn't clear fields already filled in by hand.
if (srcSel.val() !== targetVal) {
srcSel.val(targetVal).trigger("change");
}
if (hasTpl) {
// Tenê qadên vala tijî bike.
$.each(result.fields, function (key, val) {
var input = srcFields.find("[data-field-key='" + key + "']");
if (input.length && !$.trim(input.val())) {
input.val(val);
}
});
} else {
// Şablonek nehat naskirin ji bo vê itemType — rêzikeke
// çavkaniyê ya bi destan a ji qadên Citoid tê çêkirin,
// lê tenê ger qada destan vala be.
var manualField = srcFields.find(".wiktku-dfn-quote-src-manual");
if (!$.trim(manualField.val())) {
var parts = [];
$.each(["nivîskar", "sernav", "websîte", "kovar", "weşanxane", "sal", "url"], function (_, k) {
if (result.fields[k]) parts.push(result.fields[k]);
});
manualField.val(parts.join(", "));
}
}
citoidStatus.text("");
}, function (errorMsg) {
citoidStatus.text(typeof errorMsg === "string" ? errorMsg : "Nehat dîtin. Kontrol bike ka URL/DOI/ISBN rast e.");
}).always(function () {
citoidBtn.setDisabled(false);
});
}
citoidBtn.on("click", runCitoidFetch);
citoidInput.on("keydown", function (e) {
if (e.which === 13) { // Enter
e.preventDefault();
runCitoidFetch();
}
});
citoidWrap.append(citoidInput).append(citoidBtn.$element).append(citoidStatus);
// Source template selector, specific to this citation.
var srcSel = $("<select></select>").addClass("wiktku-dfn-quote-src-sel wiktku-plain-select");
srcSel.append($("<option value=''>— Çavkaniyê hilbijêre —</option>"));
srcSel.append($("<option></option>").val("__manual__").text("Bi destê xwe binivîsim"));
srcSel.append($("<option></option>").val("__category__").text("Ji Kategorî:Çavkanî şablonekê hilbijêre"));
var jederDefs = steps.dfn.jederDefs || {};
$.each(jederDefs, function (tplName, def) {
srcSel.append($("<option></option>").val(tplName).text(def.label));
});
// Dynamic source fields container.
var srcFields = $("<div></div>").addClass("wiktku-dfn-quote-src-fields");
srcSel.on("change", function () {
srcFields.empty();
var chosen = $(this).val();
// Citoid is only useful before a source is chosen —
// hide it once a selection is made, restore on reset.
if (chosen) {
citoidWrap.hide();
} else {
citoidWrap.show();
return;
}
if (chosen === "__manual__") {
// Freeform source, written by the user — becomes the 2nd
// positional param of {{jêder|lang|…}} instead of çavkanî?.
srcFields.append(
$("<textarea></textarea>")
.attr("rows", 4)
.addClass("wiktku-dfn-subfield wiktku-dfn-quote-src-manual")
.attr("placeholder", "Çavkaniyê bi destê xwe binivîse…")
);
return;
}
if (chosen === "__category__") {
// Search widget over the members of [[Kategorî:Çavkanî]].
// Picking a şablon here immediately switches the row to
// "Bi destê xwe binivîsim" mode with {{Şablon}} pre-filled,
var catWrap = $("<span></span>").addClass("wiktku-native-select-wrap wiktku-dfn-quote-src-cat");
var catInput = $("<input type='search' autocomplete='off'>")
.addClass("wiktku-start-narrow wiktku-dfn-quote-src-cat-input")
.attr("placeholder", "Li navê şablonê bigere…");
var catResults = $("<ul></ul>").addClass("wiktku-ac-results wiktku-dfn-quote-src-cat-results").hide();
var catStatus = $("<span></span>").addClass("wiktku-dfn-quote-src-cat-status").text("Şablon tên barkirin…");
var showCatResults = function (query) {
var q = $.trim(query).toLowerCase();
catResults.empty();
var list = catSrcTemplates || [];
var matched = q ?
$.grep(list, function (name) { return name.toLowerCase().indexOf(q) !== -1; }) :
list;
if (!matched.length) {
catResults.hide();
return;
}
$.each(matched.slice(0, 50), function (_, name) {
var li = $("<li></li>").text(name).attr("data-value", name);
var touchMoved = false;
li.on("touchstart", function () { touchMoved = false; });
li.on("touchmove", function () { touchMoved = true; });
li.on("touchend", function (e) {
if (touchMoved) return;
e.preventDefault();
selectCatTpl(name);
});
li.on("mousedown", function (e) {
e.preventDefault();
selectCatTpl(name);
});
catResults.append(li);
});
catResults.show();
};
// Wraps the chosen şablon as {{Name}}, drops it into the
// manual textarea, and switches the row into manual mode
// so the user can keep editing it (add params, etc.).
var selectCatTpl = function (name) {
catResults.hide();
srcSel.val("__manual__");
srcSel.trigger("change");
srcFields.find(".wiktku-dfn-quote-src-manual")
.val("{{" + name + "}}")
.trigger("focus");
};
catInput.on("input", function () {
showCatResults($(this).val());
});
catInput.on("focus", function () {
showCatResults($(this).val());
});
catInput.on("blur", function () {
setTimeout(function () { catResults.hide(); }, 200);
});
catWrap.append(catInput).append(catResults).append(catStatus);
srcFields.append(catWrap);
fetchCatSrcTemplates().then(function () {
catStatus.text("");
}, function () {
catStatus.text("Şablon nehatin barkirin.");
});
return;
}
var def = (steps.dfn.jederDefs || {})[chosen];
if (!def) return;
$.each(def.fields, function (key, label) {
var row = $("<div></div>").addClass("wiktku-dfn-quote-src-row");
var fieldLbl = $("<label></label>").text(label + ": ");
var inp = $("<textarea></textarea>")
.attr("rows", 2)
.addClass("wiktku-dfn-quote-src-input wiktku-start-narrow")
.attr("data-field-key", key)
.attr("placeholder", label + "…");
// "Sernav" / "Sernavê orjînal" (title fields, e.g. for
// kitêb/kovar/malper) get a taller, draggable box; every
// other field in the template stays as-is. Field labels
// come from the on-wiki jederDefs data, so match on the
// (diacritic-folded) label text rather than a fixed key.
var foldedLabel = foldDiacritics(label);
if (/^sernav$/.test(foldedLabel) || /orjin/.test(foldedLabel)) {
inp.addClass("wiktku-dfn-quote-src-input--title");
}
row.append(fieldLbl).append(inp);
srcFields.append(row);
});
});
li.append(citoidWrap).append(srcSel).append(srcFields);
return li;
}
jederGroupDiv.data("buildJederLi", buildJederLi);
jederList.append(buildJederLi());
jederGroupDiv.append(jederLbl).append(jederList);
// Straight after Nimûne rather than last: Jêgirtin is the
// same kind of thing (an attested use of the word) and the
// two belong together — see the allGroups comment above.
var nimuneGroup = block.find(".wiktku-dfn-nimune-group");
if (nimuneGroup.length) jederGroupDiv.insertAfter(nimuneGroup);
else block.append(jederGroupDiv);
}());
// Apply the initial hide/show state for the sub-groups (matches
// tplSelect's starting value, which is normally empty).
updateFieldVisibility();
// ── "Malûmatên pêşketî" — per sense, after Dijmane ───────
// One toggle per sense rather than one for the whole step:
// the fields behind it (Etîket, Kategorî, Jornav…) belong to
// a single meaning, so a global switch flipped them for every
// sense at once and gave a count that answered "across all
// senses" — not a question anybody was asking.
(function () {
block.addClass("wiktku-sense-adv-hidden");
var advRow = $("<div class='wiktku-adv-toggle-row wiktku-sense-adv-row'></div>");
var advToggle = $("<a href='#' class='wiktku-adv-toggle'></a>").attr("aria-expanded", "false");
var advLabel = $("<span class='wiktku-adv-toggle-text'></span>");
advToggle.append($("<span class='wiktku-adv-toggle-chevron'>▾</span>")).append(advLabel);
var advCount = $("<span class='wiktku-adv-toggle-count'></span>");
function syncAdv() {
var hidden = block.hasClass("wiktku-sense-adv-hidden");
advLabel.text(hidden ? "Malûmatên pêşketî nîşan bide" : "Malûmatên pêşketî veşêre");
advToggle.attr("aria-expanded", hidden ? "false" : "true")
.toggleClass("wiktku-adv-open", !hidden);
var total = 0, filled = 0;
$.each(steps.dfn.ADV_SUBGROUPS, function (_, cls) {
total++;
var any = false;
block.find("." + cls + "-group textarea").each(function () {
if ($.trim($(this).val())) { any = true; return false; }
});
if (any) filled++;
});
advCount.text(total + " zevî · " + filled + " tije");
}
advToggle.on("click", function (e) {
e.preventDefault();
block.toggleClass("wiktku-sense-adv-hidden");
syncAdv();
});
block.on("input", "textarea", syncAdv);
block.data("syncSenseAdv", syncAdv);
advRow.append(advToggle).append(advCount);
// After the last always-visible group (Dijmane) and before
// the advanced ones, which sit below it in DOM order.
var lastPrimary = block.find(".wiktku-dfn-dijmane-group");
if (lastPrimary.length) advRow.insertAfter(lastPrimary);
else block.append(advRow);
syncAdv();
}());
// ── Accordion wrapper (v3 spec) ──────────────────────────
// Everything built above becomes the collapsible body, and a
// header row goes in front of it. Done here, at the end,
// rather than by threading a container through the ~500 lines
// of field-building above — every one of those appends to
// `block`, and getSenses/restoreDfn reach fields with .find(),
// which doesn't care how deep they sit.
var body = $("<div class='wiktku-dfn-sense-body'></div>").append(block.children());
var header = $("<div class='wiktku-dfn-sense-header'></div>");
header
.append($("<span class='wiktku-dfn-sense-num'></span>"))
.append($("<span class='wiktku-dfn-sense-title'></span>"))
.append($("<span class='wiktku-dfn-sense-summary'></span>"))
.append($("<span class='wiktku-dfn-sense-chevron'>▾</span>"));
header.on("click", function () {
// Collapsed → open it (and close whichever was open).
// Open → collapse it, unless it's the only one.
if (block.hasClass("wiktku-sense-collapsed")) steps.dfn.setOpenSense(stepDiv, block);
else block.addClass("wiktku-sense-collapsed");
steps.dfn.syncSenseHeaders(stepDiv);
});
block.append(header).append(body);
// Typing (or clicking) anywhere in a sense makes it the open
// one — "tenê maneya ku tê nivîsandin vekirî ye".
body.on("focusin", function () {
if (!block.hasClass("wiktku-sense-collapsed")) {
steps.dfn.setOpenSense(stepDiv, block);
}
});
return block;
},
/** True if a sense block has anything worth summarising. */
senseBlockHasContent: function (block) {
var found = false;
block.find("textarea, input[type='text']").each(function () {
if ($.trim($(this).val() || "")) { found = true; return false; }
});
if (found) return true;
return !!block.find(".wiktku-dfn-tpl-select").val();
},
/** Opens `block` and collapses every other sense that has content.
* A sense with nothing in it is never collapsed — the trailing
* empty one is how you add the next meaning, so hiding it would
* hide the only way forward. */
setOpenSense: function (stepDiv, block) {
stepDiv.find("li.wiktku-dfn-sense").each(function () {
var li = $(this);
var collapse = !li.is(block) && steps.dfn.senseBlockHasContent(li);
li.toggleClass("wiktku-sense-collapsed", collapse);
});
steps.dfn.syncSenseHeaders(stepDiv);
},
/** Renumbers the sense badges and refreshes each collapsed row's
* one-line summary. Cheap enough to just re-run on any change. */
syncSenseHeaders: function (stepDiv) {
stepDiv.find("li.wiktku-dfn-sense").each(function (i) {
var li = $(this);
li.find("> .wiktku-dfn-sense-header .wiktku-dfn-sense-num").text(i + 1);
li.find("> .wiktku-dfn-sense-header .wiktku-dfn-sense-title").text("Mane " + (i + 1));
var summary = $.trim(li.find("textarea.wiktku-dfn-mane").first().val() || "");
if (!summary) {
// A template sense has no prose — show the call itself.
var tpl = li.find(".wiktku-dfn-tpl-select").val();
var title = $.trim(li.find(".wiktku-dfn-tpl-title").val() || "");
if (tpl) summary = "{{" + tpl + (title ? "|" + title : "") + "}}";
}
summary = summary.split("\n")[0];
if (summary.length > 70) summary = summary.slice(0, 70) + "…";
li.find("> .wiktku-dfn-sense-header .wiktku-dfn-sense-summary").text(summary);
});
},
/** Keeps the header summary in step with what is being typed.
* No longer grows the list: a second sense appears only when
* "+ Mane zêde bike" is clicked. Auto-growing meant every entry
* with one meaning still showed an empty second one, which reads
* as an unfinished form. */
onDfnInput: function (stepDiv, block, textarea) {
steps.dfn.syncSenseHeaders(stepDiv);
refresh();
},
/** Appends a sense, opens it, and collapses the others. */
addSense: function (stepDiv) {
var list = stepDiv.find("ol.wiktku-dfn-list");
var newBlock = steps.dfn.buildSenseBlock(stepDiv);
list.append(newBlock);
initSelects(newBlock);
steps.dfn.setOpenSense(stepDiv, newBlock);
newBlock.find("textarea.wiktku-dfn-mane").first().focus();
refresh();
return newBlock;
},
/** Grows a sub-list (nimûne/formên alternatîv/hevmane/dijmane/termên koordîne) on input. */
onSubInput: function (list, input, rows, narrow, modifiers) {
var val = $.trim($(input).val());
var item = $(input).parent();
var isLast = item.is(list.children("li:last-child"));
if (val && isLast) {
var next = $("<textarea></textarea>")
.attr("name", "wiktku-dfn-sub-" + $.now() + "-" + Math.random().toString(36).substr(2, 9))
.attr("rows", rows)
.attr("class", "wiktku-dfn-subfield" + (narrow ? " wiktku-start-narrow" : ""));
next.on("input", function () {
steps.dfn.onSubInput(list, this, rows, narrow, modifiers);
});
list.append(modifiers ? makeModifierLi(next) : $("<li></li>").append(next));
// New field starts with no placeholder — give it (and any
// others in the list) the current one.
var updatePlaceholders = list.data("updatePlaceholders");
if (typeof updatePlaceholders === "function") updatePlaceholders();
}
},
// Populated from [[MediaWiki:Gadget-start.js/data.json]] (tplDefs, posExamples, jederDefs).
tplDefs: {},
posExamples: {},
jederDefs: {},
build: function (stepDiv) {
if (stepDiv.find("ol.wiktku-dfn-list").length) return null;
// Rewiye tine, 14 Tebax 2026: "şablonên mana jî dikare serê
// yekî tevlîhev bike... famkirina van zehmet e" — the "an jî
// şablonek hilbijêre" dropdown inside each sense (guharto,
// kevnbûyî, ku-Latn, şaşnivîs, …) had no explanation at all.
// One reassurance, shown once for the whole Mane step rather
// than repeated per sense: it's optional, plain text is the
// normal path.
if (!stepDiv.find(".wiktku-dfn-tpl-hint").length) {
stepDiv.append(
$("<p class='wiktku-step-hint wiktku-dfn-tpl-hint'></p>").text(
"Ji bo her maneyekê, dropdown-a \"an jî şablonek hilbijêre\" ne mecbûrî ye — bi gelemperî tu tenê maneyê bi tîpên asayî dinivîsî. Ew şablon tenê ji bo rewşên taybet in (mînak: guherto, kevnbûyî, şaşnivîs); heke tu nizanî kîjan divê, vale bihêle."
)
);
}
var list = $("<ol class='wiktku-dfn-list'></ol>");
list.append(steps.dfn.buildSenseBlock(stepDiv));
stepDiv.append(list);
var addSenseBtn = $("<button type='button' class='wiktku-add-sense'></button>")
.append($("<span class='wiktku-add-sense-plus'>+</span>"))
.append(document.createTextNode("Mane zêde bike"));
addSenseBtn.on("click", function (e) {
e.preventDefault();
steps.dfn.addSense(stepDiv);
});
stepDiv.append(addSenseBtn);
steps.dfn.syncSenseHeaders(stepDiv);
return null;
},
/** Reads all sense blocks from the DOM and returns an array of sense objects. */
getSenses: function (stepDiv) {
var senses = [];
stepDiv.find("li.wiktku-dfn-sense").each(function () {
var block = $(this);
var tplSel = block.find("select.wiktku-dfn-tpl-select");
var tpl = tplSel.val() || "";
// noLang: template already encodes the language — don't add |lang| param.
var tplNoLang = tpl
? tplSel.find("option[value='" + tpl + "']").attr("data-nolang") === "1"
: false;
var tplTitle = $.trim(block.find("input.wiktku-dfn-tpl-title").val());
var mane = $.trim(block.find("textarea.wiktku-dfn-mane").val());
function readList(cls) {
var vals = [];
block.find("." + cls + "-list textarea").each(function () {
var v = $.trim($(this).val());
if (v) vals.push(v);
});
return vals;
}
// Nimûne items are compound: { text, tr?, t? }
function readNimuneList() {
var items = [];
block.find(".wiktku-dfn-nimune-list li.wiktku-dfn-nimune-li").each(function () {
var text = $.trim($(this).find(".wiktku-dfn-nimune-text").val());
if (!text) return;
var obj = { text: text };
var tr = $.trim($(this).find(".wiktku-dfn-nimune-tr").val());
var t = $.trim($(this).find(".wiktku-dfn-nimune-t").val());
if (tr) obj.tr = tr;
if (t) obj.t = t;
items.push(obj);
});
return items;
}
// Jêder is a growing list of citations, one per li — mirrors readNimuneList().
function readJederList() {
var items = [];
block.find(".wiktku-dfn-jeder-list li.wiktku-dfn-jeder-li").each(function () {
var li = $(this);
var quote = $.trim(li.find(".wiktku-dfn-nimune-quote").val());
if (!quote) return;
var obj = { quote: quote };
var qtr = $.trim(li.find(".wiktku-dfn-nimune-quote-tr").val());
var qt = $.trim(li.find(".wiktku-dfn-nimune-quote-t").val());
if (qtr) obj.quoteTr = qtr;
if (qt) obj.quoteT = qt;
var tplName = li.find(".wiktku-dfn-quote-src-sel").val();
if (tplName === "__manual__") {
var manual = $.trim(li.find(".wiktku-dfn-quote-src-manual").val());
if (manual) obj.jederManual = manual;
} else if (tplName === "__category__") {
// Reachable only if the user opened the category search but
// never picked a şablon — picking one switches the row to
// __manual__ (see selectCatTpl above), so there's nothing
// meaningful to save here.
} else if (tplName) {
obj.jederTpl = tplName;
var fields = {};
li.find(".wiktku-dfn-quote-src-input").each(function () {
var k = $(this).attr("data-field-key");
var v = $.trim($(this).val());
if (k && v) fields[k] = v;
});
obj.jêderFields = fields;
}
items.push(obj);
});
return items;
}
senses.push({
tpl: tpl,
tplNoLang: tplNoLang,
tplTitle: tplTitle,
mane: mane,
etiket: readList("wiktku-dfn-etiket"),
kategori: readList("wiktku-dfn-kategori"),
nimune: readNimuneList(),
jeder: readJederList(),
alternativ: readList("wiktku-dfn-alternativ"),
hevmane: readList("wiktku-dfn-hevmane"),
dijmane: readList("wiktku-dfn-dijmane"),
koordine: readList("wiktku-dfn-koordine"),
jornav: readList("wiktku-dfn-jornav"),
jernav: readList("wiktku-dfn-jernav")
});
});
return senses;
},
getOutput: function (values, callback) {
var stepDiv = $("#wiktku-start-dfn");
var senses = steps.dfn.getSenses(stepDiv);
var lang = values.lang;
// A sense counts as "filled" if it has a mane, a chosen template + title,
// or any other content (etîket/hevmane/nimûne/jêder…) worth keeping.
var hasMane = senses.some(function (s) {
return s.mane !== "" || (s.tpl && s.tplTitle) || senseHasExtraContent(s);
});
var defLines = []; // one entry per kept sense (goes to linkify)
var citeLines = []; // parallel — nimûne+jêder for that same sense
var izahLines = []; // parallel — raw îzah gloss for that same sense
// True only once some sense's *actual* dfn text (post tercime/îzah
// split) is non-empty.
var hasLinkableMane = false;
$.each(senses, function (_, sense) {
// — Template sense (e.g. {{guharto|ku|somepage}}) —
if (sense.tpl) {
if (!sense.tplTitle) return; // skip empty template senses
var tplKatTpl = buildSenseTpl(sense, "kategori", lang, "K");
var tplLabelTpl = buildSenseTpl(sense, "etiket", lang, "e");
var tplCall = sense.tplNoLang
? "{{" + sense.tpl + "|" + sense.tplTitle + "}}"
: "{{" + sense.tpl + "|" + lang + "|" + sense.tplTitle + "}}";
var idx = defLines.length;
var cite = buildCite(sense, lang);
defLines.push("# " + (tplKatTpl ? tplKatTpl + " " : "") + (tplLabelTpl ? tplLabelTpl + " " : "") + tplCall +
(cite ? "{{wiktku-cite-" + idx + "}}" : ""));
citeLines.push(cite);
izahLines.push(""); // template senses have no îzah
return;
}
// — Normal mane sense —
var dfn = sense.mane;
if (!dfn && !senseHasExtraContent(sense)) return; // truly empty
// Pull the îzah gloss (if any) out of the combined tercime+îzah
// string — it's spliced back in separately below, after its
// own linkify pass (see izahLines / the second linkifyText call).
var izahRaw = null;
var tercimeIzah = splitTercimeIzah(dfn);
if (tercimeIzah) {
dfn = tercimeIzah.tercime;
izahRaw = stripWikilinks(tercimeIzah.izah);
}
if (dfn) {
dfn = stripWikilinks(dfn);
// Sentence-case + trailing period are for ku definitions,
// which are written as full glosses.
if (lang === "ku") {
if (dfn[0] !== dfn[0].toUpperCase()) dfn = capitalize(dfn);
if (!dfn.match(/[.…?!)\]]$/)) dfn += ".";
}
// Real prose — this is what makes the sense worth running
// through the main linkify pass.
hasLinkableMane = true;
} else if (izahRaw === null) {
// No mane at all — this is just the "{{mane?|lang}}"
// placeholder, a bare template call with no plain words
// in it. Do NOT count it as linkable: sending nothing but
// bracketed templates through the main linkify pass hangs
// the linkify gadget (see the hasLinkableMane/hasIzah
// check below).
dfn = lang === "ku" ? "{{mane?|" + lang + "}}" : "";
}
var katTpl = buildSenseTpl(sense, "kategori", lang, "K");
var labelTpl = buildSenseTpl(sense, "etiket", lang, "e");
var out = "# " + (katTpl ? katTpl + " " : "") + (labelTpl ? labelTpl + " " : "") + dfn;
var idx = defLines.length;
var hasThisIzah = izahRaw !== null && $.trim(izahRaw) !== "";
// Bare {{...}} token — like {{wiktku-cite-N}}, this survives
// linkify's first pass untouched (it treats template calls as
// opaque), then gets swapped for {{îzah|…}} once the actual
// gloss text has been linkified in its own separate pass.
if (hasThisIzah) {
out += (dfn ? " " : "") + "{{wiktku-izah-" + idx + "}}";
}
function wordLine(tpl, words) {
if (!words.length) return "";
return "\n#: {{" + tpl + "|" + lang + "|" + words.join("|") + "}}";
}
out += wordLine("alt-r", sense.alternativ);
out += wordLine("hevmane", sense.hevmane);
out += wordLine("dijmane", sense.dijmane);
out += wordLine("koordîne", sense.koordine);
out += wordLine("jornav", sense.jornav);
out += wordLine("jêrnav", sense.jernav);
var cite = buildCite(sense, lang);
defLines.push(out + (cite ? "{{wiktku-cite-" + idx + "}}" : ""));
citeLines.push(cite);
izahLines.push(hasThisIzah ? izahRaw : "");
});
// Splice citeLines back into a linkified string, replacing each
// {{wiktku-cite-N}} token with its stored nimûne/jêder block.
function restoreCites(t) {
return t.replace(/\{\{wiktku-cite-(\d+)\}\}/g, function (_, n) {
return citeLines[parseInt(n, 10)] || "";
});
}
// Runs text through the linkify gadget if it's loaded, otherwise
// just passes it through unchanged. Shared by both linkify passes
// below (main mane text, and — separately — îzah glosses).
function linkifyText(t, cb) {
if (typeof $.kuLinkify === "function") {
$.kuLinkify(t, cb);
} else {
cb(t);
}
}
var hasIzah = izahLines.some(function (t) { return t && $.trim(t) !== ""; });
var text = defLines.join("\n") + "\n";
if (!hasMane) {
// No definitions entered — emit {{mane?}} with nimûne?.
text = "# {{mane?|" + lang + "}}\n#* {{nimûne?|" + lang + "}}\n";
callback(text);
return;
}
// Runs the îzah-only linkify pass against `base` (either the raw
// text, when there's no linkable mane to run the main pass on
// first, or the already-linkified main text). Shared by both
// branches below so the token-splice logic only lives once.
function runIzahPass(base) {
var izahJoined = $.map(izahLines, function (raw, idx) {
if (!raw) return undefined;
return "{{wiktku-izah-open-" + idx + "}}" + raw + "{{wiktku-izah-close-" + idx + "}}";
}).join("\n");
linkifyText(izahJoined, function (izahLinked) {
var izahByIdx = {};
var re = /\{\{wiktku-izah-open-(\d+)\}\}([\s\S]*?)\{\{wiktku-izah-close-\1\}\}/g;
var m;
while ((m = re.exec(izahLinked)) !== null) {
izahByIdx[parseInt(m[1], 10)] = m[2];
}
var withIzah = base.replace(/\{\{wiktku-izah-(\d+)\}\}/g, function (_, n) {
var linked = izahByIdx[parseInt(n, 10)];
return linked !== undefined ? "{{îzah|" + linked + "}}" : "";
});
callback(restoreCites(withIzah));
});
}
if (!hasLinkableMane) {
if (!hasIzah) {
// All filled senses are template senses (or otherwise have
// no plain text at all) — nothing here needs linkify.
callback(restoreCites(text));
return;
}
// There's no plain mane text anywhere (e.g. tercime left blank
// with only îzah filled in), so every defLine is just a bare
// template call with nothing to word-link. Sending a line
// like "# {{wiktku-izah-0}}" through the main linkify pass
// gives it no plain words to work with, makes the linkify
// gadget hang — so skip that pass entirely and run only
// the îzah pass, splicing straight into the unlinkified text.
var loadIzahOnly = function () { runIzahPass(text); };
mw.loader.using("ext.gadget.linkify", loadIzahOnly, loadIzahOnly);
return;
}
var didTryToLoad = function () {
// First pass: the main definition text (mane), same as before.
linkifyText(text, function (mainLinked) {
if (!hasIzah) {
callback(restoreCites(mainLinked));
return;
}
// Second pass: îzah glosses, linkified via their own
// separate call. Each gloss is wrapped in its own
// {{wiktku-izah-open/close-N}} pair; like the existing
// {{wiktku-cite-N}} tokens, these sit inside double
// braces so linkify leaves the tokens themselves alone —
// only the raw gloss text between each pair gets linked.
runIzahPass(mainLinked);
});
};
mw.loader.using("ext.gadget.linkify", didTryToLoad, didTryToLoad);
}
},
tewandin: {
id: "tewandin",
name: "tewandin",
question_fmt: 'Tewandina "' + pageName + '" binivîse',
visible: function (values) {
return values.lang && values.pos;
},
build: function (stepDiv) {
if (stepDiv.find(".wiktku-tewandin-wrap").length) return null;
var wrap = $("<div class='wiktku-tewandin-wrap'></div>");
var ta = $("<textarea></textarea>")
.attr("name", "wiktku-tewandin-" + $.now())
.attr("class", "wiktku-start-step-field wiktku-tewandin-text")
.attr("rows", 4)
.attr("placeholder", "{{ku-tewîn-nav|nêr}}");
wrap.append(ta);
stepDiv.append(wrap);
function autoPopulate() {
if (!ta.length) return;
var vals = getValues();
var c = vals.cinsiyet || "";
var p = vals.pos || "";
if (!pageName.includes(" ") && c && GENDER_BASE_LABELS[c] &&
(p === "navdêr" || p === "serenav") && vals.lang === "ku" &&
c !== "mndudil") {
var label = (c === "mnmane") ? "mê û nêr" : GENDER_BASE_LABELS[c];
var out = "{{ku-tewîn-nav|" + label;
if (p === "serenav") out += "|y";
out += "}}";
if (!$.trim(ta.val())) ta.val(out);
}
}
setTimeout(function () {
autoPopulate();
$("#wiktku-start-form").on("change.tewandin",
"#wiktku-start-lang-field, #wiktku-start-cinsiyet-field, #wiktku-start-pos-field",
autoPopulate);
}, 0);
return ta;
},
output: function () {
var manualText = $.trim($("#wiktku-start-tewandin .wiktku-tewandin-text").val());
if (manualText) {
return "\n==== Tewandin ====\n" + manualText + "\n";
}
return "";
}
},
// resim — one or more images
resim: {
id: "resim",
name: "resim",
question_fmt: "Resmekê lê zêde bike",
visible: function (values) { return !!(values.lang && values.pos); },
/** Builds one image row: filename + caption + alt text. */
buildItem: function (stepDiv) {
var item = $("<li class='wiktku-resim-item'></li>");
var fileRow = $("<div class='wiktku-posparams-row'></div>");
var fileInp = $("<input type='text'>")
.addClass("wiktku-start-step-field wiktku-start-narrow wiktku-resim-file")
.attr("placeholder", "navê_dosyayê.jpg");
fileRow.append($("<label></label>").text("Navê dosyayê: ")).append(fileInp);
var capRow = $("<div class='wiktku-posparams-row'></div>");
var capInp = $("<input type='text'>")
.addClass("wiktku-start-step-field wiktku-start-narrow wiktku-resim-caption")
.attr("placeholder", "Danasîna resimê…");
capRow.append($("<label></label>").text("Danasîn: ")).append(capInp);
// Alt text: what a screen reader announces for this image
var altRow = $("<div class='wiktku-posparams-row'></div>");
var altInp = $("<input type='text'>")
.addClass("wiktku-start-step-field wiktku-start-narrow wiktku-resim-alt")
.attr("placeholder", "Ji bo kesên nabînin, çi tê dîtin? (ne mecbûrî)");
altRow.append($("<label></label>").text("Nivîsa alternatîf: ")).append(altInp);
// Auto-fill the caption with the plain page name when a filename
// is typed
fileInp.on("input", function () {
var file = $.trim($(this).val());
var curCap = $.trim(capInp.val());
var isDefault = !curCap || curCap === pageName;
if (file && isDefault) {
capInp.val(pageName);
} else if (!file && isDefault) {
capInp.val("");
}
steps.resim.onFileInput(stepDiv, item, this);
});
item.append(fileRow).append(capRow).append(altRow);
return item;
},
/** Grows the image list when the last row's filename gets content. */
onFileInput: function (stepDiv, item, input) {
var val = $.trim($(input).val());
var list = stepDiv.find("ol.wiktku-resim-list");
var isLast = item.is(list.children("li:last-child"));
if (val && isLast) {
list.append(steps.resim.buildItem(stepDiv));
}
},
build: function (stepDiv) {
if (stepDiv.find(".wiktku-resim-wrap").length) return null;
var wrap = $("<div class='wiktku-resim-wrap'></div>");
var list = $("<ol class='wiktku-resim-list'></ol>");
list.append(steps.resim.buildItem(stepDiv));
wrap.append(list);
stepDiv.append(wrap);
return null;
},
/** Reads every filled row from the DOM into an array of {file, caption, alt}
* objects — blank rows (missing filename or caption) are skipped.
* Non-Kurdish captions get wrapped in {{zim|lang|…}} here, unless
* the user already typed their own {{zim|…}} template. Alt text is
* optional and left as plain text either way. */
getImages: function (values) {
var lang = (values && values.lang) || getValues().lang || "";
var images = [];
$("#wiktku-start-resim li.wiktku-resim-item").each(function () {
var file = $.trim($(this).find(".wiktku-resim-file").val());
var caption = $.trim($(this).find(".wiktku-resim-caption").val());
var alt = $.trim($(this).find(".wiktku-resim-alt").val());
if (!file || !caption) return;
// Strip leading "Wêne:" or "File:" if the user typed it — we add it ourselves.
file = file.replace(/^(wêne|file|image)\s*:\s*/i, "");
if (lang && lang !== "ku" && !/^\{\{zim\s*\|/i.test(caption)) {
caption = "{{zim|" + lang + "|" + caption + "}}";
}
images.push({ file: file, caption: caption, alt: alt });
});
return images;
},
output: function (values) {
var images = steps.resim.getImages(values);
if (!images.length) return "";
return images.map(function (img) {
var altPart = img.alt ? "|alt=" + img.alt : "";
return "[[Wêne:" + img.file + "|thumb" + altPart + "|" + img.caption + "]]";
}).join("\n") + "\n";
}
},
// bnr-h — {{bnr-h|Page1|Page2|…}} prepended before the lang section (shared, not per-section)
bnrh: {
id: "bnrh",
name: "binêre herwiha (bnr-h)",
question_fmt: "Şablona bnr-h li qismê herî jor a rûpelê",
//visible: function (values) { return !!values.lang; },
multiple: true,
narrow: true,
placeholder: "Ji bo 'test' bnr 'Test', 'teşt'",
output: function (values) {
var pages = $.grep(values.bnrh || [], function (p) { return !!$.trim(p); });
if (!pages.length) return "";
return "{{bnr-h|" + pages.map(function (p) { return $.trim(p); }).join("|") + "}}\n";
}
},
bikaranin: {
id: "bikaranin",
name: "Notên bikaranînê",
question_fmt: "Notên bikaranînê yên li ser vê kelîmeyê",
visible: function (values) {
return values.lang && values.pos;
},
multiple: false,
narrow: false,
output: function (values) {
var text = $.trim(values.bikaranin || "");
if (!text) return "";
return "\n==== Notên bikaranînê ====\n" + text + "\n";
},
},
xwendin: {
id: "xwendin",
name: "Bêhtir bixwîne",
question_fmt: "Lînkên derveyî eleqedarî vê madeyê",
visible: function (values) {
return values.lang && values.pos;
},
multiple: false,
narrow: false,
placeholder: function (values) {
if (!values || !values.lang) {
return `* {{wpedî}} ji bo ku meqaleya Wîkîpediyayê lînk bidî`;
}
const ziman = values.lang === "ku" ? "" : `|ziman=${values.lang}`;
return `* {{wpedî${ziman}}} ji bo ku meqaleya Wîkîpediyayê lînk bidî`;
},
output: function (values) {
var text = $.trim(values.xwendin || "");
if (!text) return "";
return "\n==== Bêhtir bixwîne ====\n" + text + "\n";
},
},
alfabeyendin: {
id: "alfabeyendin",
name: "Bi alfabeyên din",
question_fmt: function (values) {
var base = "Nivîsîna vê kelîmeyê bi alfabeyên din"
var langLabel = values.lang ? getLangLabel(values.lang) : "";
if (langLabel) {
return base + " ên " + langLabel;
}
return base;
},
visible: function (values) {
return values.lang && values.pos;
},
multiple: false,
narrow: false,
placeholder: "Ji bo kurmancî: * {{ku-ar|şiklê alfaba erebî}}",
output: function (values) {
var text = $.trim(values.alfabeyendin || "");
if (!text) return "";
return "\n==== Bi alfabeyên din ====\n" + text + "\n";
},
},
formalt: makeWordListStep("formalt", "formên alternatîv", "Formên alternatîv ên vê kelîmeyê ji bo hemû maneyan eger te li binê maneyê nenivîsandibe"),
hevmane: makeWordListStep("hevmane", "hevmane", "Hevmaneyên vê kelîmeyê ji bo hemû maneyan eger te li binê maneyê nenivîsandibe"),
dijmane: makeWordListStep("dijmane", "dijmane", "Dijmaneyên vê kelîmeyê ji bo hemû maneyan eger te li binê maneyê nenivîsandibe"),
jornav: makeWordListStep("jornav", "jornav", "Jornavên vê kelîmeyê ji bo hemû maneyan eger te li binê maneyê nenivîsandibe"),
jernav: makeWordListStep("jernav", "jêrnav", "Jêrnavên vê kelîmeyê ji bo hemû maneyan eger te li binê maneyê nenivîsandibe"),
je: makeWordListStep("je", "jê", "Kelîmeyên jê çêbûyî binivîse"),
tekildar: makeWordListStep("tekildar", "têkildar", "Kelîmeyên ji aliyê etîmolojiyê ve têkildarî vê kelîmeyê binivîse"),
binereherwiha: makeWordListStep("binereherwiha", "herwiha binêre", "Kelîmeyên din ên eleqedar binivîse"),
etym: {
id: "etym",
name: "etîmolojî",
question_fmt: "Etîmolojiya kelîmeyê binivîse",
// etymTpls populated from data.json
etymTpls: {},
visible: function (values) {
return values.lang && values.pos;
},
// Fills the insert-dropdown from the current etymTpls object.
refreshTplSelect: function () {
var sel = $("#wiktku-start-etym .wiktku-tpl-insert-select");
if (!sel.length) return;
sel.find("option[value!='']").remove();
$.each(steps.etym.etymTpls, function (name, tpl) {
sel.append($("<option></option>").val(tpl.snippet).text(name + " — " + tpl.desc));
});
markTemplateOptions(sel, function (opt) { return tplNameFromSnippet(opt.val()); });
// Tell the picker the option list changed.
sel.trigger("wiktku:refresh");
},
build: function (stepDiv) {
if (stepDiv.find(".wiktku-etym-wrap").length) return null;
var wrap = $("<div class='wiktku-etym-wrap'></div>");
var ta = $("<textarea></textarea>")
.attr("name", "wiktku-etym-" + $.now())
.attr("class", "wiktku-start-step-field wiktku-etym-text")
.attr("rows", 4)
.attr("placeholder", "Ji {{ji|en|ku|apple}}. yan rasterast binivîse…");
// Template insert dropdown — options also refreshed after data.json loads.
var sel = $("<select class='wiktku-tpl-insert-select'></select>");
sel.attr("data-placeholder", "Şablonek lê zêde bike…");
sel.append($("<option value=''>— şablonek lê zêde bike —</option>"));
$.each(steps.etym.etymTpls, function (name, tpl) {
sel.append($("<option></option>").val(tpl.snippet).text(name + " — " + tpl.desc));
});
sel.on("change", function () {
var snippet = $(this).val();
if (!snippet) return;
var lang = getValues().lang || "";
snippet = snippet.replace(/CODE/g, lang).replace(/SOURCELANG/g, "?");
insertAtCursor(ta[0], snippet);
$(this).val("");
sel.trigger("wiktku:refresh");
ta.focus();
});
wrap.append(sel);
wrap.append(ta);
stepDiv.append(wrap);
initSelects(wrap);
return ta;
},
output: function (values) {
var text = $.trim($("#wiktku-start-etym .wiktku-etym-text").val());
if (text) {
return "\n==== Etîmolojî ====\n" + text + "\n";
}
// No etymology entered — emit {{ji?|lang}} as a placeholder.
// Skip it only when every filled sense is a şablon sense
// a completely empty entry with no şablon chosen still gets the placeholder
var dfnSenses = steps.dfn.getSenses($("#wiktku-start-dfn"));
var hasFilledTplSense = dfnSenses.some(function (s) {
return !!s.tpl && !!s.tplTitle;
});
var hasRegularMane = dfnSenses.some(function (s) {
return !s.tpl && (s.mane !== "" || senseHasExtraContent(s));
});
if (hasFilledTplSense && !hasRegularMane) return "";
return "\n==== Etîmolojî ====\n{{ji?|" + values.lang + "}}\n";
} },
dunde: {
id: "dunde",
name: "dûnde",
question_fmt: "Eger ev kelîme ji vî zimanî ketibe zimanekî din, vî zimanî û kelîmeya wî binivîse",
visible: function (values) {
return !!values.pos;
},
disabledKeys: function (values) {
return {"navz": true, [values.lang]: true}
},
// Language dropdown + growing word-input list; a new row appends
// when the dropdown gets a value. Mirrors steps.trans, but flat.
buildRow: function (stepDiv) {
var row = $("<li class='wiktku-dunde-row wiktku-lang-row'></li>");
// Language selector — the searchable picker is applied after insertion into DOM.
var langSel = $(mw.html.element("select", {
"class": "wiktku-start-step-keyfield wiktku-start-narrow" }));
langSel.attr("data-placeholder", "Li zimanekî bigere");
populateMenus(langSel, steps.dunde.keys || [], steps.dunde.disabledKeys);
// When a language is chosen, ensure a next empty row exists.
langSel.on("change", function () {
steps.dunde.onLangChange(stepDiv, row);
});
// Word list for this language.
var wordList = $("<ul class='wiktku-dunde-words wiktku-lang-row-words'></ul>");
var firstWord = steps.dunde.makeWordInput();
wordList.append($("<li></li>").append(firstWord));
// The searchable picker is attached by initSelects() once the row
// is in the DOM (see onLangChange/build below).
row.append(langSel).append(wordList);
return row;
},
makeWordInput: function () {
var input = $("<textarea></textarea>")
.attr("name", "wiktku-dunde-word-" + $.now() + "-" + Math.random().toString(36).substr(2, 9))
.attr("rows", 1)
.attr("class", "wiktku-dfn-subfield wiktku-start-narrow")
.attr("placeholder", "Kelîme…");
input.on("input", function () {
var list = $(this).closest("ul.wiktku-dunde-words");
var item = $(this).parent();
var val = $.trim($(this).val());
if (val && item.is(list.children("li:last-child"))) {
var next = steps.dunde.makeWordInput();
list.append($("<li></li>").append(next));
}
});
return input;
},
onLangChange: function (stepDiv, row) {
var list = stepDiv.find("ul.wiktku-dunde-list");
var isLast = row.is(list.children("li.wiktku-dunde-row:last-child"));
if (isLast) {
var newRow = steps.dunde.buildRow(stepDiv);
list.append(newRow);
// Attach the searchable picker now the row is in the DOM.
initSelects(newRow);
}
// Keep disabled keys in sync across all lang selectors.
steps.dunde.syncDisabledKeys(stepDiv);
},
/** Disables already-selected languages in all other dropdowns. */
syncDisabledKeys: function (stepDiv) {
var taken = $.extend({}, steps.dunde.disabledKeys);
stepDiv.find("li.wiktku-dunde-row select").each(function () {
var v = $(this).val();
if (v) taken[v] = true;
});
stepDiv.find("li.wiktku-dunde-row select").each(function () {
var self = $(this);
var own = self.val();
self.find("option").each(function () {
var code = $(this).val();
if (!code) return;
$(this).prop("disabled", taken[code] && code !== own);
});
self.trigger("wiktku:refresh");
});
},
build: function (stepDiv) {
if (stepDiv.find("ul.wiktku-dunde-list").length) return null;
var list = $("<ul class='wiktku-dunde-list wiktku-lang-row-list'></ul>");
list.append(steps.dunde.buildRow(stepDiv));
stepDiv.append(list);
// Attach the searchable picker now the select is in the DOM.
initSelects(list);
return null;
},
/** Reads all [langcode, words[]] rows from the DOM. */
getRows: function (stepDiv) {
var result = [];
stepDiv.find("li.wiktku-dunde-row").each(function () {
var lang = $(this).find("select").val();
if (!lang) return;
var words = [];
$(this).find("ul.wiktku-dunde-words textarea").each(function () {
var v = $.trim($(this).val());
if (v) words.push(v);
});
if (words.length) result.push([lang, words]);
});
return result;
},
output: function () {
var stepDiv = $("#wiktku-start-dunde");
var rows = steps.dunde.getRows(stepDiv);
if (!rows.length) return "";
var lines = $.map(rows, function (row) {
var lang = row[0], words = row[1];
return "* {{dû|" + lang + "|" + words.join("|") + "}}";
});
return "\n==== Dûnde ====\n" + lines.join("\n") + "\n";
}
},
zarava: {
id: "zarava",
name: "bi zaravayên din",
question_fmt: "'"+ pageName + "' di zaravayên din de çawa tê gotin?",
visible: function (values) {
return steps.trans.visible(values);
},
disabledKeys: {},
buildRow: function (group) {
var row = $("<li class='wiktku-zarava-row wiktku-lang-row'></li>");
var langSel = $(mw.html.element("select", {
"class": "wiktku-start-step-keyfield wiktku-start-narrow" }));
langSel.attr("data-placeholder", "Li zaravayekî bigere");
populateMenus(langSel, steps.zarava.keys || [], steps.zarava.disabledKeys);
langSel.on("change", function () {
steps.zarava.onLangChange(group, row);
});
var wordList = $("<ul class='wiktku-zarava-words wiktku-lang-row-words'></ul>");
var firstWord = steps.zarava.makeWordInput();
wordList.append($("<li></li>").append(firstWord));
row.append(langSel).append(wordList);
return row;
},
makeWordInput: function () {
var input = $("<textarea></textarea>")
.attr("name", "wiktku-zarava-word-" + $.now() + "-" + Math.random().toString(36).substr(2, 9))
.attr("rows", 1)
.attr("class", "wiktku-dfn-subfield wiktku-start-narrow")
.attr("placeholder", "Tercime…");
input.on("input", function () {
var list = $(this).closest("ul.wiktku-zarava-words");
var item = $(this).parent();
var val = $.trim($(this).val());
if (val && item.is(list.children("li:last-child"))) {
var next = steps.zarava.makeWordInput();
list.append($("<li></li>").append(next));
}
});
return input;
},
onLangChange: function (group, row) {
var list = group.find("ul.wiktku-zarava-list");
var isLast = row.is(list.children("li.wiktku-zarava-row:last-child"));
if (isLast) {
var newRow = steps.zarava.buildRow(group);
list.append(newRow);
// Attach the searchable picker now the row is in the DOM.
initSelects(newRow);
}
steps.zarava.syncDisabledKeys(group);
},
/** Disables already-selected dialects in all other dropdowns within one group. */
syncDisabledKeys: function (group) {
var taken = $.extend({}, steps.zarava.disabledKeys);
group.find("li.wiktku-zarava-row select").each(function () {
var v = $(this).val();
if (v) taken[v] = true;
});
group.find("li.wiktku-zarava-row select").each(function () {
var self = $(this);
var own = self.val();
self.find("option").each(function () {
var code = $(this).val();
if (!code) return;
$(this).prop("disabled", taken[code] && code !== own);
});
self.trigger("wiktku:refresh");
});
},
/** Builds (or fetches) the .wiktku-zarava-group for one gloss. */
buildGroup: function (stepDiv, gi) {
var group = $("<div class='wiktku-zarava-group'></div>").attr("data-gloss-pos", gi);
var list = $("<ul class='wiktku-zarava-list wiktku-lang-row-list'></ul>");
list.append(steps.zarava.buildRow(group));
group.append(list);
stepDiv.append(group);
// Attach the searchable picker now the select is in the DOM.
initSelects(list);
return group;
},
/** Syncs one .wiktku-zarava-group per current gloss (same logic as steps.trans.build). */
build: function (stepDiv) {
var glosses = steps.trans.glossList();
if (!glosses.length) {
stepDiv.find(".wiktku-zarava-group").remove();
return null;
}
var existingGroups = stepDiv.find(".wiktku-zarava-group");
if (existingGroups.length > glosses.length) {
existingGroups.slice(glosses.length).remove();
}
$.each(glosses, function (gi, gloss) {
var group = stepDiv.find(".wiktku-zarava-group[data-gloss-pos='" + gi + "']");
if (!group.length) group = steps.zarava.buildGroup(stepDiv, gi);
var label = group.find(".wiktku-zarava-group-label");
if (glosses.length > 1) {
if (!label.length) {
label = $("<div class='wiktku-zarava-group-label'></div>");
group.prepend(label);
}
label.text(gloss.index + " " + gloss.text);
} else if (label.length) {
label.remove();
}
});
return null;
},
/** Reads the dialect rows for a single gloss group. */
getGroupTranslations: function (group) {
var result = [];
group.find("li.wiktku-zarava-row").each(function () {
var lang = $(this).find("select").val();
if (!lang) return;
var words = [];
$(this).find("ul.wiktku-zarava-words textarea").each(function () {
var v = $.trim($(this).val());
if (v) words.push(v);
});
if (words.length) result.push([lang, words]);
});
return result;
},
/** Reads all rows from the DOM, grouped by gloss position. */
getTranslations: function (stepDiv) {
var result = [];
stepDiv.find(".wiktku-zarava-group").each(function () {
result.push(steps.zarava.getGroupTranslations($(this)));
});
return result;
},
output: function (values) {
if (values.lang !== "ku") return "";
var stepDiv = $("#wiktku-start-zarava");
var glosses = steps.trans.glossList();
if (!glosses.length) return "";
// Item 6 (Wikihez, 14 Tebax 2026): "Bi zaravayên din" now
// auto-appears empty for lang=ku exactly like Werger
// already does (steps.trans.output, same rule below) —
// a completely empty entry still gets a placeholder
// section to fill in later; an individual placeholder
// gloss is only skipped once some other sense already has
// real content, making that particular one redundant.
var dfnSenses = steps.dfn.getSenses($("#wiktku-start-dfn"));
var hasRegularMane = dfnSenses.some(function (s) {
return !s.tpl && (s.mane !== "" || senseHasExtraContent(s));
});
var blocks = $.map(glosses, function (gloss, gi) {
var group = stepDiv.find(".wiktku-zarava-group[data-gloss-pos='" + gi + "']");
var rows = group.length ? steps.zarava.getGroupTranslations(group) : [];
if (!gloss.text && !rows.length && hasRegularMane) return undefined;
if (rows.length) {
rows.sort(function (a, b) {
var aLang = langsByCode[a[0]] || {};
var bLang = langsByCode[b[0]] || {};
return (aLang.sortKey || "").localeCompare(bLang.sortKey || "", "ku");
});
}
var wordLines = $.map(rows, function (row) {
var lang = row[0];
var words = row[1];
var wikiWords = words.map(function (w) {
return "{{W|" + lang + "|" + w + "}}";
}).join(", ");
return "* {{Z|" + lang + "}}: " + wikiWords;
}).join("\n");
var block = "{{werger-ser|" + (gloss.text || "?") + "|" + gloss.index + "}}";
if (wordLines) block += "\n" + wordLines;
block += "\n{{werger-bin}}";
return block;
});
if (!blocks.length) return "";
return "\n==== Bi zaravayên din ====\n" + blocks.join("\n") + "\n";
}
},
trans: {
id: "trans",
name: "werger",
question_fmt: "Tercimeyên vê maneyê bi zimanên din binivîse",
visible: function (values) {
if (!(values.lang === "ku" && values.pos)) return false;
// Hide only when every sense is a filled template sense (no plain
// gloss to attach translations to). A mix, or nothing filled in
// yet, still shows Werger.
var dfnSenses = steps.dfn.getSenses($("#wiktku-start-dfn"));
var hasRealSense = dfnSenses.some(function (s) {
return !s.tpl && (s.mane !== "" || senseHasExtraContent(s));
});
var hasFilledTplSense = dfnSenses.some(function (s) {
return s.tpl && s.tplTitle;
});
return hasRealSense || !hasFilledTplSense;
},
disabledKeys: {
"navz": true,
"ku": true,
"ckb": true,
"sdh": true,
"lki": true,
"hac": true,
"zza": true },
// Language dropdown + growing word-input list, scoped to one gloss's
// group (each gloss has its own group and row list).
buildRow: function (group) {
var row = $("<li class='wiktku-trans-row wiktku-lang-row'></li>");
// Language selector — the searchable picker is applied after insertion into DOM.
var langSel = $(mw.html.element("select", {
"class": "wiktku-start-step-keyfield wiktku-start-narrow" }));
langSel.attr("data-placeholder", "Li zimanekî bigere");
populateMenus(langSel, steps.trans.keys || [], steps.trans.disabledKeys);
// When a language is chosen, ensure a next empty row exists.
langSel.on("change", function () {
steps.trans.onLangChange(group, row);
});
// Word list for this language.
var wordList = $("<ul class='wiktku-trans-words wiktku-lang-row-words'></ul>");
var firstWord = steps.trans.makeWordInput();
wordList.append($("<li></li>").append(firstWord));
// The searchable picker is attached by initSelects() once the row
// is in the DOM (see onLangChange/buildGroup below).
row.append(langSel).append(wordList);
return row;
},
makeWordInput: function () {
var input = $("<textarea></textarea>")
.attr("name", "wiktku-trans-word-" + $.now() + "-" + Math.random().toString(36).substr(2, 9))
.attr("rows", 1)
.attr("class", "wiktku-dfn-subfield wiktku-start-narrow")
.attr("placeholder", "Tercime…");
input.on("input", function () {
var list = $(this).closest("ul.wiktku-trans-words");
var item = $(this).parent();
var val = $.trim($(this).val());
if (val && item.is(list.children("li:last-child"))) {
var next = steps.trans.makeWordInput();
list.append($("<li></li>").append(next));
}
});
return input;
},
onLangChange: function (group, row) {
var list = group.find("ul.wiktku-trans-list");
var isLast = row.is(list.children("li.wiktku-trans-row:last-child"));
if (isLast) {
var newRow = steps.trans.buildRow(group);
list.append(newRow);
// Attach the searchable picker now the row is in the DOM.
initSelects(newRow);
}
// Keep disabled keys in sync across this gloss's lang selectors
// only — the same language can be used for different senses.
steps.trans.syncDisabledKeys(group);
},
/** Disables already-selected languages in all other dropdowns within one group. */
syncDisabledKeys: function (group) {
var taken = $.extend({}, steps.trans.disabledKeys);
group.find("li.wiktku-trans-row select").each(function () {
var v = $(this).val();
if (v) taken[v] = true;
});
group.find("li.wiktku-trans-row select").each(function () {
var self = $(this);
var own = self.val();
self.find("option").each(function () {
var code = $(this).val();
if (!code) return;
$(this).prop("disabled", taken[code] && code !== own);
});
self.trigger("wiktku:refresh");
});
},
// Builds (or fetches) the .wiktku-trans-group for one gloss.
buildGroup: function (stepDiv, gi) {
var group = $("<div class='wiktku-trans-group'></div>").attr("data-gloss-pos", gi);
var list = $("<ul class='wiktku-trans-list wiktku-lang-row-list'></ul>");
list.append(steps.trans.buildRow(group));
group.append(list);
stepDiv.append(group);
// Attach the searchable picker now the select is in the DOM.
initSelects(list);
return group;
},
// Syncs one .wiktku-trans-group per current gloss, keyed by
// data-gloss-pos so groups stay matched across rebuilds.
build: function (stepDiv) {
var glosses = steps.trans.glossList();
if (!glosses.length) {
stepDiv.find(".wiktku-trans-group").remove();
return null;
}
// Drop groups for glosses that no longer exist (always from the
// tail — groups are only ever appended in gloss order below).
var existingGroups = stepDiv.find(".wiktku-trans-group");
if (existingGroups.length > glosses.length) {
existingGroups.slice(glosses.length).remove();
}
$.each(glosses, function (gi, gloss) {
var group = stepDiv.find(".wiktku-trans-group[data-gloss-pos='" + gi + "']");
if (!group.length) group = steps.trans.buildGroup(stepDiv, gi);
// Only label groups when there's more than one gloss to
// distinguish between — a single gloss needs no caption.
var label = group.find(".wiktku-trans-group-label");
if (glosses.length > 1) {
if (!label.length) {
label = $("<div class='wiktku-trans-group-label'></div>");
group.prepend(label);
}
label.text(gloss.index + " " + gloss.text);
} else if (label.length) {
label.remove();
}
});
return null;
},
/** Reads the translation rows for a single gloss group. */
getGroupTranslations: function (group) {
var result = [];
group.find("li.wiktku-trans-row").each(function () {
var lang = $(this).find("select").val();
if (!lang) return;
var words = [];
$(this).find("ul.wiktku-trans-words textarea").each(function () {
var v = $.trim($(this).val());
if (v) words.push(v);
});
if (words.length) result.push([lang, words]);
});
return result;
},
// Reads all translation rows, grouped by gloss position.
getTranslations: function (stepDiv) {
var result = [];
stepDiv.find(".wiktku-trans-group").each(function () {
result.push(steps.trans.getGroupTranslations($(this)));
});
return result;
},
// Builds the numbered "{ index, gloss }" list, one per dfn sense
// with a real mane (skips template senses). index is 1-based and
// matches the sense's position in the "#" definition list.
// When nothing's filled in, returns one placeholder entry so
// Werger still has a group to attach to; when every sense is a
// filled template sense, stays empty (matches trans.visible()).
glossList: function () {
var dfnSenses = steps.dfn.getSenses($("#wiktku-start-dfn"));
var glosses = [];
var hasFilledTplSense = false;
$.each(dfnSenses, function (i, s) {
if (s.tpl) {
if (s.tplTitle) hasFilledTplSense = true;
return; // template sense — no gloss to caption with
}
var dfn = s.mane;
if (!dfn) {
// No mane, but other fields are filled — still gets a
// gloss group since dfn.getOutput() emits {{mane?}} for it.
if (senseHasExtraContent(s)) glosses.push({ index: i + 1, text: "" });
return;
}
if (dfn[0] !== dfn[0].toLowerCase()) dfn = decapitalize(dfn);
dfn = stripWikilinks(dfn).replace(/[.…?!)\]،؟]+$/, "");
glosses.push({ index: i + 1, text: dfn });
});
if (!glosses.length && !hasFilledTplSense) {
glosses.push({ index: 1, text: "" });
}
return glosses;
},
output: function (values) {
if (values.lang !== "ku") return "";
var stepDiv = $("#wiktku-start-trans");
var glosses = steps.trans.glossList();
// Every sense is a template sense — there's no real gloss
// anywhere and no group in the DOM either (glossList() only
// returns empty in that case), so skip the section entirely.
if (!glosses.length) return "";
// A completely empty entry (nothing filled in dfn at all, no
// şablon chosen either) still gets a placeholder Werger section
// to fill in later. Only
// skip an individual placeholder gloss below when some other
// sense actually has real content, making that particular
// placeholder redundant.
var dfnSenses = steps.dfn.getSenses($("#wiktku-start-dfn"));
var hasRegularMane = dfnSenses.some(function (s) {
return !s.tpl && (s.mane !== "" || senseHasExtraContent(s));
});
// Each gloss now has its own group of translation rows —
// attach every gloss's own words under its own werger-ser/-bin
// pair instead of dumping everything under the first one.
var blocks = $.map(glosses, function (gloss, gi) {
var group = stepDiv.find(".wiktku-trans-group[data-gloss-pos='" + gi + "']");
var rows = group.length ? steps.trans.getGroupTranslations(group) : [];
// Placeholder gloss (no real mane entered yet) with nothing
// translated into it. If some other sense already has real
// content, this placeholder is redundant — skip it. If the
// whole entry is empty, keep it so Werger still gets a
// section to fill in.
if (!gloss.text && !rows.length && hasRegularMane) return undefined;
if (rows.length) {
// Sort by Kurdish sort key.
rows.sort(function (a, b) {
var aLang = langsByCode[a[0]] || {};
var bLang = langsByCode[b[0]] || {};
return (aLang.sortKey || "").localeCompare(bLang.sortKey || "", "ku");
});
}
var wordLines = $.map(rows, function (row) {
var lang = row[0];
var words = row[1];
var wikiWords = words.map(function (w) {
return "{{W|" + lang + "|" + w + "}}";
}).join(", ");
return "* {{Z|" + lang + "}}: " + wikiWords;
}).join("\n");
var block = "{{werger-ser|" + (gloss.text || "?") + "|" + gloss.index + "}}";
if (wordLines) block += "\n" + wordLines;
block += "\n{{werger-bin}}";
return block;
});
if (!blocks.length) return "";
return "\n==== Werger ====\n" + blocks.join("\n") + "\n";
}
},
cavkani: {
id: "cavkani",
name: "çavkanî",
question_fmt: "Çavkaniyên din (ne jêgirtin) lê zêde bike",
visible: function (values) {
return !!values.pos;
},
// Fills the insert-dropdown from the members of [[Kategorî:Çavkanî]].
refreshTplSelect: function () {
var sel = $("#wiktku-start-cavkani .wiktku-tpl-insert-select");
if (!sel.length) return;
sel.find("option[value!='']").remove();
$.each(catSrcTemplates || [], function (_, name) {
sel.append($("<option></option>").val(name).text(name));
});
markTemplateOptions(sel, function (opt) { return opt.val(); });
// Tell the picker the option list changed.
sel.trigger("wiktku:refresh");
},
build: function (stepDiv) {
if (stepDiv.find(".wiktku-cavkani-wrap").length) return null;
var wrap = $("<div class='wiktku-cavkani-wrap'></div>");
var ta = $("<textarea></textarea>")
.attr("name", "wiktku-cavkani-" + $.now())
.attr("class", "wiktku-start-step-field wiktku-cavkani-text")
.attr("rows", 4)
.attr("placeholder", "Şablonekî ji lîsteyê hilbijêre an rasterast binivîse…");
// Template insert dropdown, populated from [[Kategorî:Çavkanî]] —
// options refreshed once the category members are fetched.
var sel = $("<select class='wiktku-tpl-insert-select'></select>");
sel.attr("data-placeholder", "Şablonek lê zêde bike…");
sel.append($("<option value=''>— şablonek lê zêde bike —</option>"));
var status = $("<span class='wiktku-cavkani-status'></span>");
sel.on("change", function () {
var name = $(this).val();
if (!name) return;
insertAtCursor(ta[0], "\n* {{" + name + "}}");
$(this).val("");
sel.trigger("wiktku:refresh");
ta.focus();
});
wrap.append(sel);
wrap.append(status).append(ta);
stepDiv.append(wrap);
// build() runs again for every new beş (see the "+ Beş zêde bike"
// handler), after the initial page-wide pass — so this select needs
// its own init or it stays a plain, unsearchable native <select>.
initSelects(wrap);
if (catSrcTemplates) {
steps.cavkani.refreshTplSelect();
} else {
status.text("Şablon tên barkirin…");
fetchCatSrcTemplates().then(function () {
steps.cavkani.refreshTplSelect();
status.text("");
}, function () {
status.text("Şablon nehatin barkirin.");
});
}
return ta;
},
output: function () {
var text = $.trim($("#wiktku-start-cavkani .wiktku-cavkani-text").val());
if (!text) return "";
return "\n==== Çavkanî ====\n" + text + "\n";
}
},
};
steps.trans.keys = steps.lang.choices;
steps.dunde.keys = steps.lang.choices;
steps.zarava.keys = getZaravaKeys(steps.lang.choices);
// Ghybu, 14 Tebax 2026: bnrh/resim/pron used to sit here, always visible,
// well above the tab bar (which starts right before "dfn"). They're now
// tab-gated (see STEP_GROUPS below), so their DOM position moves down to
// sit right next to it instead of rendering as always-open fields between
// Ziman and Cureyê rêzimanî. This array only controls DOM build order —
// nothing else keys off it (see the comment above stepIdToGroup).
// Wikihez, 14 Tebax 2026: Mane tab's internal order is now Mane → malûmatên
// pêşketî (nested inside dfn's own div, see steps.dfn.build) → Wêne →
// Bi zaravayên din → Werger, so dfn/resim/zarava/trans need to sit
// adjacent to each other, in that order, in the DOM. zarava/trans moved
// out of the "Beşên din" cluster entirely — see STEP_GROUPS below.
var ordered_steps = [
steps.lang, steps.pos, steps.posparams,
steps.cinsiyet, steps.jimar, steps.lektur, steps.tr,
// Mane tab, in reading order: the senses, then the two things that
// belong to the entry as a whole rather than to one sense.
steps.dfn, steps.tewandin, steps.zarava, steps.alfabeyendin, steps.trans,
// Etîmolojî tab.
steps.etym, steps.dunde,
// Eleqedar tab — three lists of the same shape.
steps.je, steps.tekildar, steps.binereherwiha,
// Bilêvkirin: no longer in a tab at all (see PRON_SECTION_ID) — it
// still needs a slot here because this array is what builds the DOM.
steps.pron,
// Beşên din, behind the picker.
steps.resim,
steps.bnrh, steps.bikaranin, steps.formalt, steps.hevmane, steps.dijmane, steps.jornav, steps.jernav,
steps.cavkani, steps.xwendin];
// ── Step-group tabs ──────────────────────────────────────────────────────
// Ghybu, 14 Tebax 2026 (revised): originally 5 tabs (Bingehîn/Bilêvkirin/
// Lînkkirin/Bikaranîn/Din), split by topic. Ghybu's follow-up flattened
// that to exactly 3: "Mane", "Bilêvkirin", "Beşên din" ("other
// sections") — with Wêne and Nimûne folded INTO "Mane" specifically
// (not left in a misc tab), and everything that isn't Mane/Bilêvkirin
// dumped into one single "Beşên din" catch-all rather than split across
// topic tabs. Nimûne doesn't appear below as its own entry because it's
// not a separate step — it's already rendered inside each dfn/Mane
// sense block (see buildSenseBlock's allGroups), so it's under "Mane"
// automatically. "mane" stays first (and so the default-active tab)
// since required content — Mane itself — has to be what's seen by
// default.
// Wikihez, 14 Tebax 2026: zarava/trans moved from "besendin" into "mane" —
// both are already gated to lang===ku (zarava.visible just delegates to
// trans.visible), so they show/hide automatically with no picker
// involvement, same as before; they just render inside the Mane tab
// now instead of behind the Beşên din picker (see openedOtherSections
// below, which only applies to "besendin" members).
// Wikihez, 15 Tebax 2026: pared back again after Ghybu's "Tu jî dizanî ku
// kesên ku tên vira çito peyv çêdikin: Ziman > Mane > Mînak > Hevmane >
// Dijmane". That path is now what the form shows by default and nothing
// else: Mane holds the senses (whose own blocks carry Nimûne, Jêgirtin,
// Hevmane and Dijmane — see steps.dfn.allGroups) plus Werger. Wêne and
// "Bi zaravayên din" moved out to the Beşên din picker with everything
// else; they aren't gone, they're one dropdown pick away.
// v3 spec (15 Tebax 2026): four tabs instead of three, and Bilêvkirin
// leaves the tab bar entirely.
//
// The Beşên din picker had grown to eighteen entries, which is its own
// kind of "where do I find anything" problem — splitting the two
// obvious clusters out as their own tabs is what fixes that:
// Etîmolojî — where the word came from, and what came from it
// Eleqedar — the three "related words" lists, which are the same
// shape as each other and nothing like the rest
// Tewandin moves into Mane and out from behind the picker: it is
// commonly wanted and it belongs with the senses it inflects. Note this
// is a PLACEMENT change only — Tewandin keeps its own free-text
// {{ku-tewîn-nav}} field and does NOT absorb the Cins/zayend form
// parameters (m=/n=/p=), which stay on the headword template where
// they belong. The v3 mock merged the two; Wikihez rejected that.
var STEP_GROUPS = [
{ id: "mane", label: "Mane", steps: ["dfn", "tewandin", "zarava", "alfabeyendin", "trans"] },
{ id: "etimoloji", label: "Etîmolojî", steps: ["etym", "dunde"] },
{ id: "eleqedar", label: "Eleqedar", steps: ["je", "tekildar", "binereherwiha"] },
{ id: "besendin", label: "Beşên din", steps: ["resim", "formalt", "hevmane", "dijmane", "jornav", "jernav", "bikaranin", "cavkani", "xwendin", "bnrh"] },
];
// Steps that live behind the "Beşên din" picker — only these need an
// explicit "open" before they're shown, even when their tab is active.
// Derived from the group above so it can't drift out of sync.
var BESENDIN_STEP_IDS = STEP_GROUPS[3].steps;
// Reverse lookup: step id -> index into STEP_GROUPS (undefined for
// ungrouped steps — now only lang/pos/posparams/cinsiyet/lektur/tr,
// which stay always-visible since they're required to get to everything
// else).
var stepIdToGroup = {};
$.each(STEP_GROUPS, function (gi, g) {
$.each(g.steps, function (_, sid) { stepIdToGroup[sid] = gi; });
});
// Step ids that belong to each section (not shared across sections).
var PER_SECTION_STEP_IDS = [
"pos", "posparams", "cinsiyet", "jimar", "lektur", "tr",
"resim", "dfn", "tewandin", "formalt", "bikaranin", "alfabeyendin", "hevmane", "dijmane", "jornav", "jernav", "je", "tekildar", "etym", "dunde", "binereherwiha", "zarava", "trans", "cavkani", "xwendin"
];
// ── Multi-section state ──────────────────────────────────────────────────
// Each entry is a plain snapshot: { pos, cinsiyet, lektur, tr, dfn (senses[]),
// je, tekildar, binereherwiha, trans (rows[]) }.
var sections = [{}]; // section 0 starts empty (DOM is the truth)
var activeSection = 0;
// ── Bilêvkirin as a standalone section (v3 spec) ─────────────────────
// Pronunciation belongs to the word, not to one part of speech, so it
// sits beside Navdêr/Lêker in the section tab bar rather than inside
// any of them, and is added once from "+ Beş zêde bike".
//
// Modelled as a flag rather than an entry in `sections`: activeSection
// is used as an array index in a dozen places (saveCurrentSection,
// restoreSection, sections[activeSection]…), and making it sometimes a
// string would mean auditing all of them. Viewing Bilêvkirin instead
// leaves activeSection pointing at the POS section you were on, so
// coming back is free and nothing else has to change.
// Always in the tab bar, and first — pronunciation applies to the whole
// word, so it reads as the thing that comes before any part of speech
// rather than an optional extra you have to know to add. Its content
// only appears once you click it, like any other tab.
var viewingPron = false; // is it the tab currently on screen
// Which STEP_GROUPS tab is currently shown. Lives out here (like
// activeSection above) so refresh() — which is not nested inside build()
// — can read it and so renderGroupTabs()/updateGroupTabIndicators() below
// can be called from refresh() too. Both operate on the tab bar via its
// #wiktku-group-tabs id rather than a closured element reference, for the
// same reason.
var activeGroup = 0;
// Unsaved-changes / autosave state. Lives out here (same reason as
// activeGroup above) so destroy() — which runs on final submit and on
// switching to the source editor, and is not nested inside build() —
// can clear the timers and the beforeunload warning. build() assigns
// into these; it doesn't re-declare them.
var formDirty = false;
var autosaveDebounceTimer = null;
var autosaveInterval = null;
/** Re-renders the step-group tab bar to reflect the current activeGroup. */
function renderGroupTabs() {
var groupTabsDiv = $("#wiktku-group-tabs");
if (!groupTabsDiv.length) return;
groupTabsDiv.empty();
$.each(STEP_GROUPS, function (i, g) {
var tab = $("<span></span>")
.addClass("wiktku-group-tab")
.attr("data-group-idx", i)
.text(g.label)
.toggleClass("wiktku-tab-active", i === activeGroup);
(function (idx) {
tab.on("click", function () {
if (idx === activeGroup) return;
activeGroup = idx;
renderGroupTabs();
if (idx === BESENDIN_GROUP_IDX) renderBesenDinPicker();
refresh();
});
}(i));
groupTabsDiv.append(tab);
});
}
/**
* Toggles a "needs attention" dot on any group tab that still has a
* required, unfilled field hidden inside it — so switching tabs doesn't
* leave the person wondering why "Bişîne" stays disabled.
*/
function updateGroupTabIndicators(values) {
var tabs = $("#wiktku-group-tabs .wiktku-group-tab");
if (!tabs.length) return;
$.each(STEP_GROUPS, function (i, g) {
var missing = false;
$.each(g.steps, function (_, sid) {
var step = steps[sid];
if (!step || !step.required) return;
var val = values[sid];
if (val === "" || (step.multiple && $.isArray(val) && val.join("") === "")) {
missing = true;
}
});
tabs.eq(i).toggleClass("wiktku-tab-missing", missing && i !== activeGroup);
});
}
// Wikihez, 14 Tebax 2026: "Beşên din" no longer shows all 16 fields
// stacked at once — a picker reveals one at a time instead. This is
// per-section state (like the field values themselves), snapshotted in
// saveCurrentSection() and restored in restoreSection() below, and
// auto-seeded from any field that already has content (so a returning
// draft, or an older cache saved before this existed, doesn't hide
// something the person already filled in).
var openedOtherSections = {};
var BESENDIN_SET = {};
$.each(BESENDIN_STEP_IDS, function (_, sid) { BESENDIN_SET[sid] = true; });
// "besendin"'s index in STEP_GROUPS. Derived rather than hardcoded —
// this was a literal 2 and silently pointed at the wrong tab the moment
// Etîmolojî and Eleqedar were inserted ahead of it.
var BESENDIN_GROUP_IDX = (function () {
for (var i = 0; i < STEP_GROUPS.length; i++) {
if (STEP_GROUPS[i].id === "besendin") return i;
}
return STEP_GROUPS.length - 1;
}());
/** Re-renders the "Beşên din" picker to list only the not-yet-opened sections. */
function renderBesenDinPicker() {
var wrap = $("#wiktku-besendin-picker");
if (!wrap.length) return;
wrap.empty();
var pickerValues = getValues();
var unopened = $.grep(BESENDIN_STEP_IDS, function (sid) {
if (openedOtherSections[sid]) return false;
// Don't offer a section that would open onto nothing: several of
// these are gated (Bi zaravayên din / Werger need lang=ku, most
// need a pos). refresh() would hide it again straight away, so
// picking it would read as a broken dropdown.
var step = steps[sid];
if (step && typeof step.visible === "function") {
try {
if (!step.visible(pickerValues)) return false;
} catch (e) { /* a step whose visible() needs DOM we lack yet — offer it */ }
}
return true;
});
if (!unopened.length) return; // everything's open — nothing left to pick
var sel = $("<select class='wiktku-besendin-select'></select>");
sel.attr("data-placeholder", "— beşek hilbijêre —");
sel.append($("<option value=''>— beşek hilbijêre —</option>"));
$.each(unopened, function (_, sid) {
var step = steps[sid];
if (!step) return;
sel.append($("<option></option>").val(sid).text(capitalize(step.name)));
});
sel.on("change", function () {
var sid = $(this).val();
if (!sid) return;
openedOtherSections[sid] = true;
renderBesenDinPicker();
refresh();
});
wrap.append(sel);
initSelects(wrap);
}
/** Marks any BESENDIN_STEP_IDS field that already has real content as
* "opened", so restoring a draft doesn't bury filled-in sections behind
* the picker. Reuses each step's own output() as the emptiness check —
* it already knows what "empty" means per field, and it reads the DOM
* the restore just populated. Call this AFTER the DOM has the restored
* values in it. */
function seedOpenedFromContent() {
var values = getValues();
$.each(BESENDIN_STEP_IDS, function (_, sid) {
if (openedOtherSections[sid]) return;
var step = steps[sid];
if (!step || typeof step.output !== "function") return;
try {
if (step.output(values)) openedOtherSections[sid] = true;
} catch (e) { /* a step whose output() needs more state than we have yet — skip it */ }
});
}
function snapshotDfn() {
return steps.dfn.getSenses($("#wiktku-start-dfn"));
}
// Rebuilds the dfn DOM from a previously snapshotted senses array.
function restoreDfn(senses) {
var stepDiv = $("#wiktku-start-dfn");
// Tear down the existing list so build() recreates it cleanly. The
// "+ Mane zêde bike" button goes with it — build() re-appends both,
// and leaving the old one behind would both duplicate it and put it
// above the rebuilt list.
stepDiv.find("ol.wiktku-dfn-list").remove();
stepDiv.find(".wiktku-add-sense").remove();
steps.dfn.build(stepDiv);
var list = stepDiv.find("ol.wiktku-dfn-list");
$.each(senses, function (i, sense) {
// Ensure enough blocks exist (build() seeds one).
var blocks = list.find("li.wiktku-dfn-sense");
var block = blocks.eq(i);
if (!block.length) {
var nb = steps.dfn.buildSenseBlock(stepDiv);
list.append(nb);
block = list.find("li.wiktku-dfn-sense").last();
}
// Template selector.
block.find("select.wiktku-dfn-tpl-select").val(sense.tpl || "");
if (sense.tpl) {
block.find("textarea.wiktku-dfn-mane").hide();
block.find("input.wiktku-dfn-tpl-title").val(sense.tplTitle || "").show();
// The picker is collapsed behind a link by default; a restored
// sense that already uses a template has to show it, or the
// chosen template is invisible and looks lost.
var reveal = block.data("revealTplRow");
if (typeof reveal === "function") reveal();
} else {
block.find("textarea.wiktku-dfn-mane").val(sense.mane || "").show();
block.find("input.wiktku-dfn-tpl-title").hide().val("");
}
// dfnArea is the only thing actually saved, so split it back into
// tercime/îzah for editing (mirrors syncNonKuToMane's join format).
var maneParts = splitTercimeIzah(sense.mane);
block.find(".wiktku-dfn-tercime").val(maneParts ? maneParts.tercime : (sense.mane || ""));
block.find(".wiktku-dfn-izah").val(maneParts ? maneParts.izah : "");
// Re-sync the formên alternatîv/hevmane/… hide state now that
// tplSelect's value was set (its own "change"
// handler doesn't fire from .val(), so this doesn't happen otherwise).
var updateVis = block.data("updateFieldVisibility");
if (updateVis) updateVis();
// Same for the mane-box mode (plain vs tercime+îzah), since this
// also depends on tplSelect's (and lang's) value.
var updateMane = block.data("updateManeMode");
if (updateMane) updateMane();
// Restore a sub-list (etiket, formên alternatîv, hevmane …) from a values array.
function restoreSubList(cls, values) {
if (!values || !values.length) return;
var groupDiv = block.find("." + cls + "-group");
var subList = groupDiv.find("ol, ul").first();
if (!subList.length) return; // group not found
var useModifiers = !!MODIFIER_SUBGROUPS[cls];
// Fill existing items, append new ones as needed.
$.each(values, function (j, val) {
var items = subList.find("li");
if (j < items.length) {
items.eq(j).find("textarea").val(val);
} else {
var ta = $("<textarea></textarea>")
.attr("name", "wiktku-dfn-restore-" + $.now() + "-" + Math.random().toString(36).substr(2, 9))
.attr("rows", 1)
.attr("class", "wiktku-dfn-subfield wiktku-start-narrow")
.val(val);
ta.on("input", function () {
steps.dfn.onSubInput(subList, this, 1, true, useModifiers);
});
subList.append(useModifiers ? makeModifierLi(ta) : $("<li></li>").append(ta));
}
});
}
// Reveal and populate lazy groups that have data.
var lazyMap = {
"wiktku-dfn-etiket": sense.etiket,
"wiktku-dfn-kategori": sense.kategori,
"wiktku-dfn-alternativ": sense.alternativ,
"wiktku-dfn-hevmane": sense.hevmane,
"wiktku-dfn-dijmane": sense.dijmane,
"wiktku-dfn-koordine": sense.koordine,
"wiktku-dfn-jornav": sense.jornav,
"wiktku-dfn-jernav": sense.jernav
};
$.each(lazyMap, function (cls, vals) {
if (vals && vals.length) restoreSubList(cls, vals);
});
// Nimûne items are objects { text, tr?, t? } — restore using the builder.
if (sense.nimune && sense.nimune.length) {
var nimuneGroupDiv = block.find(".wiktku-dfn-nimune-group");
var nimuneList = nimuneGroupDiv.find("ol.wiktku-dfn-nimune-list");
var buildFn = nimuneGroupDiv.data("buildNimuneLi");
nimuneList.empty();
$.each(sense.nimune, function (_, n) {
var text = typeof n === "object" ? (n.text || "") : n;
if (!text) return;
var li = buildFn ? buildFn() : $("<li class='wiktku-dfn-nimune-li'></li>");
li.find(".wiktku-dfn-nimune-text").val(text).each(function () { highlightLinebreak(this); });
if (n.tr) li.find(".wiktku-dfn-nimune-tr").val(n.tr);
if (n.t) li.find(".wiktku-dfn-nimune-t").val(n.t);
nimuneList.append(li);
});
// Always leave a blank trailing item.
if (buildFn) nimuneList.append(buildFn());
}
// Restore jêder entries — accepts current array shape or a legacy
// single object (older saved sections) for backwards compat.
var jederArr = $.isArray(sense.jeder) ? sense.jeder : (sense.jeder ? [sense.jeder] : []);
if (jederArr.length) {
var jederGroupDiv = block.find(".wiktku-dfn-jeder-group");
var jederList = jederGroupDiv.find("ol.wiktku-dfn-jeder-list");
var buildJederFn = jederGroupDiv.data("buildJederLi");
jederList.empty();
$.each(jederArr, function (_, j) {
if (!j || !j.quote) return;
var li = buildJederFn ? buildJederFn() : $("<li class='wiktku-dfn-jeder-li'></li>");
li.find(".wiktku-dfn-nimune-quote").val(j.quote).each(function () { highlightLinebreak(this); });
if (j.quoteTr) li.find(".wiktku-dfn-nimune-quote-tr").val(j.quoteTr);
if (j.quoteT) li.find(".wiktku-dfn-nimune-quote-t").val(j.quoteT);
if (j.jederManual) {
var manualSel = li.find(".wiktku-dfn-quote-src-sel");
manualSel.val("__manual__").trigger("change");
li.find(".wiktku-dfn-quote-src-manual").val(j.jederManual);
} else if (j.jederCatTpl) {
// Legacy format from before the şablon search switched rows to
// manual mode directly — convert it the same way now, so it's
// editable like any other free-form source.
var catSelEl = li.find(".wiktku-dfn-quote-src-sel");
catSelEl.val("__manual__").trigger("change");
li.find(".wiktku-dfn-quote-src-manual").val("{{" + j.jederCatTpl + "}}");
} else if (j.jederTpl) {
var srcSel = li.find(".wiktku-dfn-quote-src-sel");
srcSel.val(j.jederTpl).trigger("change");
if (j.jêderFields) {
$.each(j.jêderFields, function (key, val) {
li.find(".wiktku-dfn-quote-src-input[data-field-key='" + key + "']").val(val);
});
}
}
jederList.append(li);
});
// Always leave a blank trailing item, same as Nimûne.
if (buildJederFn) jederList.append(buildJederFn());
}
});
// Numbers and one-line summaries for the freshly rebuilt blocks, and
// collapse everything that has content — on a restored draft nothing
// is "the sense being edited" yet, so a five-sense entry would
// otherwise come back fully expanded, which is the state this
// accordion exists to avoid.
steps.dfn.syncSenseHeaders(stepDiv);
stepDiv.find("li.wiktku-dfn-sense").each(function () {
var li = $(this);
li.toggleClass("wiktku-sense-collapsed", steps.dfn.senseBlockHasContent(li));
});
}
// Snapshots simple (non-dfn) per-section steps from the DOM into obj.
function saveCurrentSection() {
var snap = {};
$.each(PER_SECTION_STEP_IDS, function (_, id) {
if (id === "dfn") {
snap.dfn = snapshotDfn();
return;
}
if (id === "etym") {
snap.etym = $.trim($("#wiktku-start-etym .wiktku-etym-text").val());
return;
}
if (id === "cavkani") {
snap.cavkani = $.trim($("#wiktku-start-cavkani .wiktku-cavkani-text").val());
return;
}
if (id === "posparams") {
snap.posparams = $.trim($("#wiktku-start-posparams .wiktku-posparams-text").val());
return;
}
if (id === "resim") {
// One entry per row, including blank ones, so a mid-edit draft
// (e.g. a filename typed but no caption yet) survives a cache
// restore instead of being silently dropped.
snap.resim = $("#wiktku-start-resim li.wiktku-resim-item").map(function () {
return {
file: $.trim($(this).find(".wiktku-resim-file").val()),
caption: $.trim($(this).find(".wiktku-resim-caption").val()),
alt: $.trim($(this).find(".wiktku-resim-alt").val())
};
}).get();
return;
}
var step = steps[id];
if (!step) return;
var stepDiv = $("#wiktku-start-" + id);
if (id === "trans") {
snap.trans = steps.trans.getTranslations(stepDiv);
return;
}
if (id === "zarava") {
snap.zarava = steps.zarava.getTranslations(stepDiv);
return;
}
if (id === "dunde") {
snap.dunde = steps.dunde.getRows(stepDiv);
return;
}
// Generic: read all step fields.
var fields = stepDiv.find(".wiktku-start-step-field");
if (step.multiple) {
snap[id] = fields.map(function () { return $(this).val(); }).get();
} else {
snap[id] = fields.val();
}
});
// Item 3: which "Beşên din" sub-sections this section has already
// opened via the picker — per-section, like everything else here.
snap.openedOtherSections = $.extend({}, openedOtherSections);
sections[activeSection] = snap;
}
// Restores a previously saved snapshot into the form DOM.
function restoreSection(snap) {
$.each(PER_SECTION_STEP_IDS, function (_, id) {
if (id === "dfn") {
restoreDfn(snap.dfn || []);
return;
}
if (id === "etym") {
$("#wiktku-start-etym .wiktku-etym-wrap").remove();
steps.etym.build($("#wiktku-start-etym"));
$("#wiktku-start-etym .wiktku-etym-text").val(snap.etym || "");
return;
}
if (id === "cavkani") {
$("#wiktku-start-cavkani .wiktku-cavkani-wrap").remove();
steps.cavkani.build($("#wiktku-start-cavkani"));
$("#wiktku-start-cavkani .wiktku-cavkani-text").val(snap.cavkani || "");
return;
}
if (id === "posparams") {
var ppDiv = $("#wiktku-start-posparams");
ppDiv.find(".wiktku-posparams-wrap").remove();
steps.posparams.build(ppDiv);
var savedTa = snap.posparams || "";
ppDiv.find(".wiktku-posparams-text").val(savedTa);
// Re-parse saved textarea to restore helper widget states.
if (savedTa) {
var cMatch = savedTa.match(/\|c=([^|}\s]+)/);
var jMatch = savedTa.match(/\|j=([^|}\s]+)/);
var trMatch = savedTa.match(/\|tr=([^|}\s]+)/);
// Write into the shared hidden field (not the visible
// select, which has no <option>s yet) — syncHelpers()
// below reads it back to restore the dropdown once the
// gender/number options for this language are populated.
if (cMatch) $("#wiktku-start-cinsiyet-field").val(cMatch[1]);
if (jMatch) $("#wiktku-start-jimar-field").val(jMatch[1]);
if (trMatch) ppDiv.find(".wiktku-posparams-field[data-pp-key='tr']").val(trMatch[1]);
// For lêker, c= holds the verb-type code instead of a
// gender — split it back across the two dropdowns it is
// now assembled from ("x-gh" → form "x" + base "gh").
if (cMatch && /^lêker/.test(snap.pos || "")) {
var lekturParts = /^(?:([xphb])-)?(n?gh)$/.exec(cMatch[1]);
if (lekturParts) {
ppDiv.find(".wiktku-posparams-lektur-sel").val(lekturParts[2]);
ppDiv.find(".wiktku-posparams-lekturform-sel").val(lekturParts[1] || "");
}
}
// Restore checked optional params. "form" is stored as
// "erê" rather than "1" (see rebuildTa), so it needs its
// own check here.
ppDiv.find(".wiktku-posparams-opt-panel input[type='checkbox']").each(function () {
var key = $(this).val();
var expected = key === "form" ? "erê" : "1";
$(this).prop("checked", savedTa.indexOf("|" + key + "=" + expected) !== -1);
});
}
steps.posparams.syncHelpers(ppDiv);
return;
}
if (id === "resim") {
var resimDiv = $("#wiktku-start-resim");
resimDiv.find(".wiktku-resim-wrap").remove();
steps.resim.build(resimDiv);
// Accept both the new array-of-rows format and the older
// single {file, caption} object saved before multi-image
// support existed.
var resimSnap = snap.resim;
var rows = $.isArray(resimSnap) ? resimSnap : (resimSnap ? [resimSnap] : []);
if (rows.length) {
var list = resimDiv.find("ol.wiktku-resim-list");
list.empty();
$.each(rows, function (_, r) {
var item = steps.resim.buildItem(resimDiv);
item.find(".wiktku-resim-file").val(r.file || "");
item.find(".wiktku-resim-caption").val(r.caption || "");
item.find(".wiktku-resim-alt").val(r.alt || "");
list.append(item);
});
// Always keep a blank trailing row, same as Nimûne/Dûnde.
var lastItem = list.children("li.wiktku-resim-item").last();
if ($.trim(lastItem.find(".wiktku-resim-file").val())) {
list.append(steps.resim.buildItem(resimDiv));
}
}
return;
}
if (id === "trans") {
// Rebuild trans groups (dfn must already be restored by this
// point in the $.each loop, so glossList() reflects it).
var transDiv = $("#wiktku-start-trans");
transDiv.find(".wiktku-trans-group").remove();
steps.trans.build(transDiv);
var groupsSnap = snap.trans || [];
$.each(groupsSnap, function (gi, rows) {
var group = transDiv.find(".wiktku-trans-group[data-gloss-pos='" + gi + "']");
if (!group.length) return; // gloss no longer exists — drop its rows
var list = group.find("ul.wiktku-trans-list");
$.each(rows, function (j, row) {
var lang = row[0], words = row[1];
var lastRow = list.find("li.wiktku-trans-row").last();
lastRow.find("select").val(lang).trigger("change");
var wordList = lastRow.find("ul.wiktku-trans-words");
$.each(words, function (k, word) {
var wordItems = wordList.find("li");
if (k < wordItems.length) {
wordItems.eq(k).find("textarea").val(word);
} else {
// .val() below doesn't fire "input", so the normal
// auto-grow never runs — append a matching item
// ourselves instead of silently dropping the word.
var extraInput = steps.trans.makeWordInput();
wordList.append($("<li></li>").append(extraInput));
extraInput.val(word);
}
});
// Leave one trailing empty field so the row can still grow
// when the user types, matching a freshly-built row.
if ($.trim(wordList.children("li").last().find("textarea").val())) {
wordList.append($("<li></li>").append(steps.trans.makeWordInput()));
}
});
});
return;
}
if (id === "zarava") {
// Rebuild zarava groups (dfn must already be restored by this
// point in the $.each loop, so glossList() reflects it).
var zaravaDiv = $("#wiktku-start-zarava");
zaravaDiv.find(".wiktku-zarava-group").remove();
steps.zarava.build(zaravaDiv);
var zaravaGroupsSnap = snap.zarava || [];
$.each(zaravaGroupsSnap, function (gi, rows) {
var group = zaravaDiv.find(".wiktku-zarava-group[data-gloss-pos='" + gi + "']");
if (!group.length) return; // gloss no longer exists — drop its rows
var list = group.find("ul.wiktku-zarava-list");
$.each(rows, function (j, row) {
var lang = row[0], words = row[1];
var lastRow = list.find("li.wiktku-zarava-row").last();
lastRow.find("select").val(lang).trigger("change");
var wordList = lastRow.find("ul.wiktku-zarava-words");
$.each(words, function (k, word) {
var wordItems = wordList.find("li");
if (k < wordItems.length) {
wordItems.eq(k).find("textarea").val(word);
} else {
var extraInput = steps.zarava.makeWordInput();
wordList.append($("<li></li>").append(extraInput));
extraInput.val(word);
}
});
if ($.trim(wordList.children("li").last().find("textarea").val())) {
wordList.append($("<li></li>").append(steps.zarava.makeWordInput()));
}
});
});
return;
}
if (id === "dunde") {
// Rebuild dunde rows.
var dundeDiv = $("#wiktku-start-dunde");
dundeDiv.find("ul.wiktku-dunde-list").remove();
steps.dunde.build(dundeDiv);
var dundeRows = snap.dunde || [];
$.each(dundeRows, function (i, row) {
var lang = row[0], words = row[1];
var list = dundeDiv.find("ul.wiktku-dunde-list");
var lastRow = list.find("li.wiktku-dunde-row").last();
lastRow.find("select").val(lang).trigger("change");
var wordList = lastRow.find("ul.wiktku-dunde-words");
$.each(words, function (j, word) {
var wordItems = wordList.find("li");
if (j < wordItems.length) {
wordItems.eq(j).find("textarea").val(word);
} else {
// .val() below doesn't fire "input", so the normal
// auto-grow never runs — append a matching item
// ourselves instead of silently dropping the word.
var extraInput = steps.dunde.makeWordInput();
wordList.append($("<li></li>").append(extraInput));
extraInput.val(word);
}
});
// Leave one trailing empty field so the row can still grow
// when the user types, matching a freshly-built row.
if ($.trim(wordList.children("li").last().find("textarea").val())) {
wordList.append($("<li></li>").append(steps.dunde.makeWordInput()));
}
});
return;
}
var step = steps[id];
if (!step) return;
var stepDiv = $("#wiktku-start-" + id);
var fields = stepDiv.find(".wiktku-start-step-field");
var val = snap[id];
if (val === undefined || val === null) return;
if (step.multiple) {
var arr = val;
fields.each(function (i) {
if (i < arr.length) $(this).val(arr[i]);
});
} else {
fields.val(val);
}
// Tell the pickers about the programmatic value change.
fields.filter("select").trigger("wiktku:refresh");
});
// Item 3: restore which "Beşên din" sub-sections were already opened
// for this section, then seed in anything the DOM restore above just
// filled in but that wasn't marked opened yet (e.g. an older cache
// saved before this existed).
openedOtherSections = $.extend({}, snap.openedOtherSections || {});
seedOpenedFromContent();
renderBesenDinPicker();
}
function getWikitextForCurrentSection(callback) {
var values = getValues();
var entry = steps.pos.output(values);
// Bilêvkirin is NOT emitted here — it is one shared field for the
// whole word, so emitting it per section duplicated it. getWikitext()
// prints it once, above the POS sections.
steps.dfn.getOutput(values, function (output) {
entry += output;
entry += steps.tewandin.output(values);
entry += steps.bikaranin.output(values);
entry += steps.alfabeyendin.output(values);
entry += steps.formalt.output(values);
entry += steps.hevmane.output(values);
entry += steps.dijmane.output(values);
entry += steps.jornav.output(values);
entry += steps.jernav.output(values);
entry += steps.je.output(values);
entry += steps.tekildar.output(values);
entry += steps.etym.output(values);
entry += steps.dunde.output(values);
entry += steps.binereherwiha.output(values);
entry += steps.zarava.output(values);
entry += steps.trans.output(values);
entry += steps.cavkani.output(values);
entry += steps.xwendin.output(values);
callback(entry, values);
});
}
function getWikitextAllSections(callback) {
saveCurrentSection();
var results = new Array(sections.length);
var sharedValues = getValues(); // lang/pron are shared
function processSection(i) {
// Each hop through here can be reached asynchronously: the dfn
// step waits on mw.loader.using("ext.gadget.linkify") before
// calling back, so from that point on the submit handler's own
// try/catch is no longer on the stack. Guard every hop instead,
// or a throw after linkify loads vanishes into an unhandled
// rejection and the form just sits there looking busy.
try {
if (i >= sections.length) {
// All done — restore original active section.
restoreSection(sections[activeSection]);
refresh();
callback(results, sharedValues);
return;
}
restoreSection(sections[i]);
refresh();
getWikitextForCurrentSection(function (sectionText) {
results[i] = sectionText;
processSection(i + 1);
});
} catch (e) {
if (typeof onSubmitError === "function") onSubmitError(e);
else throw e;
}
}
processSection(0);
}
// Assembles wikitext for all sections plus the shared lang header.
// pron used to be prepended here too (shared, above every section) —
// it now nests inside each section instead, via getWikitextForCurrentSection.
function getWikitext(callback) {
getWikitextAllSections(function (sectionTexts, sharedValues) {
var bnrh = steps.bnrh.output(sharedValues);
var entry = steps.lang.output(sharedValues);
// One pronunciation per word, printed once between the language
// header and the POS sections — see steps.pron.output.
entry += steps.pron.output(sharedValues);
entry += sectionTexts.join("\n");
// bnr-h goes before the language section — only prepended when
// generating fresh wikitext (not addLangMode, which handles it separately).
if (!addLangMode && bnrh) entry = bnrh + entry;
// Edit summary uses section 0's values. Read from the saved snapshot
// (not the live DOM) so it doesn't mix section 0's pos with whichever
// section happens to be active/restored at this point.
var dfnSenses = (sections[0] && sections[0].dfn) || [];
var dfnSummary = dfnSenses.map(function (s) {
if (s.mane) return s.mane;
// Template sense (e.g. {{guharto|ku|somepage}}) — same
// construction as the tplCall built in getOutput, so the
// summary shows what actually gets written to the entry
// instead of going blank.
if (s.tpl && s.tplTitle) {
return s.tplNoLang
? "{{" + s.tpl + "|" + s.tplTitle + "}}"
: "{{" + s.tpl + "|" + sharedValues.lang + "|" + s.tplTitle + "}}";
}
return "";
}).filter(Boolean).join("; ");
var summary = "([[Mediawiki:Gadget-start.js|WF:NÛ]] v.2.0) +" +
sharedValues.lang + ":" + sections[0].pos + ":" + dfnSummary;
var summaryField = document.getElementById("wpSummary");
if (addLangMode && summaryField.value) {
summary = summaryField.value + " " + summary;
}
summaryField.value = summary;
callback(entry);
});
}
var continueBtn;
// Set by build() to its submitFailed(). Lives out here because the
// wikitext-assembly functions below are outside build()'s closure but
// still need a way to report a failure to the person rather than dying
// silently in the console.
var onSubmitError = null;
// Item 7: whether Mane/Bi zaravayên din/Werger has anything in it —
// kept outside refresh() so the click handler (defined separately,
// where continueBtn is built) can read the latest value.
var wiktkuContentGateOk = true;
function getValuesForStep(stepId) {
var fields = $("#wiktku-start-" + stepId + " .wiktku-start-step-field");
var step = steps[stepId];
if (step.keys) {
var values = {};
fields.each(function (i, field) {
var key = $(field).prevAll(".wiktku-start-step-keyfield").val();
if (key) values[key] = $(field).val();
});
return values;
}
else if (step.multiple) {
return fields.map(function () {
return $(this).val();
}).get();
}
return fields.val();
}
function getValues() {
var values = {};
$.each(steps, function (stepId) {
values[stepId] = getValuesForStep(stepId);
});
return values;
}
function populateMenus(inputs, choices, disabledValues, placeholderText) {
if (!disabledValues) disabledValues = {};
var vals = inputs.map(function (i, input) {
return $(input).val();
});
inputs.empty();
inputs.append($("<option></option>").text(placeholderText || ""));
$.each(choices, function (j, choice) {
// Append the language code in parentheses so that typing a code
// (e.g. "ku") in the search box still finds the language name.
var displayText = capitalize(choice.label);
if (choice.sortKey !== undefined) {
// This is a language choice {code, label, sortKey} — show code.
displayText = capitalize(choice.label) + " (" + choice.code + ")";
}
var option = $(mw.html.element("option", {
value: choice.code }, displayText));
if (disabledValues[choice.code]) option.prop("disabled", true);
inputs.append(option);
});
inputs.val(function (i) {
return vals[i];
});
}
// Keys to disable for a key menu: already-taken or explicitly disabled.
function getDisabledKeys(step) {
var occupiedKeys = {};
$("#wiktku-start-" + step.id + " .wiktku-start-step-keyfield").each(function () {
occupiedKeys[$(this).val()] = true;
});
if (step.disabledKeys) $.extend(occupiedKeys, step.disabledKeys);
return occupiedKeys;
}
function buildKeyInput(step) {
if (!step.keys) return undefined;
var input = $(mw.html.element("select", {
"class": "wiktku-start-step-keyfield wiktku-start-narrow" }));
input.attr("data-placeholder", "Hilbijêre " + step.keyName);
populateMenus(input, step.keys, getDisabledKeys(step));
// Keep the key menus mutually exclusive: whatever one row selects is
// disabled in every other row. Recomputed from the DOM on each change.
input.on("change", function () {
var all = $("#wiktku-start-" + step.id + " .wiktku-start-step-keyfield");
var taken = {};
all.each(function () {
var v = $(this).val();
if (v) taken[v] = true;
});
all.not(this).each(function () {
var self = $(this), own = self.val();
self.find("option").each(function () {
var code = $(this).val();
if (code) $(this).prop("disabled", !!taken[code] && code !== own);
});
self.trigger("wiktku:refresh");
});
});
// Return the wrapper; the select lives inside it and still fires change.
return wrapNativeSelect(input);
}
// Adds another text field to the list if the last one now has text.
function refreshForTextField(currentInput, step) {
currentInput = $(currentInput);
var value = currentInput.val();
var item = currentInput.parent();
if (value && !item.next("li").length) {
var nextInput = $("<textarea></textarea>")
.attr("name", "wiktku-field-" + $.now() + "-" + Math.random().toString(36).substr(2, 9))
.attr("class", currentInput.attr("class"))
.attr("rows", currentInput.attr("rows") || 1);
if (step.placeholder) {
nextInput.attr("placeholder", typeof step.placeholder === "function" ? step.placeholder() : step.placeholder);
}
nextInput.on("input", function (evt) {
refreshForTextField(evt.target, step);
});
var nextKeyInput = buildKeyInput(step);
var nextItem = step.modifiers
? makeModifierLi(nextInput).prepend(nextKeyInput || "")
: $("<li></li>").append(nextKeyInput).append(nextInput);
item.parent().append(nextItem);
if (nextKeyInput) initSelects(nextItem);
}
var canContinue = !continueBtn.isDisabled();
if ((value && !canContinue) || (!value && canContinue)) {
refresh(step);
}
}
function prepareInput(input, step) {
if (!input) return;
if (step.required) input.prop('required', true);
input.change(step, refresh);
}
// Shows/hides steps based on whether their prerequisites are met, and
// updates placeholders where applicable.
function refresh(evt) {
var values = getValues();
var changedStep = evt && evt.data;
var canContinue = true;
// Re-filter template options in every sense block whenever lang changes.
$("#wiktku-start-dfn .wiktku-dfn-tpl-select").each(function () {
var fn = $(this).data("updateOptions");
if (typeof fn === "function") fn();
});
// Re-filter pronunciation and etymology template dropdowns when language changes.
steps.pron.refreshTplSelect();
steps.etym.refreshTplSelect();
steps.cavkani.refreshTplSelect();
// Re-render any step's question label that depends on current values
// (e.g. dfn's Werger-section reminder, which only applies to ku).
$.each(steps, function (stepId, step) {
if (typeof step.question_fmt === "function") {
$("#wiktku-start-" + stepId + " .wiktku-start-step-question")
.text(step.question_fmt(values));
}
});
// Sync every sense block's mane-box mode (plain mane vs tercime+îzah)
// to the current language, in case lang changes after blocks exist.
$("#wiktku-start-dfn li.wiktku-dfn-sense").each(function () {
var updateMane = $(this).data("updateManeMode");
if (updateMane) updateMane();
});
// Sync tr/t sub-fields in every nimûne item to the current language.
// tr shown when language needs transliteration; t shown when lang !== "ku".
(function () {
var lang = values.lang || "";
var showTr = needsTransliteration(lang);
var showT = lang && lang !== "ku";
$("#wiktku-start-dfn .wiktku-dfn-nimune-list li.wiktku-dfn-nimune-li").each(function () {
var li = $(this);
// Ensure the sub-wrapper exists when we need it.
var subWrap = li.find(".wiktku-dfn-nimune-sub");
// tr field
var trTa = li.find(".wiktku-dfn-nimune-tr");
if (showTr && !trTa.length) {
if (!subWrap.length) {
subWrap = $("<div></div>").addClass("wiktku-dfn-nimune-sub");
li.append(subWrap);
}
trTa = $("<textarea></textarea>")
.attr("name", "wiktku-dfn-nimune-tr-" + $.now() + "-" + Math.random().toString(36).substr(2, 9))
.attr("rows", 5)
.attr("class", "wiktku-dfn-subfield wiktku-dfn-nimune-tr")
.attr("placeholder", "Transliterasyon…");
subWrap.prepend(trTa);
} else if (!showTr && trTa.length) {
trTa.remove();
}
// t field
var tTa = li.find(".wiktku-dfn-nimune-t");
if (showT && !tTa.length) {
if (!subWrap.length) {
subWrap = $("<div></div>").addClass("wiktku-dfn-nimune-sub");
li.append(subWrap);
}
tTa = $("<textarea></textarea>")
.attr("name", "wiktku-dfn-nimune-t-" + $.now() + "-" + Math.random().toString(36).substr(2, 9))
.attr("rows", 5)
.attr("class", "wiktku-dfn-subfield wiktku-dfn-nimune-t")
.attr("placeholder", "Tercimeya nimûneyê bi kurmancî…");
subWrap.append(tTa);
} else if (!showT && tTa.length) {
tTa.remove();
}
// Remove the wrapper if it ended up empty.
subWrap = li.find(".wiktku-dfn-nimune-sub");
if (subWrap.length && !subWrap.children().length) subWrap.remove();
});
}());
// Re-sync the "<label> bi <ziman>…" placeholder on every always-visible
// sub-field list (etîket, kategorî, hevmane, …), since the language may
// not have been chosen yet when these lists were first built, or may
// have changed since.
$("#wiktku-start-dfn .wiktku-dfn-sublist").each(function () {
var upd = $(this).data("updatePlaceholders");
if (typeof upd === "function") upd();
});
// Same idea for word-list steps (jê, têkildar, binêre herwiha, …)
// whose placeholder is a function of the current language.
$.each(steps, function (stepId, step) {
if (typeof step.placeholder === "function") {
$("#wiktku-start-" + stepId + " textarea.wiktku-start-step-field")
.attr("placeholder", step.placeholder());
}
});
// Sync tr/t sub-fields in every jêder citation to the current language.
// tr shown when language needs transliteration; t shown when lang !== "ku".
(function () {
var lang = values.lang || "";
var showTr = needsTransliteration(lang);
var showT = lang && lang !== "ku";
$("#wiktku-start-dfn .wiktku-dfn-jeder-list li.wiktku-dfn-jeder-li").each(function () {
var li = $(this);
// Ensure the sub-wrapper exists when we need it. It must sit right
// after the quote textarea and before the source selector.
var subWrap = li.find(".wiktku-dfn-quote-sub");
// tr field
var trTa = li.find(".wiktku-dfn-nimune-quote-tr");
if (showTr && !trTa.length) {
if (!subWrap.length) {
subWrap = $("<div></div>").addClass("wiktku-dfn-quote-sub");
// Insert after the quote textarea's resize-wrap (if the manual
// resize handle has already been attached to it), not after the
// bare textarea -- otherwise this lands *inside* that wrap,
// between the textarea and its own grip, breaking jêgirtin's
// handle and nesting the tr/t boxes inside it.
var quoteTa = li.find(".wiktku-dfn-nimune-quote");
var quoteResizeWrap = quoteTa.closest(".wiktku-resize-wrap");
(quoteResizeWrap.length ? quoteResizeWrap : quoteTa).after(subWrap);
}
trTa = $("<textarea></textarea>")
.attr("name", "wiktku-dfn-nimune-quote-tr-" + $.now() + "-" + Math.random().toString(36).substr(2, 9))
.attr("rows", 2)
.attr("class", "wiktku-dfn-subfield wiktku-dfn-nimune-quote-tr")
.attr("placeholder", "Transliterasyona jêgirtinê…");
subWrap.prepend(trTa);
} else if (!showTr && trTa.length) {
trTa.remove();
}
// t field
var tTa = li.find(".wiktku-dfn-nimune-quote-t");
if (showT && !tTa.length) {
if (!subWrap.length) {
subWrap = $("<div></div>").addClass("wiktku-dfn-quote-sub");
// See the tr-field branch above for why this targets the
// resize-wrap instead of the bare textarea.
var quoteTa2 = li.find(".wiktku-dfn-nimune-quote");
var quoteResizeWrap2 = quoteTa2.closest(".wiktku-resize-wrap");
(quoteResizeWrap2.length ? quoteResizeWrap2 : quoteTa2).after(subWrap);
}
tTa = $("<textarea></textarea>")
.attr("name", "wiktku-dfn-nimune-quote-t-" + $.now() + "-" + Math.random().toString(36).substr(2, 9))
.attr("rows", 2)
.attr("class", "wiktku-dfn-subfield wiktku-dfn-nimune-quote-t")
.attr("placeholder", "Tercimeya jêgirtinê bi kurmancî…");
subWrap.append(tTa);
} else if (!showT && tTa.length) {
tTa.remove();
}
// Remove the wrapper if it ended up empty.
subWrap = li.find(".wiktku-dfn-quote-sub");
if (subWrap.length && !subWrap.children().length) subWrap.remove();
});
}());
$.each(steps, function (stepId, step) {
var groupIdx = stepIdToGroup[stepId];
var hiddenByTab = (groupIdx !== undefined && groupIdx !== activeGroup) ||
// Beşên din picker (point 3): stays hidden even while its tab
// is active until explicitly opened from the dropdown.
(BESENDIN_SET[stepId] && !openedOtherSections[stepId]);
// Bilêvkirin is its own section now, so the two views are
// mutually exclusive: on it, only pron shows (plus Ziman, which
// is shared and stays above every section); off it, pron is
// hidden no matter which tab is active. pron is deliberately
// ungrouped — stepIdToGroup has no entry for it — so without
// this branch it would show on all four tabs at once.
if (stepId === "pron") {
hiddenByTab = hiddenByTab || !viewingPron;
} else if (viewingPron && stepId !== "lang") {
hiddenByTab = true;
}
if (hiddenByTab || (typeof(step.visible) === "function" && !step.visible(values))) {
$("#wiktku-start-" + stepId).hide();
}
else {
var stepDiv = $("#wiktku-start-" + stepId);
if (changedStep !== step && typeof(step.build) === "function") {
prepareInput(step.build(stepDiv, values), step);
}
// After build, sync the posparams helper widgets whenever pos or lang changes.
if (step.id === "posparams" && typeof step.syncHelpers === "function") {
step.syncHelpers(stepDiv);
}
var input = stepDiv.find(".wiktku-start-step-field");
if (typeof(step.example) === "function") {
// .find() above already reaches nested fields (e.g. the dfn
// step's mane textareas inside each sense block), so one
// assignment covers every step; dfn keeps its own fallback.
var exampleText = step.example(values) || (step.id === "dfn" ? "Mane…" : "");
input.attr("placeholder", exampleText);
}
stepDiv.slideDown();
}
if (step.required &&
(values[stepId] === "" ||
(step.multiple && values[stepId].join("") === ""))) {
canContinue = false;
}
});
// The four content tabs belong to a POS section — Bilêvkirin has no
// sub-tabs of its own, so the bar goes away while it's on screen.
$("#wiktku-group-tabs").toggle(!!values.pos && !viewingPron);
var besenDinActive = activeGroup === BESENDIN_GROUP_IDX && !viewingPron;
$("#wiktku-besendin-picker").toggle(besenDinActive);
// The option list is filtered by each step's visible(), which depends
// on lang/pos — so it has to be rebuilt when those change, not just
// when a section is opened. Safe to call from here: rendering the
// picker doesn't itself call refresh(), only picking an option does.
if (besenDinActive) renderBesenDinPicker();
updateGroupTabIndicators(values);
continueBtn.setDisabled(!canContinue);
// Soft gate (item 7): stays a real, clickable OOUI button — a hard
// setDisabled(true) here would swallow the click entirely, and then
// there'd be no way to tell the person *why* nothing happened. The
// CSS-only "looks disabled" class lets the click handler still run
// and show wiktkuNotify's explanation.
wiktkuContentGateOk = !canContinue || hasMinRequiredContent(values);
continueBtn.$element.toggleClass("wiktku-btn-soft-disabled", !wiktkuContentGateOk);
}
function destroy() {
if (autosaveDebounceTimer) clearTimeout(autosaveDebounceTimer);
if (autosaveInterval) clearInterval(autosaveInterval);
formDirty = false;
$(window).off("beforeunload.wiktkuUnsaved");
$("#wiktku-start-form, .noafterwizard").slideUp(function () {
$(this).remove();
});
$(".noarticletext .nowizard").slideDown();
// #editform was kept laid-out but off-screen (see build()) instead of
// display:none, precisely so the editor never had to size itself
// against a zero-width/height box. Just bring it back on-screen —
// no slideDown needed since it was never actually collapsed.
$("#editform").removeClass("wiktku-offscreen");
// Belt-and-braces: if WikiEditor/CodeMirror/mobile's auto-grow still
// cached a stale size from some earlier point, nudge them to
// recalculate now that the box is genuinely visible.
$(window).trigger("resize");
if (window.CodeMirror) {
var cm = $("#wpTextbox1").data("CodeMirror") || $("#wpTextbox1").data("cmInstance");
if (cm && typeof cm.refresh === "function") cm.refresh();
}
$("#ca-edit").removeClass("selected");
$("#ca-wiktku-nowizard").addClass("selected");
}
// Priority order for Kurdish dialects and navz.
// Codes listed here come before all other languages; unlisted codes
// are sorted alphabetically by their display name via localeCompare.
var LANG_PRIORITY = ["navz", "ku", "hac", "sdh", "lki", "ckb", "zza"];
// Inserts a new "== {{ziman|code}} ==" section at the correct sorted
// position: navz, then ku/hac/sdh/lki/ckb/zza, then alphabetical by name.
function insertNewLangSection(existing, wikitext) {
var newCodeMatch = wikitext.match(new RegExp("^" + langHeaderSource("[^}]+")));
var newCode = newCodeMatch ? newCodeMatch[1] : "";
var sections = [];
var preamble = "";
var anyHeaderSrc = langHeaderSource("[^}]+");
var firstMatch = new RegExp("^" + anyHeaderSrc, "m").exec(existing);
if (!firstMatch) {
// No existing lang sections — just write the new section.
// Add \n\n only when there is real non-whitespace content above.
var trimmed = existing.replace(/\s+$/, "");
return trimmed ? trimmed + "\n\n" + wikitext : wikitext;
}
// Everything before the first == {{ziman|...}} == is the preamble.
var firstSectionStart = firstMatch.index;
// Walk back to the start of that line.
var lineStart = existing.lastIndexOf("\n", firstSectionStart - 1);
var preambleEnd = lineStart !== -1 ? lineStart + 1 : 0;
preamble = existing.slice(0, preambleEnd);
// Parse each language section: header line + everything until the next header.
var body = existing.slice(preambleEnd);
// (?![\s\S]) matches only true end-of-string, since a bare "$" with
// /m would stop at the section's first line break instead.
var langSectionRe = new RegExp(
"^(" + anyHeaderSrc + "\\n?)([\\s\\S]*?)(?=\\n" + anyHeaderSrc + "|(?![\\s\\S]))",
"gm"
);
var m;
while ((m = langSectionRe.exec(body)) !== null) {
sections.push({
code: m[2],
content: m[0] // full text of this section including header
});
}
// Determine sort rank: priority list first (by index), then alphabetical.
function getLangName(code) {
var entry = langsByCode[code];
return entry ? entry.label : code;
}
function sortRank(code) {
var idx = LANG_PRIORITY.indexOf(code);
return idx !== -1 ? idx : LANG_PRIORITY.length;
}
function compareLangs(a, b) {
var ra = sortRank(a), rb = sortRank(b);
if (ra !== rb) return ra - rb;
// Both are outside priority list — sort by display name.
return getLangName(a).localeCompare(getLangName(b), userLang);
}
// Insert the new section into the sorted list.
var newSection = { code: newCode, content: wikitext };
var inserted = false;
for (var i = 0; i < sections.length; i++) {
if (compareLangs(newCode, sections[i].code) < 0) {
sections.splice(i, 0, newSection);
inserted = true;
break;
}
}
if (!inserted) sections.push(newSection);
// Re-join: preamble + sections, each separated by exactly \n\n.
// Trim trailing whitespace off each section's content first so we
// control the spacing precisely.
var joined = sections.map(function (s) {
return s.content.replace(/\s+$/, "");
}).join("\n\n");
// Only add a separator after the preamble when it has real content.
var preambleTrimmed = preamble.replace(/\s+$/, "");
var prefix = preambleTrimmed ? preambleTrimmed + "\n\n" : "";
return prefix + joined + "\n";
}
function build() {
$(".nowizard, .nowizard .noafterwizard").hide();
var callToAction = $("#wiktku-calltoaction");
var origCallToActionText = callToAction.text();
$(mw.util.addPortletLink("p-views", "#", "Edîtora çavkaniyê veke",
"ca-wiktku-nowizard", "Vê rûpelê bi edîtora çavkaniyê çêke",
undefined, "#ca-watch")).click(function (evt) {
evt.preventDefault();
callToAction.text(origCallToActionText);
destroy();
});
if (callToAction.length) {
callToAction.text(origCallToActionText +
" Forma li jêr ji bo çêkirina madeyeke nû bi kar bîne.");
}
var startForm = $("<form id='wiktku-start-form'></form>");
var clearPageCheck = null;
if (addLangMode) {
startForm.append($("<p class='wiktku-addlang-notice'></p>").html(
"Bi vê formê tu yê zimanekî nû li rûpelê îlawe bikî. Eger ev ziman jixwe hebe, beşa nû li dawiya vî zimanî dê were îlawekirin. " +
"Ji kerema xwe netîceya dawî kontrol bike, eger problemek derkeve, li <a href='" +
mw.util.getUrl('Mediawiki talk:Gadget-start.js') +
"'>nîqaşa vê amûrê</a> problemê ragihîne."
));
clearPageCheck = $("<input type='checkbox' id='wiktku-clear-page-check'>");
var clearPageLabel = $("<label for='wiktku-clear-page-check'></label>")
.text(" Muhtewaya rûpelê paqij bike (her tiştî jê bibe û rûpelê ji nû ve binivîse)");
startForm.append(
$("<p class='wiktku-addlang-notice'></p>")
.append(clearPageCheck)
.append(clearPageLabel)
);
// Re-evaluate step visibility (e.g. the pron step) whenever this
// is toggled, since it changes what counts as "existing content".
clearPageCheck.on("change", function () {
refresh();
});
}
var spinner;
// Tab bar for switching between POS sections.
var sectionTabsDiv = $("<div id='wiktku-section-tabs'></div>");
// Tab bar for switching between step-groups (topics) within a section.
// renderGroupTabs()/updateGroupTabIndicators() (which populate and
// maintain it) live outside build() — see near "var activeSection".
var groupTabsDiv = $("<div id='wiktku-group-tabs'></div>");
// Wikihez, 14 Tebax 2026 (item 3): "Beşên din" picker — sits right under
// the group tab bar, only shown while that tab is active (toggled in
// refresh(), see BESENDIN_GROUP_IDX); renderBesenDinPicker() fills it.
var besenDinPickerDiv = $("<div id='wiktku-besendin-picker' class='wiktku-besendin-picker'></div>");
/** Puts the form back in a usable state after a failed submit and
* says what happened. Without this the button stays disabled and
* the spinner spins forever on any exception — the person is left
* staring at a form that looks busy but is dead, with the reason
* visible only in the browser console. */
function submitFailed(err) {
spinner.hide();
continueBtn.setDisabled(false);
continueBtn.$element.removeClass("wiktku-btn-sending");
var detail = (err && (err.message || err.toString())) || "sedem nediyar";
mw.notify(
"Şandin bi ser neket: " + detail +
" — tiştê ku te nivîsî winda nebûye. Heke ev dubare bibe, " +
"bi 'Edîtora çavkaniyê veke' berdewam bike.",
{ type: "error", tag: "wiktku-submit", autoHide: false }
);
// Deliberately console.error as well: the notification is for the
// person, this is for whoever they report the bug to.
if (window.console && console.error) console.error("[wiktku] submit failed", err);
}
onSubmitError = submitFailed;
startForm.submit(function (evt) {
evt.preventDefault();
continueBtn.setDisabled(true);
continueBtn.$element.addClass("wiktku-btn-sending");
spinner.show();
try {
getWikitext(function (wikitext) {
try {
if (addLangMode && clearPageCheck && clearPageCheck.prop("checked")) {
// User asked to wipe the page — write fresh content.
$("#wpTextbox1").val(wikitext);
} else if (addLangMode) {
var textbox = $("#wpTextbox1");
var existing = textbox.val() || "";
// ── bnr-h merge ──────────────────────────────────────────
// If the user filled bnr-h inputs, either merge into the
// existing {{bnr-h|…}} call or prepend a new one.
var bnrhOut = steps.bnrh.output(getValues());
if (bnrhOut) {
var newPages = bnrhOut.replace(/^\{\{bnr-h\|/, "").replace(/\}\}\n?$/, "").split("|");
var bnrhRe = /\{\{bnr-h\|([^}]*)\}\}/i;
if (bnrhRe.test(existing)) {
existing = existing.replace(bnrhRe, function (_, inner) {
var existingPages = inner.split("|").map(function (p) { return p.trim(); });
$.each(newPages, function (_, p) {
p = p.trim();
if (p && existingPages.indexOf(p) === -1) existingPages.push(p);
});
return "{{bnr-h|" + existingPages.join("|") + "}}";
});
} else {
existing = bnrhOut + existing;
}
}
// If this language's section already exists (whitespace
// differences aside), merge into it; otherwise insert new.
var langHeaderMatch = wikitext.match(new RegExp("^(" + langHeaderSource("[^}]+") + "\\n)"));
if (langHeaderMatch) {
var langHeader = langHeaderMatch[1]; // e.g. "== {{ziman|ku}} ==\n"
var newCode = langHeaderMatch[2];
var existingHeader = findLangHeader(existing, newCode);
if (existingHeader) {
// Strip the header from the new output.
var newContent = wikitext.slice(langHeader.length);
// Find the insertion point: end of the existing lang section.
// A new L2 heading marks the start of the next language block.
var searchFrom = existingHeader.index + existingHeader.match.length;
// Find the next == … == heading after this section's start.
var nextL2 = existing.indexOf("\n== ", searchFrom);
var insertAt = nextL2 !== -1 ? nextL2 : existing.length;
// Ensure there's a blank line before the inserted block.
var before = existing.slice(0, insertAt);
var after = existing.slice(insertAt);
var sep = /\n\s*$/.test(before) ? "" : "\n";
textbox.val(before + sep + newContent + after);
} else {
// New language — insert at the correct sorted position.
textbox.val(insertNewLangSection(existing, wikitext));
}
} else {
// Unexpected format — insert at sorted position anyway.
textbox.val(insertNewLangSection(existing, wikitext));
}
} else {
$("#wpTextbox1").val(wikitext);
}
$("html, body").animate({scrollTop: 0});
callToAction.text("Hindik ma!");
destroy();
} catch (e) {
// Thrown while writing the result into #wpTextbox1.
submitFailed(e);
}
});
} catch (e) {
// Thrown synchronously inside getWikitext — this is where the
// splitTercimeIzah ReferenceError surfaced, and it produced no
// message at all before this guard existed.
submitFailed(e);
}
});
// Tracks whether groupTabsDiv has been inserted yet — see the
// step.id-driven check below, replaced because it silently broke
// when bnrh/resim/pron moved ahead of "dfn" in ordered_steps.
var groupTabsInserted = false;
$.each(ordered_steps, function (i, step) {
var stepDiv = $(mw.html.element("div", {
"class": "wiktku-start-step",
id: "wiktku-start-" + step.id }));
var name = capitalize(step.name);
var nameH3 = $("<h3></h3>").addClass("wiktku-start-step-name");
var nameLabel = $("<label></label>")
.attr("for", "wiktku-start-" + step.id + "-field")
.text(name);
nameH3.append(nameLabel);
stepDiv.append(nameH3);
if (step.question_fmt) {
// question_fmt can be a plain string, or a function of the
// current values (used by steps whose question text depends
// on e.g. the chosen language) — refresh() keeps it in sync
// afterwards via the .wiktku-start-step-question class.
var questionText = typeof step.question_fmt === "function"
? step.question_fmt(getValues())
: step.question_fmt;
stepDiv.append($(mw.html.element("label", {
"class": "wiktku-start-step-question",
"for": "wiktku-start-" + step.id + "-field" }, questionText)));
if (step.question_br) stepDiv.append($("<br>"));
}
var input;
if (step.choices) {
input = $(mw.html.element("select", {
"class": "wiktku-start-step-field",
id: "wiktku-start-" + step.id + "-field" }));
input.attr("data-placeholder",
capitalize(step.name) + " hilbijêre ");
populateMenus(input, step.choices);
if (step.multiple) input.attr("multiple", true);
// initSelects() runs over the whole form once it is in the DOM.
stepDiv.append(input);
} else if (typeof(step.build) === "function") {
input = step.build(stepDiv);
} else {
input = $("<textarea></textarea>")
.attr("class", "wiktku-start-step-field")
.attr("id", "wiktku-start-" + step.id + "-field")
.attr("rows", step.rows || 2);
if (step.narrow) input.addClass("wiktku-start-narrow");
if (step.placeholder) {
input.attr("placeholder", typeof step.placeholder === "function" ? step.placeholder() : step.placeholder);
}
if (step.multiple) {
input.on("input", function (evt) {
refreshForTextField(evt.target, step);
});
var keyInput = buildKeyInput(step);
var list = $(step.ordered ? "<ol></ol>" : "<ul></ul>")
.append(step.modifiers
? makeModifierLi(input)
: $("<li></li>").append(keyInput).append(input));
stepDiv.append(list);
}
else stepDiv.append(input);
}
prepareInput(input, step);
stepDiv.hide();
// Section tabs (switch between POS sections) sit above the
// per-section fields, starting at "pos".
if (step.id === "pos") {
startForm.append(sectionTabsDiv);
}
// Step-group tabs sit just before the first grouped step in
// ordered_steps — whichever one that is. This USED to be a
// hardcoded "dfn" check, back when dfn was the first grouped
// step. Once bnrh/resim/pron moved into STEP_GROUPS too (and
// earlier in ordered_steps than dfn, so they render near
// pos/posparams), that check stopped matching anything: dfn was
// no longer first, so groupTabsDiv never got appended at all,
// and every grouped step's div — bnrh/resim/pron included — sat
// there with no tab bar above it to reveal them. Deriving the
// insertion point from stepIdToGroup instead means this keeps
// working no matter how STEP_GROUPS/ordered_steps get reordered
// later.
if (!groupTabsInserted && stepIdToGroup[step.id] !== undefined) {
startForm.append(groupTabsDiv);
startForm.append(besenDinPickerDiv);
groupTabsInserted = true;
}
startForm.append(stepDiv);
});
// ── Section tab helpers ──────────────────────────────────────────────
// ── Add-section button — lives in the tab bar, disabled until pos chosen ──
var addSectionBtn = new OO.ui.ButtonWidget({
label: "+ Beş zêde bike",
disabled: true
});
/** Adds a new, empty POS section and switches to it. */
function addPosSection() {
saveCurrentSection();
viewingPron = false;
sections.push({});
activeSection = sections.length - 1;
$.each(PER_SECTION_STEP_IDS, function (_, id) {
if (id === "dfn") {
var stepDiv = $("#wiktku-start-dfn");
stepDiv.find("ol.wiktku-dfn-list").remove();
stepDiv.find(".wiktku-add-sense").remove();
steps.dfn.build(stepDiv);
return;
}
if (id === "etym") {
$("#wiktku-start-etym .wiktku-etym-wrap").remove();
steps.etym.build($("#wiktku-start-etym"));
return;
}
if (id === "cavkani") {
$("#wiktku-start-cavkani .wiktku-cavkani-wrap").remove();
steps.cavkani.build($("#wiktku-start-cavkani"));
return;
}
if (id === "posparams") {
var ppDiv = $("#wiktku-start-posparams");
ppDiv.find(".wiktku-posparams-wrap").remove();
return;
}
if (id === "resim") {
$("#wiktku-start-resim .wiktku-resim-wrap").remove();
return;
}
if (id === "trans") {
var transDiv = $("#wiktku-start-trans");
transDiv.find(".wiktku-trans-group").remove();
return;
}
if (id === "zarava") {
var zaravaDiv = $("#wiktku-start-zarava");
zaravaDiv.find(".wiktku-zarava-group").remove();
return;
}
if (id === "dunde") {
var dundeDiv = $("#wiktku-start-dunde");
dundeDiv.find("ul.wiktku-dunde-list").remove();
return;
}
var stepDiv = $("#wiktku-start-" + id);
stepDiv.find(".wiktku-start-step-field").val("");
stepDiv.find("select.wiktku-start-step-field").trigger("wiktku:refresh");
});
// Fresh section — no "Beşên din" sub-section has been opened yet.
openedOtherSections = {};
renderBesenDinPicker();
renderSectionTabs();
refresh();
}
// One action again: Bilêvkirin is always in the bar now, so the menu
// that used to offer both would have had a single entry.
addSectionBtn.on("click", addPosSection);
/** Re-render the tab bar to reflect current sections[] and activeSection. */
function renderSectionTabs() {
// Detach (not remove) the button first: .empty() strips bound
// event data from any children left inside it, which would
// silently kill addSectionBtn's click handler on every re-render.
addSectionBtn.$element.detach();
sectionTabsDiv.empty();
var lang = getValues().lang || "";
if (!lang) {
sectionTabsDiv.hide();
return;
}
sectionTabsDiv.show();
// Bilêvkirin leads the bar, ahead of the POS sections.
var pronTab = $("<span></span>")
.addClass("wiktku-section-tab wiktku-section-tab-pron")
.text("Bilêvkirin")
.toggleClass("wiktku-tab-active", viewingPron);
pronTab.on("click", function () {
if (viewingPron) return;
saveCurrentSection();
viewingPron = true;
refresh();
renderSectionTabs();
});
sectionTabsDiv.append(pronTab);
$.each(sections, function (i) {
var posVal = sections[i].pos || "";
var tabLabel = posVal ? capitalize(posVal) : ("Beş " + (i + 1));
var tab = $("<span></span>")
.addClass("wiktku-section-tab")
.text(tabLabel)
.toggleClass("wiktku-tab-active", i === activeSection && !viewingPron);
(function (idx) {
tab.on("click", function () {
if (idx === activeSection && !viewingPron) return;
// Leaving Bilêvkirin doesn't need a save — its field
// is shared and never part of a section snapshot.
if (!viewingPron) saveCurrentSection();
viewingPron = false;
activeSection = idx;
restoreSection(sections[activeSection]);
refresh();
renderSectionTabs();
});
}(i));
sectionTabsDiv.append(tab);
});
// Enable "Beş zêde bike" only when the active section has a pos chosen.
var activePos = sections[activeSection] && sections[activeSection].pos
? sections[activeSection].pos
: getValues().pos;
addSectionBtn.setDisabled(!activePos);
sectionTabsDiv.append(addSectionBtn.$element);
}
renderSectionTabs();
/**
* Re-populates a dynamically-growing "multiple" field list (bnrh, je,
* tekildar, …) from a saved array of strings. Sets each value via
* .val() + a triggered "input" event rather than touching the DOM
* structure directly, so the normal refreshForTextField() growth
* logic adds exactly as many rows as needed — the same thing that
* happens when a person types into the last (empty) row.
*/
function restoreMultiField(id, values) {
var container = $("#wiktku-start-" + id);
$.each(values || [], function (i, v) {
var field = container.find(".wiktku-start-step-field").eq(i);
if (!field.length || !v) return;
field.val(v).trigger("input");
});
}
/**
* Restores a full cached draft: shared lang/pron/bnrh fields, then
* every section (via the same restoreSection()/refresh()/
* renderSectionTabs() sequence already used when switching tabs).
* @param cached {{lang: string, pron: string, bnrh: Array, sections: Array, activeSection: number}}
*/
function restoreFromCache(cached) {
if (cached.lang) {
$("#wiktku-start-lang-field").val(cached.lang);
$("#wiktku-start-lang-field").trigger("wiktku:refresh");
}
// Rebuild dependent steps (pos, pron wrap, etc.) now that lang is set.
refresh();
if (cached.pron !== undefined) {
$("#wiktku-start-pron .wiktku-pron-text").val(cached.pron);
}
if (cached.bnrh) {
restoreMultiField("bnrh", cached.bnrh);
}
sections = (cached.sections && cached.sections.length) ? cached.sections : [{}];
activeSection = (typeof cached.activeSection === "number" &&
cached.activeSection >= 0 && cached.activeSection < sections.length)
? cached.activeSection : 0;
restoreSection(sections[activeSection]);
refresh();
renderSectionTabs();
updateLastSavedIndicator(cached.savedAt || null);
formDirty = false;
wiktkuNotify("Danûstandina berê ya qeydkirî ji cache hate barkirin.",
{ type: "info", tag: "wiktku-cache-restore" });
}
// Update the active tab's label whenever pos changes.
startForm.on("change", "#wiktku-start-pos-field", function () {
renderSectionTabs();
// A new cureyê rêzimanî means any previously chosen cinsiyet/
// cureyê lêkerê no longer applies — clear both selections (and
// the shared hidden cinsiyet field, since rebuildTa()/syncHelpers()
// fall back to it) before wiping the textarea, so nothing stale
// gets carried over into the rebuilt template.
var ppDiv = $("#wiktku-start-posparams");
ppDiv.find(".wiktku-posparams-cinsiyet-sel").val("");
ppDiv.find(".wiktku-posparams-jimar-sel").val("");
ppDiv.find(".wiktku-posparams-lektur-sel").prop("selectedIndex", 0);
ppDiv.find(".wiktku-posparams-lekturform-sel").prop("selectedIndex", 0);
$("#wiktku-start-cinsiyet-field").val("");
$("#wiktku-start-jimar-field").val("");
ppDiv.find(".wiktku-posparams-text").val("");
// refresh() runs steps.posparams.syncHelpers(), which toggles the
// param rows for the new pos and — since the textarea is now
// empty — calls rebuildTa() to repopulate it. Just clearing the
// textarea (as before) never triggered this, so the params
// section was left stale until some other field's change event
// happened to fire a refresh().
refresh();
});
// Show the tab bar as soon as a language is selected.
startForm.on("change", "#wiktku-start-lang-field", function () {
renderSectionTabs();
});
var footer = $("<div id='wiktku-start-footer'></div>");
spinner = $(mw.html.element("img", {
id: "wiktku-start-spinner",
src: "//upload.wikimedia.org/wikipedia/commons/d/de/Ajax-loader.gif",
alt: "Tê barkirin…",
title: "Tê barkirin…" }));
footer.append(spinner.hide());
continueBtn = new OO.ui.ButtonWidget({
id: "wiktku-unhide-editform",
label: "Bişîne",
flags: [ "primary", "progressive" ]
});
continueBtn.on("click", function () {
// Immediate feedback that the click registered
continueBtn.$element.addClass("wiktku-btn-flash");
setTimeout(function () {
continueBtn.$element.removeClass("wiktku-btn-flash");
}, 500);
// Item 7: Ziman/Cureyê rêzimanî already block submission via the
// real OOUI setDisabled (see canContinue in refresh()) — this is
// a second, softer check that still lets the click through so we
// can explain *why*, instead of the button just silently doing
// nothing.
if (!wiktkuContentGateOk) {
wiktkuNotify(
"Berî şandinê, tiştekî binivîse: Mane, Bi zaravayên din, an jî Werger — kêmasî yek ji van sê beşan divê tijî be.",
{ type: "warn", tag: "wiktku-mincontent" }
);
return;
}
wiktkuNotify("Tê şandin…", { type: "info", tag: "wiktku-submit" });
startForm.trigger("submit");
});
footer.append(continueBtn.$element);
// "Edîtora çavkaniyê veke" button — inline fallback for the portlet link
var sourceEditorBtn = new OO.ui.ButtonWidget({
label: "Edîtora çavkaniyê veke",
flags: [ "destructive" ],
});
sourceEditorBtn.on("click", function () {
destroy();
});
footer.append(sourceEditorBtn.$element);
// ── Cache save/clear buttons ─────────────────────────────────────────
// Manual, page-scoped save of the entire wizard (all sections, not
// just the active one) via [[MediaWiki:Gadget-StorageUtils.js]]'s
// ObjectStorage. Restoring happens silently on load at the end of
// build(), once the full language list is available.
//
// Saving also happens automatically (debounced while typing, plus a
// periodic fallback) — see "Autosave" below — since relying on the
// person to remember to click "Li cache qeyd bike" before an
// accidental tab close/reload defeats the point of having a cache
// at all.
function buildCacheSnapshot() {
return {
lang: getValues().lang || "",
pron: $("#wiktku-start-pron .wiktku-pron-text").val() || "",
// bnrh is shared (page-level), same as lang/pron above — not
// per-section, so it doesn't live in sections[].
bnrh: getValuesForStep("bnrh"),
sections: sections,
activeSection: activeSection,
savedAt: Date.now()
};
}
// ── Last-saved indicator ─────────────────────────────────────────────
var lastSavedEl = $("<span id='wiktku-last-saved'></span>");
function formatSavedTime(ts) {
try {
return new Date(ts).toLocaleTimeString(mw.config.get("wgUserLanguage"),
{ hour: "2-digit", minute: "2-digit" });
} catch (e) {
return new Date(ts).toLocaleTimeString();
}
}
function updateLastSavedIndicator(ts) {
lastSavedEl.text(ts ? ("Cache: qeydkirî di saet " + formatSavedTime(ts) + " de") : "");
}
// ── Dirty-state tracking + autosave ──────────────────────────────────
// formDirty mirrors "does the live form differ from what's in cache".
// Anything the person types/selects sets it; a successful save (auto
// or manual) clears it; destroy() (final submit, or switching to the
// source editor) also clears it since the wizard's job is over at
// that point either way. formDirty/autosaveDebounceTimer/autosaveInterval
// are declared in the outer scope (near activeGroup) — assigned here,
// not re-declared — so destroy() can reach them too.
var AUTOSAVE_DEBOUNCE_MS = 8000; // save shortly after typing pauses
var AUTOSAVE_INTERVAL_MS = 60000; // …and at least this often regardless
function performAutosave() {
if (!formDirty) return;
saveCurrentSection();
try {
formCache.Set(buildCacheSnapshot());
formDirty = false;
updateLastSavedIndicator(Date.now());
} catch (e) {
// Silent on autosave failure (storage blocked/full, etc.) — the
// manual button still surfaces a proper error if the person
// tries it directly, no need to interrupt typing with a toast.
}
}
function scheduleAutosave() {
formDirty = true;
if (autosaveDebounceTimer) clearTimeout(autosaveDebounceTimer);
autosaveDebounceTimer = setTimeout(performAutosave, AUTOSAVE_DEBOUNCE_MS);
}
startForm.on("input change", "input, textarea, select", scheduleAutosave);
autosaveInterval = setInterval(performAutosave, AUTOSAVE_INTERVAL_MS);
// Warn on accidental tab close/reload while there's anything unsaved.
$(window).on("beforeunload.wiktkuUnsaved", function (e) {
if (!formDirty) return undefined;
e.preventDefault();
e.returnValue = "";
return "";
});
var saveCacheBtn = new OO.ui.ButtonWidget({
label: "Li cache qeyd bike",
title: "Halê vê formê yê niha (ziman, bilêvkirin û hemû beş) li cache (localStorage) qeyd bike, da ku eger rûpel bêyî xwestin were girtin an ji nû ve were barkirin, tu karibî berdewam bikî."
});
saveCacheBtn.on("click", function () {
saveCurrentSection();
// ObjectStorage.Set() doesn't return a success/failure value, so
// the only way to detect a real failure (storage blocked, quota
// exceeded, JSON.stringify choking on something unexpected) is to
// catch it here rather than inspect a (nonexistent) return value.
try {
var snapshot = buildCacheSnapshot();
formCache.Set(snapshot);
formDirty = false;
updateLastSavedIndicator(snapshot.savedAt);
wiktkuNotify("Halê formê li cache hate qeydkirin.", { type: "success", tag: "wiktku-cache-save" });
} catch (e) {
mw.notify("Qeydkirina li cache bi ser neket.", { type: "error", tag: "wiktku-cache-save" });
}
});
var clearCacheBtn = new OO.ui.ButtonWidget({
label: "Cache paqij bike",
flags: [ "destructive" ],
title: "Datayên qeydkirî yên vê rûpelê ji cache jê bibe (forma ku niha xuya dike naguherîne)."
});
clearCacheBtn.on("click", function () {
formCache.Set({});
// The live form still has whatever the person typed — it's just no
// longer backed up anywhere, so treat this like a fresh unsaved edit.
formDirty = true;
updateLastSavedIndicator(null);
wiktkuNotify("Cache hate paqijkirin.", { type: "success", tag: "wiktku-cache-clear" });
});
// ── "⋯" overflow ─────────────────────────────────────────────
// v3: one primary action and one secondary stay on the bar;
// everything else moves in here. Four same-weight buttons — two of
// them red — was the loudest thing on the screen, and on a phone it
// wrapped to three rows of a sticky footer.
var moreBtn = $("<button type='button' class='wiktku-more-btn' title='Vebijarkên din'>⋯</button>");
var moreMenu = $("<div class='wiktku-more-menu'></div>").hide();
/** Moves an existing OOUI button into the overflow menu, keeping its
* handlers — the widgets already carry the behaviour, so this is
* purely about where they are shown. */
function intoMenu(btn, extraClass) {
var row = $("<div class='wiktku-more-item'></div>");
if (extraClass) row.addClass(extraClass);
btn.$element.on("click", function () { moreMenu.hide(); });
row.append(btn.$element);
moreMenu.append(row);
}
intoMenu(saveCacheBtn);
intoMenu(clearCacheBtn, "wiktku-more-item-danger");
moreMenu.append($("<div class='wiktku-more-sep'></div>"));
moreMenu.append($("<div class='wiktku-more-item wiktku-more-note'></div>").append(lastSavedEl));
moreBtn.on("click", function (e) {
e.preventDefault();
e.stopPropagation();
var open = moreMenu.is(":visible");
moreMenu.toggle(!open);
if (!open) {
setTimeout(function () {
$(document).one("click.wiktkuMore", function () { moreMenu.hide(); });
}, 0);
}
});
var moreWrap = $("<span class='wiktku-more-wrap'></span>").append(moreBtn).append(moreMenu);
footer.append(moreWrap);
// Icon-only settings button — opens the Tercîh dialog. Plain OOUI
// icon names depend on which icon-pack module happens to be loaded,
// so this uses the actual Codex "settings" (color-subtle) SVG from
// Commons directly, the same way the spinner above hotlinks its gif.
var prefsBtn = $("<button></button>", {
type: "button",
"class": "wiktku-prefs-btn",
title: "Tercîh — sazkariyên vê amûrê biguherîne"
});
prefsBtn.on("click", function (e) {
e.preventDefault();
wiktkuOpenPrefsDialog();
});
// The gear is icon-only on the bar; inside a text menu it needs a
// label like everything else around it.
prefsBtn.on("click", function () { moreMenu.hide(); });
moreMenu.prepend($("<div class='wiktku-more-sep'></div>"));
moreMenu.prepend($("<div class='wiktku-more-item wiktku-more-item-prefs'></div>")
.append(prefsBtn)
.append($("<span class='wiktku-more-item-label'></span>").text("Tercîh")));
startForm.append(footer);
// NOTE: deliberately NOT .hide() (display:none). WikiEditor/CodeMirror/
// the mobile editor's auto-grow logic measure #wpTextbox1's real
// dimensions during their own init, which happens while the wizard is
// up. A display:none ancestor reports 0 for offsetWidth/offsetHeight/
// scrollHeight, so those scripts bake in a near-zero height that never
// gets recalculated later — slideDown() in destroy() only animates the
// outer box, it doesn't re-trigger their sizing. Pushing #editform
// off-screen instead keeps it laid out (real width/height available to
// measure) without being visible, so the editbox opens at full size.
$("#editform").addClass("wiktku-offscreen").before(startForm);
// renderGroupTabs() looks up #wiktku-group-tabs via a live DOM
// selector, so it must run after startForm is actually in the
// document — calling it back in the build loop (while startForm was
// still detached) silently no-op'd and left the tab bar empty.
renderGroupTabs();
renderBesenDinPicker();
// One pass over the whole form: every select that hasn't already been
// initialised, and isn't opted out with .wiktku-plain-select, gets
// the searchable picker.
initSelects(startForm);
refresh();
// Give every draggable textarea a custom resize grip (works
// consistently on Safari/iOS, unlike the native corner grip — see
// the "Manual drag-to-resize handle" comment in styles.css), and
// keep applying it to textareas added later on (new sense blocks,
// quote-source fields, nimûne rows, …).
wiktkuInitManualResize(startForm);
new MutationObserver(function (mutations) {
mutations.forEach(function (mutation) {
$(mutation.addedNodes).each(function () {
if (this.nodeType !== 1) return;
wiktkuInitManualResize(this);
});
});
}).observe(startForm[0], { childList: true, subtree: true });
// Now that the full language list is loaded, silently restore any
// draft the editor previously saved for this page.
var cachedDraft = formCache.Get();
if (cachedDraft && cachedDraft.sections && cachedDraft.sections.length) {
restoreFromCache(cachedDraft);
}
}
mw.loader.using(["oojs-ui-core"], function () {
function wiktkuProceedWithData(wiktkuData) {
var d = wiktkuData || {};
// Populate metadata.
if (d.metadata) $.extend(metadata, d.metadata);
// Populate gender labels.
if (d.genderLabels) $.extend(GENDER_BASE_LABELS, d.genderLabels);
// Item 1: Jimar (number) code definitions — same shape as the wiki's
// own Lua number-type table (code -> {cat, display[, req]}).
if (d.numberLabels) $.extend(NUMBER_LABELS, d.numberLabels);
// Populate lang choices (pinned list).
if (d.langChoices) steps.lang.choices = choicesFromObject(d.langChoices, true);
// Populate langsByCode and merge full language list from d.ziman.
// d.ziman is a {code: name} object with all known languages.
$.each(steps.lang.choices, function (i, choice) {
if (choice.sortKey === undefined) choice.sortKey = choice.label;
langsByCode[choice.code] = choice;
});
if (d.ziman) {
var pinnedCodes = {};
$.each(steps.lang.choices, function (i, c) { pinnedCodes[c.code] = true; });
var extraChoices = [];
$.each(d.ziman, function (code, name) {
if (/-pro$/i.test(code)) return;
if (/ziman[eê]\s+destan/i.test(name)) return;
if (pinnedCodes[code]) return;
var choice = { code: code, label: name, sortKey: name };
extraChoices.push(choice);
langsByCode[code] = choice;
});
extraChoices.sort(function (a, b) {
return a.sortKey.localeCompare(b.sortKey, userLang);
});
steps.lang.choices = steps.lang.choices.concat(extraChoices);
}
// Keep the full merged list around for trans/dunde/zarava — those
// should still be able to reference any language even when the
// Tercîh panel restricts the main "ziman" step below — then, if
// the user set a restriction there, narrow steps.lang.choices
// itself to just those codes.
var wiktkuFullLangChoices = steps.lang.choices;
if (wiktkuPrefs.langCodes && wiktkuPrefs.langCodes.length) {
var wiktkuAllowedLangSet = {};
$.each(wiktkuPrefs.langCodes, function (i, code) { wiktkuAllowedLangSet[code] = true; });
var wiktkuRestrictedChoices = $.grep(wiktkuFullLangChoices, function (c) {
return !!wiktkuAllowedLangSet[c.code];
});
// Fall back to the full list instead of showing an empty
// dropdown if none of the saved codes matched anything
// (typo'd code, data.json changed since, …).
steps.lang.choices = wiktkuRestrictedChoices.length ? wiktkuRestrictedChoices : wiktkuFullLangChoices;
}
// Populate POS choices — also a plain {code: label} object in data.json.
if (d.posChoices) steps.pos.choices = choicesFromObject(d.posChoices, false);
// Populate template definitions for the dfn sense-block builder.
if (d.tplDefs) steps.dfn.tplDefs = d.tplDefs;
// Populate pos placeholder examples.
if (d.posExamples) steps.dfn.posExamples = d.posExamples;
// Populate citation template definitions for the quote widget.
if (d.jederDefs) steps.dfn.jederDefs = d.jederDefs;
// Populate pronunciation and etymology template insert lists.
if (d.pronTpls) {
steps.pron.pronTpls = d.pronTpls;
steps.pron.refreshTplSelect();
}
if (d.etymTpls) {
steps.etym.etymTpls = d.etymTpls;
steps.etym.refreshTplSelect();
}
// Sync trans/dunde/zarava keys with the full language list
// (not the possibly Tercîh-restricted steps.lang.choices).
steps.trans.keys = wiktkuFullLangChoices;
steps.dunde.keys = wiktkuFullLangChoices;
steps.zarava.keys = getZaravaKeys(wiktkuFullLangChoices);
build();
}
// data.json ships inside this package module, so it is already parsed
// and in memory — no action=raw round trip, and no Testing switch to
// forget to flip back before deploying.
wiktkuProceedWithData(require("./start/data.json"));
});
});
//</nowiki>
k673c6y7k5tunmtjfxk8bvdipt2wbc7
6333778
6333775
2026-08-15T11:03:06Z
Wikihez
7344
6333778
javascript
text/javascript
// Li ser [[vi:MediaWiki:Gadget-start.js]] hatiye refaktorkirin.
// implicit dependencies: StorageUtils (ObjectStorage)
//<nowiki>
$(function () {
if (window.location.href.includes("editintro=User:Wikihez/creation/intro")) {
return; // Do not run the script wextê WF:Bilez dişuxile
}
var ns = mw.config.get("wgNamespaceNumber");
if (ns &&
!(ns === 2 && mw.config.get("wgPageName").match(/\/ceribandin$|\/test$/))) {
return;
}
var addLangMode = mw.util.getParamValue("wiktkuaddlang") === "1";
// ── Tercîh (user settings) panel stored via mw.storage (localStorage), globally
var WIKTKU_PREFS_KEY = "wiktku_start_prefs";
var WIKTKU_PREFS_DEFAULTS = {
// [] = show the full language list in the "ziman" step; otherwise
// only these codes are shown there (data.json codes, not names).
langCodes: [],
// true = never auto-open on a new/empty page — only via the
// "+Ziman/beşeke din" portlet link.
onlyOnClick: false,
// "auto" | "p-cactions" | "p-tb" | "p-views" — where the
// "+Ziman/beşeke din" portlet link is added.
portlet: "auto",
// true = suppress routine/informational mw.notify toasts (page
// loading, cache auto-restored, cache saved/cleared, "tê şandin…").
// Errors and direct results of an explicit action (like saving
// Tercîh itself) always show regardless of this setting.
quiet: false
};
function wiktkuLoadPrefs() {
if (!(window.mw && mw.storage)) return $.extend({}, WIKTKU_PREFS_DEFAULTS);
var raw;
try { raw = mw.storage.get(WIKTKU_PREFS_KEY); } catch (e) { raw = null; }
if (!raw) return $.extend({}, WIKTKU_PREFS_DEFAULTS);
var parsed;
try { parsed = JSON.parse(raw); } catch (e) { parsed = {}; }
return $.extend({}, WIKTKU_PREFS_DEFAULTS, parsed);
}
function wiktkuSavePrefs(prefs) {
if (!(window.mw && mw.storage)) return false;
try {
mw.storage.set(WIKTKU_PREFS_KEY, JSON.stringify(prefs));
return true;
} catch (e) { return false; }
}
var wiktkuPrefs = wiktkuLoadPrefs();
// Routine/informational notices go through here so "quiet mode" can
// suppress them; errors and explicit-action confirmations (like the
// Tercîh save toast) call mw.notify directly instead, and always show.
function wiktkuNotify(message, options) {
if (wiktkuPrefs.quiet) return;
mw.notify(message, options);
}
// Lazily built the first time it's opened; reused after that (see
// wiktkuOpenPrefsDialog below, defined once we know OOUI is available).
var wiktkuPrefsWindowManager = null;
var wiktkuPrefsDialog = null;
function wiktkuOpenPrefsDialog() {
mw.loader.using(["oojs-ui-core", "oojs-ui-windows"], function () {
function WiktkuPrefsDialog(config) {
WiktkuPrefsDialog.super.call(this, config);
}
if (!wiktkuPrefsDialog) {
OO.inheritClass(WiktkuPrefsDialog, OO.ui.ProcessDialog);
WiktkuPrefsDialog.static.name = "wiktkuPrefsDialog";
WiktkuPrefsDialog.static.title = "Tercîhên min";
WiktkuPrefsDialog.static.actions = [
{ action: "save", label: "Qeyd bike", flags: ["primary", "progressive"] },
{ action: "cancel", label: "Betal bike", flags: "safe" }
];
WiktkuPrefsDialog.prototype.initialize = function () {
WiktkuPrefsDialog.super.prototype.initialize.call(this);
this.langCodesInput = new OO.ui.TextInputWidget({
placeholder: "ku, zza, ckb (vala bihêle ji bo hemû zimanan)"
});
this.onlyOnClickCheckbox = new OO.ui.CheckboxInputWidget({});
this.quietCheckbox = new OO.ui.CheckboxInputWidget({});
this.portletDropdown = new OO.ui.DropdownInputWidget({
options: [
{ data: "auto", label: "Otomatîk (li gorî rûyê wîkiyê)" },
{ data: "p-cactions", label: "p-cactions - Li qismê Amûran" },
{ data: "left-navigation", label: "left-navigation - Li qismê Gotar-Gotûbêj" },
{ data: "p-tb", label: "p-tb - Li qismê Giştî" },
{ data: "p-views", label: "p-views - Li qismê Bixwîne" }
]
});
var fieldset = new OO.ui.FieldsetLayout({ label: "Eyar" });
fieldset.addItems([
new OO.ui.FieldLayout(this.langCodesInput, {
label: "Kodên zimanan ku tê xuyakirin li qismê \"ziman\"",
align: "top",
help: "Kodan bi virgulê (,) ji hev veqetîne. Vala bihêle da ku hemû ziman were nîşandan.",
helpInline: true
}),
new OO.ui.FieldLayout(this.onlyOnClickCheckbox, {
label: "Tenê veke wextê \"+Ziman/beşeke din\" were tikandin",
align: "inline",
help: "Eger were hilbijartin, ev amûr êdî otomatîk li ser rûpelên nû/vala dest pê nake — divê meriv her carê pêl \"+Ziman/beşeke din\" bike.",
helpInline: true
}),
new OO.ui.FieldLayout(this.portletDropdown, {
label: "Cihê lînka \"+Ziman/beşeke din\"",
align: "top",
help: "\"Otomatîk\" li gorî rûyê wîkiyê hildibijêre.",
helpInline: true
}),
new OO.ui.FieldLayout(this.quietCheckbox, {
label: "Moda bêdeng (kêmtir agahdarî nîşan bide)",
align: "inline",
help: "Agahdariyên normal nîşan nede. Xeta her tim tên xuyakirin.",
helpInline: true
})
]);
this.$body.addClass("wiktku-prefs-dialog-body").append(fieldset.$element);
};
WiktkuPrefsDialog.prototype.getSetupProcess = function (data) {
return WiktkuPrefsDialog.super.prototype.getSetupProcess.call(this, data)
.next(function () {
this.langCodesInput.setValue(wiktkuPrefs.langCodes.join(", "));
this.onlyOnClickCheckbox.setSelected(!!wiktkuPrefs.onlyOnClick);
this.portletDropdown.setValue(wiktkuPrefs.portlet || "auto");
this.quietCheckbox.setSelected(!!wiktkuPrefs.quiet);
}, this);
};
WiktkuPrefsDialog.prototype.getActionProcess = function (action) {
var dialog = this;
if (action === "save") {
return new OO.ui.Process(function () {
var codes = dialog.langCodesInput.getValue()
.split(/[,\s]+/)
.map(function (c) { return c.trim().toLowerCase(); })
.filter(function (c) { return !!c; });
wiktkuPrefs = {
langCodes: codes,
onlyOnClick: dialog.onlyOnClickCheckbox.isSelected(),
portlet: dialog.portletDropdown.getValue() || "auto",
quiet: dialog.quietCheckbox.isSelected()
};
wiktkuSavePrefs(wiktkuPrefs);
mw.notify(
"Tercîh hatin qeydkirin. Rûpelê ji nû ve bar bike (F5).",
{ type: "success", tag: "wiktku-prefs-save" }
);
dialog.close({ action: "save" });
});
}
if (action === "cancel") {
return new OO.ui.Process(function () {
dialog.close({ action: "cancel" });
});
}
return WiktkuPrefsDialog.super.prototype.getActionProcess.call(this, action);
};
wiktkuPrefsWindowManager = new OO.ui.WindowManager();
$(document.body).append(wiktkuPrefsWindowManager.$element);
wiktkuPrefsDialog = new WiktkuPrefsDialog();
wiktkuPrefsWindowManager.addWindows([wiktkuPrefsDialog]);
}
wiktkuPrefsWindowManager.openWindow(wiktkuPrefsDialog);
});
}
var targetContainer;
var skin = mw.config.get('skin');
if (wiktkuPrefs.portlet && wiktkuPrefs.portlet !== "auto") {
targetContainer = wiktkuPrefs.portlet;
} else if (skin === 'vector-2022') {
targetContainer = 'p-cactions';
} else if (skin === 'vector') {
targetContainer = 'p-tb';
} else {
targetContainer = 'p-views';
}
mw.util.addPortletLink(targetContainer,
mw.util.getUrl(mw.config.get("wgPageName"), { action: "submit", wiktkuaddlang: "1" }),
"+Ziman/beşeke din", "ca-wiktku-addlang",
"Li vê rûpelê, ziman an jî beşeke nû zêde bike");
// If "onlyOnClick" is set, the wizard should ONLY ever open via the
// "+Ziman/beşeke din" link — never automatically
var wiktkuNewPageDetected = $(".mw-newarticletext, .mw-newarticletextanon").length > 0;
if (wiktkuPrefs.onlyOnClick ? !addLangMode : (!addLangMode && !wiktkuNewPageDetected)) {
return;
}
// ── Shared helpers ───────────────────────────────────────────────────
// Generic text/UI utilities live in their own package file now — see the
// header of util.js for why. Aliased to bare names here so the ~400 call
// sites below read exactly as they did when these were local functions.
var wiktkuUtil = require("./start/util.js");
var capitalize = wiktkuUtil.capitalize;
var decapitalize = wiktkuUtil.decapitalize;
var escapeRegExp = wiktkuUtil.escapeRegExp;
var stripWikilinks = wiktkuUtil.stripWikilinks;
var splitTercimeIzah = wiktkuUtil.splitTercimeIzah;
var insertAtCursor = wiktkuUtil.insertAtCursor;
var foldDiacritics = wiktkuUtil.foldDiacritics;
var wrapNativeSelect = wiktkuUtil.wrapNativeSelect;
var initSelects = wiktkuUtil.initSelects;
var wiktkuInitManualResize = wiktkuUtil.initManualResize;
function langHeaderSource(codePattern) {
return "\n?==\\s*\\{\\{\\s*ziman\\s*\\|\\s*(" + codePattern + ")\\s*\\}\\}\\s*==";
}
function findLangHeader(text, code) {
var m = new RegExp(langHeaderSource(escapeRegExp(code))).exec(text);
return m ? { index: m.index, match: m[0] } : null;
}
var catSrcTemplates = null;
var catSrcTemplatesPromise = null;
function fetchCatSrcTemplates() {
if (catSrcTemplatesPromise) return catSrcTemplatesPromise;
catSrcTemplatesPromise = new mw.Api().get({
action: "query",
list: "categorymembers",
cmtitle: "Kategorî:Çavkanî",
cmnamespace: 10,
cmlimit: "max",
formatversion: 2
}).then(function (data) {
var members = (data.query && data.query.categorymembers) || [];
catSrcTemplates = $.map(members, function (m) {
// Pêşgira navî ya "Şablon:" rake.
return m.title.replace(/^[^:]+:/, "");
});
catSrcTemplates.sort(function (a, b) { return a.localeCompare(b, userLang); });
return catSrcTemplates;
}, function () {
catSrcTemplates = [];
return catSrcTemplates;
});
return catSrcTemplatesPromise;
}
var pageName = mw.config.get("wgPageName").replaceAll(/_/g, " ");
if (ns) pageName = pageName.replace(/.*\//, "");
var pageNameRe = escapeRegExp(pageName);
var userLang = mw.config.get("wgUserLanguage");
var formCache = new ObjectStorage("wiktku_start_draft_" + mw.config.get("wgPageName"), 1);
var langsByCode = {};
// Looks up the display label for a language code, falling back to the
// code itself if it isn't known yet (e.g. langsByCode not loaded).
function getLangLabel(code) {
var entry = langsByCode[code];
return entry ? entry.label : code;
}
// Populated from [[MediaWiki:Gadget-start.js/data.json]] at runtime.
var metadata = {};
var ZARAVA_LANG_CODES = ["ckb", "sdh", "lki", "hac", "zza"];
// Converts a {code: label} object (langChoices/posChoices in data.json)
// into the {code, label[, sortKey]} array the rest of the script uses.
// isLang: true adds a sortKey and shows "(code)" after the label —
// language choices only.
function choicesFromObject(obj, isLang) {
var result = [];
$.each(obj || {}, function (code, label) {
var choice = { code: code, label: label };
if (isLang) choice.sortKey = label;
result.push(choice);
});
return result;
}
function getZaravaKeys(choices) {
var byCode = {};
$.each(choices || [], function (_, c) { byCode[c.code] = c; });
var result = [];
$.each(ZARAVA_LANG_CODES, function (_, code) {
if (byCode[code]) result.push(byCode[code]);
});
return result;
}
function needsTransliteration(langCode) {
var meta = metadata[langCode];
if (!meta || !meta.sc) return false;
var scripts = Array.isArray(meta.sc) ? meta.sc : [meta.sc];
return scripts.length > 0 && scripts[0] !== "Latn";
}
// Kodên cinsiyetê yên di metadata.g de — ji data.json tê dagirtin
var GENDER_BASE_LABELS = {};
// Item 1 (Wikihez, 14 Tebax 2026): kodên jimarê (y, s, d, p, p+, tp, j, j+,
// j/nj, nj, nj+, hj!, hj?) — ji data.json's "numberLabels" tê dagirtin.
// Same {code: {cat, display[, req]}} shape as the wiki's own Lua
// number-type table; "display" can contain HTML (<abbr>) or wikilinks
// ([[...]]), so it's only used as-is inside the wikitext output — never
// dropped straight into an <option>, which can't render either (see
// stripMarkupForOption below).
var NUMBER_LABELS = {};
// metadata[lang].g used to list gender AND number codes together (see
// cinsiyet/posparams below) — this tells the two dropdowns apart: any
// code that's a key in NUMBER_LABELS is a number code (goes in the new
// Jimar dropdown / j= param), everything else is a gender code (stays
// in the existing Cîns dropdown / c= param). Compound codes like "m-p"
// or "n-p" are gender+plural pairs, not plain "p" — they don't match a
// NUMBER_LABELS key, so they correctly stay on the gender side.
function isNumberCode(code) {
return Object.prototype.hasOwnProperty.call(NUMBER_LABELS, code);
}
// Strips the bit of markup "display" is allowed to contain so it's safe
// to use as plain <option> text (options can't render HTML or wikilinks):
// <abbr title="X">Y</abbr> -> "Y (X)", [[a|b]] -> "b", [[a]] -> "a".
function stripMarkupForOption(html) {
if (!html) return "";
return $.trim(
String(html)
.replace(/<abbr[^>]*title="([^"]*)"[^>]*>([\s\S]*?)<\/abbr>/gi, "$2 ($1)")
.replace(/\[\[[^\]|]*\|([^\]]*)\]\]/g, "$1")
.replace(/\[\[([^\]]*)\]\]/g, "$1")
.replace(/<[^>]+>/g, "")
);
}
// Builds the Jimar dropdown's <option> text for one code: "j — jimarbar".
function numberOptionLabel(code) {
var def = NUMBER_LABELS[code];
if (!def) return code;
var text = stripMarkupForOption(def.display);
return text ? (code + " — " + text) : code;
}
// Sub-lists that only make sense for a plain (non-şablon) sense — hidden
// when a şablon (e.g. {{guharto|…}}) is chosen for that sense
var HIDDEN_ON_TPL_GROUPS = [
"wiktku-dfn-alternativ",
"wiktku-dfn-hevmane",
"wiktku-dfn-dijmane",
"wiktku-dfn-koordine",
"wiktku-dfn-jornav",
"wiktku-dfn-jernav"
];
function genderLabel(code) {
if (code === "p") return "Pirjimar";
var pluralMatch = code.match(/^(.+)-p$/);
if (pluralMatch && GENDER_BASE_LABELS[pluralMatch[1]]) {
return GENDER_BASE_LABELS[pluralMatch[1]] + " (pirjimar)";
}
return GENDER_BASE_LABELS[code] || code;
}
// ── Template explanations (v3 spec) ──────────────────────────────────
// Every place a template can be picked shows the same row: a status
// dot, the name, a link to the template page, and an ⓘ. This is the ⓘ.
//
// Text comes from the template's own TemplateData where it has any, so
// the explanation stays right without anyone maintaining a second copy
// by hand — with the desc already in data.json as the fallback for
// templates that have none.
var wiktkuTplDataCache = {}; // name -> {desc, params[]} or null when absent
/** Fetches TemplateData for one template. Resolves to null if the
* template has none (a plain, undocumented template — very common). */
function fetchTemplateData(name) {
if (Object.prototype.hasOwnProperty.call(wiktkuTplDataCache, name)) {
return $.Deferred().resolve(wiktkuTplDataCache[name]).promise();
}
return new mw.Api().get({
action: "templatedata",
titles: "Şablon:" + name,
redirects: 1,
formatversion: 2
}).then(function (data) {
var pages = (data && data.pages) || {};
var first = null;
$.each(pages, function (_, p) { if (!first) first = p; });
var out = null;
if (first) {
var desc = first.description;
// TemplateData descriptions are language maps when the
// template is documented in more than one language.
if (desc && typeof desc === "object") desc = desc[userLang] || desc.en || desc[Object.keys(desc)[0]];
var params = [];
$.each(first.params || {}, function (key, p) {
var label = p && p.label;
if (label && typeof label === "object") label = label[userLang] || label.en || label[Object.keys(label)[0]];
params.push({ name: key, label: label || "", required: !!(p && p.required) });
});
out = { desc: desc || "", params: params };
}
wiktkuTplDataCache[name] = out;
return out;
}, function () {
// No TemplateData, or the API is unhappy — cache the miss so a
// repeated ⓘ click doesn't re-request it every time.
wiktkuTplDataCache[name] = null;
return null;
});
}
/** Hand-written fallback description, from data.json. */
function localTplDesc(name) {
var pools = [steps.pron.pronTpls, steps.etym.etymTpls, steps.dfn.tplDefs, steps.dfn.jederDefs];
var found = "";
$.each(pools, function (_, pool) {
if (pool && pool[name] && pool[name].desc) { found = pool[name].desc; return false; }
});
return found;
}
/** Opens the inline explanation panel for `name`, anchored under the
* picker it was opened from. */
function showTemplateInfo(name, anchorWrap) {
$(".wiktku-tpl-info").remove();
var panel = $("<div class='wiktku-tpl-info'></div>");
panel.append($("<div class='wiktku-tpl-info-name'></div>").text("{{" + name + "}}"));
var body = $("<div class='wiktku-tpl-info-desc'></div>").text("Tê barkirin…");
panel.append(body);
var params = $("<div class='wiktku-tpl-info-params'></div>");
panel.append(params);
panel.append($("<a class='wiktku-tpl-info-link' target='_blank' rel='noopener'></a>")
.attr("href", wiktkuUtil.tplPageUrl(name))
.text("Rûpela şablonê veke →"));
var close = $("<button type='button' class='wiktku-tpl-info-close' title='Bigire'>✕</button>");
close.on("click", function () { panel.remove(); });
panel.prepend(close);
$(anchorWrap).after(panel);
fetchTemplateData(name).then(function (td) {
var desc = (td && td.desc) || localTplDesc(name);
body.text(desc || "Ji bo vê şablonê ravek nehatiye nivîsandin.");
if (td && td.params && td.params.length) {
params.append($("<div class='wiktku-tpl-info-params-title'></div>").text("Parametre:"));
var listEl = $("<ul></ul>");
$.each(td.params, function (_, p) {
var line = p.name + (p.label ? " — " + p.label : "") + (p.required ? " (pêwîst)" : "");
listEl.append($("<li></li>").text(line));
});
params.append(listEl);
}
});
}
/** Marks a picker's <option>s as template rows so the searchable widget
* renders them with the dot / 🔗 / ⓘ affordances, and wires the ⓘ
* handler for that picker. `nameOf` maps an <option> to a template
* name — the pickers store different things in value= (a snippet for
* the insert dropdowns, the bare name for the sense selector). */
function markTemplateOptions(sel, nameOf) {
if (!sel || !sel.length) return;
sel.find("option").each(function () {
var opt = $(this);
var name = nameOf(opt);
if (!name) return;
opt.attr("data-tpl", name);
// Deprecated/typo templates are the "special cases only" ones.
opt.attr("data-tpl-status", /kevnbûyî|şaşnivîs|kêmpeyda/i.test(opt.text()) ? "yellow" : "green");
});
sel.data("wiktkuTplInfo", showTemplateInfo);
}
/** Pulls the template name out of a snippet like "* {{ku-IPA}}" or
* "{{ji|SOURCELANG|CODE|…}}". */
function tplNameFromSnippet(snippet) {
var m = /\{\{\s*([^|}\n]+)/.exec(snippet || "");
return m ? $.trim(m[1]) : "";
}
// True if a sense has content beyond mane worth keeping (etîket, word
// lists, nimûne, jêder) — so it's still emitted with {{mane?}} if empty.
function senseHasExtraContent(s) {
if (s.etiket && $.grep(s.etiket, function (e) { return $.trim(e) !== ""; }).length) return true;
if (s.kategori && $.grep(s.kategori, function (k) { return $.trim(k) !== ""; }).length) return true;
if (s.alternativ.length || s.hevmane.length || s.dijmane.length ||
s.koordine.length || s.jornav.length || s.jernav.length) return true;
if (s.nimune && $.grep(s.nimune, function (n) {
return (typeof n === "object" ? n.text : n) !== "";
}).length > 0) return true;
if (senseHasJeder(s)) return true;
return false;
}
// Wikihez, 14 Tebax 2026 (item 7): the real submit-blocking requirement
// (Ziman + Cureyê rêzimanî, via step.required/canContinue) is already
// obvious since Bişîne stays visibly disabled until it's met. What
// wasn't obvious is that a technically-"complete" entry with nothing
// in Mane, Bi zaravayên din or Werger is still empty in any meaningful
// sense — so this is checked separately, at click time, with its own
// message, instead of another star/legend marker on the page.
function hasMinRequiredContent(values) {
var dfnSenses = steps.dfn.getSenses($("#wiktku-start-dfn"));
var hasMane = dfnSenses.some(function (s) {
return (s.tpl && s.tplTitle) || (!s.tpl && (s.mane !== "" || senseHasExtraContent(s)));
});
if (hasMane) return true;
if (values.lang === "ku") {
var hasWerger = false;
$("#wiktku-start-trans .wiktku-trans-group").each(function () {
if (steps.trans.getGroupTranslations($(this)).length) hasWerger = true;
});
if (hasWerger) return true;
var hasZarava = false;
$("#wiktku-start-zarava .wiktku-zarava-group").each(function () {
if (steps.zarava.getGroupTranslations($(this)).length) hasZarava = true;
});
if (hasZarava) return true;
}
return false;
}
// Bolds the *first* occurrence of the page name
function boldPageNameOnce(text) {
if (!text || !pageNameRe) return text;
var re = new RegExp("(" + pageNameRe + "([^( |,|;|\\?|\\.|\\!)]+)?)", "i");
return text.replace(re, "'''$1'''");
}
// Converts literal line breaks typed into a nimûne/jêgirtin box into
// wikitext <br> tags,
function nlToBr(text) {
return text ? text.replace(/\r\n|\r|\n/g, "<br>") : text;
}
function escapeHtmlForBackdrop(str) {
return String(str)
.replace(/&/g, "&")
.replace(/</g, "<")
.replace(/>/g, ">");
}
// Mirrors a textarea's text, with a small highlighted marker placed
// right after each line that's followed by an actual typed/pasted
// linebreak. Rendered into a transparent backdrop layer behind the
// textarea (see ensureLinebreakBackdrop()), so only the point of the
// break is marked instead of the whole box.
function buildLinebreakBackdropHtml(text) {
var lines = text.split(/\r\n|\r|\n/);
return $.map(lines, function (line, i) {
var isLast = i === lines.length - 1;
return escapeHtmlForBackdrop(line) +
(isLast ? "" : "<mark class='wiktku-linebreak-mark'>↵</mark>\n");
}).join("");
}
// Copies the metrics that affect where text wraps/lands (font, line
// height, padding, border) from the real textarea onto its backdrop,
// via computed style rather than shared CSS classes — most of the
// box's own rules are written as "textarea.foo", which a <div> with
// the same class wouldn't match. Re-run on every update in case a
// responsive breakpoint changed the textarea's own font-size.
function syncLinebreakBackdropMetrics(textarea, backdrop) {
var cs = window.getComputedStyle(textarea[0]);
backdrop.css({
"box-sizing": cs.boxSizing,
"padding-top": cs.paddingTop,
"padding-right": cs.paddingRight,
"padding-bottom": cs.paddingBottom,
"padding-left": cs.paddingLeft,
"border-width": cs.borderWidth,
"border-style": "solid",
"font-family": cs.fontFamily,
"font-size": cs.fontSize,
"font-weight": cs.fontWeight,
"line-height": cs.lineHeight,
"letter-spacing": cs.letterSpacing
});
}
// Lazily wraps a textarea in its own positioning anchor (independent
// of .wiktku-resize-wrap, so this doesn't depend on load order versus
// wiktkuMakeManualResizable) and inserts the transparent backdrop
// layer used to mark the exact point of a linebreak. Safe to call
// more than once on the same textarea — the backdrop is cached.
function ensureLinebreakBackdrop(textarea) {
var existing = textarea.data("wiktkuLinebreakBackdrop");
if (existing) return existing;
textarea.wrap("<div class='wiktku-linebreak-wrap'></div>");
var backdrop = $("<div aria-hidden='true'></div>").addClass("wiktku-linebreak-backdrop");
textarea.before(backdrop);
textarea.data("wiktkuLinebreakBackdrop", backdrop);
textarea.on("scroll.wiktkuLinebreak", function () {
backdrop.scrollTop(textarea.scrollTop()).scrollLeft(textarea.scrollLeft());
});
return backdrop;
}
// Flags a nimûne/jêgirtin textarea (via CSS class, for the border
// tint + tooltip) while it contains a typed/pasted linebreak, so the
// user notices before it's silently turned into <br> on output.
// Marks only the exact point of the break via a mirrored backdrop,
// rather than tinting the whole box.
function highlightLinebreak(el) {
var textarea = $(el);
var text = textarea.val();
var hasBreak = /\r|\n/.test(text);
textarea
.toggleClass("wiktku-has-linebreak", hasBreak)
.attr("title", hasBreak ? "Xeta nû dê wek <br> bê nivîsandin" : "");
if (!hasBreak) {
var cached = textarea.data("wiktkuLinebreakBackdrop");
if (cached) cached.hide();
textarea.removeClass("wiktku-has-linebreak-source");
return;
}
var backdrop = ensureLinebreakBackdrop(textarea);
textarea.addClass("wiktku-has-linebreak-source");
syncLinebreakBackdropMetrics(textarea, backdrop);
backdrop.html(buildLinebreakBackdropHtml(text)).show();
backdrop.scrollTop(textarea.scrollTop()).scrollLeft(textarea.scrollLeft());
}
// Each nimûne item can be { text, tr, t }: text, transliteration, translation.
function formatNimune(nimunes, lang, hasJeder) {
var hasNimune = nimunes && $.grep(nimunes, function (n) {
return (typeof n === "object" ? n.text : n) !== "";
}).length > 0;
if (!hasNimune) {
return hasJeder ? "" : "\n#* {{nimûne?|" + lang + "}}";
}
return $.map(nimunes, function (n) {
var text = typeof n === "object" ? n.text : n;
if (!text) return undefined;
var bolded = nlToBr(boldPageNameOnce(text));
var tpl = "\n#: {{nm|" + lang + "|" + bolded;
if (typeof n === "object") {
if (n.tr) tpl += "|tr=" + nlToBr(n.tr);
// Translation as third positional param (no key needed).
if (n.t) tpl += "|" + nlToBr(n.t);
}
// Short examples fit on one line together with their translation.
// rêz=1 is not used for ku — definitions are shown on separate lines there.
if (text.length < 60 && lang !== "ku") tpl += "|rêz=1";
tpl += "}}";
return tpl;
}).join("");
}
// Formats jêder (citation) entries into "#* {{jêder…|…}}" lines; skips
// entries with no quote text. Falls back to the generic {{jêder}}
// template when no specific template was chosen.
function formatJeder(jederList, lang) {
if (!jederList || !jederList.length) return "";
return $.map(jederList, function (jeder) {
if (!jeder || !jeder.quote) return undefined;
var quote = nlToBr(boldPageNameOnce(jeder.quote));
var quoteTr = nlToBr(jeder.quoteTr);
var quoteT = nlToBr(jeder.quoteT);
if (jeder.jederTpl) {
var cite = "\n#* {{" + jeder.jederTpl + "|" + lang;
cite += "|jêgirtin=" + quote;
if (quoteTr) cite += "|tr=" + quoteTr;
if (quoteT) cite += "|tercime=" + quoteT;
$.each(jeder.jêderFields || {}, function (key, val) {
if (val) cite += "|" + key + "=" + val;
});
cite += "}}";
return cite;
}
var out = "\n#* {{jêder|" + lang + "|jêgirtin=" + quote;
if (quoteTr) out += "|tr=" + quoteTr;
if (quoteT) out += "|tercime=" + quoteT;
// A şablon picked from Kategorî:Çavkanî is transcluded as the
// source param (e.g. |{{Kovara X}}); manual text is used as-is.
var srcParam = jeder.jederCatTpl ? ("{{" + jeder.jederCatTpl + "}}") :
(jeder.jederManual ? jeder.jederManual : "çavkanî?");
// A positional param containing "=" gets parsed as its own key=value
// pair by MediaWiki and breaks the template, so force it to be
// explicitly named (|2=) whenever that's the case.
out += (srcParam.indexOf("=") !== -1 ? "|2=" : "|") + srcParam;
out += "}}";
return out;
}).join("");
}
// True if a sense has at least one jêder entry with quote text.
function senseHasJeder(sense) {
return !!(sense.jeder && $.grep(sense.jeder, function (j) {
return j && j.quote;
}).length > 0);
}
// Builds "{{tplName|lang|part1|part2|…}}" from a sense field (kategori,
// etiket), wrapped inline (" {{…}} ") or on its own line ("\n#: {{…}}").
function buildSenseTpl(sense, field, lang, tplName) {
if (!sense[field] || !sense[field].length) return "";
var parts = sense[field].map(function (p) { return $.trim(p); })
.filter(function (p) { return p !== ""; });
if (!parts.length) return "";
var call = "{{" + tplName + "|" + lang + "|" + parts.join("|") + "}}";
return call
}
/**
* Assembles the nimûne + jêder wikitext block for a sense. Shared by
* both the template-sense and normal-mane-sense branches below.
*/
function buildCite(sense, lang) {
return formatNimune(sense.nimune, lang, senseHasJeder(sense)) +
formatJeder(sense.jeder, lang);
}
// ── Inline modifier system ───────────────────────────────────────────────
// Appends a ⊕ button to a word input <li>. Clicking it shows a compact
// modifier picker; selecting one prompts for the value and appends
// <modifier:value> to the textarea's current content.
var WORD_MODIFIERS = [
{ key: "t", label: "t: tercime / îzah", hint: "Tercimeya kelîmeyê an îzaha wê" },
{ key: "cuda", label: "cuda: alt display", hint: "Forma nîşankirinê ya alternatîf" },
{ key: "c", label: "c: cinsiyet", hint: "Cinsiyeta kelîmeyê" },
{ key: "e", label: "e: etîket (li pêşiyê)", hint: "Etîketek li pêşiya kelîmeyê" },
{ key: "ee", label: "ee: etîket (li dawiyê)", hint: "Etîketek li dawiya kelîmeyê" },
{ key: "q", label: "q: qualifier (li pêşiyê)", hint: "Wesf li pêşiya kelîmeyê" },
{ key: "qq", label: "qq: qualifier (li dawiyê)", hint: "Wesf li dawiya kelîmeyê" },
{ key: "crz", label: "crz: cureyê rêzimanî", hint: "Cureyê rêzimanî yê kelîmeyê" },
{ key: "hrf", label: "hrf: herfiyen", hint: "Herfiyen, manaya rasterast" },
{ key: "ref", label: "ref: çavkanî", hint: "Çavkanî" }
];
// Sub-groups (inside a sense/definition block) that get the same ⊕
// modifier button as makeWordListStep fields.
var MODIFIER_SUBGROUPS = {
"wiktku-dfn-alternativ": true,
"wiktku-dfn-hevmane": true,
"wiktku-dfn-dijmane": true,
"wiktku-dfn-koordine": true,
"wiktku-dfn-jornav": true,
"wiktku-dfn-jernav": true
};
/**
* Wraps a freshly-created textarea in a <li> with a ⊕ modifier button.
* `ta` — the jQuery textarea element.
* Returns the <li>.
*/
function makeModifierLi(ta) {
var li = $("<li class='wiktku-word-li'></li>");
var btn = $("<button type='button' class='wiktku-mod-btn' title='Modifiyerê lê zêde bike'>⊕</button>");
var picker = $("<div class='wiktku-mod-picker'></div>").hide();
// Which modifier keys are already present in the textarea's current
// text — e.g. "<t:...>" → "t" used. Each modifier can only be
// applied once per word, so its pill gets disabled once used.
function usedKeys() {
var used = {};
var re = /<([a-zA-Z]+):/g;
var val = ta.val() || "";
var m;
while ((m = re.exec(val)) !== null) used[m[1]] = true;
return used;
}
$.each(WORD_MODIFIERS, function (_, mod) {
var pill = $("<button type='button' class='wiktku-mod-pill'></button>").text(mod.label);
pill.attr("title", mod.hint);
pill.data("mod-key", mod.key);
pill.on("click", function (e) {
e.preventDefault();
if (pill.prop("disabled")) return; // already used on this word
picker.hide();
// Show a tiny inline input for the modifier value.
var valWrap = $("<span class='wiktku-mod-val-wrap'></span>");
var valInp = $("<input type='text' class='wiktku-mod-val-input'>")
.attr("placeholder", mod.hint + "…")
.attr("size", 20);
var confirm = $("<button type='button' class='wiktku-mod-confirm'>✓</button>");
var cancel = $("<button type='button' class='wiktku-mod-cancel'>✕</button>");
function applyModifier() {
var v = $.trim(valInp.val());
if (v) {
ta.val(ta.val() + "<" + mod.key + ":" + v + ">");
ta.trigger("input");
}
valWrap.remove();
ta.focus();
}
confirm.on("click", applyModifier);
cancel.on("click", function () { valWrap.remove(); ta.focus(); });
valInp.on("keydown", function (e) {
if (e.which === 13) { e.preventDefault(); applyModifier(); }
if (e.which === 27) { valWrap.remove(); ta.focus(); }
});
valWrap.append(valInp).append(confirm).append(cancel);
li.append(valWrap);
valInp.focus();
});
picker.append(pill);
});
btn.on("click", function (e) {
e.preventDefault();
// Close any other open pickers in the same list.
li.closest("ol, ul").find(".wiktku-mod-picker").not(picker).hide();
// Grey out modifiers already used on this word — refreshed on
// every open since the text (and thus what's "used") can change.
var used = usedKeys();
picker.find(".wiktku-mod-pill").each(function () {
var isUsed = !!used[$(this).data("mod-key")];
$(this).prop("disabled", isUsed).toggleClass("wiktku-mod-pill-used", isUsed);
});
picker.toggle();
});
// Close picker when focus leaves the li entirely.
li.on("focusout", function () {
setTimeout(function () {
if (!$.contains(li[0], document.activeElement)) picker.hide();
}, 150);
});
li.append(ta).append(btn).append(picker);
return li;
}
function makeWordListStep(id, name, question_fmt) {
return {
id: id,
name: name,
question_fmt: question_fmt,
multiple: true,
narrow: true,
modifiers: true,
// Function instead of a plain string so it can name the current
// language — computed fresh at build time and re-applied by
// refresh() whenever the language changes.
placeholder: function () {
var lang = getValues().lang || "";
var langLabel = lang ? getLangLabel(lang) : "";
return "Kelîme" + (langLabel ? " bi " + langLabel : "") + "…";
},
visible: function (values) {
return values.lang && values.pos;
},
output: function (values) {
var words = $.grep(values[id] || [], function (w) { return !!w; });
var header = capitalize(name);
if (!words.length) return "";
var lang = values.lang;
var section = "\n==== " + header + " ====\n";
var params = "cure=" + header + "\n" +
$.map(words, function (w) {
return "|" + w;
}).join("\n");
return section +
"{{kol3|" + lang + "|" + params + "\n}}\n";
} };
}
var steps = {
lang: {
id: "lang",
required: true,
name: "ziman",
question_fmt: '"' + pageName + '" bi çi zimanî ye?',
question_br: true,
// Populated from [[MediaWiki:Gadget-start.js/data.json]] (langChoices).
choices: [],
output: function (values) {
return "== {{ziman|" + values.lang + "}} ==\n";
}
},
pron: {
id: "pron",
name: "bilêvkirin",
question_fmt: '"' + pageName + '" çawa tê telafûzkirin?',
// pronTpls populated from data.json
pronTpls: {},
visible: function (values) {
if (!values.lang) return false;
// addLangMode: skip pron only if this lang already has a section.
if (addLangMode) {
// Clearing the page makes existing content irrelevant.
var clearPageCheck = $("#wiktku-clear-page-check");
if (clearPageCheck.length && clearPageCheck.prop("checked")) {
return true;
}
var existing = $("#wpTextbox1").val() || "";
return !findLangHeader(existing, values.lang);
}
return true;
},
// Fills the insert-dropdown from pronTpls, filtered by language.
refreshTplSelect: function () {
var sel = $("#wiktku-start-pron .wiktku-tpl-insert-select");
if (!sel.length) return;
var lang = getValues().lang || "";
sel.find("option[value!='']").remove();
$.each(steps.pron.pronTpls, function (name, tpl) {
// Filter: if tpl.langs exists, only show if lang is in that list; otherwise show always
var allowed = !tpl.langs || tpl.langs.indexOf(lang) !== -1;
if (allowed) {
sel.append($("<option></option>")
.val(tpl.snippet)
.text(name + " — " + tpl.desc)
.attr("data-nolang", tpl.noLang ? "1" : ""));
}
});
markTemplateOptions(sel, function (opt) { return tplNameFromSnippet(opt.val()); });
// Tell the picker the option list changed.
sel.trigger("wiktku:refresh");
},
build: function (stepDiv) {
if (stepDiv.find(".wiktku-pron-wrap").length) return null;
var wrap = $("<div class='wiktku-pron-wrap'></div>");
// Rewiye tine, 14 Tebax 2026: "berê bilêvkirin otomatîk
// çêdibû, niha zehmettir e ji bo yekî nezan — gelek şablon
// hene, kîjan were hilbijartin?" A one-line reassurance:
// this field is optional, and the dropdown below writes the
// template for you — no need to know the syntax up front.
wrap.append(
$("<p class='wiktku-step-hint'></p>").text(
"Ev qad ne mecbûrî ye. Heke tu nizanî kîjan şablonî hilbijêrî, vale bihêle — an ji pêşkêşkariya jêrîn şablonekî hilbijêre, ew ê bixweber li vir were nivîsandin."
)
);
var ta = $("<textarea></textarea>")
.attr("name", "wiktku-pron-" + $.now())
.attr("class", "wiktku-start-step-field wiktku-pron-text")
.attr("rows", 4)
.attr("placeholder", "Nimûne: {{IPA|ku|/pɛɪ̯n/}} yan {{kîte|ku|he|ce|ki|rin}}");
// Template insert dropdown — filtered by language.
var sel = $("<select class='wiktku-tpl-insert-select'></select>");
sel.attr("data-placeholder", "Şablonek lê zêde bike ");
sel.append($("<option value=''>— şablonek lê zêde bike —</option>"));
var lang = getValues().lang || "";
$.each(steps.pron.pronTpls, function (name, tpl) {
// Filter: if tpl.langs exists, only show if lang is in that list; otherwise show always
var allowed = !tpl.langs || tpl.langs.indexOf(lang) !== -1;
if (allowed) {
sel.append($("<option></option>")
.val(tpl.snippet)
.text(name + " — " + tpl.desc)
.attr("data-nolang", tpl.noLang ? "1" : ""));
}
});
sel.on("change", function () {
var snippet = $(this).val();
if (!snippet) return;
var lang = getValues().lang || "";
// Check if the selected option has noLang flag
var selectedOption = sel.find("option:selected");
var hasNoLang = selectedOption.attr("data-nolang") === "1";
if (!hasNoLang) {
snippet = snippet.replace(/CODE/g, lang).replace(/SOURCELANG/g, "?");
insertAtCursor(ta[0], snippet);
$(this).val("");
// Clear the picker's search box
sel.trigger("wiktku:refresh");
ta.focus();
return;
}
// Item 5 (Wikihez, 14 Tebax 2026): the noLang templates
// (ku-IPA, ku-kîte, zza-IPA, zza-kîte) auto-generate
// their actual content from a Lua module reading the
// page title — "{{ku-IPA}}" alone gives no hint what
// that'll render as, so show a live preview and require
// confirmation before inserting, instead of an inline
// prompt()/confirm() dialog.
var tplLabel = selectedOption.text();
$(this).val("");
sel.trigger("wiktku:refresh");
steps.pron.showTplPreview(stepDiv, ta, snippet, tplLabel);
});
wrap.append(sel).append(ta);
stepDiv.append(wrap);
steps.pron.buildIpaPalette(wrap, ta);
initSelects(wrap);
return ta;
},
// ── IPA character palette (v3 spec, 15 Tebax 2026) ───────────
// Modelled on fr.wiktionary's: every character is a button that
// drops itself in at the cursor. Two sub-tabs, because the full
// IPA chart is ~180 symbols and roughly twenty of them ever
// appear in Kurmancî — "IPA (kurdî)" opens by default and the
// full chart is one click away for loanwords and other
// languages. Grouped with a label down the left so it reads as
// a chart rather than one long line of glyphs.
IPA_KU: [
{ label: "Kît/stres", chars: ["ˈ", "ˌ", "ː"] },
{ label: "Bêdeng", chars: ["d͡ʒ", "t͡ʃ", "ʒ", "ʃ", "ɫ", "ŋ", "ɾ", "r", "ʋ", "ħ", "ʕ", "ɣ", "χ", "ʔ"] },
{ label: "Dengdêr", chars: ["ɑː", "eː", "ɛ", "ɪ", "iː", "ɯ", "ʊ", "uː", "yː", "ø", "œ"] }
],
IPA_FULL: [
{ label: "Bêdeng 1", chars: ["m", "ɱ", "n", "ɳ", "ɲ", "ŋ", "ɴ", "p", "b", "t", "d", "t̪", "d̪", "ʈ", "ɖ", "c", "ɟ", "k", "ɡ", "q", "ɢ", "ʡ", "ʔ"] },
{ label: "Bêdeng 2", chars: ["ɸ", "β", "f", "v", "θ", "ð", "s", "z", "ʃ", "ʒ", "ʂ", "ʐ", "ɕ", "ʑ", "ç", "ʝ", "x", "ɣ", "χ", "ʁ", "ħ", "ʕ", "h", "ɦ", "ʜ", "ʢ", "ɧ"] },
{ label: "Bêdeng 3", chars: ["ʋ", "ɹ", "ɻ", "j", "ɥ", "ɰ", "ʍ", "w", "ʙ", "ⱱ", "ɾ", "ɽ", "r", "ʀ", "ɺ", "l", "ɫ", "ɬ", "ɮ", "ɭ", "ʎ", "ʟ"] },
{ label: "Bêdeng 4", chars: ["ɓ", "ɗ", "ᶑ", "ʄ", "ɠ", "ʛ", "ʘ", "ǀ", "ǃ", "ǂ", "ǁ"] },
{ label: "Dengdêr", chars: ["i", "y", "ɪ", "ʏ", "ɨ", "ʉ", "ɯ", "u", "ʊ", "e", "ø", "ɘ", "ɵ", "ɤ", "o", "ə", "ɚ", "ɛ", "œ", "ɜ", "ɝ", "ɞ", "ʌ", "ɔ", "æ", "ɶ", "ɐ", "a", "ɑ", "ɒ"] },
{ label: "Suprasegmental", chars: ["ˈ", "ˌ", "ː", "ˑ", "ʼ", "ˀ", "ˤ", "ᵝ", "ᵊ", "ˠ", "ʰ", "ʱ", "ʲ", "ˡ", "ⁿ", "ᵑ", "ʷ", "ᶣ", "˞", "‿"] },
{ label: "Dîakrîtîk", chars: ["̚", "̪", "̺", "̻", "̼", "̬", "̊", "̥", "̞", "̝", "̘", "̙", "̽", "̟", "̠", "̈", "̤", "̹", "̜", "̍", "̩", "̆", "̯", "̃", "̰", "͡", "͜"] },
{ label: "Ton", chars: ["̋", "́", "̄", "̀", "̏", "̌", "̂", "˥", "˦", "˧", "˨", "˩", "ꜛ", "ꜜ", "↗", "↘", "‖"] }
],
/** Builds the two-sub-tab character palette under the textarea. */
buildIpaPalette: function (wrap, ta) {
if (wrap.find(".wiktku-ipa-palette").length) return;
var panel = $("<div class='wiktku-ipa-panel'></div>").hide();
var toggle = $("<a href='#' class='wiktku-adv-toggle'></a>")
.attr("aria-expanded", "false")
.append($("<span class='wiktku-adv-toggle-chevron'>▾</span>"))
.append($("<span class='wiktku-adv-toggle-text'>Tîpên bilêvkirinê</span>"));
toggle.on("click", function (e) {
e.preventDefault();
var open = panel.is(":visible");
panel.toggle(!open);
$(this).attr("aria-expanded", open ? "false" : "true")
.toggleClass("wiktku-adv-open", !open);
});
wrap.append($("<div class='wiktku-adv-toggle-row'></div>").append(toggle));
// Sub-tab bar, with the two template buttons pinned right.
var subTabs = $("<div class='wiktku-ipa-subtabs'></div>");
var kuTab = $("<span class='wiktku-ipa-subtab wiktku-tab-active'>IPA (kurdî)</span>");
var fullTab = $("<span class='wiktku-ipa-subtab'>IPA</span>");
subTabs.append(kuTab).append(fullTab);
var tplBtns = $("<span class='wiktku-ipa-tplbtns'></span>");
$.each([
{ label: "{{ku-IPA|+}}", snippet: "{{ku-IPA|}}", back: 2 },
{ label: "{{IPA|+}}", snippet: "{{IPA|ku|}}", back: 2 }
], function (_, t) {
var b = $("<button type='button' class='wiktku-ipa-tplbtn'></button>").text(t.label);
b.on("click", function (e) {
e.preventDefault();
insertAtCursor(ta[0], t.snippet);
// Park the cursor inside the braces, where the value goes.
var pos = ta[0].selectionStart - t.back;
ta[0].selectionStart = ta[0].selectionEnd = pos;
ta.focus();
});
tplBtns.append(b);
});
subTabs.append(tplBtns);
panel.append(subTabs);
function buildGrid(groups) {
var grid = $("<div class='wiktku-ipa-grid'></div>");
$.each(groups, function (_, g) {
var row = $("<div class='wiktku-ipa-row'></div>");
row.append($("<span class='wiktku-ipa-rowlabel'></span>").text(g.label));
var keys = $("<span class='wiktku-ipa-keys'></span>");
$.each(g.chars, function (_, ch) {
var btn = $("<button type='button' class='wiktku-ipa-key'></button>");
// A combining mark on its own renders as a stray
// accent floating over whatever precedes it, so
// show it on a dotted circle — but insert only
// the mark itself.
var combining = /^[̀-ͯ҃-҉]$/.test(ch);
btn.text(combining ? "◌" + ch : ch);
if (combining) btn.addClass("wiktku-ipa-key-combining");
btn.attr("title", ch);
btn.on("click", function (e) {
e.preventDefault();
insertAtCursor(ta[0], ch);
ta.focus();
});
keys.append(btn);
});
row.append(keys);
grid.append(row);
});
return grid;
}
var kuGrid = buildGrid(steps.pron.IPA_KU);
var fullGrid = buildGrid(steps.pron.IPA_FULL).hide();
panel.append(kuGrid).append(fullGrid);
kuTab.on("click", function () {
kuTab.addClass("wiktku-tab-active"); fullTab.removeClass("wiktku-tab-active");
kuGrid.show(); fullGrid.hide();
});
fullTab.on("click", function () {
fullTab.addClass("wiktku-tab-active"); kuTab.removeClass("wiktku-tab-active");
fullGrid.show(); kuGrid.hide();
});
panel.addClass("wiktku-ipa-palette");
wrap.append(panel);
},
/** Item 5: inline preview + confirm panel for a "noLang" (auto-
* content) pronunciation template — fetches what the snippet
* actually expands to for this page (via action=expandtemplates,
* so the preview is exactly what {{ku-IPA}} etc. would produce)
* and only inserts it into the textarea if the user confirms. */
showTplPreview: function (stepDiv, ta, snippet, tplLabel) {
// Only one preview panel open at a time.
stepDiv.find(".wiktku-pron-preview").remove();
var panel = $("<div class='wiktku-pron-preview'></div>");
panel.append($("<div class='wiktku-pron-preview-label'></div>")
.text("Pêşdîtina " + tplLabel + ":"));
var body = $("<div class='wiktku-pron-preview-body'></div>").text("Tê barkirin…");
panel.append(body);
var actions = $("<div class='wiktku-pron-preview-actions'></div>");
var confirmBtn = $("<button type='button' class='wiktku-pron-preview-confirm'>✓ Tevlî bike</button>")
.prop("disabled", true);
var cancelBtn = $("<button type='button' class='wiktku-pron-preview-cancel'>✕ Betal bike</button>");
actions.append(confirmBtn).append(cancelBtn);
panel.append(actions);
ta.before(panel);
confirmBtn.on("click", function () {
insertAtCursor(ta[0], snippet);
panel.remove();
ta.focus();
});
cancelBtn.on("click", function () {
panel.remove();
});
// action=parse, not action=expandtemplates. expandtemplates
// returns *expanded wikitext*, so the preview read as
// [[IPA]]<sup>([[Wîkîferheng:IPA kurmancî|kilîd]])</sup>:
// <span class="IPA">/-{kshhe}-/</span>[[Kategorî:…]] — which
// is exactly what the person is trying to avoid having to
// read. parse hands back the rendered HTML the page will
// actually show.
//
// Drop the leading "* " first: it is wikitext list syntax
// wrapping the template, and keeping it would render the
// preview as a bulleted list rather than the line itself.
new mw.Api().post({
action: "parse",
title: pageName,
text: snippet.replace(/^\*\s*/, ""),
prop: "text",
wrapoutputclass: "",
disablelimitreport: 1,
disableeditsection: 1,
contentmodel: "wikitext",
formatversion: 2
}).done(function (data) {
var html = (data && data.parse && data.parse.text) || "";
if ($.trim($("<div>").html(html).text())) {
body.html(html);
// Category links render as nothing but still exist;
// and any real link inside a preview should not
// navigate away from a half-filled form.
body.find("a").attr("target", "_blank").attr("rel", "noopener");
} else {
body.text("(vala — ji bo vê rûpelê tiştek nehate afirandin)");
}
confirmBtn.prop("disabled", false);
}).fail(function () {
body.text("Pêşdîtin nehate barkirin — tu dikarî hîn jî wê tevlî bikî.");
confirmBtn.prop("disabled", false);
});
},
output: function () {
var text = $.trim($("#wiktku-start-pron .wiktku-pron-text").val());
if (!text) return "";
var lines = text.split("\n");
var out = $.map(lines, function (line) {
line = $.trim(line);
if (!line) return undefined;
return line;
}).join("\n");
// Back to "===", under Ziman and above the POS sections
// (v3 spec, 15 Tebax 2026). It had been nested at "===="
// inside each POS section per Ghybu's earlier note, but the
// field is shared across sections, so a two-POS entry
// printed the identical pronunciation twice — once under
// Navdêr and once under Lêker. Emitted once by getWikitext()
// now, not by getWikitextForCurrentSection().
return "\n=== Bilêvkirin ===\n" + out + "\n";
} },
pos: {
id: "pos",
required: true,
name: "Cureyê rêzimanî",
question_fmt: 'Cureyê rêzimanî yê "' + pageName + '" çi ye?',
visible: function (values) {
return values.lang;
},
question_br: true,
// Populated from [[MediaWiki:Gadget-start.js/data.json]] (posChoices).
choices: [],
output: function (values) {
var pos = values.pos || "";
var capitalizedPos = capitalize(pos);
// "form" opt-param (checked in posparams) marks this as a
// form-of/inflected entry — the section title becomes
// "Formeke <pos>ê" instead of the plain pos name. The
// template call itself still uses the unchanged pos name.
var isForm = $("#wiktku-posparams-opt-form").is(":checked");
var header = isForm
? "\n=== Formeke " + pos + "ê ===\n"
: "\n=== " + capitalizedPos + " ===\n";
// Image line (between header and template call)
var imageLine = steps.resim.output(values);
// Read the live wikitext from the posparams textarea.
// Fall back to a plain {{pos|lang}} if the step hasn't been built yet.
var tplLine = $.trim($("#wiktku-start-posparams .wiktku-posparams-text").val());
if (!tplLine) {
tplLine = "{{" + pos + "|" + (values.lang || "") + "}}";
}
return header + imageLine + tplLine + "\n";
}
},
// cinsiyet (gender) — shown for navdêr/serenav only, with choices built
// from metadata[lang].g since not every language has grammatical gender.
cinsiyet: {
id: "cinsiyet",
name: "cinsiyet",
question_fmt: 'Cinsiyeta "' + pageName + '" çi ye?',
question_br: true,
visible: function () { return false; }, // handled inside posparams
// Single source of truth for the selected gender code. The visible
// dropdown lives inside the posparams step (see steps.posparams),
// but it must always read/write THIS hidden field — not a field of
// its own — since getValuesForStep("cinsiyet") reads from here.
build: function (stepDiv) {
var field = stepDiv.find(".wiktku-start-step-field");
if (field.length) return field;
field = $("<input type='hidden'>")
.addClass("wiktku-start-step-field")
.attr("id", "wiktku-start-cinsiyet-field")
.val("");
stepDiv.append(field);
return field;
},
output: function () { return ""; } // consumed by posparams/pos.output
},
// Item 1 (Wikihez, 14 Tebax 2026): jimar (grammatical number) — same
// hidden-field pattern as cinsiyet just above, but writes into its
// own j= template parameter instead of sharing c=. Shown for
// navdêr/serenav only, with choices built from whichever of
// metadata[lang].g are number codes (see isNumberCode) — mirrors
// cinsiyet exactly, just filtered to the other half of that list.
jimar: {
id: "jimar",
name: "jimar",
question_fmt: 'Jimara "' + pageName + '" çi ye?',
question_br: true,
visible: function () { return false; }, // handled inside posparams
build: function (stepDiv) {
var field = stepDiv.find(".wiktku-start-step-field");
if (field.length) return field;
field = $("<input type='hidden'>")
.addClass("wiktku-start-step-field")
.attr("id", "wiktku-start-jimar-field")
.val("");
stepDiv.append(field);
return field;
},
output: function () { return ""; } // consumed by posparams/pos.output
},
// Lêker transitivity — hidden step, handled inside posparams
lektur: {
id: "lektur",
name: "Cureyê lêkerê (fiîlê)",
question_fmt: "Cureyê lêkerê (fiîlê) çi ye?",
question_br: true,
visible: function () { return false; },
choices: [
{ code: "gh", label: "gerguhêz" },
{ code: "x-gh", label: "xwerû-gerguhêz" },
{ code: "p-gh", label: "pêkhatî-gerguhêz" },
{ code: "h-gh", label: "hevedudanî-gerguhêz" },
{ code: "b-gh", label: "biwêjî-gerguhêz" },
{ code: "ngh", label: "negerguhêz" },
{ code: "x-ngh", label: "xwerû-negerguhêz" },
{ code: "p-ngh", label: "pêkhatî-negerguhêz" },
{ code: "h-ngh", label: "hevedudanî-negerguhêz" },
{ code: "b-ngh", label: "biwêjî-negerguhêz" } ],
output: function () { return ""; }
},
// tr — hidden step, handled inside posparams
tr: {
id: "tr",
name: "transliterasyon",
question_fmt: "Transliterasyona vê kelîmeyê",
multiple: false,
narrow: true,
visible: function () { return false; }
},
posparams: {
id: "posparams",
// Fused onto the "pos" card visually (see #wiktku-start-posparams
// in styles.css) so the two read as ONE question, per Ghybu's
// 14 Tebax 2026 feedback — this name is only a no-CSS/no-JS
// fallback, since the h3 that would show it is hidden by CSS.
name: "taybetmendî",
// The old static "Parametreyên cureyê rêzimanî" label named the
// mechanism, not the content. Show what's actually being asked
// for instead: gender for nouns, verb type for verbs, a generic
// fallback (transliteration/forms etc. still apply) otherwise.
question_fmt: function (values) {
var pos = values.pos || "";
if (pos === "navdêr" || pos === "serenav") return "Cins/zayend";
if (/^lêker/.test(pos)) return "Cureyê lêkerê";
return "Taybetmendî";
},
visible: function (values) {
return !!(values.lang && values.pos);
},
build: function (stepDiv) {
if (stepDiv.find(".wiktku-posparams-wrap").length) return null;
var wrap = $("<div class='wiktku-posparams-wrap'></div>");
var helpers = $("<div class='wiktku-posparams-helpers'></div>");
var ta = $("<textarea></textarea>")
.attr("name", "wiktku-posparams-" + $.now())
.attr("class", "wiktku-start-step-field wiktku-posparams-text")
.attr("rows", 2);
var _rebuilding = false;
function safeRebuild() {
if (_rebuilding) return;
_rebuilding = true;
steps.posparams.rebuildTa(stepDiv);
_rebuilding = false;
refresh();
}
// Generic text-input row factory
function makeTextRow(key, labelText, placeholder) {
var row = $("<div class='wiktku-posparams-row'></div>")
.attr("id", "wiktku-posparams-row-" + key).hide();
var inp = $("<input type='text'>")
.addClass("wiktku-start-narrow wiktku-posparams-field")
.attr("data-pp-key", key)
.attr("placeholder", placeholder || "");
inp.on("input", safeRebuild);
row.append($("<label></label>").text(labelText + ": ")).append(inp);
return row;
}
// cinsiyet
var cinsiyetRow = $("<div class='wiktku-posparams-row' id='wiktku-posparams-row-c'></div>")
.append($("<label></label>").text("Cinsiyet: ")).hide();
var cinsiyetSel = $("<select></select>")
.addClass("wiktku-plain-select wiktku-start-narrow wiktku-posparams-cinsiyet-sel")
.append($("<option value=''>— hilbijêre —</option>"));
// Writes into the real, shared #wiktku-start-cinsiyet-field (owned by
// steps.cinsiyet) rather than a field of its own — see the comment
// on steps.cinsiyet.build for why that matters.
cinsiyetSel.on("change", function () {
$("#wiktku-start-cinsiyet-field").val($(this).val()).trigger("change");
safeRebuild();
});
cinsiyetRow.append(cinsiyetSel);
// Item 1 (Wikihez, 14 Tebax 2026): jimar (number) — a second
// dropdown next to Cinsiyet, same pattern (writes into the
// shared hidden #wiktku-start-jimar-field), but into its own
// j= param instead of sharing c=. Options + the title
// tooltip (explanation) are built in syncHelpers, once the
// language's number codes are known.
var jimarRow = $("<div class='wiktku-posparams-row' id='wiktku-posparams-row-jimar'></div>")
.append($("<label></label>").text("Jimar: ")).hide();
var jimarSel = $("<select></select>")
.addClass("wiktku-plain-select wiktku-start-narrow wiktku-posparams-jimar-sel")
.append($("<option value=''>— hilbijêre —</option>"));
jimarSel.on("change", function () {
$("#wiktku-start-jimar-field").val($(this).val()).trigger("change");
safeRebuild();
});
jimarRow.append(jimarSel);
// lektur — Ghybu, 14 Tebax 2026: "'Cureyê lêkerê' nayê fêm
// kirin, bi min pêşta 'gerguhez/negerguhêz' were hilbijartin,
// paşê jî form 'hevdudanî/pêkatî/…' ji ber ku her kes vana
// nizanî." So the one 10-option dropdown ("xwerû-gerguhêz",
// "biwêjî-negerguhêz", …) becomes two plain questions. The
// emitted code is unchanged: base alone ("gh"), or prefix +
// "-" + base ("x-gh") — exactly the codes steps.lektur.choices
// already listed, just assembled from two answers instead of
// asked as one.
var lekturRow = $("<div class='wiktku-posparams-row' id='wiktku-posparams-row-lektur'></div>")
.append($("<label></label>").text("Lêker derbasdar e? ")).hide();
var lekturSel = $("<select></select>")
.addClass("wiktku-plain-select wiktku-start-narrow wiktku-posparams-lektur-sel")
.append($("<option value=''>— hilbijêre —</option>"))
.append($("<option value='gh'>gerguhêz (bireser digire)</option>"))
.append($("<option value='ngh'>negerguhêz (bireser nagire)</option>"));
lekturSel.on("change", safeRebuild);
lekturRow.append(lekturSel);
// Second half of the same question — the structural form.
// Blank = xwerû/sade, which is the common case.
var lekturFormRow = $("<div class='wiktku-posparams-row' id='wiktku-posparams-row-lekturform'></div>")
.append($("<label></label>").text("Şiklê lêkerê: ")).hide();
var lekturFormSel = $("<select></select>")
.addClass("wiktku-plain-select wiktku-start-narrow wiktku-posparams-lekturform-sel")
.append($("<option value=''>sade (asayî)</option>"))
.append($("<option value='x'>xwerû</option>"))
.append($("<option value='p'>pêkhatî</option>"))
.append($("<option value='h'>hevedudanî</option>"))
.append($("<option value='b'>biwêjî</option>"));
lekturFormSel.on("change", safeRebuild);
lekturFormRow.append(lekturFormSel);
helpers.append(cinsiyetRow).append(jimarRow).append(lekturRow).append(lekturFormRow);
// ── Everything below here is "Tercîhên pêşketî" ──────────────
// Ghybu, 14 Tebax 2026: "Tenê 'cîns' û 'jimar' bes e. 'Forma
// mê', 'Forma nêr', … nayê fêm kirin. Bi min wekî 'Tercîhên
// pêşketî' bi navkî din veşartî çêke." The rows themselves are
// unchanged and syncHelpers still shows/hides each one by id
// exactly as before — they just live inside a collapsed panel
// now, so the default view of this card is two dropdowns
// instead of twenty-odd fields.
// Transliteration is a primary field, not an advanced one, for
// any language not written in Latin script: for those, an
// entry without it is incomplete. syncHelpers already gates
// the row on needsTransliteration(lang), so for Kurmancî and
// other Latin-script languages it simply never appears.
helpers.append(makeTextRow("tr", "Transliterasyon (tr)", "Transliterasyon…"));
var advPanel = $("<div class='wiktku-posparams-adv-panel'></div>").hide();
advPanel
.append(makeTextRow("cuda", "nîşankirina alternatîv", "cuda…"))
.append(makeTextRow("ts", "Transkrîpsiyon (ts)", "Transkrîpsiyon…"))
.append(makeTextRow("m", "Forma mê (m)", "Forma mê…"))
.append(makeTextRow("mtr", "Translit. mê (mtr)", "Transliterasyona mê…"))
.append(makeTextRow("n", "Forma nêr (n)", "Forma nêr…"))
.append(makeTextRow("ntr", "Translit. nêr (ntr)", "Transliterasyona nêr…"))
.append(makeTextRow("p", "Forma pirjimar (p)", "Forma pirjimar…"))
.append(makeTextRow("ptr", "Translit. pirjimar", "Transliterasyona pirjimar…"))
.append(makeTextRow("y", "Forma yekjimar (y)", "Forma yekjimar…"))
.append(makeTextRow("ytr", "Translit. yekjimar", "Transliterasyona yekjimar…"))
.append(makeTextRow("sûp", "Forma sûperlatîv (sûp)", "Forma sûperlatîv…"))
.append(makeTextRow("sûptr", "Translit. sûperlatîv", "Transliterasyona sûperlatîv…"))
.append(makeTextRow("komp", "Forma komparatîv (komp)", "Forma komparatîv…"))
.append(makeTextRow("komptr", "Translit. komparatîv", "Transliterasyona komparatîv…"))
.append(makeTextRow("gir", "Forma girdêk (gir)", "gir=…"))
.append(makeTextRow("girtr", "Translit. gir", "girtr=…"))
.append(makeTextRow("hûr", "Forma hûrek (hûr)", "hûr=…"))
.append(makeTextRow("hûrtr", "Translit. hûr", "hûrtr=…"))
.append(makeTextRow("hanja", "Forma hanja", "hanja=…"))
.append(makeTextRow("hanjaTr","Translit. hanja", "hanjaTr=…"))
// Lêker rehên demê (only shown when pos is lêker — see syncHelpers)
.append(makeTextRow("niha", "Rehê dema niha (niha)", "Rehê dema niha…"))
.append(makeTextRow("nihatr", "Translit. rehê dema niha", "Transliterasyona rehê dema niha…"))
.append(makeTextRow("borî", "Rehê dema borî (borî)", "Rehê dema borî…"))
.append(makeTextRow("borîtr", "Translit. rehê dema borî", "Transliterasyona rehê dema borî…"))
.append(makeTextRow("subj", "Rehê dema bilanî (subj)", "Rehê dema bilanî…"))
.append(makeTextRow("subjtr", "Translit. rehê dema bilanî", "Transliterasyona rehê dema bilanî…"));
// Optional boolean params — nested inside the advanced panel
// (they were already the most niche thing on the card).
var optPanel = $("<div class='wiktku-posparams-opt-panel'></div>");
$.each([
{ key: "form", label: "form — ev made forma tewandî ye" },
{ key: "formaalt", label: "formaalt — vê madeyê bike forma alternatîv" },
{ key: "nekatcure", label: "nekatcure — sinifa rêzimanî kategorîze neke" },
{ key: "nekatcins", label: "nekatcins — kategoriya cinsiyetê neyîne" },
{ key: "nekatçendterm", label: "nekatçendterm — kategoriya çend-term neyîne" },
{ key: "serlînkneke", label: "serlînkneke — sernavê madeyê lînk neke" },
{ key: "nekatpalîndrom", label: "nekatpalîndrom — kategoriya palîndromê neyîne" },
{ key: "neformtr", label: "neformtr — transliterasyona forman neyîne" }
], function (_, p) {
var cb = $("<input type='checkbox'>")
.attr("id", "wiktku-posparams-opt-" + p.key).val(p.key).on("change", safeRebuild);
var lbl = $("<label></label>").attr("for", "wiktku-posparams-opt-" + p.key).text(" " + p.label);
optPanel.append($("<div class='wiktku-posparams-opt-row'></div>").append(cb).append(lbl));
});
advPanel.append(optPanel);
var optToggle = $("<a href='#' class='wiktku-posparams-opt-toggle wiktku-adv-toggle'></a>")
.attr("aria-expanded", "false")
.append($("<span class='wiktku-adv-toggle-chevron'>▾</span>"))
.append($("<span class='wiktku-adv-toggle-text'>Tercîhên pêşketî</span>"));
var optCount = $("<span class='wiktku-adv-toggle-count'></span>");
/** "N zevî · M tije" for whatever the advanced panel is
* currently showing — the row set changes with pos/lang (see
* syncHelpers), so this counts visible rows, not all of them. */
function syncAdvCount() {
var rows = advPanel.find(".wiktku-posparams-row").filter(function () {
return $(this).css("display") !== "none";
});
var filled = rows.filter(function () {
return $.trim($(this).find("input").val() || "") !== "";
}).length;
var checked = advPanel.find(".wiktku-posparams-opt-panel input:checked").length;
optCount.text(rows.length + " zevî · " + (filled + checked) + " tije");
}
stepDiv.data("syncAdvCount", syncAdvCount);
optToggle.on("click", function (e) {
e.preventDefault();
var open = advPanel.is(":visible");
advPanel.toggle(!open);
$(this).attr("aria-expanded", open ? "false" : "true")
.toggleClass("wiktku-adv-open", !open);
syncAdvCount();
});
advPanel.on("input change", "input", syncAdvCount);
helpers.append($("<div class='wiktku-adv-toggle-row'></div>")
.append(optToggle).append(optCount));
helpers.append(advPanel);
wrap.append(helpers).append(ta);
// Typing directly in textarea keeps cinsiyet/jimar hidden
// fields in sync, but does NOT call refresh() — preserves
// manual edits.
ta.on("input", function () {
var text = $(this).val();
var cMatch = text.match(/\|c=([^|}\s]+)/);
$("#wiktku-start-cinsiyet-field").val(cMatch ? cMatch[1] : "");
var jMatch = text.match(/\|j=([^|}\s]+)/);
$("#wiktku-start-jimar-field").val(jMatch ? jMatch[1] : "");
});
stepDiv.append(wrap);
return null;
},
/** Reads all helper widget values and rewrites the textarea.
* Called only by safeRebuild (user interaction) — never by syncHelpers,
* so manual textarea edits are never overwritten by a refresh cycle. */
rebuildTa: function (stepDiv) {
var values = getValues();
var pos = values.pos || "";
var lang = values.lang || "";
if (!pos || !lang) return;
var cinsiyet = stepDiv.find(".wiktku-posparams-cinsiyet-sel").val() || "";
var jimar = stepDiv.find(".wiktku-posparams-jimar-sel").val() || "";
// Two dropdowns, one code: "gh" / "ngh" on their own, or
// prefixed with the structural form ("x-gh", "b-ngh", …).
var lekturBase = stepDiv.find(".wiktku-posparams-lektur-sel").val() || "";
var lekturForm = stepDiv.find(".wiktku-posparams-lekturform-sel").val() || "";
var lektur = lekturBase ? (lekturForm ? lekturForm + "-" + lekturBase : lekturBase) : "";
function v(key) {
return $.trim(stepDiv.find(".wiktku-posparams-field[data-pp-key='" + key + "']").val());
}
var out = "{{" + pos + "|" + lang;
if (pos === "navdêr" || pos === "serenav") {
out += cinsiyet ? "|c=" + cinsiyet : (lang === "ku" ? "|c=?" : "");
// Item 1: number is its own j= param now, separate from
// c= — c= keeps holding gender (and gender+plural
// compounds like m-p/n-p, unaffected by this change).
if (jimar) out += "|j=" + jimar;
} else if (/^lêker/.test(pos) && lektur) {
out += "|c=" + lektur;
}
if (v("cuda")) out += "|" + v("cuda");
if (v("tr")) out += "|tr=" + v("tr");
if (v("ts")) out += "|ts=" + v("ts");
$.each(["m","n","p","y"], function (_, k) {
if (v(k)) out += "|" + k + "=" + v(k);
if (v(k+"tr")) out += "|" + k + "tr=" + v(k+"tr");
});
if (v("sûp")) out += "|sûp=" + v("sûp");
if (v("sûptr")) out += "|sûptr=" + v("sûptr");
if (v("komp")) out += "|komp=" + v("komp");
if (v("komptr")) out += "|komptr=" + v("komptr");
if (v("gir")) out += "|gir=" + v("gir");
if (v("girtr")) out += "|girtr=" + v("girtr");
if (v("hûr")) out += "|hûr=" + v("hûr");
if (v("hûrtr")) out += "|hûrtr=" + v("hûrtr");
if (v("hanja")) out += "|hanja=" + v("hanja");
if (v("hanjaTr")) out += "|hanjaTr=" + v("hanjaTr");
if (v("niha")) out += "|niha=" + v("niha");
if (v("nihatr")) out += "|nihatr=" + v("nihatr");
if (v("borî")) out += "|borî=" + v("borî");
if (v("borîtr")) out += "|borîtr=" + v("borîtr");
if (v("subj")) out += "|subj=" + v("subj");
if (v("subjtr")) out += "|subjtr=" + v("subjtr");
stepDiv.find(".wiktku-posparams-opt-panel input:checked").each(function () {
var key = $(this).val();
// "form" marks this entry as a form-of/inflected entry — it
// takes "erê" rather than the plain "1" the other boolean
// opt params use.
out += "|" + key + "=" + (key === "form" ? "erê" : "1");
});
out += "}}";
stepDiv.find(".wiktku-posparams-text").val(out);
$("#wiktku-start-cinsiyet-field").val(cinsiyet);
$("#wiktku-start-jimar-field").val(jimar);
},
/** Called from refresh() — controls row visibility only.
* Does NOT rewrite textarea so user edits are preserved.
* Rebuilds only when textarea is empty (first pos selection). */
syncHelpers: function (stepDiv) {
var values = getValues();
var pos = values.pos || "";
var lang = values.lang || "";
var needsTr = needsTransliteration(lang);
var isNom = pos === "navdêr" || pos === "serenav" || pos === "rengdêr";
var isAdj = pos === "rengdêr";
var isTîp = pos === "tîp";
var isJa = lang === "ja";
var isLeker = /^lêker/.test(pos);
// Item 1: metadata[lang].g used to list gender AND number
// codes together — split them here (see isNumberCode) so
// Cîns only ever offers gender codes (and gender+plural
// compounds like m-p/n-p, which aren't NUMBER_LABELS keys)
// and the new Jimar dropdown only offers number codes.
var meta = metadata[lang];
var allCodes = (meta && meta.g) || [];
var genderCodes = $.grep(allCodes, function (c) { return !isNumberCode(c); });
var jimarCodes = $.grep(allCodes, function (c) { return isNumberCode(c); });
var showC = (pos === "navdêr" || pos === "serenav") && genderCodes.length > 0;
var cRow = stepDiv.find("#wiktku-posparams-row-c");
cRow.toggle(showC);
if (showC) {
var sel = cRow.find(".wiktku-posparams-cinsiyet-sel");
// Prefer the select's own current value (normal in-session
// use); fall back to the shared hidden field, which is how
// a cache/section restore communicates a saved gender
// before this select has any <option>s to hold it.
var prev = sel.val() || $("#wiktku-start-cinsiyet-field").val() || "";
sel.find("option[value!='']").remove();
$.each(genderCodes, function (_, code) {
sel.append($("<option></option>").val(code).text(genderLabel(code)));
});
if (prev) sel.val(prev);
}
var showJimar = (pos === "navdêr" || pos === "serenav") && jimarCodes.length > 0;
var jimarRowEl = stepDiv.find("#wiktku-posparams-row-jimar");
jimarRowEl.toggle(showJimar);
if (showJimar) {
var jimarSelEl = jimarRowEl.find(".wiktku-posparams-jimar-sel");
var prevJimar = jimarSelEl.val() || $("#wiktku-start-jimar-field").val() || "";
jimarSelEl.find("option[value!='']").remove();
$.each(jimarCodes, function (_, code) {
var def = NUMBER_LABELS[code] || {};
var opt = $("<option></option>").val(code).text(numberOptionLabel(code));
// The explanation (cat, e.g. "dualia tantum") shows as a
// hover tooltip — <option> can't hold richer markup.
if (def.cat) opt.attr("title", def.cat);
jimarSelEl.append(opt);
});
if (prevJimar) jimarSelEl.val(prevJimar);
}
stepDiv.find("#wiktku-posparams-row-lektur").toggle(isLeker);
// Only ask for the structural form once the person has said
// gerguhêz/negerguhêz — "paşê jî form", per Ghybu.
stepDiv.find("#wiktku-posparams-row-lekturform")
.toggle(isLeker && !!stepDiv.find(".wiktku-posparams-lektur-sel").val());
stepDiv.find("#wiktku-posparams-row-tr").toggle(needsTr);
stepDiv.find("#wiktku-posparams-row-ts").toggle(needsTr);
stepDiv.find("#wiktku-posparams-row-m").toggle(isNom);
stepDiv.find("#wiktku-posparams-row-mtr").toggle(isNom && needsTr);
stepDiv.find("#wiktku-posparams-row-n").toggle(isNom);
stepDiv.find("#wiktku-posparams-row-ntr").toggle(isNom && needsTr);
stepDiv.find("#wiktku-posparams-row-p").toggle(isNom);
stepDiv.find("#wiktku-posparams-row-ptr").toggle(isNom && needsTr);
stepDiv.find("#wiktku-posparams-row-y").toggle(isNom);
stepDiv.find("#wiktku-posparams-row-ytr").toggle(isNom && needsTr);
stepDiv.find("#wiktku-posparams-row-sûp").toggle(isAdj);
stepDiv.find("#wiktku-posparams-row-sûptr").toggle(isAdj && needsTr);
stepDiv.find("#wiktku-posparams-row-komp").toggle(isAdj);
stepDiv.find("#wiktku-posparams-row-komptr").toggle(isAdj && needsTr);
stepDiv.find("#wiktku-posparams-row-gir").toggle(isTîp);
stepDiv.find("#wiktku-posparams-row-girtr").toggle(isTîp && needsTr);
stepDiv.find("#wiktku-posparams-row-hûr").toggle(isTîp);
stepDiv.find("#wiktku-posparams-row-hûrtr").toggle(isTîp && needsTr);
stepDiv.find("#wiktku-posparams-row-hanja").toggle(isJa);
stepDiv.find("#wiktku-posparams-row-hanjaTr").toggle(isJa);
stepDiv.find("#wiktku-posparams-row-niha").toggle(isLeker);
stepDiv.find("#wiktku-posparams-row-nihatr").toggle(isLeker && needsTr);
stepDiv.find("#wiktku-posparams-row-borî").toggle(isLeker);
stepDiv.find("#wiktku-posparams-row-borîtr").toggle(isLeker && needsTr);
stepDiv.find("#wiktku-posparams-row-subj").toggle(isLeker);
stepDiv.find("#wiktku-posparams-row-subjtr").toggle(isLeker && needsTr);
// Row visibility just changed, so the "N zevî" half of the
// advanced toggle's badge is stale — recount.
var syncAdvCount = stepDiv.data("syncAdvCount");
if (typeof syncAdvCount === "function") syncAdvCount();
if (!$.trim(stepDiv.find(".wiktku-posparams-text").val())) {
steps.posparams.rebuildTa(stepDiv);
}
},
output: function () { return ""; } // pos.output reads the textarea directly
},
dfn: {
id: "dfn",
name: "Mane",
// Field types that live behind "Malûmatên pêşketî". Kept as one
// list so the collapse CSS, the count badge and the allGroups
// adv: flags below can't drift apart.
ADV_SUBGROUPS: [
"wiktku-dfn-etiket",
"wiktku-dfn-kategori",
"wiktku-dfn-alternativ",
"wiktku-dfn-koordine",
"wiktku-dfn-jornav",
"wiktku-dfn-jernav"
],
question_fmt: function (values) {
var base = "Maneya kelîmeyê binivîse. Mane otomatîk tê lînkkirin!";
if (values.lang === "ku") {
return base + " Ji bo tercimeyan beşa 'Werger' bi kar bîne!";
}
return base;
},
multiple: true,
ordered: true,
rows: 3,
visible: function (values) {
return values.lang && values.pos;
},
example: function (values) {
// posExamples loaded from [[MediaWiki:Gadget-start.js/data.json]].
var examples = steps.dfn.posExamples || {};
var full = values.pos || "";
return examples[full] || "";
},
// Builds one sense block (<li>): mane textarea, nimûne list, and
// sub-lists for alternatîv/hevmane/dijmane/etc.
buildSenseBlock: function (stepDiv) {
var block = $("<li class='wiktku-dfn-sense'></li>");
// — Mane textarea (declared first so the template handler can reference it) —
var dfnArea = $("<textarea></textarea>")
.attr("name", "wiktku-dfn-mane-" + $.now() + "-" + Math.random().toString(36).substr(2, 9))
.attr("class", "wiktku-start-step-field wiktku-dfn-mane")
.attr("rows", 6)
.attr("placeholder", "Mane…");
dfnArea.on("input", function () {
steps.dfn.onDfnInput(stepDiv, block, this);
});
// — Tercime + Îzah boxes (non-ku alternative to the plain mane box) —
// Non-ku entries get a direct translation plus a {{îzah|…}}-wrapped
// gloss instead of a Kurdish-style gloss. Rather than teach every
// consumer (getSenses/getOutput/linkify) a second data shape, these
// boxes just write their combined text into dfnArea and re-fire its
// "input" event, so dfnArea stays the single source of truth.
var tercimeArea = $("<textarea></textarea>")
.attr("name", "wiktku-dfn-tercime-" + $.now() + "-" + Math.random().toString(36).substr(2, 9))
.attr("class", "wiktku-dfn-subfield wiktku-dfn-tercime")
.attr("rows", 2)
.attr("placeholder", "Tercimeyên rasterast ên kurmancî… Ji bo school-a îngilîzî li vir 'mekteb, medrese' binivîse");
var izahArea = $("<textarea></textarea>")
.attr("name", "wiktku-dfn-izah-" + $.now() + "-" + Math.random().toString(36).substr(2, 9))
.attr("class", "wiktku-dfn-subfield wiktku-dfn-izah")
.attr("rows", 3)
.attr("placeholder", "Îzaha kurmancî… Ji bo school-a îngilîzî li vir 'cihê tehsîlgirtinê' binivîse");
var nonKuWrap = $("<div class='wiktku-dfn-nonku-wrap'></div>")
.append(tercimeArea).append(izahArea)
.hide();
function syncNonKuToMane() {
var t = $.trim(tercimeArea.val());
var iz = $.trim(izahArea.val());
// if tercime is blank, use îzah as definition
var combined = t ? (iz ? t + " {{îzah|" + iz + "}}" : t) : iz;
dfnArea.val(combined);
// Re-fires onDfnInput so the sense list still grows and
// refresh() still runs, exactly as if this were typed
// directly into the mane textarea.
dfnArea.trigger("input");
}
tercimeArea.on("input", syncNonKuToMane);
izahArea.on("input", syncNonKuToMane);
// Switches between the plain mane box and the tercime+îzah pair —
// only for non-ku entries with no tplSelect selected.
function updateManeMode() {
var lang = getValues().lang || "";
var isTpl = !!tplSelect.val();
if (lang && lang !== "ku" && !isTpl) {
dfnArea.hide();
nonKuWrap.show();
} else {
nonKuWrap.hide();
if (!isTpl) dfnArea.show();
}
}
// Store on the block so refresh() can re-sync every block when
// lang changes, and restoreDfn() can re-sync after restoring.
block.data("updateManeMode", updateManeMode);
// — Template selector (optional — replaces mane when chosen) —
// Template definitions loaded from [[MediaWiki:Gadget-start.js/data.json]].
var tplDefs = steps.dfn.tplDefs || {};
// Cache of all non-placeholder option elements, so updateTplOptions
// can detach/re-attach them without losing the full list.
var _allTplOptions = [];
var tplSelect = $(mw.html.element("select", { "class": "wiktku-dfn-tpl-select" }));
tplSelect.attr("data-placeholder", "Li şablonekê bigere");
tplSelect.append($("<option value=''>— yan jî şablonek hilbijêre —</option>"));
$.each(tplDefs, function (name, tpl) {
// Rewiye tine, 14 Tebax 2026: "guharto? kevnbûyî? ku-Latn?
// şaşnivîs? famkirina van zehmet e" — these 13 names had
// zero explanation in the dropdown (unlike steps.pron's
// template picker, which already shows "name — tpl.desc").
// Mirrors that same pattern here: if tpl.desc is ever
// added to a tplDefs entry in data.json, it'll show up
// automatically. It's optional per-entry, not required,
// since data.json doesn't have desc text for these yet —
// writing accurate one-line explanations for each needs
// someone who actually knows what each template does.
var opt = $("<option></option>")
.val(name)
.text(tpl.desc ? name + " — " + tpl.desc : name)
.attr("data-langs", tpl.langs ? tpl.langs.join(",") : "")
.attr("data-nolang", tpl.noLang ? "1" : "");
tplSelect.append(opt);
_allTplOptions.push(opt[0]);
});
// v3: the same status-dot / 🔗 / ⓘ row treatment as every
// other template picker. This one carries the bare name in
// value=, so the name mapper is the identity rather than a
// snippet parse. It also answers Rewiye tine's "famkirina
// van zehmet e" about these thirteen names properly — the
// explanation now comes from each template's own
// TemplateData instead of waiting for someone to hand-write
// thirteen desc strings into data.json.
markTemplateOptions(tplSelect, function (opt) { return opt.val(); });
function updateTplOptions() {
var lang = getValues().lang || "";
var currentVal = tplSelect.val();
var currentStillValid = false;
// Detach all non-placeholder options, then re-attach only the visible
// ones — native <select> won't reliably hide options any other way.
tplSelect.find("option[value!='']").detach();
$.each(_allTplOptions, function (_, opt) {
var allowed = $(opt).attr("data-langs");
var visible = !allowed || allowed.split(",").indexOf(lang) !== -1;
if (visible) {
tplSelect.append(opt);
if ($(opt).val() === currentVal) currentStillValid = true;
}
});
tplSelect.trigger("wiktku:refresh");
if (currentVal && !currentStillValid) {
tplSelect.val("");
tplTitleInput.hide().val("");
updateManeMode();
}
}
// Store updater on the element so refresh() can call it for all blocks.
tplSelect.data("updateOptions", updateTplOptions);
var tplTitleInput = $("<input type='text'>")
.addClass("wiktku-dfn-tpl-title wiktku-start-narrow")
.attr("placeholder", "Navê rûpela hedefê…")
.hide();
// Grow the sense list when the title field of the last block gets content,
// mirroring what onDfnInput does for the plain mane textarea.
tplTitleInput.on("input", function () {
steps.dfn.onDfnInput(stepDiv, block, this);
});
// Şablon senses have no plain gloss, so hide alternatîv/hevmane/
// dijmane/etc. Etîket, Nimûne and Jêgirtin stay visible either way.
function updateFieldVisibility() {
var isTpl = !!tplSelect.val();
$.each(HIDDEN_ON_TPL_GROUPS, function (_, cls) {
block.find("." + cls + "-group").toggle(!isTpl);
});
}
// Store on the block so restoreDfn() can re-sync visibility
// after setting tplSelect's value.
block.data("updateFieldVisibility", updateFieldVisibility);
tplSelect.on("change", function () {
var chosen = $(this).val();
if (chosen) {
dfnArea.hide();
nonKuWrap.hide();
tplTitleInput.show().focus();
} else {
tplTitleInput.hide().val("");
updateManeMode();
}
updateFieldVisibility();
// Re-run refresh so the Werger step visibility updates.
refresh();
});
// The template picker is an alternative to writing a
// definition, not a step before it — so the box comes first
// and this sits under it as a quiet link. It only expands
// for the minority of senses that are a pointer at another
// word (guharto, şaşnivîs, kevnbûyî) rather than a meaning.
var tplRow = $("<div></div>").addClass("wiktku-dfn-tpl-row")
.append(tplSelect).append(" ").append(tplTitleInput)
.hide();
var tplLink = $("<a href='#' class='wiktku-dfn-tpl-link'></a>")
.text("Ev ne pênase ye — şablonek bi kar bîne");
tplLink.on("click", function (e) {
e.preventDefault();
tplRow.show();
$(this).hide();
tplRow.find("input.wiktku-ac-input").first().focus();
});
/** Opens the picker without a click — used on restore, when a
* sense already has a template and hiding it would make the
* chosen value invisible. */
function revealTplRow() { tplRow.show(); tplLink.hide(); }
block.data("revealTplRow", revealTplRow);
block.append(dfnArea);
block.append(nonKuWrap);
block.append(tplLink);
block.append(tplRow);
// Apply lang filter on initial build.
updateTplOptions();
updateManeMode();
// — Sub-field groups. —
// Ghybu, 14 Tebax 2026: "Bi min beşên 'Hevmane' û dijmane jî
// bike de nav beşa Mane ji ber ku pirr tên xwestin" — and,
// separately, that showing all nine at once is what makes this
// form read as long and tevlihev. So the four people actually
// reach for (Nimûne, Jêgirtin, Hevmane, Dijmane) stay open, in
// that order, and the other five sit behind the "Malûmatên
// pêşketî" toggle (adv: true → .wiktku-dfn-subgroup-adv, which
// is what the collapse CSS keys off now).
// Jêgirtin isn't in this array — it's a compound widget built
// after the loop — but it's inserted right after Nimûne so the
// visible order matches the list above.
var allGroups = [
{ cls: "wiktku-dfn-nimune", label: "Nimûne", rows: 2, narrow: false },
{ cls: "wiktku-dfn-hevmane", label: "Hevmane", rows: 1, narrow: true, izah: "Spehî hevmaneya Bedew e." },
{ cls: "wiktku-dfn-dijmane", label: "Dijmane", rows: 1, narrow: true, izah: "Zengîn dijmaneya feqîr e." },
{ cls: "wiktku-dfn-etiket", label: "Etîket", rows: 1, narrow: true, izah: "xisûsen, Mêrdîn, anatomî, Badînî", noLangSuffix: true, adv: true },
{ cls: "wiktku-dfn-kategori", label: "Kategorî", rows: 1, narrow: true, izah: "wekî etîket lê xuya nabe tenê kategorîze dike", noLangSuffix: true, adv: true },
{ cls: "wiktku-dfn-alternativ", label: "Formên alternatîv", rows: 1, narrow: true, izah: "Varyantên vê kelîmeyê", adv: true },
{ cls: "wiktku-dfn-koordine", label: "Termên koordîne", rows: 1, narrow: true, izah: "Pisîk û kûçik termên koordîne ne çunkî Jornavên wan gelek in", adv: true },
{ cls: "wiktku-dfn-jornav", label: "Jornav", rows: 1, narrow: true, izah: "Heywan jornavê guhandar e", adv: true },
{ cls: "wiktku-dfn-jernav", label: "Jêrnav", rows: 1, narrow: true, izah: "Guhandar jêrnavê heywan e", adv: true }
];
$.each(allGroups, function (_, g) {
var groupDiv = $("<div></div>").addClass("wiktku-dfn-subgroup " + g.cls + "-group");
if (g.adv) groupDiv.addClass("wiktku-dfn-subgroup-adv");
function buildNimuneLi() {
var lang = getValues().lang || "";
var li = $("<li></li>").addClass("wiktku-dfn-nimune-li");
var mainTa = $("<textarea></textarea>")
.attr("name", "wiktku-dfn-nimune-text-" + $.now() + "-" + Math.random().toString(36).substr(2, 9))
.attr("rows", g.rows)
.attr("class", "wiktku-dfn-subfield wiktku-dfn-nimune-text")
.attr("placeholder", "Nimûneya emilandina kelîmeyê tu bi xwe binivîse…");
mainTa.on("input", function () {
highlightLinebreak(this);
var val = $.trim($(this).val());
var isLast = li.is(list.children("li:last-child"));
if (val && isLast) {
list.append(buildNimuneLi());
}
});
li.append(mainTa);
var subWrap = $("<div></div>").addClass("wiktku-dfn-nimune-sub");
if (needsTransliteration(lang)) {
subWrap.append(
$("<textarea></textarea>")
.attr("name", "wiktku-dfn-nimune-tr-" + $.now() + "-" + Math.random().toString(36).substr(2, 9))
.attr("rows", 5)
.attr("class", "wiktku-dfn-subfield wiktku-dfn-nimune-tr")
.attr("placeholder", "Transliterasyona bi alfabeya latînî")
);
}
if (lang && lang !== "ku") {
subWrap.append(
$("<textarea></textarea>")
.attr("name", "wiktku-dfn-nimune-t-" + $.now() + "-" + Math.random().toString(36).substr(2, 9))
.attr("rows", 5)
.attr("class", "wiktku-dfn-subfield wiktku-dfn-nimune-t")
.attr("placeholder", "Tercimeya nimûneyê bi kurmancî")
);
}
if (subWrap.children().length) li.append(subWrap);
return li;
}
// The placeholder names the current language, but that's
// often not chosen yet when this block is first built —
// so keep a function around that refresh() (and onSubInput,
// for newly-grown fields) can call again once lang is set
// or changes.
function subPlaceholder() {
if (g.noLangSuffix) return g.label + "…";
var lang = getValues().lang || "";
var langLabel = lang ? getLangLabel(lang) : "";
return g.label + (langLabel ? " bi " + langLabel : "") + "…";
}
function updateSubPlaceholders() {
list.find("> li > textarea.wiktku-dfn-subfield").attr("placeholder", subPlaceholder());
}
if (g.cls === "wiktku-dfn-nimune") {
// Nimûne — compound widget with tr/t sub-fields.
var lbl = $("<span></span>").addClass("wiktku-dfn-sublabel")
.append($("<span></span>").addClass("wiktku-dfn-sublabel-term").text(g.label))
.append(": ");
var list = $("<ol></ol>").addClass("wiktku-dfn-sublist " + g.cls + "-list");
groupDiv.data("buildNimuneLi", buildNimuneLi);
list.append(buildNimuneLi());
groupDiv.append(lbl).append(list);
block.append(groupDiv);
} else {
// Regular always-visible group — label + growing textarea list.
var lbl = $("<span></span>").addClass("wiktku-dfn-sublabel")
.append($("<span></span>").addClass("wiktku-dfn-sublabel-term").text(g.label))
.append(": ")
.append($("<span></span>").addClass("wiktku-dfn-sublabel-hint").text(g.izah));
var list = $("<ol></ol>").addClass("wiktku-dfn-sublist " + g.cls + "-list");
var useModifiers = !!MODIFIER_SUBGROUPS[g.cls];
list.data("updatePlaceholders", updateSubPlaceholders);
var firstInput = $("<textarea></textarea>")
.attr("name", g.cls + "-" + $.now() + "-" + Math.random().toString(36).substr(2, 9))
.attr("rows", g.rows)
.attr("class", "wiktku-dfn-subfield" + (g.narrow ? " wiktku-start-narrow" : ""))
.attr("placeholder", subPlaceholder());
firstInput.on("input", function () {
steps.dfn.onSubInput(list, this, g.rows, g.narrow, useModifiers);
});
list.append(useModifiers ? makeModifierLi(firstInput) : $("<li></li>").append(firstInput));
groupDiv.append(lbl).append(list);
block.append(groupDiv);
}
});
// — Jêder group — growing list, same structure as Nimûne. —
(function () {
var jederGroupDiv = $("<div></div>").addClass("wiktku-dfn-subgroup wiktku-dfn-jeder-group");
var jederLbl = $("<span></span>").addClass("wiktku-dfn-sublabel")
.append($("<span></span>").addClass("wiktku-dfn-sublabel-term").text("Jêgirtin"))
.append(": ");
var jederList = $("<ol></ol>").addClass("wiktku-dfn-sublist wiktku-dfn-jeder-list");
function buildJederLi() {
var lang = getValues().lang || "";
var li = $("<li></li>").addClass("wiktku-dfn-jeder-li");
// Quote text textarea
var quoteTa = $("<textarea></textarea>")
.attr("name", "wiktku-dfn-nimune-quote-" + $.now() + "-" + Math.random().toString(36).substr(2, 9))
.attr("rows", 2)
.attr("class", "wiktku-dfn-subfield wiktku-dfn-nimune-quote")
.attr("placeholder", "Nimûneya emilandinê ji kitêb an çavkaniyeke din binivîse");
quoteTa.on("input", function () {
highlightLinebreak(this);
var val = $.trim($(this).val());
var isLast = li.is(jederList.children("li:last-child"));
if (val && isLast) {
jederList.append(buildJederLi());
}
});
li.append(quoteTa);
// tr/t sub-fields for the quote — shown as needed for the language.
var quoteSubWrap = $("<div></div>").addClass("wiktku-dfn-quote-sub");
if (needsTransliteration(lang)) {
quoteSubWrap.append(
$("<textarea></textarea>")
.attr("name", "wiktku-dfn-nimune-quote-tr-" + $.now() + "-" + Math.random().toString(36).substr(2, 9))
.attr("rows", 2)
.attr("class", "wiktku-dfn-subfield wiktku-dfn-nimune-quote-tr")
.attr("placeholder", "Transliterasyona jêgirtinê…")
);
}
if (lang && lang !== "ku") {
quoteSubWrap.append(
$("<textarea></textarea>")
.attr("name", "wiktku-dfn-nimune-quote-t-" + $.now() + "-" + Math.random().toString(36).substr(2, 9))
.attr("rows", 2)
.attr("class", "wiktku-dfn-subfield wiktku-dfn-nimune-quote-t")
.attr("placeholder", "Tercimeya jêgirtinê bi kurmancî")
);
}
if (quoteSubWrap.children().length) li.append(quoteSubWrap);
// Citoid auto-fill: fetch citation data from a URL, DOI or ISBN and
// prefill the source şablon + fields below (see Gadget-citoid-helper.js).
var citoidWrap = $("<div></div>").addClass("wiktku-dfn-quote-citoid");
var citoidInput = $("<textarea></textarea>")
.addClass("wiktku-dfn-subfield wiktku-dfn-quote-citoid-input")
.attr("rows", 1)
.attr("placeholder", "URL, DOI an ISBN binivîse ku otomatîk were tijekirin…");
var citoidBtn = new OO.ui.ButtonWidget({
label: "Bi otomatîk tijî bike",
classes: [ "wiktku-dfn-quote-citoid-btn" ]
});
var citoidStatus = $("<span></span>").addClass("wiktku-dfn-quote-citoid-status");
// Fetches citation data from Citoid and fills this citation's
// şablon + fields — only rebuilds fields on template change,
// and never overwrites values the user already typed.
function runCitoidFetch() {
var query = $.trim(citoidInput.val());
if (!query) {
mw.notify("Ji kerema xwe re pêşî URL, DOI an ISBNyekê binivîse.");
return;
}
citoidBtn.setDisabled(true);
citoidStatus.text("Tê anîn…");
wikt.citoid.fetchJederFields(query).then(function (result) {
var jederKey = result.jederKey;
var hasTpl = !!jederKey && srcSel.find("option[value='" + jederKey + "']").length > 0;
var targetVal = hasTpl ? jederKey : "__manual__";
// Only rebuild if switching şablon, so a repeat fetch
// doesn't clear fields already filled in by hand.
if (srcSel.val() !== targetVal) {
srcSel.val(targetVal).trigger("change");
}
if (hasTpl) {
// Tenê qadên vala tijî bike.
$.each(result.fields, function (key, val) {
var input = srcFields.find("[data-field-key='" + key + "']");
if (input.length && !$.trim(input.val())) {
input.val(val);
}
});
} else {
// Şablonek nehat naskirin ji bo vê itemType — rêzikeke
// çavkaniyê ya bi destan a ji qadên Citoid tê çêkirin,
// lê tenê ger qada destan vala be.
var manualField = srcFields.find(".wiktku-dfn-quote-src-manual");
if (!$.trim(manualField.val())) {
var parts = [];
$.each(["nivîskar", "sernav", "websîte", "kovar", "weşanxane", "sal", "url"], function (_, k) {
if (result.fields[k]) parts.push(result.fields[k]);
});
manualField.val(parts.join(", "));
}
}
citoidStatus.text("");
}, function (errorMsg) {
citoidStatus.text(typeof errorMsg === "string" ? errorMsg : "Nehat dîtin. Kontrol bike ka URL/DOI/ISBN rast e.");
}).always(function () {
citoidBtn.setDisabled(false);
});
}
citoidBtn.on("click", runCitoidFetch);
citoidInput.on("keydown", function (e) {
if (e.which === 13) { // Enter
e.preventDefault();
runCitoidFetch();
}
});
citoidWrap.append(citoidInput).append(citoidBtn.$element).append(citoidStatus);
// Source template selector, specific to this citation.
var srcSel = $("<select></select>").addClass("wiktku-dfn-quote-src-sel wiktku-plain-select");
srcSel.append($("<option value=''>— Çavkaniyê hilbijêre —</option>"));
srcSel.append($("<option></option>").val("__manual__").text("Bi destê xwe binivîsim"));
srcSel.append($("<option></option>").val("__category__").text("Ji Kategorî:Çavkanî şablonekê hilbijêre"));
var jederDefs = steps.dfn.jederDefs || {};
$.each(jederDefs, function (tplName, def) {
srcSel.append($("<option></option>").val(tplName).text(def.label));
});
// Dynamic source fields container.
var srcFields = $("<div></div>").addClass("wiktku-dfn-quote-src-fields");
srcSel.on("change", function () {
srcFields.empty();
var chosen = $(this).val();
// Citoid is only useful before a source is chosen —
// hide it once a selection is made, restore on reset.
if (chosen) {
citoidWrap.hide();
} else {
citoidWrap.show();
return;
}
if (chosen === "__manual__") {
// Freeform source, written by the user — becomes the 2nd
// positional param of {{jêder|lang|…}} instead of çavkanî?.
srcFields.append(
$("<textarea></textarea>")
.attr("rows", 4)
.addClass("wiktku-dfn-subfield wiktku-dfn-quote-src-manual")
.attr("placeholder", "Çavkaniyê bi destê xwe binivîse…")
);
return;
}
if (chosen === "__category__") {
// Search widget over the members of [[Kategorî:Çavkanî]].
// Picking a şablon here immediately switches the row to
// "Bi destê xwe binivîsim" mode with {{Şablon}} pre-filled,
var catWrap = $("<span></span>").addClass("wiktku-native-select-wrap wiktku-dfn-quote-src-cat");
var catInput = $("<input type='search' autocomplete='off'>")
.addClass("wiktku-start-narrow wiktku-dfn-quote-src-cat-input")
.attr("placeholder", "Li navê şablonê bigere…");
var catResults = $("<ul></ul>").addClass("wiktku-ac-results wiktku-dfn-quote-src-cat-results").hide();
var catStatus = $("<span></span>").addClass("wiktku-dfn-quote-src-cat-status").text("Şablon tên barkirin…");
var showCatResults = function (query) {
var q = $.trim(query).toLowerCase();
catResults.empty();
var list = catSrcTemplates || [];
var matched = q ?
$.grep(list, function (name) { return name.toLowerCase().indexOf(q) !== -1; }) :
list;
if (!matched.length) {
catResults.hide();
return;
}
$.each(matched.slice(0, 50), function (_, name) {
var li = $("<li></li>").text(name).attr("data-value", name);
var touchMoved = false;
li.on("touchstart", function () { touchMoved = false; });
li.on("touchmove", function () { touchMoved = true; });
li.on("touchend", function (e) {
if (touchMoved) return;
e.preventDefault();
selectCatTpl(name);
});
li.on("mousedown", function (e) {
e.preventDefault();
selectCatTpl(name);
});
catResults.append(li);
});
catResults.show();
};
// Wraps the chosen şablon as {{Name}}, drops it into the
// manual textarea, and switches the row into manual mode
// so the user can keep editing it (add params, etc.).
var selectCatTpl = function (name) {
catResults.hide();
srcSel.val("__manual__");
srcSel.trigger("change");
srcFields.find(".wiktku-dfn-quote-src-manual")
.val("{{" + name + "}}")
.trigger("focus");
};
catInput.on("input", function () {
showCatResults($(this).val());
});
catInput.on("focus", function () {
showCatResults($(this).val());
});
catInput.on("blur", function () {
setTimeout(function () { catResults.hide(); }, 200);
});
catWrap.append(catInput).append(catResults).append(catStatus);
srcFields.append(catWrap);
fetchCatSrcTemplates().then(function () {
catStatus.text("");
}, function () {
catStatus.text("Şablon nehatin barkirin.");
});
return;
}
var def = (steps.dfn.jederDefs || {})[chosen];
if (!def) return;
$.each(def.fields, function (key, label) {
var row = $("<div></div>").addClass("wiktku-dfn-quote-src-row");
var fieldLbl = $("<label></label>").text(label + ": ");
var inp = $("<textarea></textarea>")
.attr("rows", 2)
.addClass("wiktku-dfn-quote-src-input wiktku-start-narrow")
.attr("data-field-key", key)
.attr("placeholder", label + "…");
// "Sernav" / "Sernavê orjînal" (title fields, e.g. for
// kitêb/kovar/malper) get a taller, draggable box; every
// other field in the template stays as-is. Field labels
// come from the on-wiki jederDefs data, so match on the
// (diacritic-folded) label text rather than a fixed key.
var foldedLabel = foldDiacritics(label);
if (/^sernav$/.test(foldedLabel) || /orjin/.test(foldedLabel)) {
inp.addClass("wiktku-dfn-quote-src-input--title");
}
row.append(fieldLbl).append(inp);
srcFields.append(row);
});
});
li.append(citoidWrap).append(srcSel).append(srcFields);
return li;
}
jederGroupDiv.data("buildJederLi", buildJederLi);
jederList.append(buildJederLi());
jederGroupDiv.append(jederLbl).append(jederList);
// Straight after Nimûne rather than last: Jêgirtin is the
// same kind of thing (an attested use of the word) and the
// two belong together — see the allGroups comment above.
var nimuneGroup = block.find(".wiktku-dfn-nimune-group");
if (nimuneGroup.length) jederGroupDiv.insertAfter(nimuneGroup);
else block.append(jederGroupDiv);
}());
// Apply the initial hide/show state for the sub-groups (matches
// tplSelect's starting value, which is normally empty).
updateFieldVisibility();
// ── "Malûmatên pêşketî" — per sense, after Dijmane ───────
// One toggle per sense rather than one for the whole step:
// the fields behind it (Etîket, Kategorî, Jornav…) belong to
// a single meaning, so a global switch flipped them for every
// sense at once and gave a count that answered "across all
// senses" — not a question anybody was asking.
(function () {
block.addClass("wiktku-sense-adv-hidden");
var advRow = $("<div class='wiktku-adv-toggle-row wiktku-sense-adv-row'></div>");
var advToggle = $("<a href='#' class='wiktku-adv-toggle'></a>").attr("aria-expanded", "false");
var advLabel = $("<span class='wiktku-adv-toggle-text'></span>");
advToggle.append($("<span class='wiktku-adv-toggle-chevron'>▾</span>")).append(advLabel);
var advCount = $("<span class='wiktku-adv-toggle-count'></span>");
function syncAdv() {
var hidden = block.hasClass("wiktku-sense-adv-hidden");
advLabel.text(hidden ? "Malûmatên pêşketî nîşan bide" : "Malûmatên pêşketî veşêre");
advToggle.attr("aria-expanded", hidden ? "false" : "true")
.toggleClass("wiktku-adv-open", !hidden);
var total = 0, filled = 0;
$.each(steps.dfn.ADV_SUBGROUPS, function (_, cls) {
total++;
var any = false;
block.find("." + cls + "-group textarea").each(function () {
if ($.trim($(this).val())) { any = true; return false; }
});
if (any) filled++;
});
advCount.text(total + " zevî · " + filled + " tije");
}
advToggle.on("click", function (e) {
e.preventDefault();
block.toggleClass("wiktku-sense-adv-hidden");
syncAdv();
});
block.on("input", "textarea", syncAdv);
block.data("syncSenseAdv", syncAdv);
advRow.append(advToggle).append(advCount);
// After the last always-visible group (Dijmane) and before
// the advanced ones, which sit below it in DOM order.
var lastPrimary = block.find(".wiktku-dfn-dijmane-group");
if (lastPrimary.length) advRow.insertAfter(lastPrimary);
else block.append(advRow);
syncAdv();
}());
// ── Accordion wrapper (v3 spec) ──────────────────────────
// Everything built above becomes the collapsible body, and a
// header row goes in front of it. Done here, at the end,
// rather than by threading a container through the ~500 lines
// of field-building above — every one of those appends to
// `block`, and getSenses/restoreDfn reach fields with .find(),
// which doesn't care how deep they sit.
var body = $("<div class='wiktku-dfn-sense-body'></div>").append(block.children());
var header = $("<div class='wiktku-dfn-sense-header'></div>");
header
.append($("<span class='wiktku-dfn-sense-num'></span>"))
.append($("<span class='wiktku-dfn-sense-title'></span>"))
.append($("<span class='wiktku-dfn-sense-summary'></span>"))
.append($("<span class='wiktku-dfn-sense-chevron'>▾</span>"));
header.on("click", function () {
// Collapsed → open it (and close whichever was open).
// Open → collapse it, unless it's the only one.
if (block.hasClass("wiktku-sense-collapsed")) steps.dfn.setOpenSense(stepDiv, block);
else block.addClass("wiktku-sense-collapsed");
steps.dfn.syncSenseHeaders(stepDiv);
});
block.append(header).append(body);
// Typing (or clicking) anywhere in a sense makes it the open
// one — "tenê maneya ku tê nivîsandin vekirî ye".
body.on("focusin", function () {
if (!block.hasClass("wiktku-sense-collapsed")) {
steps.dfn.setOpenSense(stepDiv, block);
}
});
return block;
},
/** True if a sense block has anything worth summarising. */
senseBlockHasContent: function (block) {
var found = false;
block.find("textarea, input[type='text']").each(function () {
if ($.trim($(this).val() || "")) { found = true; return false; }
});
if (found) return true;
return !!block.find(".wiktku-dfn-tpl-select").val();
},
/** Opens `block` and collapses every other sense that has content.
* A sense with nothing in it is never collapsed — the trailing
* empty one is how you add the next meaning, so hiding it would
* hide the only way forward. */
setOpenSense: function (stepDiv, block) {
stepDiv.find("li.wiktku-dfn-sense").each(function () {
var li = $(this);
var collapse = !li.is(block) && steps.dfn.senseBlockHasContent(li);
li.toggleClass("wiktku-sense-collapsed", collapse);
});
steps.dfn.syncSenseHeaders(stepDiv);
},
/** Renumbers the sense badges and refreshes each collapsed row's
* one-line summary. Cheap enough to just re-run on any change. */
syncSenseHeaders: function (stepDiv) {
stepDiv.find("li.wiktku-dfn-sense").each(function (i) {
var li = $(this);
li.find("> .wiktku-dfn-sense-header .wiktku-dfn-sense-num").text(i + 1);
li.find("> .wiktku-dfn-sense-header .wiktku-dfn-sense-title").text("Mane " + (i + 1));
var summary = $.trim(li.find("textarea.wiktku-dfn-mane").first().val() || "");
if (!summary) {
// A template sense has no prose — show the call itself.
var tpl = li.find(".wiktku-dfn-tpl-select").val();
var title = $.trim(li.find(".wiktku-dfn-tpl-title").val() || "");
if (tpl) summary = "{{" + tpl + (title ? "|" + title : "") + "}}";
}
summary = summary.split("\n")[0];
if (summary.length > 70) summary = summary.slice(0, 70) + "…";
li.find("> .wiktku-dfn-sense-header .wiktku-dfn-sense-summary").text(summary);
});
},
/** Keeps the header summary in step with what is being typed.
* No longer grows the list: a second sense appears only when
* "+ Mane zêde bike" is clicked. Auto-growing meant every entry
* with one meaning still showed an empty second one, which reads
* as an unfinished form. */
onDfnInput: function (stepDiv, block, textarea) {
steps.dfn.syncSenseHeaders(stepDiv);
refresh();
},
/** Appends a sense, opens it, and collapses the others. */
addSense: function (stepDiv) {
var list = stepDiv.find("ol.wiktku-dfn-list");
var newBlock = steps.dfn.buildSenseBlock(stepDiv);
list.append(newBlock);
initSelects(newBlock);
steps.dfn.setOpenSense(stepDiv, newBlock);
newBlock.find("textarea.wiktku-dfn-mane").first().focus();
refresh();
return newBlock;
},
/** Grows a sub-list (nimûne/formên alternatîv/hevmane/dijmane/termên koordîne) on input. */
onSubInput: function (list, input, rows, narrow, modifiers) {
var val = $.trim($(input).val());
var item = $(input).parent();
var isLast = item.is(list.children("li:last-child"));
if (val && isLast) {
var next = $("<textarea></textarea>")
.attr("name", "wiktku-dfn-sub-" + $.now() + "-" + Math.random().toString(36).substr(2, 9))
.attr("rows", rows)
.attr("class", "wiktku-dfn-subfield" + (narrow ? " wiktku-start-narrow" : ""));
next.on("input", function () {
steps.dfn.onSubInput(list, this, rows, narrow, modifiers);
});
list.append(modifiers ? makeModifierLi(next) : $("<li></li>").append(next));
// New field starts with no placeholder — give it (and any
// others in the list) the current one.
var updatePlaceholders = list.data("updatePlaceholders");
if (typeof updatePlaceholders === "function") updatePlaceholders();
}
},
// Populated from [[MediaWiki:Gadget-start.js/data.json]] (tplDefs, posExamples, jederDefs).
tplDefs: {},
posExamples: {},
jederDefs: {},
build: function (stepDiv) {
if (stepDiv.find("ol.wiktku-dfn-list").length) return null;
// Rewiye tine, 14 Tebax 2026: "şablonên mana jî dikare serê
// yekî tevlîhev bike... famkirina van zehmet e" — the "an jî
// şablonek hilbijêre" dropdown inside each sense (guharto,
// kevnbûyî, ku-Latn, şaşnivîs, …) had no explanation at all.
// One reassurance, shown once for the whole Mane step rather
// than repeated per sense: it's optional, plain text is the
// normal path.
if (!stepDiv.find(".wiktku-dfn-tpl-hint").length) {
stepDiv.append(
$("<p class='wiktku-step-hint wiktku-dfn-tpl-hint'></p>").text(
"Ji bo her maneyekê, dropdown-a \"an jî şablonek hilbijêre\" ne mecbûrî ye — bi gelemperî tu tenê maneyê bi tîpên asayî dinivîsî. Ew şablon tenê ji bo rewşên taybet in (mînak: guherto, kevnbûyî, şaşnivîs); heke tu nizanî kîjan divê, vale bihêle."
)
);
}
var list = $("<ol class='wiktku-dfn-list'></ol>");
list.append(steps.dfn.buildSenseBlock(stepDiv));
stepDiv.append(list);
var addSenseBtn = $("<button type='button' class='wiktku-add-sense'></button>")
.append($("<span class='wiktku-add-sense-plus'>+</span>"))
.append(document.createTextNode("Mane zêde bike"));
addSenseBtn.on("click", function (e) {
e.preventDefault();
steps.dfn.addSense(stepDiv);
});
stepDiv.append(addSenseBtn);
steps.dfn.syncSenseHeaders(stepDiv);
return null;
},
/** Reads all sense blocks from the DOM and returns an array of sense objects. */
getSenses: function (stepDiv) {
var senses = [];
stepDiv.find("li.wiktku-dfn-sense").each(function () {
var block = $(this);
var tplSel = block.find("select.wiktku-dfn-tpl-select");
var tpl = tplSel.val() || "";
// noLang: template already encodes the language — don't add |lang| param.
var tplNoLang = tpl
? tplSel.find("option[value='" + tpl + "']").attr("data-nolang") === "1"
: false;
var tplTitle = $.trim(block.find("input.wiktku-dfn-tpl-title").val());
var mane = $.trim(block.find("textarea.wiktku-dfn-mane").val());
function readList(cls) {
var vals = [];
block.find("." + cls + "-list textarea").each(function () {
var v = $.trim($(this).val());
if (v) vals.push(v);
});
return vals;
}
// Nimûne items are compound: { text, tr?, t? }
function readNimuneList() {
var items = [];
block.find(".wiktku-dfn-nimune-list li.wiktku-dfn-nimune-li").each(function () {
var text = $.trim($(this).find(".wiktku-dfn-nimune-text").val());
if (!text) return;
var obj = { text: text };
var tr = $.trim($(this).find(".wiktku-dfn-nimune-tr").val());
var t = $.trim($(this).find(".wiktku-dfn-nimune-t").val());
if (tr) obj.tr = tr;
if (t) obj.t = t;
items.push(obj);
});
return items;
}
// Jêder is a growing list of citations, one per li — mirrors readNimuneList().
function readJederList() {
var items = [];
block.find(".wiktku-dfn-jeder-list li.wiktku-dfn-jeder-li").each(function () {
var li = $(this);
var quote = $.trim(li.find(".wiktku-dfn-nimune-quote").val());
if (!quote) return;
var obj = { quote: quote };
var qtr = $.trim(li.find(".wiktku-dfn-nimune-quote-tr").val());
var qt = $.trim(li.find(".wiktku-dfn-nimune-quote-t").val());
if (qtr) obj.quoteTr = qtr;
if (qt) obj.quoteT = qt;
var tplName = li.find(".wiktku-dfn-quote-src-sel").val();
if (tplName === "__manual__") {
var manual = $.trim(li.find(".wiktku-dfn-quote-src-manual").val());
if (manual) obj.jederManual = manual;
} else if (tplName === "__category__") {
// Reachable only if the user opened the category search but
// never picked a şablon — picking one switches the row to
// __manual__ (see selectCatTpl above), so there's nothing
// meaningful to save here.
} else if (tplName) {
obj.jederTpl = tplName;
var fields = {};
li.find(".wiktku-dfn-quote-src-input").each(function () {
var k = $(this).attr("data-field-key");
var v = $.trim($(this).val());
if (k && v) fields[k] = v;
});
obj.jêderFields = fields;
}
items.push(obj);
});
return items;
}
senses.push({
tpl: tpl,
tplNoLang: tplNoLang,
tplTitle: tplTitle,
mane: mane,
etiket: readList("wiktku-dfn-etiket"),
kategori: readList("wiktku-dfn-kategori"),
nimune: readNimuneList(),
jeder: readJederList(),
alternativ: readList("wiktku-dfn-alternativ"),
hevmane: readList("wiktku-dfn-hevmane"),
dijmane: readList("wiktku-dfn-dijmane"),
koordine: readList("wiktku-dfn-koordine"),
jornav: readList("wiktku-dfn-jornav"),
jernav: readList("wiktku-dfn-jernav")
});
});
return senses;
},
getOutput: function (values, callback) {
var stepDiv = $("#wiktku-start-dfn");
var senses = steps.dfn.getSenses(stepDiv);
var lang = values.lang;
// A sense counts as "filled" if it has a mane, a chosen template + title,
// or any other content (etîket/hevmane/nimûne/jêder…) worth keeping.
var hasMane = senses.some(function (s) {
return s.mane !== "" || (s.tpl && s.tplTitle) || senseHasExtraContent(s);
});
var defLines = []; // one entry per kept sense (goes to linkify)
var citeLines = []; // parallel — nimûne+jêder for that same sense
var izahLines = []; // parallel — raw îzah gloss for that same sense
// True only once some sense's *actual* dfn text (post tercime/îzah
// split) is non-empty.
var hasLinkableMane = false;
$.each(senses, function (_, sense) {
// — Template sense (e.g. {{guharto|ku|somepage}}) —
if (sense.tpl) {
if (!sense.tplTitle) return; // skip empty template senses
var tplKatTpl = buildSenseTpl(sense, "kategori", lang, "K");
var tplLabelTpl = buildSenseTpl(sense, "etiket", lang, "e");
var tplCall = sense.tplNoLang
? "{{" + sense.tpl + "|" + sense.tplTitle + "}}"
: "{{" + sense.tpl + "|" + lang + "|" + sense.tplTitle + "}}";
var idx = defLines.length;
var cite = buildCite(sense, lang);
defLines.push("# " + (tplKatTpl ? tplKatTpl + " " : "") + (tplLabelTpl ? tplLabelTpl + " " : "") + tplCall +
(cite ? "{{wiktku-cite-" + idx + "}}" : ""));
citeLines.push(cite);
izahLines.push(""); // template senses have no îzah
return;
}
// — Normal mane sense —
var dfn = sense.mane;
if (!dfn && !senseHasExtraContent(sense)) return; // truly empty
// Pull the îzah gloss (if any) out of the combined tercime+îzah
// string — it's spliced back in separately below, after its
// own linkify pass (see izahLines / the second linkifyText call).
var izahRaw = null;
var tercimeIzah = splitTercimeIzah(dfn);
if (tercimeIzah) {
dfn = tercimeIzah.tercime;
izahRaw = stripWikilinks(tercimeIzah.izah);
}
if (dfn) {
dfn = stripWikilinks(dfn);
// Sentence-case + trailing period are for ku definitions,
// which are written as full glosses.
if (lang === "ku") {
if (dfn[0] !== dfn[0].toUpperCase()) dfn = capitalize(dfn);
if (!dfn.match(/[.…?!)\]]$/)) dfn += ".";
}
// Real prose — this is what makes the sense worth running
// through the main linkify pass.
hasLinkableMane = true;
} else if (izahRaw === null) {
// No mane at all — this is just the "{{mane?|lang}}"
// placeholder, a bare template call with no plain words
// in it. Do NOT count it as linkable: sending nothing but
// bracketed templates through the main linkify pass hangs
// the linkify gadget (see the hasLinkableMane/hasIzah
// check below).
dfn = lang === "ku" ? "{{mane?|" + lang + "}}" : "";
}
var katTpl = buildSenseTpl(sense, "kategori", lang, "K");
var labelTpl = buildSenseTpl(sense, "etiket", lang, "e");
var out = "# " + (katTpl ? katTpl + " " : "") + (labelTpl ? labelTpl + " " : "") + dfn;
var idx = defLines.length;
var hasThisIzah = izahRaw !== null && $.trim(izahRaw) !== "";
// Bare {{...}} token — like {{wiktku-cite-N}}, this survives
// linkify's first pass untouched (it treats template calls as
// opaque), then gets swapped for {{îzah|…}} once the actual
// gloss text has been linkified in its own separate pass.
if (hasThisIzah) {
out += (dfn ? " " : "") + "{{wiktku-izah-" + idx + "}}";
}
function wordLine(tpl, words) {
if (!words.length) return "";
return "\n#: {{" + tpl + "|" + lang + "|" + words.join("|") + "}}";
}
out += wordLine("alt-r", sense.alternativ);
out += wordLine("hevmane", sense.hevmane);
out += wordLine("dijmane", sense.dijmane);
out += wordLine("koordîne", sense.koordine);
out += wordLine("jornav", sense.jornav);
out += wordLine("jêrnav", sense.jernav);
var cite = buildCite(sense, lang);
defLines.push(out + (cite ? "{{wiktku-cite-" + idx + "}}" : ""));
citeLines.push(cite);
izahLines.push(hasThisIzah ? izahRaw : "");
});
// Splice citeLines back into a linkified string, replacing each
// {{wiktku-cite-N}} token with its stored nimûne/jêder block.
function restoreCites(t) {
return t.replace(/\{\{wiktku-cite-(\d+)\}\}/g, function (_, n) {
return citeLines[parseInt(n, 10)] || "";
});
}
// Runs text through the linkify gadget if it's loaded, otherwise
// just passes it through unchanged. Shared by both linkify passes
// below (main mane text, and — separately — îzah glosses).
function linkifyText(t, cb) {
if (typeof $.kuLinkify === "function") {
$.kuLinkify(t, cb);
} else {
cb(t);
}
}
var hasIzah = izahLines.some(function (t) { return t && $.trim(t) !== ""; });
var text = defLines.join("\n") + "\n";
if (!hasMane) {
// No definitions entered — emit {{mane?}} with nimûne?.
text = "# {{mane?|" + lang + "}}\n#* {{nimûne?|" + lang + "}}\n";
callback(text);
return;
}
// Runs the îzah-only linkify pass against `base` (either the raw
// text, when there's no linkable mane to run the main pass on
// first, or the already-linkified main text). Shared by both
// branches below so the token-splice logic only lives once.
function runIzahPass(base) {
var izahJoined = $.map(izahLines, function (raw, idx) {
if (!raw) return undefined;
return "{{wiktku-izah-open-" + idx + "}}" + raw + "{{wiktku-izah-close-" + idx + "}}";
}).join("\n");
linkifyText(izahJoined, function (izahLinked) {
var izahByIdx = {};
var re = /\{\{wiktku-izah-open-(\d+)\}\}([\s\S]*?)\{\{wiktku-izah-close-\1\}\}/g;
var m;
while ((m = re.exec(izahLinked)) !== null) {
izahByIdx[parseInt(m[1], 10)] = m[2];
}
var withIzah = base.replace(/\{\{wiktku-izah-(\d+)\}\}/g, function (_, n) {
var linked = izahByIdx[parseInt(n, 10)];
return linked !== undefined ? "{{îzah|" + linked + "}}" : "";
});
callback(restoreCites(withIzah));
});
}
if (!hasLinkableMane) {
if (!hasIzah) {
// All filled senses are template senses (or otherwise have
// no plain text at all) — nothing here needs linkify.
callback(restoreCites(text));
return;
}
// There's no plain mane text anywhere (e.g. tercime left blank
// with only îzah filled in), so every defLine is just a bare
// template call with nothing to word-link. Sending a line
// like "# {{wiktku-izah-0}}" through the main linkify pass
// gives it no plain words to work with, makes the linkify
// gadget hang — so skip that pass entirely and run only
// the îzah pass, splicing straight into the unlinkified text.
var loadIzahOnly = function () { runIzahPass(text); };
mw.loader.using("ext.gadget.linkify", loadIzahOnly, loadIzahOnly);
return;
}
var didTryToLoad = function () {
// First pass: the main definition text (mane), same as before.
linkifyText(text, function (mainLinked) {
if (!hasIzah) {
callback(restoreCites(mainLinked));
return;
}
// Second pass: îzah glosses, linkified via their own
// separate call. Each gloss is wrapped in its own
// {{wiktku-izah-open/close-N}} pair; like the existing
// {{wiktku-cite-N}} tokens, these sit inside double
// braces so linkify leaves the tokens themselves alone —
// only the raw gloss text between each pair gets linked.
runIzahPass(mainLinked);
});
};
mw.loader.using("ext.gadget.linkify", didTryToLoad, didTryToLoad);
}
},
tewandin: {
id: "tewandin",
name: "tewandin",
question_fmt: 'Tewandina "' + pageName + '" binivîse',
visible: function (values) {
return values.lang && values.pos;
},
build: function (stepDiv) {
if (stepDiv.find(".wiktku-tewandin-wrap").length) return null;
var wrap = $("<div class='wiktku-tewandin-wrap'></div>");
var ta = $("<textarea></textarea>")
.attr("name", "wiktku-tewandin-" + $.now())
.attr("class", "wiktku-start-step-field wiktku-tewandin-text")
.attr("rows", 4)
.attr("placeholder", "{{ku-tewîn-nav|nêr}}");
wrap.append(ta);
stepDiv.append(wrap);
function autoPopulate() {
if (!ta.length) return;
var vals = getValues();
var c = vals.cinsiyet || "";
var p = vals.pos || "";
if (!pageName.includes(" ") && c && GENDER_BASE_LABELS[c] &&
(p === "navdêr" || p === "serenav") && vals.lang === "ku" &&
c !== "mndudil") {
var label = (c === "mnmane") ? "mê û nêr" : GENDER_BASE_LABELS[c];
var out = "{{ku-tewîn-nav|" + label;
if (p === "serenav") out += "|y";
out += "}}";
if (!$.trim(ta.val())) ta.val(out);
}
}
setTimeout(function () {
autoPopulate();
$("#wiktku-start-form").on("change.tewandin",
"#wiktku-start-lang-field, #wiktku-start-cinsiyet-field, #wiktku-start-pos-field",
autoPopulate);
}, 0);
return ta;
},
output: function () {
var manualText = $.trim($("#wiktku-start-tewandin .wiktku-tewandin-text").val());
if (manualText) {
return "\n==== Tewandin ====\n" + manualText + "\n";
}
return "";
}
},
// resim — one or more images
resim: {
id: "resim",
name: "resim",
question_fmt: "Resmekê lê zêde bike",
visible: function (values) { return !!(values.lang && values.pos); },
/** Builds one image row: filename + caption + alt text. */
buildItem: function (stepDiv) {
var item = $("<li class='wiktku-resim-item'></li>");
var fileRow = $("<div class='wiktku-posparams-row'></div>");
var fileInp = $("<input type='text'>")
.addClass("wiktku-start-step-field wiktku-start-narrow wiktku-resim-file")
.attr("placeholder", "navê_dosyayê.jpg");
fileRow.append($("<label></label>").text("Navê dosyayê: ")).append(fileInp);
var capRow = $("<div class='wiktku-posparams-row'></div>");
var capInp = $("<input type='text'>")
.addClass("wiktku-start-step-field wiktku-start-narrow wiktku-resim-caption")
.attr("placeholder", "Danasîna resimê…");
capRow.append($("<label></label>").text("Danasîn: ")).append(capInp);
// Alt text: what a screen reader announces for this image
var altRow = $("<div class='wiktku-posparams-row'></div>");
var altInp = $("<input type='text'>")
.addClass("wiktku-start-step-field wiktku-start-narrow wiktku-resim-alt")
.attr("placeholder", "Ji bo kesên nabînin, çi tê dîtin? (ne mecbûrî)");
altRow.append($("<label></label>").text("Nivîsa alternatîf: ")).append(altInp);
// Auto-fill the caption with the plain page name when a filename
// is typed
fileInp.on("input", function () {
var file = $.trim($(this).val());
var curCap = $.trim(capInp.val());
var isDefault = !curCap || curCap === pageName;
if (file && isDefault) {
capInp.val(pageName);
} else if (!file && isDefault) {
capInp.val("");
}
steps.resim.onFileInput(stepDiv, item, this);
});
item.append(fileRow).append(capRow).append(altRow);
return item;
},
/** Grows the image list when the last row's filename gets content. */
onFileInput: function (stepDiv, item, input) {
var val = $.trim($(input).val());
var list = stepDiv.find("ol.wiktku-resim-list");
var isLast = item.is(list.children("li:last-child"));
if (val && isLast) {
list.append(steps.resim.buildItem(stepDiv));
}
},
build: function (stepDiv) {
if (stepDiv.find(".wiktku-resim-wrap").length) return null;
var wrap = $("<div class='wiktku-resim-wrap'></div>");
var list = $("<ol class='wiktku-resim-list'></ol>");
list.append(steps.resim.buildItem(stepDiv));
wrap.append(list);
stepDiv.append(wrap);
return null;
},
/** Reads every filled row from the DOM into an array of {file, caption, alt}
* objects — blank rows (missing filename or caption) are skipped.
* Non-Kurdish captions get wrapped in {{zim|lang|…}} here, unless
* the user already typed their own {{zim|…}} template. Alt text is
* optional and left as plain text either way. */
getImages: function (values) {
var lang = (values && values.lang) || getValues().lang || "";
var images = [];
$("#wiktku-start-resim li.wiktku-resim-item").each(function () {
var file = $.trim($(this).find(".wiktku-resim-file").val());
var caption = $.trim($(this).find(".wiktku-resim-caption").val());
var alt = $.trim($(this).find(".wiktku-resim-alt").val());
if (!file || !caption) return;
// Strip leading "Wêne:" or "File:" if the user typed it — we add it ourselves.
file = file.replace(/^(wêne|file|image)\s*:\s*/i, "");
if (lang && lang !== "ku" && !/^\{\{zim\s*\|/i.test(caption)) {
caption = "{{zim|" + lang + "|" + caption + "}}";
}
images.push({ file: file, caption: caption, alt: alt });
});
return images;
},
output: function (values) {
var images = steps.resim.getImages(values);
if (!images.length) return "";
return images.map(function (img) {
var altPart = img.alt ? "|alt=" + img.alt : "";
return "[[Wêne:" + img.file + "|thumb" + altPart + "|" + img.caption + "]]";
}).join("\n") + "\n";
}
},
// bnr-h — {{bnr-h|Page1|Page2|…}} prepended before the lang section (shared, not per-section)
bnrh: {
id: "bnrh",
name: "binêre herwiha (bnr-h)",
question_fmt: "Şablona bnr-h li qismê herî jor a rûpelê",
//visible: function (values) { return !!values.lang; },
multiple: true,
narrow: true,
placeholder: "Ji bo 'test' bnr 'Test', 'teşt'",
output: function (values) {
var pages = $.grep(values.bnrh || [], function (p) { return !!$.trim(p); });
if (!pages.length) return "";
return "{{bnr-h|" + pages.map(function (p) { return $.trim(p); }).join("|") + "}}\n";
}
},
bikaranin: {
id: "bikaranin",
name: "Notên bikaranînê",
question_fmt: "Notên bikaranînê yên li ser vê kelîmeyê",
visible: function (values) {
return values.lang && values.pos;
},
multiple: false,
narrow: false,
output: function (values) {
var text = $.trim(values.bikaranin || "");
if (!text) return "";
return "\n==== Notên bikaranînê ====\n" + text + "\n";
},
},
xwendin: {
id: "xwendin",
name: "Bêhtir bixwîne",
question_fmt: "Lînkên derveyî eleqedarî vê madeyê",
visible: function (values) {
return values.lang && values.pos;
},
multiple: false,
narrow: false,
placeholder: function (values) {
if (!values || !values.lang) {
return `* {{wpedî}} ji bo ku meqaleya Wîkîpediyayê lînk bidî`;
}
const ziman = values.lang === "ku" ? "" : `|ziman=${values.lang}`;
return `* {{wpedî${ziman}}} ji bo ku meqaleya Wîkîpediyayê lînk bidî`;
},
output: function (values) {
var text = $.trim(values.xwendin || "");
if (!text) return "";
return "\n==== Bêhtir bixwîne ====\n" + text + "\n";
},
},
alfabeyendin: {
id: "alfabeyendin",
name: "Bi alfabeyên din",
question_fmt: function (values) {
var base = "Nivîsîna vê kelîmeyê bi alfabeyên din"
var langLabel = values.lang ? getLangLabel(values.lang) : "";
if (langLabel) {
return base + " ên " + langLabel;
}
return base;
},
visible: function (values) {
return values.lang && values.pos;
},
multiple: false,
narrow: false,
placeholder: "Ji bo kurmancî: * {{ku-ar|şiklê alfaba erebî}}",
output: function (values) {
var text = $.trim(values.alfabeyendin || "");
if (!text) return "";
return "\n==== Bi alfabeyên din ====\n" + text + "\n";
},
},
formalt: makeWordListStep("formalt", "formên alternatîv", "Formên alternatîv ên vê kelîmeyê ji bo hemû maneyan eger te li binê maneyê nenivîsandibe"),
hevmane: makeWordListStep("hevmane", "hevmane", "Hevmaneyên vê kelîmeyê ji bo hemû maneyan eger te li binê maneyê nenivîsandibe"),
dijmane: makeWordListStep("dijmane", "dijmane", "Dijmaneyên vê kelîmeyê ji bo hemû maneyan eger te li binê maneyê nenivîsandibe"),
jornav: makeWordListStep("jornav", "jornav", "Jornavên vê kelîmeyê ji bo hemû maneyan eger te li binê maneyê nenivîsandibe"),
jernav: makeWordListStep("jernav", "jêrnav", "Jêrnavên vê kelîmeyê ji bo hemû maneyan eger te li binê maneyê nenivîsandibe"),
je: makeWordListStep("je", "jê", "Kelîmeyên jê çêbûyî binivîse"),
tekildar: makeWordListStep("tekildar", "têkildar", "Kelîmeyên ji aliyê etîmolojiyê ve têkildarî vê kelîmeyê binivîse"),
binereherwiha: makeWordListStep("binereherwiha", "herwiha binêre", "Kelîmeyên din ên eleqedar binivîse"),
etym: {
id: "etym",
name: "etîmolojî",
question_fmt: "Etîmolojiya kelîmeyê binivîse",
// etymTpls populated from data.json
etymTpls: {},
visible: function (values) {
return values.lang && values.pos;
},
// Fills the insert-dropdown from the current etymTpls object.
refreshTplSelect: function () {
var sel = $("#wiktku-start-etym .wiktku-tpl-insert-select");
if (!sel.length) return;
sel.find("option[value!='']").remove();
$.each(steps.etym.etymTpls, function (name, tpl) {
sel.append($("<option></option>").val(tpl.snippet).text(name + " — " + tpl.desc));
});
markTemplateOptions(sel, function (opt) { return tplNameFromSnippet(opt.val()); });
// Tell the picker the option list changed.
sel.trigger("wiktku:refresh");
},
build: function (stepDiv) {
if (stepDiv.find(".wiktku-etym-wrap").length) return null;
var wrap = $("<div class='wiktku-etym-wrap'></div>");
var ta = $("<textarea></textarea>")
.attr("name", "wiktku-etym-" + $.now())
.attr("class", "wiktku-start-step-field wiktku-etym-text")
.attr("rows", 4)
.attr("placeholder", "Ji {{ji|en|ku|apple}}. yan rasterast binivîse…");
// Template insert dropdown — options also refreshed after data.json loads.
var sel = $("<select class='wiktku-tpl-insert-select'></select>");
sel.attr("data-placeholder", "Şablonek lê zêde bike…");
sel.append($("<option value=''>— şablonek lê zêde bike —</option>"));
$.each(steps.etym.etymTpls, function (name, tpl) {
sel.append($("<option></option>").val(tpl.snippet).text(name + " — " + tpl.desc));
});
sel.on("change", function () {
var snippet = $(this).val();
if (!snippet) return;
var lang = getValues().lang || "";
snippet = snippet.replace(/CODE/g, lang).replace(/SOURCELANG/g, "?");
insertAtCursor(ta[0], snippet);
$(this).val("");
sel.trigger("wiktku:refresh");
ta.focus();
});
wrap.append(sel);
wrap.append(ta);
stepDiv.append(wrap);
initSelects(wrap);
return ta;
},
output: function (values) {
var text = $.trim($("#wiktku-start-etym .wiktku-etym-text").val());
if (text) {
return "\n==== Etîmolojî ====\n" + text + "\n";
}
// No etymology entered — emit {{ji?|lang}} as a placeholder.
// Skip it only when every filled sense is a şablon sense
// a completely empty entry with no şablon chosen still gets the placeholder
var dfnSenses = steps.dfn.getSenses($("#wiktku-start-dfn"));
var hasFilledTplSense = dfnSenses.some(function (s) {
return !!s.tpl && !!s.tplTitle;
});
var hasRegularMane = dfnSenses.some(function (s) {
return !s.tpl && (s.mane !== "" || senseHasExtraContent(s));
});
if (hasFilledTplSense && !hasRegularMane) return "";
return "\n==== Etîmolojî ====\n{{ji?|" + values.lang + "}}\n";
} },
dunde: {
id: "dunde",
name: "dûnde",
question_fmt: "Eger ev kelîme ji vî zimanî ketibe zimanekî din, vî zimanî û kelîmeya wî binivîse",
visible: function (values) {
return !!values.pos;
},
disabledKeys: function (values) {
return {"navz": true, [values.lang]: true}
},
// Language dropdown + growing word-input list; a new row appends
// when the dropdown gets a value. Mirrors steps.trans, but flat.
buildRow: function (stepDiv) {
var row = $("<li class='wiktku-dunde-row wiktku-lang-row'></li>");
// Language selector — the searchable picker is applied after insertion into DOM.
var langSel = $(mw.html.element("select", {
"class": "wiktku-start-step-keyfield wiktku-start-narrow" }));
langSel.attr("data-placeholder", "Li zimanekî bigere");
populateMenus(langSel, steps.dunde.keys || [], steps.dunde.disabledKeys);
// When a language is chosen, ensure a next empty row exists.
langSel.on("change", function () {
steps.dunde.onLangChange(stepDiv, row);
});
// Word list for this language.
var wordList = $("<ul class='wiktku-dunde-words wiktku-lang-row-words'></ul>");
var firstWord = steps.dunde.makeWordInput();
wordList.append($("<li></li>").append(firstWord));
// The searchable picker is attached by initSelects() once the row
// is in the DOM (see onLangChange/build below).
row.append(langSel).append(wordList);
return row;
},
makeWordInput: function () {
var input = $("<textarea></textarea>")
.attr("name", "wiktku-dunde-word-" + $.now() + "-" + Math.random().toString(36).substr(2, 9))
.attr("rows", 1)
.attr("class", "wiktku-dfn-subfield wiktku-start-narrow")
.attr("placeholder", "Kelîme…");
input.on("input", function () {
var list = $(this).closest("ul.wiktku-dunde-words");
var item = $(this).parent();
var val = $.trim($(this).val());
if (val && item.is(list.children("li:last-child"))) {
var next = steps.dunde.makeWordInput();
list.append($("<li></li>").append(next));
}
});
return input;
},
onLangChange: function (stepDiv, row) {
var list = stepDiv.find("ul.wiktku-dunde-list");
var isLast = row.is(list.children("li.wiktku-dunde-row:last-child"));
if (isLast) {
var newRow = steps.dunde.buildRow(stepDiv);
list.append(newRow);
// Attach the searchable picker now the row is in the DOM.
initSelects(newRow);
}
// Keep disabled keys in sync across all lang selectors.
steps.dunde.syncDisabledKeys(stepDiv);
},
/** Disables already-selected languages in all other dropdowns. */
syncDisabledKeys: function (stepDiv) {
var taken = $.extend({}, steps.dunde.disabledKeys);
stepDiv.find("li.wiktku-dunde-row select").each(function () {
var v = $(this).val();
if (v) taken[v] = true;
});
stepDiv.find("li.wiktku-dunde-row select").each(function () {
var self = $(this);
var own = self.val();
self.find("option").each(function () {
var code = $(this).val();
if (!code) return;
$(this).prop("disabled", taken[code] && code !== own);
});
self.trigger("wiktku:refresh");
});
},
build: function (stepDiv) {
if (stepDiv.find("ul.wiktku-dunde-list").length) return null;
var list = $("<ul class='wiktku-dunde-list wiktku-lang-row-list'></ul>");
list.append(steps.dunde.buildRow(stepDiv));
stepDiv.append(list);
// Attach the searchable picker now the select is in the DOM.
initSelects(list);
return null;
},
/** Reads all [langcode, words[]] rows from the DOM. */
getRows: function (stepDiv) {
var result = [];
stepDiv.find("li.wiktku-dunde-row").each(function () {
var lang = $(this).find("select").val();
if (!lang) return;
var words = [];
$(this).find("ul.wiktku-dunde-words textarea").each(function () {
var v = $.trim($(this).val());
if (v) words.push(v);
});
if (words.length) result.push([lang, words]);
});
return result;
},
output: function () {
var stepDiv = $("#wiktku-start-dunde");
var rows = steps.dunde.getRows(stepDiv);
if (!rows.length) return "";
var lines = $.map(rows, function (row) {
var lang = row[0], words = row[1];
return "* {{dû|" + lang + "|" + words.join("|") + "}}";
});
return "\n==== Dûnde ====\n" + lines.join("\n") + "\n";
}
},
zarava: {
id: "zarava",
name: "bi zaravayên din",
question_fmt: "'"+ pageName + "' di zaravayên din de çawa tê gotin?",
visible: function (values) {
return steps.trans.visible(values);
},
disabledKeys: {},
buildRow: function (group) {
var row = $("<li class='wiktku-zarava-row wiktku-lang-row'></li>");
var langSel = $(mw.html.element("select", {
"class": "wiktku-start-step-keyfield wiktku-start-narrow" }));
langSel.attr("data-placeholder", "Li zaravayekî bigere");
populateMenus(langSel, steps.zarava.keys || [], steps.zarava.disabledKeys);
langSel.on("change", function () {
steps.zarava.onLangChange(group, row);
});
var wordList = $("<ul class='wiktku-zarava-words wiktku-lang-row-words'></ul>");
var firstWord = steps.zarava.makeWordInput();
wordList.append($("<li></li>").append(firstWord));
row.append(langSel).append(wordList);
return row;
},
makeWordInput: function () {
var input = $("<textarea></textarea>")
.attr("name", "wiktku-zarava-word-" + $.now() + "-" + Math.random().toString(36).substr(2, 9))
.attr("rows", 1)
.attr("class", "wiktku-dfn-subfield wiktku-start-narrow")
.attr("placeholder", "Tercime…");
input.on("input", function () {
var list = $(this).closest("ul.wiktku-zarava-words");
var item = $(this).parent();
var val = $.trim($(this).val());
if (val && item.is(list.children("li:last-child"))) {
var next = steps.zarava.makeWordInput();
list.append($("<li></li>").append(next));
}
});
return input;
},
onLangChange: function (group, row) {
var list = group.find("ul.wiktku-zarava-list");
var isLast = row.is(list.children("li.wiktku-zarava-row:last-child"));
if (isLast) {
var newRow = steps.zarava.buildRow(group);
list.append(newRow);
// Attach the searchable picker now the row is in the DOM.
initSelects(newRow);
}
steps.zarava.syncDisabledKeys(group);
},
/** Disables already-selected dialects in all other dropdowns within one group. */
syncDisabledKeys: function (group) {
var taken = $.extend({}, steps.zarava.disabledKeys);
group.find("li.wiktku-zarava-row select").each(function () {
var v = $(this).val();
if (v) taken[v] = true;
});
group.find("li.wiktku-zarava-row select").each(function () {
var self = $(this);
var own = self.val();
self.find("option").each(function () {
var code = $(this).val();
if (!code) return;
$(this).prop("disabled", taken[code] && code !== own);
});
self.trigger("wiktku:refresh");
});
},
/** Builds (or fetches) the .wiktku-zarava-group for one gloss. */
buildGroup: function (stepDiv, gi) {
var group = $("<div class='wiktku-zarava-group'></div>").attr("data-gloss-pos", gi);
var list = $("<ul class='wiktku-zarava-list wiktku-lang-row-list'></ul>");
list.append(steps.zarava.buildRow(group));
group.append(list);
stepDiv.append(group);
// Attach the searchable picker now the select is in the DOM.
initSelects(list);
return group;
},
/** Syncs one .wiktku-zarava-group per current gloss (same logic as steps.trans.build). */
build: function (stepDiv) {
var glosses = steps.trans.glossList();
if (!glosses.length) {
stepDiv.find(".wiktku-zarava-group").remove();
return null;
}
var existingGroups = stepDiv.find(".wiktku-zarava-group");
if (existingGroups.length > glosses.length) {
existingGroups.slice(glosses.length).remove();
}
$.each(glosses, function (gi, gloss) {
var group = stepDiv.find(".wiktku-zarava-group[data-gloss-pos='" + gi + "']");
if (!group.length) group = steps.zarava.buildGroup(stepDiv, gi);
var label = group.find(".wiktku-zarava-group-label");
if (glosses.length > 1) {
if (!label.length) {
label = $("<div class='wiktku-zarava-group-label'></div>");
group.prepend(label);
}
label.text(gloss.index + " " + gloss.text);
} else if (label.length) {
label.remove();
}
});
return null;
},
/** Reads the dialect rows for a single gloss group. */
getGroupTranslations: function (group) {
var result = [];
group.find("li.wiktku-zarava-row").each(function () {
var lang = $(this).find("select").val();
if (!lang) return;
var words = [];
$(this).find("ul.wiktku-zarava-words textarea").each(function () {
var v = $.trim($(this).val());
if (v) words.push(v);
});
if (words.length) result.push([lang, words]);
});
return result;
},
/** Reads all rows from the DOM, grouped by gloss position. */
getTranslations: function (stepDiv) {
var result = [];
stepDiv.find(".wiktku-zarava-group").each(function () {
result.push(steps.zarava.getGroupTranslations($(this)));
});
return result;
},
output: function (values) {
if (values.lang !== "ku") return "";
var stepDiv = $("#wiktku-start-zarava");
var glosses = steps.trans.glossList();
if (!glosses.length) return "";
// Item 6 (Wikihez, 14 Tebax 2026): "Bi zaravayên din" now
// auto-appears empty for lang=ku exactly like Werger
// already does (steps.trans.output, same rule below) —
// a completely empty entry still gets a placeholder
// section to fill in later; an individual placeholder
// gloss is only skipped once some other sense already has
// real content, making that particular one redundant.
var dfnSenses = steps.dfn.getSenses($("#wiktku-start-dfn"));
var hasRegularMane = dfnSenses.some(function (s) {
return !s.tpl && (s.mane !== "" || senseHasExtraContent(s));
});
var blocks = $.map(glosses, function (gloss, gi) {
var group = stepDiv.find(".wiktku-zarava-group[data-gloss-pos='" + gi + "']");
var rows = group.length ? steps.zarava.getGroupTranslations(group) : [];
if (!gloss.text && !rows.length && hasRegularMane) return undefined;
if (rows.length) {
rows.sort(function (a, b) {
var aLang = langsByCode[a[0]] || {};
var bLang = langsByCode[b[0]] || {};
return (aLang.sortKey || "").localeCompare(bLang.sortKey || "", "ku");
});
}
var wordLines = $.map(rows, function (row) {
var lang = row[0];
var words = row[1];
var wikiWords = words.map(function (w) {
return "{{W|" + lang + "|" + w + "}}";
}).join(", ");
return "* {{Z|" + lang + "}}: " + wikiWords;
}).join("\n");
var block = "{{werger-ser|" + (gloss.text || "?") + "|" + gloss.index + "}}";
if (wordLines) block += "\n" + wordLines;
block += "\n{{werger-bin}}";
return block;
});
if (!blocks.length) return "";
return "\n==== Bi zaravayên din ====\n" + blocks.join("\n") + "\n";
}
},
trans: {
id: "trans",
name: "werger",
question_fmt: "Tercimeyên vê maneyê bi zimanên din binivîse",
visible: function (values) {
if (!(values.lang === "ku" && values.pos)) return false;
// Hide only when every sense is a filled template sense (no plain
// gloss to attach translations to). A mix, or nothing filled in
// yet, still shows Werger.
var dfnSenses = steps.dfn.getSenses($("#wiktku-start-dfn"));
var hasRealSense = dfnSenses.some(function (s) {
return !s.tpl && (s.mane !== "" || senseHasExtraContent(s));
});
var hasFilledTplSense = dfnSenses.some(function (s) {
return s.tpl && s.tplTitle;
});
return hasRealSense || !hasFilledTplSense;
},
disabledKeys: {
"navz": true,
"ku": true,
"ckb": true,
"sdh": true,
"lki": true,
"hac": true,
"zza": true },
// Language dropdown + growing word-input list, scoped to one gloss's
// group (each gloss has its own group and row list).
buildRow: function (group) {
var row = $("<li class='wiktku-trans-row wiktku-lang-row'></li>");
// Language selector — the searchable picker is applied after insertion into DOM.
var langSel = $(mw.html.element("select", {
"class": "wiktku-start-step-keyfield wiktku-start-narrow" }));
langSel.attr("data-placeholder", "Li zimanekî bigere");
populateMenus(langSel, steps.trans.keys || [], steps.trans.disabledKeys);
// When a language is chosen, ensure a next empty row exists.
langSel.on("change", function () {
steps.trans.onLangChange(group, row);
});
// Word list for this language.
var wordList = $("<ul class='wiktku-trans-words wiktku-lang-row-words'></ul>");
var firstWord = steps.trans.makeWordInput();
wordList.append($("<li></li>").append(firstWord));
// The searchable picker is attached by initSelects() once the row
// is in the DOM (see onLangChange/buildGroup below).
row.append(langSel).append(wordList);
return row;
},
makeWordInput: function () {
var input = $("<textarea></textarea>")
.attr("name", "wiktku-trans-word-" + $.now() + "-" + Math.random().toString(36).substr(2, 9))
.attr("rows", 1)
.attr("class", "wiktku-dfn-subfield wiktku-start-narrow")
.attr("placeholder", "Tercime…");
input.on("input", function () {
var list = $(this).closest("ul.wiktku-trans-words");
var item = $(this).parent();
var val = $.trim($(this).val());
if (val && item.is(list.children("li:last-child"))) {
var next = steps.trans.makeWordInput();
list.append($("<li></li>").append(next));
}
});
return input;
},
onLangChange: function (group, row) {
var list = group.find("ul.wiktku-trans-list");
var isLast = row.is(list.children("li.wiktku-trans-row:last-child"));
if (isLast) {
var newRow = steps.trans.buildRow(group);
list.append(newRow);
// Attach the searchable picker now the row is in the DOM.
initSelects(newRow);
}
// Keep disabled keys in sync across this gloss's lang selectors
// only — the same language can be used for different senses.
steps.trans.syncDisabledKeys(group);
},
/** Disables already-selected languages in all other dropdowns within one group. */
syncDisabledKeys: function (group) {
var taken = $.extend({}, steps.trans.disabledKeys);
group.find("li.wiktku-trans-row select").each(function () {
var v = $(this).val();
if (v) taken[v] = true;
});
group.find("li.wiktku-trans-row select").each(function () {
var self = $(this);
var own = self.val();
self.find("option").each(function () {
var code = $(this).val();
if (!code) return;
$(this).prop("disabled", taken[code] && code !== own);
});
self.trigger("wiktku:refresh");
});
},
// Builds (or fetches) the .wiktku-trans-group for one gloss.
buildGroup: function (stepDiv, gi) {
var group = $("<div class='wiktku-trans-group'></div>").attr("data-gloss-pos", gi);
var list = $("<ul class='wiktku-trans-list wiktku-lang-row-list'></ul>");
list.append(steps.trans.buildRow(group));
group.append(list);
stepDiv.append(group);
// Attach the searchable picker now the select is in the DOM.
initSelects(list);
return group;
},
// Syncs one .wiktku-trans-group per current gloss, keyed by
// data-gloss-pos so groups stay matched across rebuilds.
build: function (stepDiv) {
var glosses = steps.trans.glossList();
if (!glosses.length) {
stepDiv.find(".wiktku-trans-group").remove();
return null;
}
// Drop groups for glosses that no longer exist (always from the
// tail — groups are only ever appended in gloss order below).
var existingGroups = stepDiv.find(".wiktku-trans-group");
if (existingGroups.length > glosses.length) {
existingGroups.slice(glosses.length).remove();
}
$.each(glosses, function (gi, gloss) {
var group = stepDiv.find(".wiktku-trans-group[data-gloss-pos='" + gi + "']");
if (!group.length) group = steps.trans.buildGroup(stepDiv, gi);
// Only label groups when there's more than one gloss to
// distinguish between — a single gloss needs no caption.
var label = group.find(".wiktku-trans-group-label");
if (glosses.length > 1) {
if (!label.length) {
label = $("<div class='wiktku-trans-group-label'></div>");
group.prepend(label);
}
label.text(gloss.index + " " + gloss.text);
} else if (label.length) {
label.remove();
}
});
return null;
},
/** Reads the translation rows for a single gloss group. */
getGroupTranslations: function (group) {
var result = [];
group.find("li.wiktku-trans-row").each(function () {
var lang = $(this).find("select").val();
if (!lang) return;
var words = [];
$(this).find("ul.wiktku-trans-words textarea").each(function () {
var v = $.trim($(this).val());
if (v) words.push(v);
});
if (words.length) result.push([lang, words]);
});
return result;
},
// Reads all translation rows, grouped by gloss position.
getTranslations: function (stepDiv) {
var result = [];
stepDiv.find(".wiktku-trans-group").each(function () {
result.push(steps.trans.getGroupTranslations($(this)));
});
return result;
},
// Builds the numbered "{ index, gloss }" list, one per dfn sense
// with a real mane (skips template senses). index is 1-based and
// matches the sense's position in the "#" definition list.
// When nothing's filled in, returns one placeholder entry so
// Werger still has a group to attach to; when every sense is a
// filled template sense, stays empty (matches trans.visible()).
glossList: function () {
var dfnSenses = steps.dfn.getSenses($("#wiktku-start-dfn"));
var glosses = [];
var hasFilledTplSense = false;
$.each(dfnSenses, function (i, s) {
if (s.tpl) {
if (s.tplTitle) hasFilledTplSense = true;
return; // template sense — no gloss to caption with
}
var dfn = s.mane;
if (!dfn) {
// No mane, but other fields are filled — still gets a
// gloss group since dfn.getOutput() emits {{mane?}} for it.
if (senseHasExtraContent(s)) glosses.push({ index: i + 1, text: "" });
return;
}
if (dfn[0] !== dfn[0].toLowerCase()) dfn = decapitalize(dfn);
dfn = stripWikilinks(dfn).replace(/[.…?!)\]،؟]+$/, "");
glosses.push({ index: i + 1, text: dfn });
});
if (!glosses.length && !hasFilledTplSense) {
glosses.push({ index: 1, text: "" });
}
return glosses;
},
output: function (values) {
if (values.lang !== "ku") return "";
var stepDiv = $("#wiktku-start-trans");
var glosses = steps.trans.glossList();
// Every sense is a template sense — there's no real gloss
// anywhere and no group in the DOM either (glossList() only
// returns empty in that case), so skip the section entirely.
if (!glosses.length) return "";
// A completely empty entry (nothing filled in dfn at all, no
// şablon chosen either) still gets a placeholder Werger section
// to fill in later. Only
// skip an individual placeholder gloss below when some other
// sense actually has real content, making that particular
// placeholder redundant.
var dfnSenses = steps.dfn.getSenses($("#wiktku-start-dfn"));
var hasRegularMane = dfnSenses.some(function (s) {
return !s.tpl && (s.mane !== "" || senseHasExtraContent(s));
});
// Each gloss now has its own group of translation rows —
// attach every gloss's own words under its own werger-ser/-bin
// pair instead of dumping everything under the first one.
var blocks = $.map(glosses, function (gloss, gi) {
var group = stepDiv.find(".wiktku-trans-group[data-gloss-pos='" + gi + "']");
var rows = group.length ? steps.trans.getGroupTranslations(group) : [];
// Placeholder gloss (no real mane entered yet) with nothing
// translated into it. If some other sense already has real
// content, this placeholder is redundant — skip it. If the
// whole entry is empty, keep it so Werger still gets a
// section to fill in.
if (!gloss.text && !rows.length && hasRegularMane) return undefined;
if (rows.length) {
// Sort by Kurdish sort key.
rows.sort(function (a, b) {
var aLang = langsByCode[a[0]] || {};
var bLang = langsByCode[b[0]] || {};
return (aLang.sortKey || "").localeCompare(bLang.sortKey || "", "ku");
});
}
var wordLines = $.map(rows, function (row) {
var lang = row[0];
var words = row[1];
var wikiWords = words.map(function (w) {
return "{{W|" + lang + "|" + w + "}}";
}).join(", ");
return "* {{Z|" + lang + "}}: " + wikiWords;
}).join("\n");
var block = "{{werger-ser|" + (gloss.text || "?") + "|" + gloss.index + "}}";
if (wordLines) block += "\n" + wordLines;
block += "\n{{werger-bin}}";
return block;
});
if (!blocks.length) return "";
return "\n==== Werger ====\n" + blocks.join("\n") + "\n";
}
},
cavkani: {
id: "cavkani",
name: "çavkanî",
question_fmt: "Çavkaniyên din (ne jêgirtin) lê zêde bike",
visible: function (values) {
return !!values.pos;
},
// Fills the insert-dropdown from the members of [[Kategorî:Çavkanî]].
refreshTplSelect: function () {
var sel = $("#wiktku-start-cavkani .wiktku-tpl-insert-select");
if (!sel.length) return;
sel.find("option[value!='']").remove();
$.each(catSrcTemplates || [], function (_, name) {
sel.append($("<option></option>").val(name).text(name));
});
markTemplateOptions(sel, function (opt) { return opt.val(); });
// Tell the picker the option list changed.
sel.trigger("wiktku:refresh");
},
build: function (stepDiv) {
if (stepDiv.find(".wiktku-cavkani-wrap").length) return null;
var wrap = $("<div class='wiktku-cavkani-wrap'></div>");
var ta = $("<textarea></textarea>")
.attr("name", "wiktku-cavkani-" + $.now())
.attr("class", "wiktku-start-step-field wiktku-cavkani-text")
.attr("rows", 4)
.attr("placeholder", "Şablonekî ji lîsteyê hilbijêre an rasterast binivîse…");
// Template insert dropdown, populated from [[Kategorî:Çavkanî]] —
// options refreshed once the category members are fetched.
var sel = $("<select class='wiktku-tpl-insert-select'></select>");
sel.attr("data-placeholder", "Şablonek lê zêde bike…");
sel.append($("<option value=''>— şablonek lê zêde bike —</option>"));
var status = $("<span class='wiktku-cavkani-status'></span>");
sel.on("change", function () {
var name = $(this).val();
if (!name) return;
insertAtCursor(ta[0], "\n* {{" + name + "}}");
$(this).val("");
sel.trigger("wiktku:refresh");
ta.focus();
});
wrap.append(sel);
wrap.append(status).append(ta);
stepDiv.append(wrap);
// build() runs again for every new beş (see the "+ Beş zêde bike"
// handler), after the initial page-wide pass — so this select needs
// its own init or it stays a plain, unsearchable native <select>.
initSelects(wrap);
if (catSrcTemplates) {
steps.cavkani.refreshTplSelect();
} else {
status.text("Şablon tên barkirin…");
fetchCatSrcTemplates().then(function () {
steps.cavkani.refreshTplSelect();
status.text("");
}, function () {
status.text("Şablon nehatin barkirin.");
});
}
return ta;
},
output: function () {
var text = $.trim($("#wiktku-start-cavkani .wiktku-cavkani-text").val());
if (!text) return "";
return "\n==== Çavkanî ====\n" + text + "\n";
}
},
};
steps.trans.keys = steps.lang.choices;
steps.dunde.keys = steps.lang.choices;
steps.zarava.keys = getZaravaKeys(steps.lang.choices);
// Ghybu, 14 Tebax 2026: bnrh/resim/pron used to sit here, always visible,
// well above the tab bar (which starts right before "dfn"). They're now
// tab-gated (see STEP_GROUPS below), so their DOM position moves down to
// sit right next to it instead of rendering as always-open fields between
// Ziman and Cureyê rêzimanî. This array only controls DOM build order —
// nothing else keys off it (see the comment above stepIdToGroup).
// Wikihez, 14 Tebax 2026: Mane tab's internal order is now Mane → malûmatên
// pêşketî (nested inside dfn's own div, see steps.dfn.build) → Wêne →
// Bi zaravayên din → Werger, so dfn/resim/zarava/trans need to sit
// adjacent to each other, in that order, in the DOM. zarava/trans moved
// out of the "Beşên din" cluster entirely — see STEP_GROUPS below.
var ordered_steps = [
steps.lang, steps.pos, steps.posparams,
steps.cinsiyet, steps.jimar, steps.lektur, steps.tr,
// Mane tab, in reading order: the senses, then the two things that
// belong to the entry as a whole rather than to one sense.
steps.dfn, steps.tewandin, steps.alfabeyendin, steps.zarava, steps.trans,
// Etîmolojî tab.
steps.etym, steps.dunde,
// Eleqedar tab — three lists of the same shape.
steps.je, steps.tekildar, steps.binereherwiha,
// Bilêvkirin: no longer in a tab at all (see PRON_SECTION_ID) — it
// still needs a slot here because this array is what builds the DOM.
steps.pron,
// Beşên din, behind the picker.
steps.resim,
steps.bnrh, steps.bikaranin, steps.formalt, steps.hevmane, steps.dijmane, steps.jornav, steps.jernav,
steps.cavkani, steps.xwendin];
// ── Step-group tabs ──────────────────────────────────────────────────────
// Ghybu, 14 Tebax 2026 (revised): originally 5 tabs (Bingehîn/Bilêvkirin/
// Lînkkirin/Bikaranîn/Din), split by topic. Ghybu's follow-up flattened
// that to exactly 3: "Mane", "Bilêvkirin", "Beşên din" ("other
// sections") — with Wêne and Nimûne folded INTO "Mane" specifically
// (not left in a misc tab), and everything that isn't Mane/Bilêvkirin
// dumped into one single "Beşên din" catch-all rather than split across
// topic tabs. Nimûne doesn't appear below as its own entry because it's
// not a separate step — it's already rendered inside each dfn/Mane
// sense block (see buildSenseBlock's allGroups), so it's under "Mane"
// automatically. "mane" stays first (and so the default-active tab)
// since required content — Mane itself — has to be what's seen by
// default.
// Wikihez, 14 Tebax 2026: zarava/trans moved from "besendin" into "mane" —
// both are already gated to lang===ku (zarava.visible just delegates to
// trans.visible), so they show/hide automatically with no picker
// involvement, same as before; they just render inside the Mane tab
// now instead of behind the Beşên din picker (see openedOtherSections
// below, which only applies to "besendin" members).
// Wikihez, 15 Tebax 2026: pared back again after Ghybu's "Tu jî dizanî ku
// kesên ku tên vira çito peyv çêdikin: Ziman > Mane > Mînak > Hevmane >
// Dijmane". That path is now what the form shows by default and nothing
// else: Mane holds the senses (whose own blocks carry Nimûne, Jêgirtin,
// Hevmane and Dijmane — see steps.dfn.allGroups) plus Werger. Wêne and
// "Bi zaravayên din" moved out to the Beşên din picker with everything
// else; they aren't gone, they're one dropdown pick away.
// v3 spec (15 Tebax 2026): four tabs instead of three, and Bilêvkirin
// leaves the tab bar entirely.
//
// The Beşên din picker had grown to eighteen entries, which is its own
// kind of "where do I find anything" problem — splitting the two
// obvious clusters out as their own tabs is what fixes that:
// Etîmolojî — where the word came from, and what came from it
// Eleqedar — the three "related words" lists, which are the same
// shape as each other and nothing like the rest
// Tewandin moves into Mane and out from behind the picker: it is
// commonly wanted and it belongs with the senses it inflects. Note this
// is a PLACEMENT change only — Tewandin keeps its own free-text
// {{ku-tewîn-nav}} field and does NOT absorb the Cins/zayend form
// parameters (m=/n=/p=), which stay on the headword template where
// they belong. The v3 mock merged the two; Wikihez rejected that.
var STEP_GROUPS = [
{ id: "mane", label: "Mane", steps: ["dfn", "tewandin", "alfabeyendin", "zarava", "trans"] },
{ id: "etimoloji", label: "Etîmolojî", steps: ["etym", "dunde"] },
{ id: "eleqedar", label: "Eleqedar", steps: ["je", "tekildar", "binereherwiha"] },
{ id: "besendin", label: "Beşên din", steps: ["resim", "formalt", "hevmane", "dijmane", "jornav", "jernav", "bikaranin", "cavkani", "xwendin", "bnrh"] },
];
// Steps that live behind the "Beşên din" picker — only these need an
// explicit "open" before they're shown, even when their tab is active.
// Derived from the group above so it can't drift out of sync.
var BESENDIN_STEP_IDS = STEP_GROUPS[3].steps;
// Reverse lookup: step id -> index into STEP_GROUPS (undefined for
// ungrouped steps — now only lang/pos/posparams/cinsiyet/lektur/tr,
// which stay always-visible since they're required to get to everything
// else).
var stepIdToGroup = {};
$.each(STEP_GROUPS, function (gi, g) {
$.each(g.steps, function (_, sid) { stepIdToGroup[sid] = gi; });
});
// Step ids that belong to each section (not shared across sections).
var PER_SECTION_STEP_IDS = [
"pos", "posparams", "cinsiyet", "jimar", "lektur", "tr",
"resim", "dfn", "tewandin", "formalt", "bikaranin", "alfabeyendin", "hevmane", "dijmane", "jornav", "jernav", "je", "tekildar", "etym", "dunde", "binereherwiha", "zarava", "trans", "cavkani", "xwendin"
];
// ── Multi-section state ──────────────────────────────────────────────────
// Each entry is a plain snapshot: { pos, cinsiyet, lektur, tr, dfn (senses[]),
// je, tekildar, binereherwiha, trans (rows[]) }.
var sections = [{}]; // section 0 starts empty (DOM is the truth)
var activeSection = 0;
// ── Bilêvkirin as a standalone section (v3 spec) ─────────────────────
// Pronunciation belongs to the word, not to one part of speech, so it
// sits beside Navdêr/Lêker in the section tab bar rather than inside
// any of them, and is added once from "+ Beş zêde bike".
//
// Modelled as a flag rather than an entry in `sections`: activeSection
// is used as an array index in a dozen places (saveCurrentSection,
// restoreSection, sections[activeSection]…), and making it sometimes a
// string would mean auditing all of them. Viewing Bilêvkirin instead
// leaves activeSection pointing at the POS section you were on, so
// coming back is free and nothing else has to change.
// Always in the tab bar, and first — pronunciation applies to the whole
// word, so it reads as the thing that comes before any part of speech
// rather than an optional extra you have to know to add. Its content
// only appears once you click it, like any other tab.
var viewingPron = false; // is it the tab currently on screen
// Which STEP_GROUPS tab is currently shown. Lives out here (like
// activeSection above) so refresh() — which is not nested inside build()
// — can read it and so renderGroupTabs()/updateGroupTabIndicators() below
// can be called from refresh() too. Both operate on the tab bar via its
// #wiktku-group-tabs id rather than a closured element reference, for the
// same reason.
var activeGroup = 0;
// Unsaved-changes / autosave state. Lives out here (same reason as
// activeGroup above) so destroy() — which runs on final submit and on
// switching to the source editor, and is not nested inside build() —
// can clear the timers and the beforeunload warning. build() assigns
// into these; it doesn't re-declare them.
var formDirty = false;
var autosaveDebounceTimer = null;
var autosaveInterval = null;
/** Re-renders the step-group tab bar to reflect the current activeGroup. */
function renderGroupTabs() {
var groupTabsDiv = $("#wiktku-group-tabs");
if (!groupTabsDiv.length) return;
groupTabsDiv.empty();
$.each(STEP_GROUPS, function (i, g) {
var tab = $("<span></span>")
.addClass("wiktku-group-tab")
.attr("data-group-idx", i)
.text(g.label)
.toggleClass("wiktku-tab-active", i === activeGroup);
(function (idx) {
tab.on("click", function () {
if (idx === activeGroup) return;
activeGroup = idx;
renderGroupTabs();
if (idx === BESENDIN_GROUP_IDX) renderBesenDinPicker();
refresh();
});
}(i));
groupTabsDiv.append(tab);
});
}
/**
* Toggles a "needs attention" dot on any group tab that still has a
* required, unfilled field hidden inside it — so switching tabs doesn't
* leave the person wondering why "Bişîne" stays disabled.
*/
function updateGroupTabIndicators(values) {
var tabs = $("#wiktku-group-tabs .wiktku-group-tab");
if (!tabs.length) return;
$.each(STEP_GROUPS, function (i, g) {
var missing = false;
$.each(g.steps, function (_, sid) {
var step = steps[sid];
if (!step || !step.required) return;
var val = values[sid];
if (val === "" || (step.multiple && $.isArray(val) && val.join("") === "")) {
missing = true;
}
});
tabs.eq(i).toggleClass("wiktku-tab-missing", missing && i !== activeGroup);
});
}
// Wikihez, 14 Tebax 2026: "Beşên din" no longer shows all 16 fields
// stacked at once — a picker reveals one at a time instead. This is
// per-section state (like the field values themselves), snapshotted in
// saveCurrentSection() and restored in restoreSection() below, and
// auto-seeded from any field that already has content (so a returning
// draft, or an older cache saved before this existed, doesn't hide
// something the person already filled in).
var openedOtherSections = {};
var BESENDIN_SET = {};
$.each(BESENDIN_STEP_IDS, function (_, sid) { BESENDIN_SET[sid] = true; });
// "besendin"'s index in STEP_GROUPS. Derived rather than hardcoded —
// this was a literal 2 and silently pointed at the wrong tab the moment
// Etîmolojî and Eleqedar were inserted ahead of it.
var BESENDIN_GROUP_IDX = (function () {
for (var i = 0; i < STEP_GROUPS.length; i++) {
if (STEP_GROUPS[i].id === "besendin") return i;
}
return STEP_GROUPS.length - 1;
}());
/** Re-renders the "Beşên din" picker to list only the not-yet-opened sections. */
function renderBesenDinPicker() {
var wrap = $("#wiktku-besendin-picker");
if (!wrap.length) return;
wrap.empty();
var pickerValues = getValues();
var unopened = $.grep(BESENDIN_STEP_IDS, function (sid) {
if (openedOtherSections[sid]) return false;
// Don't offer a section that would open onto nothing: several of
// these are gated (Bi zaravayên din / Werger need lang=ku, most
// need a pos). refresh() would hide it again straight away, so
// picking it would read as a broken dropdown.
var step = steps[sid];
if (step && typeof step.visible === "function") {
try {
if (!step.visible(pickerValues)) return false;
} catch (e) { /* a step whose visible() needs DOM we lack yet — offer it */ }
}
return true;
});
if (!unopened.length) return; // everything's open — nothing left to pick
var sel = $("<select class='wiktku-besendin-select'></select>");
sel.attr("data-placeholder", "— beşek hilbijêre —");
sel.append($("<option value=''>— beşek hilbijêre —</option>"));
$.each(unopened, function (_, sid) {
var step = steps[sid];
if (!step) return;
sel.append($("<option></option>").val(sid).text(capitalize(step.name)));
});
sel.on("change", function () {
var sid = $(this).val();
if (!sid) return;
openedOtherSections[sid] = true;
renderBesenDinPicker();
refresh();
});
wrap.append(sel);
initSelects(wrap);
}
/** Marks any BESENDIN_STEP_IDS field that already has real content as
* "opened", so restoring a draft doesn't bury filled-in sections behind
* the picker. Reuses each step's own output() as the emptiness check —
* it already knows what "empty" means per field, and it reads the DOM
* the restore just populated. Call this AFTER the DOM has the restored
* values in it. */
function seedOpenedFromContent() {
var values = getValues();
$.each(BESENDIN_STEP_IDS, function (_, sid) {
if (openedOtherSections[sid]) return;
var step = steps[sid];
if (!step || typeof step.output !== "function") return;
try {
if (step.output(values)) openedOtherSections[sid] = true;
} catch (e) { /* a step whose output() needs more state than we have yet — skip it */ }
});
}
function snapshotDfn() {
return steps.dfn.getSenses($("#wiktku-start-dfn"));
}
// Rebuilds the dfn DOM from a previously snapshotted senses array.
function restoreDfn(senses) {
var stepDiv = $("#wiktku-start-dfn");
// Tear down the existing list so build() recreates it cleanly. The
// "+ Mane zêde bike" button goes with it — build() re-appends both,
// and leaving the old one behind would both duplicate it and put it
// above the rebuilt list.
stepDiv.find("ol.wiktku-dfn-list").remove();
stepDiv.find(".wiktku-add-sense").remove();
steps.dfn.build(stepDiv);
var list = stepDiv.find("ol.wiktku-dfn-list");
$.each(senses, function (i, sense) {
// Ensure enough blocks exist (build() seeds one).
var blocks = list.find("li.wiktku-dfn-sense");
var block = blocks.eq(i);
if (!block.length) {
var nb = steps.dfn.buildSenseBlock(stepDiv);
list.append(nb);
block = list.find("li.wiktku-dfn-sense").last();
}
// Template selector.
block.find("select.wiktku-dfn-tpl-select").val(sense.tpl || "");
if (sense.tpl) {
block.find("textarea.wiktku-dfn-mane").hide();
block.find("input.wiktku-dfn-tpl-title").val(sense.tplTitle || "").show();
// The picker is collapsed behind a link by default; a restored
// sense that already uses a template has to show it, or the
// chosen template is invisible and looks lost.
var reveal = block.data("revealTplRow");
if (typeof reveal === "function") reveal();
} else {
block.find("textarea.wiktku-dfn-mane").val(sense.mane || "").show();
block.find("input.wiktku-dfn-tpl-title").hide().val("");
}
// dfnArea is the only thing actually saved, so split it back into
// tercime/îzah for editing (mirrors syncNonKuToMane's join format).
var maneParts = splitTercimeIzah(sense.mane);
block.find(".wiktku-dfn-tercime").val(maneParts ? maneParts.tercime : (sense.mane || ""));
block.find(".wiktku-dfn-izah").val(maneParts ? maneParts.izah : "");
// Re-sync the formên alternatîv/hevmane/… hide state now that
// tplSelect's value was set (its own "change"
// handler doesn't fire from .val(), so this doesn't happen otherwise).
var updateVis = block.data("updateFieldVisibility");
if (updateVis) updateVis();
// Same for the mane-box mode (plain vs tercime+îzah), since this
// also depends on tplSelect's (and lang's) value.
var updateMane = block.data("updateManeMode");
if (updateMane) updateMane();
// Restore a sub-list (etiket, formên alternatîv, hevmane …) from a values array.
function restoreSubList(cls, values) {
if (!values || !values.length) return;
var groupDiv = block.find("." + cls + "-group");
var subList = groupDiv.find("ol, ul").first();
if (!subList.length) return; // group not found
var useModifiers = !!MODIFIER_SUBGROUPS[cls];
// Fill existing items, append new ones as needed.
$.each(values, function (j, val) {
var items = subList.find("li");
if (j < items.length) {
items.eq(j).find("textarea").val(val);
} else {
var ta = $("<textarea></textarea>")
.attr("name", "wiktku-dfn-restore-" + $.now() + "-" + Math.random().toString(36).substr(2, 9))
.attr("rows", 1)
.attr("class", "wiktku-dfn-subfield wiktku-start-narrow")
.val(val);
ta.on("input", function () {
steps.dfn.onSubInput(subList, this, 1, true, useModifiers);
});
subList.append(useModifiers ? makeModifierLi(ta) : $("<li></li>").append(ta));
}
});
}
// Reveal and populate lazy groups that have data.
var lazyMap = {
"wiktku-dfn-etiket": sense.etiket,
"wiktku-dfn-kategori": sense.kategori,
"wiktku-dfn-alternativ": sense.alternativ,
"wiktku-dfn-hevmane": sense.hevmane,
"wiktku-dfn-dijmane": sense.dijmane,
"wiktku-dfn-koordine": sense.koordine,
"wiktku-dfn-jornav": sense.jornav,
"wiktku-dfn-jernav": sense.jernav
};
$.each(lazyMap, function (cls, vals) {
if (vals && vals.length) restoreSubList(cls, vals);
});
// Nimûne items are objects { text, tr?, t? } — restore using the builder.
if (sense.nimune && sense.nimune.length) {
var nimuneGroupDiv = block.find(".wiktku-dfn-nimune-group");
var nimuneList = nimuneGroupDiv.find("ol.wiktku-dfn-nimune-list");
var buildFn = nimuneGroupDiv.data("buildNimuneLi");
nimuneList.empty();
$.each(sense.nimune, function (_, n) {
var text = typeof n === "object" ? (n.text || "") : n;
if (!text) return;
var li = buildFn ? buildFn() : $("<li class='wiktku-dfn-nimune-li'></li>");
li.find(".wiktku-dfn-nimune-text").val(text).each(function () { highlightLinebreak(this); });
if (n.tr) li.find(".wiktku-dfn-nimune-tr").val(n.tr);
if (n.t) li.find(".wiktku-dfn-nimune-t").val(n.t);
nimuneList.append(li);
});
// Always leave a blank trailing item.
if (buildFn) nimuneList.append(buildFn());
}
// Restore jêder entries — accepts current array shape or a legacy
// single object (older saved sections) for backwards compat.
var jederArr = $.isArray(sense.jeder) ? sense.jeder : (sense.jeder ? [sense.jeder] : []);
if (jederArr.length) {
var jederGroupDiv = block.find(".wiktku-dfn-jeder-group");
var jederList = jederGroupDiv.find("ol.wiktku-dfn-jeder-list");
var buildJederFn = jederGroupDiv.data("buildJederLi");
jederList.empty();
$.each(jederArr, function (_, j) {
if (!j || !j.quote) return;
var li = buildJederFn ? buildJederFn() : $("<li class='wiktku-dfn-jeder-li'></li>");
li.find(".wiktku-dfn-nimune-quote").val(j.quote).each(function () { highlightLinebreak(this); });
if (j.quoteTr) li.find(".wiktku-dfn-nimune-quote-tr").val(j.quoteTr);
if (j.quoteT) li.find(".wiktku-dfn-nimune-quote-t").val(j.quoteT);
if (j.jederManual) {
var manualSel = li.find(".wiktku-dfn-quote-src-sel");
manualSel.val("__manual__").trigger("change");
li.find(".wiktku-dfn-quote-src-manual").val(j.jederManual);
} else if (j.jederCatTpl) {
// Legacy format from before the şablon search switched rows to
// manual mode directly — convert it the same way now, so it's
// editable like any other free-form source.
var catSelEl = li.find(".wiktku-dfn-quote-src-sel");
catSelEl.val("__manual__").trigger("change");
li.find(".wiktku-dfn-quote-src-manual").val("{{" + j.jederCatTpl + "}}");
} else if (j.jederTpl) {
var srcSel = li.find(".wiktku-dfn-quote-src-sel");
srcSel.val(j.jederTpl).trigger("change");
if (j.jêderFields) {
$.each(j.jêderFields, function (key, val) {
li.find(".wiktku-dfn-quote-src-input[data-field-key='" + key + "']").val(val);
});
}
}
jederList.append(li);
});
// Always leave a blank trailing item, same as Nimûne.
if (buildJederFn) jederList.append(buildJederFn());
}
});
// Numbers and one-line summaries for the freshly rebuilt blocks, and
// collapse everything that has content — on a restored draft nothing
// is "the sense being edited" yet, so a five-sense entry would
// otherwise come back fully expanded, which is the state this
// accordion exists to avoid.
steps.dfn.syncSenseHeaders(stepDiv);
stepDiv.find("li.wiktku-dfn-sense").each(function () {
var li = $(this);
li.toggleClass("wiktku-sense-collapsed", steps.dfn.senseBlockHasContent(li));
});
}
// Snapshots simple (non-dfn) per-section steps from the DOM into obj.
function saveCurrentSection() {
var snap = {};
$.each(PER_SECTION_STEP_IDS, function (_, id) {
if (id === "dfn") {
snap.dfn = snapshotDfn();
return;
}
if (id === "etym") {
snap.etym = $.trim($("#wiktku-start-etym .wiktku-etym-text").val());
return;
}
if (id === "cavkani") {
snap.cavkani = $.trim($("#wiktku-start-cavkani .wiktku-cavkani-text").val());
return;
}
if (id === "posparams") {
snap.posparams = $.trim($("#wiktku-start-posparams .wiktku-posparams-text").val());
return;
}
if (id === "resim") {
// One entry per row, including blank ones, so a mid-edit draft
// (e.g. a filename typed but no caption yet) survives a cache
// restore instead of being silently dropped.
snap.resim = $("#wiktku-start-resim li.wiktku-resim-item").map(function () {
return {
file: $.trim($(this).find(".wiktku-resim-file").val()),
caption: $.trim($(this).find(".wiktku-resim-caption").val()),
alt: $.trim($(this).find(".wiktku-resim-alt").val())
};
}).get();
return;
}
var step = steps[id];
if (!step) return;
var stepDiv = $("#wiktku-start-" + id);
if (id === "trans") {
snap.trans = steps.trans.getTranslations(stepDiv);
return;
}
if (id === "zarava") {
snap.zarava = steps.zarava.getTranslations(stepDiv);
return;
}
if (id === "dunde") {
snap.dunde = steps.dunde.getRows(stepDiv);
return;
}
// Generic: read all step fields.
var fields = stepDiv.find(".wiktku-start-step-field");
if (step.multiple) {
snap[id] = fields.map(function () { return $(this).val(); }).get();
} else {
snap[id] = fields.val();
}
});
// Item 3: which "Beşên din" sub-sections this section has already
// opened via the picker — per-section, like everything else here.
snap.openedOtherSections = $.extend({}, openedOtherSections);
sections[activeSection] = snap;
}
// Restores a previously saved snapshot into the form DOM.
function restoreSection(snap) {
$.each(PER_SECTION_STEP_IDS, function (_, id) {
if (id === "dfn") {
restoreDfn(snap.dfn || []);
return;
}
if (id === "etym") {
$("#wiktku-start-etym .wiktku-etym-wrap").remove();
steps.etym.build($("#wiktku-start-etym"));
$("#wiktku-start-etym .wiktku-etym-text").val(snap.etym || "");
return;
}
if (id === "cavkani") {
$("#wiktku-start-cavkani .wiktku-cavkani-wrap").remove();
steps.cavkani.build($("#wiktku-start-cavkani"));
$("#wiktku-start-cavkani .wiktku-cavkani-text").val(snap.cavkani || "");
return;
}
if (id === "posparams") {
var ppDiv = $("#wiktku-start-posparams");
ppDiv.find(".wiktku-posparams-wrap").remove();
steps.posparams.build(ppDiv);
var savedTa = snap.posparams || "";
ppDiv.find(".wiktku-posparams-text").val(savedTa);
// Re-parse saved textarea to restore helper widget states.
if (savedTa) {
var cMatch = savedTa.match(/\|c=([^|}\s]+)/);
var jMatch = savedTa.match(/\|j=([^|}\s]+)/);
var trMatch = savedTa.match(/\|tr=([^|}\s]+)/);
// Write into the shared hidden field (not the visible
// select, which has no <option>s yet) — syncHelpers()
// below reads it back to restore the dropdown once the
// gender/number options for this language are populated.
if (cMatch) $("#wiktku-start-cinsiyet-field").val(cMatch[1]);
if (jMatch) $("#wiktku-start-jimar-field").val(jMatch[1]);
if (trMatch) ppDiv.find(".wiktku-posparams-field[data-pp-key='tr']").val(trMatch[1]);
// For lêker, c= holds the verb-type code instead of a
// gender — split it back across the two dropdowns it is
// now assembled from ("x-gh" → form "x" + base "gh").
if (cMatch && /^lêker/.test(snap.pos || "")) {
var lekturParts = /^(?:([xphb])-)?(n?gh)$/.exec(cMatch[1]);
if (lekturParts) {
ppDiv.find(".wiktku-posparams-lektur-sel").val(lekturParts[2]);
ppDiv.find(".wiktku-posparams-lekturform-sel").val(lekturParts[1] || "");
}
}
// Restore checked optional params. "form" is stored as
// "erê" rather than "1" (see rebuildTa), so it needs its
// own check here.
ppDiv.find(".wiktku-posparams-opt-panel input[type='checkbox']").each(function () {
var key = $(this).val();
var expected = key === "form" ? "erê" : "1";
$(this).prop("checked", savedTa.indexOf("|" + key + "=" + expected) !== -1);
});
}
steps.posparams.syncHelpers(ppDiv);
return;
}
if (id === "resim") {
var resimDiv = $("#wiktku-start-resim");
resimDiv.find(".wiktku-resim-wrap").remove();
steps.resim.build(resimDiv);
// Accept both the new array-of-rows format and the older
// single {file, caption} object saved before multi-image
// support existed.
var resimSnap = snap.resim;
var rows = $.isArray(resimSnap) ? resimSnap : (resimSnap ? [resimSnap] : []);
if (rows.length) {
var list = resimDiv.find("ol.wiktku-resim-list");
list.empty();
$.each(rows, function (_, r) {
var item = steps.resim.buildItem(resimDiv);
item.find(".wiktku-resim-file").val(r.file || "");
item.find(".wiktku-resim-caption").val(r.caption || "");
item.find(".wiktku-resim-alt").val(r.alt || "");
list.append(item);
});
// Always keep a blank trailing row, same as Nimûne/Dûnde.
var lastItem = list.children("li.wiktku-resim-item").last();
if ($.trim(lastItem.find(".wiktku-resim-file").val())) {
list.append(steps.resim.buildItem(resimDiv));
}
}
return;
}
if (id === "trans") {
// Rebuild trans groups (dfn must already be restored by this
// point in the $.each loop, so glossList() reflects it).
var transDiv = $("#wiktku-start-trans");
transDiv.find(".wiktku-trans-group").remove();
steps.trans.build(transDiv);
var groupsSnap = snap.trans || [];
$.each(groupsSnap, function (gi, rows) {
var group = transDiv.find(".wiktku-trans-group[data-gloss-pos='" + gi + "']");
if (!group.length) return; // gloss no longer exists — drop its rows
var list = group.find("ul.wiktku-trans-list");
$.each(rows, function (j, row) {
var lang = row[0], words = row[1];
var lastRow = list.find("li.wiktku-trans-row").last();
lastRow.find("select").val(lang).trigger("change");
var wordList = lastRow.find("ul.wiktku-trans-words");
$.each(words, function (k, word) {
var wordItems = wordList.find("li");
if (k < wordItems.length) {
wordItems.eq(k).find("textarea").val(word);
} else {
// .val() below doesn't fire "input", so the normal
// auto-grow never runs — append a matching item
// ourselves instead of silently dropping the word.
var extraInput = steps.trans.makeWordInput();
wordList.append($("<li></li>").append(extraInput));
extraInput.val(word);
}
});
// Leave one trailing empty field so the row can still grow
// when the user types, matching a freshly-built row.
if ($.trim(wordList.children("li").last().find("textarea").val())) {
wordList.append($("<li></li>").append(steps.trans.makeWordInput()));
}
});
});
return;
}
if (id === "zarava") {
// Rebuild zarava groups (dfn must already be restored by this
// point in the $.each loop, so glossList() reflects it).
var zaravaDiv = $("#wiktku-start-zarava");
zaravaDiv.find(".wiktku-zarava-group").remove();
steps.zarava.build(zaravaDiv);
var zaravaGroupsSnap = snap.zarava || [];
$.each(zaravaGroupsSnap, function (gi, rows) {
var group = zaravaDiv.find(".wiktku-zarava-group[data-gloss-pos='" + gi + "']");
if (!group.length) return; // gloss no longer exists — drop its rows
var list = group.find("ul.wiktku-zarava-list");
$.each(rows, function (j, row) {
var lang = row[0], words = row[1];
var lastRow = list.find("li.wiktku-zarava-row").last();
lastRow.find("select").val(lang).trigger("change");
var wordList = lastRow.find("ul.wiktku-zarava-words");
$.each(words, function (k, word) {
var wordItems = wordList.find("li");
if (k < wordItems.length) {
wordItems.eq(k).find("textarea").val(word);
} else {
var extraInput = steps.zarava.makeWordInput();
wordList.append($("<li></li>").append(extraInput));
extraInput.val(word);
}
});
if ($.trim(wordList.children("li").last().find("textarea").val())) {
wordList.append($("<li></li>").append(steps.zarava.makeWordInput()));
}
});
});
return;
}
if (id === "dunde") {
// Rebuild dunde rows.
var dundeDiv = $("#wiktku-start-dunde");
dundeDiv.find("ul.wiktku-dunde-list").remove();
steps.dunde.build(dundeDiv);
var dundeRows = snap.dunde || [];
$.each(dundeRows, function (i, row) {
var lang = row[0], words = row[1];
var list = dundeDiv.find("ul.wiktku-dunde-list");
var lastRow = list.find("li.wiktku-dunde-row").last();
lastRow.find("select").val(lang).trigger("change");
var wordList = lastRow.find("ul.wiktku-dunde-words");
$.each(words, function (j, word) {
var wordItems = wordList.find("li");
if (j < wordItems.length) {
wordItems.eq(j).find("textarea").val(word);
} else {
// .val() below doesn't fire "input", so the normal
// auto-grow never runs — append a matching item
// ourselves instead of silently dropping the word.
var extraInput = steps.dunde.makeWordInput();
wordList.append($("<li></li>").append(extraInput));
extraInput.val(word);
}
});
// Leave one trailing empty field so the row can still grow
// when the user types, matching a freshly-built row.
if ($.trim(wordList.children("li").last().find("textarea").val())) {
wordList.append($("<li></li>").append(steps.dunde.makeWordInput()));
}
});
return;
}
var step = steps[id];
if (!step) return;
var stepDiv = $("#wiktku-start-" + id);
var fields = stepDiv.find(".wiktku-start-step-field");
var val = snap[id];
if (val === undefined || val === null) return;
if (step.multiple) {
var arr = val;
fields.each(function (i) {
if (i < arr.length) $(this).val(arr[i]);
});
} else {
fields.val(val);
}
// Tell the pickers about the programmatic value change.
fields.filter("select").trigger("wiktku:refresh");
});
// Item 3: restore which "Beşên din" sub-sections were already opened
// for this section, then seed in anything the DOM restore above just
// filled in but that wasn't marked opened yet (e.g. an older cache
// saved before this existed).
openedOtherSections = $.extend({}, snap.openedOtherSections || {});
seedOpenedFromContent();
renderBesenDinPicker();
}
function getWikitextForCurrentSection(callback) {
var values = getValues();
var entry = steps.pos.output(values);
// Bilêvkirin is NOT emitted here — it is one shared field for the
// whole word, so emitting it per section duplicated it. getWikitext()
// prints it once, above the POS sections.
steps.dfn.getOutput(values, function (output) {
entry += output;
entry += steps.tewandin.output(values);
entry += steps.bikaranin.output(values);
entry += steps.alfabeyendin.output(values);
entry += steps.formalt.output(values);
entry += steps.hevmane.output(values);
entry += steps.dijmane.output(values);
entry += steps.jornav.output(values);
entry += steps.jernav.output(values);
entry += steps.je.output(values);
entry += steps.tekildar.output(values);
entry += steps.etym.output(values);
entry += steps.dunde.output(values);
entry += steps.binereherwiha.output(values);
entry += steps.zarava.output(values);
entry += steps.trans.output(values);
entry += steps.cavkani.output(values);
entry += steps.xwendin.output(values);
callback(entry, values);
});
}
function getWikitextAllSections(callback) {
saveCurrentSection();
var results = new Array(sections.length);
var sharedValues = getValues(); // lang/pron are shared
function processSection(i) {
// Each hop through here can be reached asynchronously: the dfn
// step waits on mw.loader.using("ext.gadget.linkify") before
// calling back, so from that point on the submit handler's own
// try/catch is no longer on the stack. Guard every hop instead,
// or a throw after linkify loads vanishes into an unhandled
// rejection and the form just sits there looking busy.
try {
if (i >= sections.length) {
// All done — restore original active section.
restoreSection(sections[activeSection]);
refresh();
callback(results, sharedValues);
return;
}
restoreSection(sections[i]);
refresh();
getWikitextForCurrentSection(function (sectionText) {
results[i] = sectionText;
processSection(i + 1);
});
} catch (e) {
if (typeof onSubmitError === "function") onSubmitError(e);
else throw e;
}
}
processSection(0);
}
// Assembles wikitext for all sections plus the shared lang header.
// pron used to be prepended here too (shared, above every section) —
// it now nests inside each section instead, via getWikitextForCurrentSection.
function getWikitext(callback) {
getWikitextAllSections(function (sectionTexts, sharedValues) {
var bnrh = steps.bnrh.output(sharedValues);
var entry = steps.lang.output(sharedValues);
// One pronunciation per word, printed once between the language
// header and the POS sections — see steps.pron.output.
entry += steps.pron.output(sharedValues);
entry += sectionTexts.join("\n");
// bnr-h goes before the language section — only prepended when
// generating fresh wikitext (not addLangMode, which handles it separately).
if (!addLangMode && bnrh) entry = bnrh + entry;
// Edit summary uses section 0's values. Read from the saved snapshot
// (not the live DOM) so it doesn't mix section 0's pos with whichever
// section happens to be active/restored at this point.
var dfnSenses = (sections[0] && sections[0].dfn) || [];
var dfnSummary = dfnSenses.map(function (s) {
if (s.mane) return s.mane;
// Template sense (e.g. {{guharto|ku|somepage}}) — same
// construction as the tplCall built in getOutput, so the
// summary shows what actually gets written to the entry
// instead of going blank.
if (s.tpl && s.tplTitle) {
return s.tplNoLang
? "{{" + s.tpl + "|" + s.tplTitle + "}}"
: "{{" + s.tpl + "|" + sharedValues.lang + "|" + s.tplTitle + "}}";
}
return "";
}).filter(Boolean).join("; ");
var summary = "([[Mediawiki:Gadget-start.js|WF:NÛ]] v.2.0) +" +
sharedValues.lang + ":" + sections[0].pos + ":" + dfnSummary;
var summaryField = document.getElementById("wpSummary");
if (addLangMode && summaryField.value) {
summary = summaryField.value + " " + summary;
}
summaryField.value = summary;
callback(entry);
});
}
var continueBtn;
// Set by build() to its submitFailed(). Lives out here because the
// wikitext-assembly functions below are outside build()'s closure but
// still need a way to report a failure to the person rather than dying
// silently in the console.
var onSubmitError = null;
// Item 7: whether Mane/Bi zaravayên din/Werger has anything in it —
// kept outside refresh() so the click handler (defined separately,
// where continueBtn is built) can read the latest value.
var wiktkuContentGateOk = true;
function getValuesForStep(stepId) {
var fields = $("#wiktku-start-" + stepId + " .wiktku-start-step-field");
var step = steps[stepId];
if (step.keys) {
var values = {};
fields.each(function (i, field) {
var key = $(field).prevAll(".wiktku-start-step-keyfield").val();
if (key) values[key] = $(field).val();
});
return values;
}
else if (step.multiple) {
return fields.map(function () {
return $(this).val();
}).get();
}
return fields.val();
}
function getValues() {
var values = {};
$.each(steps, function (stepId) {
values[stepId] = getValuesForStep(stepId);
});
return values;
}
function populateMenus(inputs, choices, disabledValues, placeholderText) {
if (!disabledValues) disabledValues = {};
var vals = inputs.map(function (i, input) {
return $(input).val();
});
inputs.empty();
inputs.append($("<option></option>").text(placeholderText || ""));
$.each(choices, function (j, choice) {
// Append the language code in parentheses so that typing a code
// (e.g. "ku") in the search box still finds the language name.
var displayText = capitalize(choice.label);
if (choice.sortKey !== undefined) {
// This is a language choice {code, label, sortKey} — show code.
displayText = capitalize(choice.label) + " (" + choice.code + ")";
}
var option = $(mw.html.element("option", {
value: choice.code }, displayText));
if (disabledValues[choice.code]) option.prop("disabled", true);
inputs.append(option);
});
inputs.val(function (i) {
return vals[i];
});
}
// Keys to disable for a key menu: already-taken or explicitly disabled.
function getDisabledKeys(step) {
var occupiedKeys = {};
$("#wiktku-start-" + step.id + " .wiktku-start-step-keyfield").each(function () {
occupiedKeys[$(this).val()] = true;
});
if (step.disabledKeys) $.extend(occupiedKeys, step.disabledKeys);
return occupiedKeys;
}
function buildKeyInput(step) {
if (!step.keys) return undefined;
var input = $(mw.html.element("select", {
"class": "wiktku-start-step-keyfield wiktku-start-narrow" }));
input.attr("data-placeholder", "Hilbijêre " + step.keyName);
populateMenus(input, step.keys, getDisabledKeys(step));
// Keep the key menus mutually exclusive: whatever one row selects is
// disabled in every other row. Recomputed from the DOM on each change.
input.on("change", function () {
var all = $("#wiktku-start-" + step.id + " .wiktku-start-step-keyfield");
var taken = {};
all.each(function () {
var v = $(this).val();
if (v) taken[v] = true;
});
all.not(this).each(function () {
var self = $(this), own = self.val();
self.find("option").each(function () {
var code = $(this).val();
if (code) $(this).prop("disabled", !!taken[code] && code !== own);
});
self.trigger("wiktku:refresh");
});
});
// Return the wrapper; the select lives inside it and still fires change.
return wrapNativeSelect(input);
}
// Adds another text field to the list if the last one now has text.
function refreshForTextField(currentInput, step) {
currentInput = $(currentInput);
var value = currentInput.val();
var item = currentInput.parent();
if (value && !item.next("li").length) {
var nextInput = $("<textarea></textarea>")
.attr("name", "wiktku-field-" + $.now() + "-" + Math.random().toString(36).substr(2, 9))
.attr("class", currentInput.attr("class"))
.attr("rows", currentInput.attr("rows") || 1);
if (step.placeholder) {
nextInput.attr("placeholder", typeof step.placeholder === "function" ? step.placeholder() : step.placeholder);
}
nextInput.on("input", function (evt) {
refreshForTextField(evt.target, step);
});
var nextKeyInput = buildKeyInput(step);
var nextItem = step.modifiers
? makeModifierLi(nextInput).prepend(nextKeyInput || "")
: $("<li></li>").append(nextKeyInput).append(nextInput);
item.parent().append(nextItem);
if (nextKeyInput) initSelects(nextItem);
}
var canContinue = !continueBtn.isDisabled();
if ((value && !canContinue) || (!value && canContinue)) {
refresh(step);
}
}
function prepareInput(input, step) {
if (!input) return;
if (step.required) input.prop('required', true);
input.change(step, refresh);
}
// Shows/hides steps based on whether their prerequisites are met, and
// updates placeholders where applicable.
function refresh(evt) {
var values = getValues();
var changedStep = evt && evt.data;
var canContinue = true;
// Re-filter template options in every sense block whenever lang changes.
$("#wiktku-start-dfn .wiktku-dfn-tpl-select").each(function () {
var fn = $(this).data("updateOptions");
if (typeof fn === "function") fn();
});
// Re-filter pronunciation and etymology template dropdowns when language changes.
steps.pron.refreshTplSelect();
steps.etym.refreshTplSelect();
steps.cavkani.refreshTplSelect();
// Re-render any step's question label that depends on current values
// (e.g. dfn's Werger-section reminder, which only applies to ku).
$.each(steps, function (stepId, step) {
if (typeof step.question_fmt === "function") {
$("#wiktku-start-" + stepId + " .wiktku-start-step-question")
.text(step.question_fmt(values));
}
});
// Sync every sense block's mane-box mode (plain mane vs tercime+îzah)
// to the current language, in case lang changes after blocks exist.
$("#wiktku-start-dfn li.wiktku-dfn-sense").each(function () {
var updateMane = $(this).data("updateManeMode");
if (updateMane) updateMane();
});
// Sync tr/t sub-fields in every nimûne item to the current language.
// tr shown when language needs transliteration; t shown when lang !== "ku".
(function () {
var lang = values.lang || "";
var showTr = needsTransliteration(lang);
var showT = lang && lang !== "ku";
$("#wiktku-start-dfn .wiktku-dfn-nimune-list li.wiktku-dfn-nimune-li").each(function () {
var li = $(this);
// Ensure the sub-wrapper exists when we need it.
var subWrap = li.find(".wiktku-dfn-nimune-sub");
// tr field
var trTa = li.find(".wiktku-dfn-nimune-tr");
if (showTr && !trTa.length) {
if (!subWrap.length) {
subWrap = $("<div></div>").addClass("wiktku-dfn-nimune-sub");
li.append(subWrap);
}
trTa = $("<textarea></textarea>")
.attr("name", "wiktku-dfn-nimune-tr-" + $.now() + "-" + Math.random().toString(36).substr(2, 9))
.attr("rows", 5)
.attr("class", "wiktku-dfn-subfield wiktku-dfn-nimune-tr")
.attr("placeholder", "Transliterasyon…");
subWrap.prepend(trTa);
} else if (!showTr && trTa.length) {
trTa.remove();
}
// t field
var tTa = li.find(".wiktku-dfn-nimune-t");
if (showT && !tTa.length) {
if (!subWrap.length) {
subWrap = $("<div></div>").addClass("wiktku-dfn-nimune-sub");
li.append(subWrap);
}
tTa = $("<textarea></textarea>")
.attr("name", "wiktku-dfn-nimune-t-" + $.now() + "-" + Math.random().toString(36).substr(2, 9))
.attr("rows", 5)
.attr("class", "wiktku-dfn-subfield wiktku-dfn-nimune-t")
.attr("placeholder", "Tercimeya nimûneyê bi kurmancî…");
subWrap.append(tTa);
} else if (!showT && tTa.length) {
tTa.remove();
}
// Remove the wrapper if it ended up empty.
subWrap = li.find(".wiktku-dfn-nimune-sub");
if (subWrap.length && !subWrap.children().length) subWrap.remove();
});
}());
// Re-sync the "<label> bi <ziman>…" placeholder on every always-visible
// sub-field list (etîket, kategorî, hevmane, …), since the language may
// not have been chosen yet when these lists were first built, or may
// have changed since.
$("#wiktku-start-dfn .wiktku-dfn-sublist").each(function () {
var upd = $(this).data("updatePlaceholders");
if (typeof upd === "function") upd();
});
// Same idea for word-list steps (jê, têkildar, binêre herwiha, …)
// whose placeholder is a function of the current language.
$.each(steps, function (stepId, step) {
if (typeof step.placeholder === "function") {
$("#wiktku-start-" + stepId + " textarea.wiktku-start-step-field")
.attr("placeholder", step.placeholder());
}
});
// Sync tr/t sub-fields in every jêder citation to the current language.
// tr shown when language needs transliteration; t shown when lang !== "ku".
(function () {
var lang = values.lang || "";
var showTr = needsTransliteration(lang);
var showT = lang && lang !== "ku";
$("#wiktku-start-dfn .wiktku-dfn-jeder-list li.wiktku-dfn-jeder-li").each(function () {
var li = $(this);
// Ensure the sub-wrapper exists when we need it. It must sit right
// after the quote textarea and before the source selector.
var subWrap = li.find(".wiktku-dfn-quote-sub");
// tr field
var trTa = li.find(".wiktku-dfn-nimune-quote-tr");
if (showTr && !trTa.length) {
if (!subWrap.length) {
subWrap = $("<div></div>").addClass("wiktku-dfn-quote-sub");
// Insert after the quote textarea's resize-wrap (if the manual
// resize handle has already been attached to it), not after the
// bare textarea -- otherwise this lands *inside* that wrap,
// between the textarea and its own grip, breaking jêgirtin's
// handle and nesting the tr/t boxes inside it.
var quoteTa = li.find(".wiktku-dfn-nimune-quote");
var quoteResizeWrap = quoteTa.closest(".wiktku-resize-wrap");
(quoteResizeWrap.length ? quoteResizeWrap : quoteTa).after(subWrap);
}
trTa = $("<textarea></textarea>")
.attr("name", "wiktku-dfn-nimune-quote-tr-" + $.now() + "-" + Math.random().toString(36).substr(2, 9))
.attr("rows", 2)
.attr("class", "wiktku-dfn-subfield wiktku-dfn-nimune-quote-tr")
.attr("placeholder", "Transliterasyona jêgirtinê…");
subWrap.prepend(trTa);
} else if (!showTr && trTa.length) {
trTa.remove();
}
// t field
var tTa = li.find(".wiktku-dfn-nimune-quote-t");
if (showT && !tTa.length) {
if (!subWrap.length) {
subWrap = $("<div></div>").addClass("wiktku-dfn-quote-sub");
// See the tr-field branch above for why this targets the
// resize-wrap instead of the bare textarea.
var quoteTa2 = li.find(".wiktku-dfn-nimune-quote");
var quoteResizeWrap2 = quoteTa2.closest(".wiktku-resize-wrap");
(quoteResizeWrap2.length ? quoteResizeWrap2 : quoteTa2).after(subWrap);
}
tTa = $("<textarea></textarea>")
.attr("name", "wiktku-dfn-nimune-quote-t-" + $.now() + "-" + Math.random().toString(36).substr(2, 9))
.attr("rows", 2)
.attr("class", "wiktku-dfn-subfield wiktku-dfn-nimune-quote-t")
.attr("placeholder", "Tercimeya jêgirtinê bi kurmancî…");
subWrap.append(tTa);
} else if (!showT && tTa.length) {
tTa.remove();
}
// Remove the wrapper if it ended up empty.
subWrap = li.find(".wiktku-dfn-quote-sub");
if (subWrap.length && !subWrap.children().length) subWrap.remove();
});
}());
$.each(steps, function (stepId, step) {
var groupIdx = stepIdToGroup[stepId];
var hiddenByTab = (groupIdx !== undefined && groupIdx !== activeGroup) ||
// Beşên din picker (point 3): stays hidden even while its tab
// is active until explicitly opened from the dropdown.
(BESENDIN_SET[stepId] && !openedOtherSections[stepId]);
// Bilêvkirin is its own section now, so the two views are
// mutually exclusive: on it, only pron shows (plus Ziman, which
// is shared and stays above every section); off it, pron is
// hidden no matter which tab is active. pron is deliberately
// ungrouped — stepIdToGroup has no entry for it — so without
// this branch it would show on all four tabs at once.
if (stepId === "pron") {
hiddenByTab = hiddenByTab || !viewingPron;
} else if (viewingPron && stepId !== "lang") {
hiddenByTab = true;
}
if (hiddenByTab || (typeof(step.visible) === "function" && !step.visible(values))) {
$("#wiktku-start-" + stepId).hide();
}
else {
var stepDiv = $("#wiktku-start-" + stepId);
if (changedStep !== step && typeof(step.build) === "function") {
prepareInput(step.build(stepDiv, values), step);
}
// After build, sync the posparams helper widgets whenever pos or lang changes.
if (step.id === "posparams" && typeof step.syncHelpers === "function") {
step.syncHelpers(stepDiv);
}
var input = stepDiv.find(".wiktku-start-step-field");
if (typeof(step.example) === "function") {
// .find() above already reaches nested fields (e.g. the dfn
// step's mane textareas inside each sense block), so one
// assignment covers every step; dfn keeps its own fallback.
var exampleText = step.example(values) || (step.id === "dfn" ? "Mane…" : "");
input.attr("placeholder", exampleText);
}
stepDiv.slideDown();
}
if (step.required &&
(values[stepId] === "" ||
(step.multiple && values[stepId].join("") === ""))) {
canContinue = false;
}
});
// The four content tabs belong to a POS section — Bilêvkirin has no
// sub-tabs of its own, so the bar goes away while it's on screen.
$("#wiktku-group-tabs").toggle(!!values.pos && !viewingPron);
var besenDinActive = activeGroup === BESENDIN_GROUP_IDX && !viewingPron;
$("#wiktku-besendin-picker").toggle(besenDinActive);
// The option list is filtered by each step's visible(), which depends
// on lang/pos — so it has to be rebuilt when those change, not just
// when a section is opened. Safe to call from here: rendering the
// picker doesn't itself call refresh(), only picking an option does.
if (besenDinActive) renderBesenDinPicker();
updateGroupTabIndicators(values);
continueBtn.setDisabled(!canContinue);
// Soft gate (item 7): stays a real, clickable OOUI button — a hard
// setDisabled(true) here would swallow the click entirely, and then
// there'd be no way to tell the person *why* nothing happened. The
// CSS-only "looks disabled" class lets the click handler still run
// and show wiktkuNotify's explanation.
wiktkuContentGateOk = !canContinue || hasMinRequiredContent(values);
continueBtn.$element.toggleClass("wiktku-btn-soft-disabled", !wiktkuContentGateOk);
}
function destroy() {
if (autosaveDebounceTimer) clearTimeout(autosaveDebounceTimer);
if (autosaveInterval) clearInterval(autosaveInterval);
formDirty = false;
$(window).off("beforeunload.wiktkuUnsaved");
$("#wiktku-start-form, .noafterwizard").slideUp(function () {
$(this).remove();
});
$(".noarticletext .nowizard").slideDown();
// #editform was kept laid-out but off-screen (see build()) instead of
// display:none, precisely so the editor never had to size itself
// against a zero-width/height box. Just bring it back on-screen —
// no slideDown needed since it was never actually collapsed.
$("#editform").removeClass("wiktku-offscreen");
// Belt-and-braces: if WikiEditor/CodeMirror/mobile's auto-grow still
// cached a stale size from some earlier point, nudge them to
// recalculate now that the box is genuinely visible.
$(window).trigger("resize");
if (window.CodeMirror) {
var cm = $("#wpTextbox1").data("CodeMirror") || $("#wpTextbox1").data("cmInstance");
if (cm && typeof cm.refresh === "function") cm.refresh();
}
$("#ca-edit").removeClass("selected");
$("#ca-wiktku-nowizard").addClass("selected");
}
// Priority order for Kurdish dialects and navz.
// Codes listed here come before all other languages; unlisted codes
// are sorted alphabetically by their display name via localeCompare.
var LANG_PRIORITY = ["navz", "ku", "hac", "sdh", "lki", "ckb", "zza"];
// Inserts a new "== {{ziman|code}} ==" section at the correct sorted
// position: navz, then ku/hac/sdh/lki/ckb/zza, then alphabetical by name.
function insertNewLangSection(existing, wikitext) {
var newCodeMatch = wikitext.match(new RegExp("^" + langHeaderSource("[^}]+")));
var newCode = newCodeMatch ? newCodeMatch[1] : "";
var sections = [];
var preamble = "";
var anyHeaderSrc = langHeaderSource("[^}]+");
var firstMatch = new RegExp("^" + anyHeaderSrc, "m").exec(existing);
if (!firstMatch) {
// No existing lang sections — just write the new section.
// Add \n\n only when there is real non-whitespace content above.
var trimmed = existing.replace(/\s+$/, "");
return trimmed ? trimmed + "\n\n" + wikitext : wikitext;
}
// Everything before the first == {{ziman|...}} == is the preamble.
var firstSectionStart = firstMatch.index;
// Walk back to the start of that line.
var lineStart = existing.lastIndexOf("\n", firstSectionStart - 1);
var preambleEnd = lineStart !== -1 ? lineStart + 1 : 0;
preamble = existing.slice(0, preambleEnd);
// Parse each language section: header line + everything until the next header.
var body = existing.slice(preambleEnd);
// (?![\s\S]) matches only true end-of-string, since a bare "$" with
// /m would stop at the section's first line break instead.
var langSectionRe = new RegExp(
"^(" + anyHeaderSrc + "\\n?)([\\s\\S]*?)(?=\\n" + anyHeaderSrc + "|(?![\\s\\S]))",
"gm"
);
var m;
while ((m = langSectionRe.exec(body)) !== null) {
sections.push({
code: m[2],
content: m[0] // full text of this section including header
});
}
// Determine sort rank: priority list first (by index), then alphabetical.
function getLangName(code) {
var entry = langsByCode[code];
return entry ? entry.label : code;
}
function sortRank(code) {
var idx = LANG_PRIORITY.indexOf(code);
return idx !== -1 ? idx : LANG_PRIORITY.length;
}
function compareLangs(a, b) {
var ra = sortRank(a), rb = sortRank(b);
if (ra !== rb) return ra - rb;
// Both are outside priority list — sort by display name.
return getLangName(a).localeCompare(getLangName(b), userLang);
}
// Insert the new section into the sorted list.
var newSection = { code: newCode, content: wikitext };
var inserted = false;
for (var i = 0; i < sections.length; i++) {
if (compareLangs(newCode, sections[i].code) < 0) {
sections.splice(i, 0, newSection);
inserted = true;
break;
}
}
if (!inserted) sections.push(newSection);
// Re-join: preamble + sections, each separated by exactly \n\n.
// Trim trailing whitespace off each section's content first so we
// control the spacing precisely.
var joined = sections.map(function (s) {
return s.content.replace(/\s+$/, "");
}).join("\n\n");
// Only add a separator after the preamble when it has real content.
var preambleTrimmed = preamble.replace(/\s+$/, "");
var prefix = preambleTrimmed ? preambleTrimmed + "\n\n" : "";
return prefix + joined + "\n";
}
function build() {
$(".nowizard, .nowizard .noafterwizard").hide();
var callToAction = $("#wiktku-calltoaction");
var origCallToActionText = callToAction.text();
$(mw.util.addPortletLink("p-views", "#", "Edîtora çavkaniyê veke",
"ca-wiktku-nowizard", "Vê rûpelê bi edîtora çavkaniyê çêke",
undefined, "#ca-watch")).click(function (evt) {
evt.preventDefault();
callToAction.text(origCallToActionText);
destroy();
});
if (callToAction.length) {
callToAction.text(origCallToActionText +
" Forma li jêr ji bo çêkirina madeyeke nû bi kar bîne.");
}
var startForm = $("<form id='wiktku-start-form'></form>");
var clearPageCheck = null;
if (addLangMode) {
startForm.append($("<p class='wiktku-addlang-notice'></p>").html(
"Bi vê formê tu yê zimanekî nû li rûpelê îlawe bikî. Eger ev ziman jixwe hebe, beşa nû li dawiya vî zimanî dê were îlawekirin. " +
"Ji kerema xwe netîceya dawî kontrol bike, eger problemek derkeve, li <a href='" +
mw.util.getUrl('Mediawiki talk:Gadget-start.js') +
"'>nîqaşa vê amûrê</a> problemê ragihîne."
));
clearPageCheck = $("<input type='checkbox' id='wiktku-clear-page-check'>");
var clearPageLabel = $("<label for='wiktku-clear-page-check'></label>")
.text(" Muhtewaya rûpelê paqij bike (her tiştî jê bibe û rûpelê ji nû ve binivîse)");
startForm.append(
$("<p class='wiktku-addlang-notice'></p>")
.append(clearPageCheck)
.append(clearPageLabel)
);
// Re-evaluate step visibility (e.g. the pron step) whenever this
// is toggled, since it changes what counts as "existing content".
clearPageCheck.on("change", function () {
refresh();
});
}
var spinner;
// Tab bar for switching between POS sections.
var sectionTabsDiv = $("<div id='wiktku-section-tabs'></div>");
// Tab bar for switching between step-groups (topics) within a section.
// renderGroupTabs()/updateGroupTabIndicators() (which populate and
// maintain it) live outside build() — see near "var activeSection".
var groupTabsDiv = $("<div id='wiktku-group-tabs'></div>");
// Wikihez, 14 Tebax 2026 (item 3): "Beşên din" picker — sits right under
// the group tab bar, only shown while that tab is active (toggled in
// refresh(), see BESENDIN_GROUP_IDX); renderBesenDinPicker() fills it.
var besenDinPickerDiv = $("<div id='wiktku-besendin-picker' class='wiktku-besendin-picker'></div>");
/** Puts the form back in a usable state after a failed submit and
* says what happened. Without this the button stays disabled and
* the spinner spins forever on any exception — the person is left
* staring at a form that looks busy but is dead, with the reason
* visible only in the browser console. */
function submitFailed(err) {
spinner.hide();
continueBtn.setDisabled(false);
continueBtn.$element.removeClass("wiktku-btn-sending");
var detail = (err && (err.message || err.toString())) || "sedem nediyar";
mw.notify(
"Şandin bi ser neket: " + detail +
" — tiştê ku te nivîsî winda nebûye. Heke ev dubare bibe, " +
"bi 'Edîtora çavkaniyê veke' berdewam bike.",
{ type: "error", tag: "wiktku-submit", autoHide: false }
);
// Deliberately console.error as well: the notification is for the
// person, this is for whoever they report the bug to.
if (window.console && console.error) console.error("[wiktku] submit failed", err);
}
onSubmitError = submitFailed;
startForm.submit(function (evt) {
evt.preventDefault();
continueBtn.setDisabled(true);
continueBtn.$element.addClass("wiktku-btn-sending");
spinner.show();
try {
getWikitext(function (wikitext) {
try {
if (addLangMode && clearPageCheck && clearPageCheck.prop("checked")) {
// User asked to wipe the page — write fresh content.
$("#wpTextbox1").val(wikitext);
} else if (addLangMode) {
var textbox = $("#wpTextbox1");
var existing = textbox.val() || "";
// ── bnr-h merge ──────────────────────────────────────────
// If the user filled bnr-h inputs, either merge into the
// existing {{bnr-h|…}} call or prepend a new one.
var bnrhOut = steps.bnrh.output(getValues());
if (bnrhOut) {
var newPages = bnrhOut.replace(/^\{\{bnr-h\|/, "").replace(/\}\}\n?$/, "").split("|");
var bnrhRe = /\{\{bnr-h\|([^}]*)\}\}/i;
if (bnrhRe.test(existing)) {
existing = existing.replace(bnrhRe, function (_, inner) {
var existingPages = inner.split("|").map(function (p) { return p.trim(); });
$.each(newPages, function (_, p) {
p = p.trim();
if (p && existingPages.indexOf(p) === -1) existingPages.push(p);
});
return "{{bnr-h|" + existingPages.join("|") + "}}";
});
} else {
existing = bnrhOut + existing;
}
}
// If this language's section already exists (whitespace
// differences aside), merge into it; otherwise insert new.
var langHeaderMatch = wikitext.match(new RegExp("^(" + langHeaderSource("[^}]+") + "\\n)"));
if (langHeaderMatch) {
var langHeader = langHeaderMatch[1]; // e.g. "== {{ziman|ku}} ==\n"
var newCode = langHeaderMatch[2];
var existingHeader = findLangHeader(existing, newCode);
if (existingHeader) {
// Strip the header from the new output.
var newContent = wikitext.slice(langHeader.length);
// Find the insertion point: end of the existing lang section.
// A new L2 heading marks the start of the next language block.
var searchFrom = existingHeader.index + existingHeader.match.length;
// Find the next == … == heading after this section's start.
var nextL2 = existing.indexOf("\n== ", searchFrom);
var insertAt = nextL2 !== -1 ? nextL2 : existing.length;
// Ensure there's a blank line before the inserted block.
var before = existing.slice(0, insertAt);
var after = existing.slice(insertAt);
var sep = /\n\s*$/.test(before) ? "" : "\n";
textbox.val(before + sep + newContent + after);
} else {
// New language — insert at the correct sorted position.
textbox.val(insertNewLangSection(existing, wikitext));
}
} else {
// Unexpected format — insert at sorted position anyway.
textbox.val(insertNewLangSection(existing, wikitext));
}
} else {
$("#wpTextbox1").val(wikitext);
}
$("html, body").animate({scrollTop: 0});
callToAction.text("Hindik ma!");
destroy();
} catch (e) {
// Thrown while writing the result into #wpTextbox1.
submitFailed(e);
}
});
} catch (e) {
// Thrown synchronously inside getWikitext — this is where the
// splitTercimeIzah ReferenceError surfaced, and it produced no
// message at all before this guard existed.
submitFailed(e);
}
});
// Tracks whether groupTabsDiv has been inserted yet — see the
// step.id-driven check below, replaced because it silently broke
// when bnrh/resim/pron moved ahead of "dfn" in ordered_steps.
var groupTabsInserted = false;
$.each(ordered_steps, function (i, step) {
var stepDiv = $(mw.html.element("div", {
"class": "wiktku-start-step",
id: "wiktku-start-" + step.id }));
var name = capitalize(step.name);
var nameH3 = $("<h3></h3>").addClass("wiktku-start-step-name");
var nameLabel = $("<label></label>")
.attr("for", "wiktku-start-" + step.id + "-field")
.text(name);
nameH3.append(nameLabel);
stepDiv.append(nameH3);
if (step.question_fmt) {
// question_fmt can be a plain string, or a function of the
// current values (used by steps whose question text depends
// on e.g. the chosen language) — refresh() keeps it in sync
// afterwards via the .wiktku-start-step-question class.
var questionText = typeof step.question_fmt === "function"
? step.question_fmt(getValues())
: step.question_fmt;
stepDiv.append($(mw.html.element("label", {
"class": "wiktku-start-step-question",
"for": "wiktku-start-" + step.id + "-field" }, questionText)));
if (step.question_br) stepDiv.append($("<br>"));
}
var input;
if (step.choices) {
input = $(mw.html.element("select", {
"class": "wiktku-start-step-field",
id: "wiktku-start-" + step.id + "-field" }));
input.attr("data-placeholder",
capitalize(step.name) + " hilbijêre ");
populateMenus(input, step.choices);
if (step.multiple) input.attr("multiple", true);
// initSelects() runs over the whole form once it is in the DOM.
stepDiv.append(input);
} else if (typeof(step.build) === "function") {
input = step.build(stepDiv);
} else {
input = $("<textarea></textarea>")
.attr("class", "wiktku-start-step-field")
.attr("id", "wiktku-start-" + step.id + "-field")
.attr("rows", step.rows || 2);
if (step.narrow) input.addClass("wiktku-start-narrow");
if (step.placeholder) {
input.attr("placeholder", typeof step.placeholder === "function" ? step.placeholder() : step.placeholder);
}
if (step.multiple) {
input.on("input", function (evt) {
refreshForTextField(evt.target, step);
});
var keyInput = buildKeyInput(step);
var list = $(step.ordered ? "<ol></ol>" : "<ul></ul>")
.append(step.modifiers
? makeModifierLi(input)
: $("<li></li>").append(keyInput).append(input));
stepDiv.append(list);
}
else stepDiv.append(input);
}
prepareInput(input, step);
stepDiv.hide();
// Section tabs (switch between POS sections) sit above the
// per-section fields, starting at "pos".
if (step.id === "pos") {
startForm.append(sectionTabsDiv);
}
// Step-group tabs sit just before the first grouped step in
// ordered_steps — whichever one that is. This USED to be a
// hardcoded "dfn" check, back when dfn was the first grouped
// step. Once bnrh/resim/pron moved into STEP_GROUPS too (and
// earlier in ordered_steps than dfn, so they render near
// pos/posparams), that check stopped matching anything: dfn was
// no longer first, so groupTabsDiv never got appended at all,
// and every grouped step's div — bnrh/resim/pron included — sat
// there with no tab bar above it to reveal them. Deriving the
// insertion point from stepIdToGroup instead means this keeps
// working no matter how STEP_GROUPS/ordered_steps get reordered
// later.
if (!groupTabsInserted && stepIdToGroup[step.id] !== undefined) {
startForm.append(groupTabsDiv);
startForm.append(besenDinPickerDiv);
groupTabsInserted = true;
}
startForm.append(stepDiv);
});
// ── Section tab helpers ──────────────────────────────────────────────
// ── Add-section button — lives in the tab bar, disabled until pos chosen ──
var addSectionBtn = new OO.ui.ButtonWidget({
label: "+ Beş zêde bike",
disabled: true
});
/** Adds a new, empty POS section and switches to it. */
function addPosSection() {
saveCurrentSection();
viewingPron = false;
sections.push({});
activeSection = sections.length - 1;
$.each(PER_SECTION_STEP_IDS, function (_, id) {
if (id === "dfn") {
var stepDiv = $("#wiktku-start-dfn");
stepDiv.find("ol.wiktku-dfn-list").remove();
stepDiv.find(".wiktku-add-sense").remove();
steps.dfn.build(stepDiv);
return;
}
if (id === "etym") {
$("#wiktku-start-etym .wiktku-etym-wrap").remove();
steps.etym.build($("#wiktku-start-etym"));
return;
}
if (id === "cavkani") {
$("#wiktku-start-cavkani .wiktku-cavkani-wrap").remove();
steps.cavkani.build($("#wiktku-start-cavkani"));
return;
}
if (id === "posparams") {
var ppDiv = $("#wiktku-start-posparams");
ppDiv.find(".wiktku-posparams-wrap").remove();
return;
}
if (id === "resim") {
$("#wiktku-start-resim .wiktku-resim-wrap").remove();
return;
}
if (id === "trans") {
var transDiv = $("#wiktku-start-trans");
transDiv.find(".wiktku-trans-group").remove();
return;
}
if (id === "zarava") {
var zaravaDiv = $("#wiktku-start-zarava");
zaravaDiv.find(".wiktku-zarava-group").remove();
return;
}
if (id === "dunde") {
var dundeDiv = $("#wiktku-start-dunde");
dundeDiv.find("ul.wiktku-dunde-list").remove();
return;
}
var stepDiv = $("#wiktku-start-" + id);
stepDiv.find(".wiktku-start-step-field").val("");
stepDiv.find("select.wiktku-start-step-field").trigger("wiktku:refresh");
});
// Fresh section — no "Beşên din" sub-section has been opened yet.
openedOtherSections = {};
renderBesenDinPicker();
renderSectionTabs();
refresh();
}
// One action again: Bilêvkirin is always in the bar now, so the menu
// that used to offer both would have had a single entry.
addSectionBtn.on("click", addPosSection);
/** Re-render the tab bar to reflect current sections[] and activeSection. */
function renderSectionTabs() {
// Detach (not remove) the button first: .empty() strips bound
// event data from any children left inside it, which would
// silently kill addSectionBtn's click handler on every re-render.
addSectionBtn.$element.detach();
sectionTabsDiv.empty();
var lang = getValues().lang || "";
if (!lang) {
sectionTabsDiv.hide();
return;
}
sectionTabsDiv.show();
// Bilêvkirin leads the bar, ahead of the POS sections.
var pronTab = $("<span></span>")
.addClass("wiktku-section-tab wiktku-section-tab-pron")
.text("Bilêvkirin")
.toggleClass("wiktku-tab-active", viewingPron);
pronTab.on("click", function () {
if (viewingPron) return;
saveCurrentSection();
viewingPron = true;
refresh();
renderSectionTabs();
});
sectionTabsDiv.append(pronTab);
$.each(sections, function (i) {
var posVal = sections[i].pos || "";
var tabLabel = posVal ? capitalize(posVal) : ("Beş " + (i + 1));
var tab = $("<span></span>")
.addClass("wiktku-section-tab")
.text(tabLabel)
.toggleClass("wiktku-tab-active", i === activeSection && !viewingPron);
(function (idx) {
tab.on("click", function () {
if (idx === activeSection && !viewingPron) return;
// Leaving Bilêvkirin doesn't need a save — its field
// is shared and never part of a section snapshot.
if (!viewingPron) saveCurrentSection();
viewingPron = false;
activeSection = idx;
restoreSection(sections[activeSection]);
refresh();
renderSectionTabs();
});
}(i));
sectionTabsDiv.append(tab);
});
// Enable "Beş zêde bike" only when the active section has a pos chosen.
var activePos = sections[activeSection] && sections[activeSection].pos
? sections[activeSection].pos
: getValues().pos;
addSectionBtn.setDisabled(!activePos);
sectionTabsDiv.append(addSectionBtn.$element);
}
renderSectionTabs();
/**
* Re-populates a dynamically-growing "multiple" field list (bnrh, je,
* tekildar, …) from a saved array of strings. Sets each value via
* .val() + a triggered "input" event rather than touching the DOM
* structure directly, so the normal refreshForTextField() growth
* logic adds exactly as many rows as needed — the same thing that
* happens when a person types into the last (empty) row.
*/
function restoreMultiField(id, values) {
var container = $("#wiktku-start-" + id);
$.each(values || [], function (i, v) {
var field = container.find(".wiktku-start-step-field").eq(i);
if (!field.length || !v) return;
field.val(v).trigger("input");
});
}
/**
* Restores a full cached draft: shared lang/pron/bnrh fields, then
* every section (via the same restoreSection()/refresh()/
* renderSectionTabs() sequence already used when switching tabs).
* @param cached {{lang: string, pron: string, bnrh: Array, sections: Array, activeSection: number}}
*/
function restoreFromCache(cached) {
if (cached.lang) {
$("#wiktku-start-lang-field").val(cached.lang);
$("#wiktku-start-lang-field").trigger("wiktku:refresh");
}
// Rebuild dependent steps (pos, pron wrap, etc.) now that lang is set.
refresh();
if (cached.pron !== undefined) {
$("#wiktku-start-pron .wiktku-pron-text").val(cached.pron);
}
if (cached.bnrh) {
restoreMultiField("bnrh", cached.bnrh);
}
sections = (cached.sections && cached.sections.length) ? cached.sections : [{}];
activeSection = (typeof cached.activeSection === "number" &&
cached.activeSection >= 0 && cached.activeSection < sections.length)
? cached.activeSection : 0;
restoreSection(sections[activeSection]);
refresh();
renderSectionTabs();
updateLastSavedIndicator(cached.savedAt || null);
formDirty = false;
wiktkuNotify("Danûstandina berê ya qeydkirî ji cache hate barkirin.",
{ type: "info", tag: "wiktku-cache-restore" });
}
// Update the active tab's label whenever pos changes.
startForm.on("change", "#wiktku-start-pos-field", function () {
renderSectionTabs();
// A new cureyê rêzimanî means any previously chosen cinsiyet/
// cureyê lêkerê no longer applies — clear both selections (and
// the shared hidden cinsiyet field, since rebuildTa()/syncHelpers()
// fall back to it) before wiping the textarea, so nothing stale
// gets carried over into the rebuilt template.
var ppDiv = $("#wiktku-start-posparams");
ppDiv.find(".wiktku-posparams-cinsiyet-sel").val("");
ppDiv.find(".wiktku-posparams-jimar-sel").val("");
ppDiv.find(".wiktku-posparams-lektur-sel").prop("selectedIndex", 0);
ppDiv.find(".wiktku-posparams-lekturform-sel").prop("selectedIndex", 0);
$("#wiktku-start-cinsiyet-field").val("");
$("#wiktku-start-jimar-field").val("");
ppDiv.find(".wiktku-posparams-text").val("");
// refresh() runs steps.posparams.syncHelpers(), which toggles the
// param rows for the new pos and — since the textarea is now
// empty — calls rebuildTa() to repopulate it. Just clearing the
// textarea (as before) never triggered this, so the params
// section was left stale until some other field's change event
// happened to fire a refresh().
refresh();
});
// Show the tab bar as soon as a language is selected.
startForm.on("change", "#wiktku-start-lang-field", function () {
renderSectionTabs();
});
var footer = $("<div id='wiktku-start-footer'></div>");
spinner = $(mw.html.element("img", {
id: "wiktku-start-spinner",
src: "//upload.wikimedia.org/wikipedia/commons/d/de/Ajax-loader.gif",
alt: "Tê barkirin…",
title: "Tê barkirin…" }));
footer.append(spinner.hide());
continueBtn = new OO.ui.ButtonWidget({
id: "wiktku-unhide-editform",
label: "Bişîne",
flags: [ "primary", "progressive" ]
});
continueBtn.on("click", function () {
// Immediate feedback that the click registered
continueBtn.$element.addClass("wiktku-btn-flash");
setTimeout(function () {
continueBtn.$element.removeClass("wiktku-btn-flash");
}, 500);
// Item 7: Ziman/Cureyê rêzimanî already block submission via the
// real OOUI setDisabled (see canContinue in refresh()) — this is
// a second, softer check that still lets the click through so we
// can explain *why*, instead of the button just silently doing
// nothing.
if (!wiktkuContentGateOk) {
wiktkuNotify(
"Berî şandinê, tiştekî binivîse: Mane, Bi zaravayên din, an jî Werger — kêmasî yek ji van sê beşan divê tijî be.",
{ type: "warn", tag: "wiktku-mincontent" }
);
return;
}
wiktkuNotify("Tê şandin…", { type: "info", tag: "wiktku-submit" });
startForm.trigger("submit");
});
footer.append(continueBtn.$element);
// "Edîtora çavkaniyê veke" button — inline fallback for the portlet link
var sourceEditorBtn = new OO.ui.ButtonWidget({
label: "Edîtora çavkaniyê veke",
flags: [ "destructive" ],
});
sourceEditorBtn.on("click", function () {
destroy();
});
footer.append(sourceEditorBtn.$element);
// ── Cache save/clear buttons ─────────────────────────────────────────
// Manual, page-scoped save of the entire wizard (all sections, not
// just the active one) via [[MediaWiki:Gadget-StorageUtils.js]]'s
// ObjectStorage. Restoring happens silently on load at the end of
// build(), once the full language list is available.
//
// Saving also happens automatically (debounced while typing, plus a
// periodic fallback) — see "Autosave" below — since relying on the
// person to remember to click "Li cache qeyd bike" before an
// accidental tab close/reload defeats the point of having a cache
// at all.
function buildCacheSnapshot() {
return {
lang: getValues().lang || "",
pron: $("#wiktku-start-pron .wiktku-pron-text").val() || "",
// bnrh is shared (page-level), same as lang/pron above — not
// per-section, so it doesn't live in sections[].
bnrh: getValuesForStep("bnrh"),
sections: sections,
activeSection: activeSection,
savedAt: Date.now()
};
}
// ── Last-saved indicator ─────────────────────────────────────────────
var lastSavedEl = $("<span id='wiktku-last-saved'></span>");
function formatSavedTime(ts) {
try {
return new Date(ts).toLocaleTimeString(mw.config.get("wgUserLanguage"),
{ hour: "2-digit", minute: "2-digit" });
} catch (e) {
return new Date(ts).toLocaleTimeString();
}
}
function updateLastSavedIndicator(ts) {
lastSavedEl.text(ts ? ("Cache: qeydkirî di saet " + formatSavedTime(ts) + " de") : "");
}
// ── Dirty-state tracking + autosave ──────────────────────────────────
// formDirty mirrors "does the live form differ from what's in cache".
// Anything the person types/selects sets it; a successful save (auto
// or manual) clears it; destroy() (final submit, or switching to the
// source editor) also clears it since the wizard's job is over at
// that point either way. formDirty/autosaveDebounceTimer/autosaveInterval
// are declared in the outer scope (near activeGroup) — assigned here,
// not re-declared — so destroy() can reach them too.
var AUTOSAVE_DEBOUNCE_MS = 8000; // save shortly after typing pauses
var AUTOSAVE_INTERVAL_MS = 60000; // …and at least this often regardless
function performAutosave() {
if (!formDirty) return;
saveCurrentSection();
try {
formCache.Set(buildCacheSnapshot());
formDirty = false;
updateLastSavedIndicator(Date.now());
} catch (e) {
// Silent on autosave failure (storage blocked/full, etc.) — the
// manual button still surfaces a proper error if the person
// tries it directly, no need to interrupt typing with a toast.
}
}
function scheduleAutosave() {
formDirty = true;
if (autosaveDebounceTimer) clearTimeout(autosaveDebounceTimer);
autosaveDebounceTimer = setTimeout(performAutosave, AUTOSAVE_DEBOUNCE_MS);
}
startForm.on("input change", "input, textarea, select", scheduleAutosave);
autosaveInterval = setInterval(performAutosave, AUTOSAVE_INTERVAL_MS);
// Warn on accidental tab close/reload while there's anything unsaved.
$(window).on("beforeunload.wiktkuUnsaved", function (e) {
if (!formDirty) return undefined;
e.preventDefault();
e.returnValue = "";
return "";
});
var saveCacheBtn = new OO.ui.ButtonWidget({
label: "Li cache qeyd bike",
title: "Halê vê formê yê niha (ziman, bilêvkirin û hemû beş) li cache (localStorage) qeyd bike, da ku eger rûpel bêyî xwestin were girtin an ji nû ve were barkirin, tu karibî berdewam bikî."
});
saveCacheBtn.on("click", function () {
saveCurrentSection();
// ObjectStorage.Set() doesn't return a success/failure value, so
// the only way to detect a real failure (storage blocked, quota
// exceeded, JSON.stringify choking on something unexpected) is to
// catch it here rather than inspect a (nonexistent) return value.
try {
var snapshot = buildCacheSnapshot();
formCache.Set(snapshot);
formDirty = false;
updateLastSavedIndicator(snapshot.savedAt);
wiktkuNotify("Halê formê li cache hate qeydkirin.", { type: "success", tag: "wiktku-cache-save" });
} catch (e) {
mw.notify("Qeydkirina li cache bi ser neket.", { type: "error", tag: "wiktku-cache-save" });
}
});
var clearCacheBtn = new OO.ui.ButtonWidget({
label: "Cache paqij bike",
flags: [ "destructive" ],
title: "Datayên qeydkirî yên vê rûpelê ji cache jê bibe (forma ku niha xuya dike naguherîne)."
});
clearCacheBtn.on("click", function () {
formCache.Set({});
// The live form still has whatever the person typed — it's just no
// longer backed up anywhere, so treat this like a fresh unsaved edit.
formDirty = true;
updateLastSavedIndicator(null);
wiktkuNotify("Cache hate paqijkirin.", { type: "success", tag: "wiktku-cache-clear" });
});
// ── "⋯" overflow ─────────────────────────────────────────────
// v3: one primary action and one secondary stay on the bar;
// everything else moves in here. Four same-weight buttons — two of
// them red — was the loudest thing on the screen, and on a phone it
// wrapped to three rows of a sticky footer.
var moreBtn = $("<button type='button' class='wiktku-more-btn' title='Vebijarkên din'>⋯</button>");
var moreMenu = $("<div class='wiktku-more-menu'></div>").hide();
/** Moves an existing OOUI button into the overflow menu, keeping its
* handlers — the widgets already carry the behaviour, so this is
* purely about where they are shown. */
function intoMenu(btn, extraClass) {
var row = $("<div class='wiktku-more-item'></div>");
if (extraClass) row.addClass(extraClass);
btn.$element.on("click", function () { moreMenu.hide(); });
row.append(btn.$element);
moreMenu.append(row);
}
intoMenu(saveCacheBtn);
intoMenu(clearCacheBtn, "wiktku-more-item-danger");
moreMenu.append($("<div class='wiktku-more-sep'></div>"));
moreMenu.append($("<div class='wiktku-more-item wiktku-more-note'></div>").append(lastSavedEl));
moreBtn.on("click", function (e) {
e.preventDefault();
e.stopPropagation();
var open = moreMenu.is(":visible");
moreMenu.toggle(!open);
if (!open) {
setTimeout(function () {
$(document).one("click.wiktkuMore", function () { moreMenu.hide(); });
}, 0);
}
});
var moreWrap = $("<span class='wiktku-more-wrap'></span>").append(moreBtn).append(moreMenu);
footer.append(moreWrap);
// Icon-only settings button — opens the Tercîh dialog. Plain OOUI
// icon names depend on which icon-pack module happens to be loaded,
// so this uses the actual Codex "settings" (color-subtle) SVG from
// Commons directly, the same way the spinner above hotlinks its gif.
var prefsBtn = $("<button></button>", {
type: "button",
"class": "wiktku-prefs-btn",
title: "Tercîh — sazkariyên vê amûrê biguherîne"
});
prefsBtn.on("click", function (e) {
e.preventDefault();
wiktkuOpenPrefsDialog();
});
// The gear is icon-only on the bar; inside a text menu it needs a
// label like everything else around it.
prefsBtn.on("click", function () { moreMenu.hide(); });
moreMenu.prepend($("<div class='wiktku-more-sep'></div>"));
moreMenu.prepend($("<div class='wiktku-more-item wiktku-more-item-prefs'></div>")
.append(prefsBtn)
.append($("<span class='wiktku-more-item-label'></span>").text("Tercîh")));
startForm.append(footer);
// NOTE: deliberately NOT .hide() (display:none). WikiEditor/CodeMirror/
// the mobile editor's auto-grow logic measure #wpTextbox1's real
// dimensions during their own init, which happens while the wizard is
// up. A display:none ancestor reports 0 for offsetWidth/offsetHeight/
// scrollHeight, so those scripts bake in a near-zero height that never
// gets recalculated later — slideDown() in destroy() only animates the
// outer box, it doesn't re-trigger their sizing. Pushing #editform
// off-screen instead keeps it laid out (real width/height available to
// measure) without being visible, so the editbox opens at full size.
$("#editform").addClass("wiktku-offscreen").before(startForm);
// renderGroupTabs() looks up #wiktku-group-tabs via a live DOM
// selector, so it must run after startForm is actually in the
// document — calling it back in the build loop (while startForm was
// still detached) silently no-op'd and left the tab bar empty.
renderGroupTabs();
renderBesenDinPicker();
// One pass over the whole form: every select that hasn't already been
// initialised, and isn't opted out with .wiktku-plain-select, gets
// the searchable picker.
initSelects(startForm);
refresh();
// Give every draggable textarea a custom resize grip (works
// consistently on Safari/iOS, unlike the native corner grip — see
// the "Manual drag-to-resize handle" comment in styles.css), and
// keep applying it to textareas added later on (new sense blocks,
// quote-source fields, nimûne rows, …).
wiktkuInitManualResize(startForm);
new MutationObserver(function (mutations) {
mutations.forEach(function (mutation) {
$(mutation.addedNodes).each(function () {
if (this.nodeType !== 1) return;
wiktkuInitManualResize(this);
});
});
}).observe(startForm[0], { childList: true, subtree: true });
// Now that the full language list is loaded, silently restore any
// draft the editor previously saved for this page.
var cachedDraft = formCache.Get();
if (cachedDraft && cachedDraft.sections && cachedDraft.sections.length) {
restoreFromCache(cachedDraft);
}
}
mw.loader.using(["oojs-ui-core"], function () {
function wiktkuProceedWithData(wiktkuData) {
var d = wiktkuData || {};
// Populate metadata.
if (d.metadata) $.extend(metadata, d.metadata);
// Populate gender labels.
if (d.genderLabels) $.extend(GENDER_BASE_LABELS, d.genderLabels);
// Item 1: Jimar (number) code definitions — same shape as the wiki's
// own Lua number-type table (code -> {cat, display[, req]}).
if (d.numberLabels) $.extend(NUMBER_LABELS, d.numberLabels);
// Populate lang choices (pinned list).
if (d.langChoices) steps.lang.choices = choicesFromObject(d.langChoices, true);
// Populate langsByCode and merge full language list from d.ziman.
// d.ziman is a {code: name} object with all known languages.
$.each(steps.lang.choices, function (i, choice) {
if (choice.sortKey === undefined) choice.sortKey = choice.label;
langsByCode[choice.code] = choice;
});
if (d.ziman) {
var pinnedCodes = {};
$.each(steps.lang.choices, function (i, c) { pinnedCodes[c.code] = true; });
var extraChoices = [];
$.each(d.ziman, function (code, name) {
if (/-pro$/i.test(code)) return;
if (/ziman[eê]\s+destan/i.test(name)) return;
if (pinnedCodes[code]) return;
var choice = { code: code, label: name, sortKey: name };
extraChoices.push(choice);
langsByCode[code] = choice;
});
extraChoices.sort(function (a, b) {
return a.sortKey.localeCompare(b.sortKey, userLang);
});
steps.lang.choices = steps.lang.choices.concat(extraChoices);
}
// Keep the full merged list around for trans/dunde/zarava — those
// should still be able to reference any language even when the
// Tercîh panel restricts the main "ziman" step below — then, if
// the user set a restriction there, narrow steps.lang.choices
// itself to just those codes.
var wiktkuFullLangChoices = steps.lang.choices;
if (wiktkuPrefs.langCodes && wiktkuPrefs.langCodes.length) {
var wiktkuAllowedLangSet = {};
$.each(wiktkuPrefs.langCodes, function (i, code) { wiktkuAllowedLangSet[code] = true; });
var wiktkuRestrictedChoices = $.grep(wiktkuFullLangChoices, function (c) {
return !!wiktkuAllowedLangSet[c.code];
});
// Fall back to the full list instead of showing an empty
// dropdown if none of the saved codes matched anything
// (typo'd code, data.json changed since, …).
steps.lang.choices = wiktkuRestrictedChoices.length ? wiktkuRestrictedChoices : wiktkuFullLangChoices;
}
// Populate POS choices — also a plain {code: label} object in data.json.
if (d.posChoices) steps.pos.choices = choicesFromObject(d.posChoices, false);
// Populate template definitions for the dfn sense-block builder.
if (d.tplDefs) steps.dfn.tplDefs = d.tplDefs;
// Populate pos placeholder examples.
if (d.posExamples) steps.dfn.posExamples = d.posExamples;
// Populate citation template definitions for the quote widget.
if (d.jederDefs) steps.dfn.jederDefs = d.jederDefs;
// Populate pronunciation and etymology template insert lists.
if (d.pronTpls) {
steps.pron.pronTpls = d.pronTpls;
steps.pron.refreshTplSelect();
}
if (d.etymTpls) {
steps.etym.etymTpls = d.etymTpls;
steps.etym.refreshTplSelect();
}
// Sync trans/dunde/zarava keys with the full language list
// (not the possibly Tercîh-restricted steps.lang.choices).
steps.trans.keys = wiktkuFullLangChoices;
steps.dunde.keys = wiktkuFullLangChoices;
steps.zarava.keys = getZaravaKeys(wiktkuFullLangChoices);
build();
}
// data.json ships inside this package module, so it is already parsed
// and in memory — no action=raw round trip, and no Testing switch to
// forget to flip back before deploying.
wiktkuProceedWithData(require("./start/data.json"));
});
});
//</nowiki>
3giyqrrjek6sbpxijzrpyn29cs61as1
Bikarhêner:Wikihez/Gadget-test/loader.js
2
1358398
6333695
6327655
2026-08-14T19:03:07Z
Wikihez
7344
6333695
javascript
text/javascript
// Loads start.js/data.json/styles.css from this same userspace folder as a
// REAL ResourceLoader package module (via mw.loader.implement), so
// require("./start/data.json") inside start.js resolves exactly like it
// would as a genuine MediaWiki:Gadget-*.js package gadget — no interface-
// admin rights needed for the actual test files, since they all live under
// your own user subpages.
//
// This file itself is meant to be the entire contents of the tiny, generic
// MediaWiki:Gadget-test.js wrapper (registered once by an interface admin
// and toggled from then on via Special:Preferences → Gadgets — no further
// interface-admin edits needed as long as you're only iterating on the
// Bikarhêner:Wikihez/Gadget-test* pages below).
(function () {
"use strict";
// Matches the pages you actually created:
// Bikarhêner:Wikihez/Gadget-test.js
// Bikarhêner:Wikihez/Gadget-test.css
// Bikarhêner:Wikihez/Gadget-test/data.json
// Subpage segments are case-sensitive — MediaWiki only auto-capitalizes
// the first character of the whole title, not "/Gadget-test" — so this
// has to match the page names exactly, including case.
var BASE = "Bikarhêner:Wikihez/Gadget-test";
var MODULE = "ext.wiktkuTest";
// dataType: "text" is required here. Without it, $.get infers the
// dataType from the response's Content-Type header — and action=raw
// serves JS pages as text/javascript and CSS pages as text/css (that's
// how <script src="…&action=raw"> works at all). jQuery maps that to
// dataType "script" and eval()s the response immediately as a bare
// global script, before you ever get to hand it to mw.loader.implement —
// which breaks two ways: start.js runs a second, uncontrolled time
// outside the package sandbox, and it throws as soon as it reaches
// require("./start/data.json"), since there's no such global function.
// Forcing "text" turns all three fetches into plain string reads.
function raw(title) {
return $.get({
url: mw.util.getUrl(title, { action: "raw" }),
dataType: "text"
});
}
$.when(
raw(BASE + ".js"),
raw(BASE + "/data.json"),
raw(BASE + ".css")
).done(function (startRes, dataRes, cssRes) {
var startSrc = startRes[0];
var cssText = cssRes[0];
var dataJson;
try {
dataJson = JSON.parse(dataRes[0]);
} catch (e) {
mw.notify("data.json nederbasdar e (JSON parse ket): " + e.message, { type: "error" });
return;
}
// packageFiles.files: JS files get a function(require, module, exports),
// JSON files get the already-parsed value directly. The key
// "start/data.json" must match what start.js's own
// require("./start/data.json") resolves to (relative to "start.js"
// living at the package root) — keep this in sync if you ever rename
// either file.
mw.loader.implement(
MODULE,
{
main: "start.js",
files: {
"start.js": new Function("require", "module", "exports", startSrc),
"start/data.json": dataJson
}
},
{ css: [cssText] }
);
// oojs-ui-core: start.js itself does mw.loader.using(["oojs-ui-core"]),
// but declaring it here too means we surface a loud failure right away
// if it's missing instead of a silent no-op deep inside start.js.
// mediawiki.api: used via new mw.Api() elsewhere in start.js.
mw.loader.using(["oojs-ui-core", "mediawiki.api", MODULE]).then(
function () {
mw.notify(MODULE + " hate barkirin — require() dixebite.", { type: "success" });
},
function (err) {
mw.notify("Xeta barkirinê: " + err, { type: "error" });
}
);
}).fail(function () {
mw.notify(
"Nikarî " + BASE + "{.js,/data.json,.css} bixwîne. " +
"Kontrol bike ku her sê rûpel hene û navên wan rast in.",
{ type: "error" }
);
});
})();
dlqrz3gsgxd1urxytapvs53nk90ca39
6333725
6333695
2026-08-14T20:12:31Z
Wikihez
7344
6333725
javascript
text/javascript
// Loads start.js/data.json/styles.css from this same userspace folder as a
// REAL ResourceLoader package module (via mw.loader.implement), so
// require("./start/data.json") inside start.js resolves exactly like it
// would as a genuine MediaWiki:Gadget-*.js package gadget — no interface-
// admin rights needed for the actual test files, since they all live under
// your own user subpages.
//
// This file itself is meant to be the entire contents of the tiny, generic
// MediaWiki:Gadget-test.js wrapper (registered once by an interface admin
// and toggled from then on via Special:Preferences → Gadgets — no further
// interface-admin edits needed as long as you're only iterating on the
// Bikarhêner:Wikihez/Gadget-test* pages below).
(function () {
"use strict";
// Matches the pages you actually created:
// Bikarhêner:Wikihez/Gadget-test.js
// Bikarhêner:Wikihez/Gadget-test.css
// Bikarhêner:Wikihez/Gadget-test/data.json
// Subpage segments are case-sensitive — MediaWiki only auto-capitalizes
// the first character of the whole title, not "/Gadget-test" — so this
// has to match the page names exactly, including case.
var BASE = "Bikarhêner:Wikihez/Gadget-test";
var MODULE = "ext.wiktkuTest";
// dataType: "text" is required here. Without it, $.get infers the
// dataType from the response's Content-Type header — and action=raw
// serves JS pages as text/javascript and CSS pages as text/css (that's
// how <script src="…&action=raw"> works at all). jQuery maps that to
// dataType "script" and eval()s the response immediately as a bare
// global script, before you ever get to hand it to mw.loader.implement —
// which breaks two ways: start.js runs a second, uncontrolled time
// outside the package sandbox, and it throws as soon as it reaches
// require("./start/data.json"), since there's no such global function.
// Forcing "text" turns all three fetches into plain string reads.
function raw(title) {
return $.get({
url: mw.util.getUrl(title, { action: "raw" }),
dataType: "text"
});
}
$.when(
raw(BASE + ".js"),
raw(BASE + "/data.json"),
raw(BASE + ".css")
).done(function (startRes, dataRes, cssRes) {
var startSrc = startRes[0];
var cssText = cssRes[0];
var dataJson;
try {
dataJson = JSON.parse(dataRes[0]);
} catch (e) {
mw.notify("data.json nederbasdar e (JSON parse ket): " + e.message, { type: "error" });
return;
}
// packageFiles.files: JS files get a function(require, module, exports),
// JSON files get the already-parsed value directly. The key
// "start/data.json" must match what start.js's own
// require("./start/data.json") resolves to (relative to "start.js"
// living at the package root) — keep this in sync if you ever rename
// either file.
mw.loader.implement(
MODULE,
{
main: "start.js",
files: {
"start.js": new Function("require", "module", "exports", startSrc),
"start/data.json": dataJson
}
},
{ css: [cssText] }
);
// oojs-ui-core: start.js itself does mw.loader.using(["oojs-ui-core"]),
// but declaring it here too means we surface a loud failure right away
// if it's missing instead of a silent no-op deep inside start.js.
// mediawiki.api: used via new mw.Api() elsewhere in start.js.
mw.loader.using(["oojs-ui-core", "mediawiki.api", MODULE]).then(
function () {
// mw.notify(MODULE + " hate barkirin — require() dixebite.", { type: "success" });
console.log(MODULE + " hate barkirin — require() dixebite.");
},
function (err) {
mw.notify("Xeta barkirinê: " + err, { type: "error" });
}
);
}).fail(function () {
mw.notify(
"Nikarî " + BASE + "{.js,/data.json,.css} bixwîne. " +
"Kontrol bike ku her sê rûpel hene û navên wan rast in.",
{ type: "error" }
);
});
})();
jw9ytpiy1xexmzk6epdmq3n54jdqowz
6333750
6333725
2026-08-14T22:53:50Z
Wikihez
7344
6333750
javascript
text/javascript
// Loads start.js/data.json/styles.css from this same userspace folder as a
// REAL ResourceLoader package module (via mw.loader.implement), so
// require("./start/data.json") inside start.js resolves exactly like it
// would as a genuine MediaWiki:Gadget-*.js package gadget — no interface-
// admin rights needed for the actual test files, since they all live under
// your own user subpages.
//
// This file itself is meant to be the entire contents of the tiny, generic
// MediaWiki:Gadget-test.js wrapper (registered once by an interface admin
// and toggled from then on via Special:Preferences → Gadgets — no further
// interface-admin edits needed as long as you're only iterating on the
// Bikarhêner:Wikihez/Gadget-test* pages below).
(function () {
"use strict";
// Matches the pages you actually created:
// Bikarhêner:Wikihez/Gadget-test.js
// Bikarhêner:Wikihez/Gadget-test/util.js
// Bikarhêner:Wikihez/Gadget-test.css
// Bikarhêner:Wikihez/Gadget-test/data.json
// Subpage segments are case-sensitive — MediaWiki only auto-capitalizes
// the first character of the whole title, not "/Gadget-test" — so this
// has to match the page names exactly, including case.
var BASE = "Bikarhêner:Wikihez/Gadget-test";
var MODULE = "ext.wiktkuTest";
// dataType: "text" is required here. Without it, $.get infers the
// dataType from the response's Content-Type header — and action=raw
// serves JS pages as text/javascript and CSS pages as text/css (that's
// how <script src="…&action=raw"> works at all). jQuery maps that to
// dataType "script" and eval()s the response immediately as a bare
// global script, before you ever get to hand it to mw.loader.implement —
// which breaks two ways: start.js runs a second, uncontrolled time
// outside the package sandbox, and it throws as soon as it reaches
// require("./start/data.json"), since there's no such global function.
// Forcing "text" turns all three fetches into plain string reads.
function raw(title) {
return $.get({
url: mw.util.getUrl(title, { action: "raw" }),
dataType: "text"
});
}
$.when(
raw(BASE + ".js"),
raw(BASE + "/data.json"),
raw(BASE + ".css"),
raw(BASE + "/util.js")
).done(function (startRes, dataRes, cssRes, utilRes) {
var startSrc = startRes[0];
var cssText = cssRes[0];
var utilSrc = utilRes[0];
var dataJson;
try {
dataJson = JSON.parse(dataRes[0]);
} catch (e) {
mw.notify("data.json nederbasdar e (JSON parse ket): " + e.message, { type: "error" });
return;
}
// packageFiles.files: JS files get a function(require, module, exports),
// JSON files get the already-parsed value directly. The keys
// "start/data.json" and "start/util.js" must match what start.js's own
// require("./start/…") calls resolve to (relative to "start.js" living
// at the package root) — keep these in sync if you ever rename a file.
mw.loader.implement(
MODULE,
{
main: "start.js",
files: {
"start.js": new Function("require", "module", "exports", startSrc),
"start/util.js": new Function("require", "module", "exports", utilSrc),
"start/data.json": dataJson
}
},
{ css: [cssText] }
);
// oojs-ui-core: start.js itself does mw.loader.using(["oojs-ui-core"]),
// but declaring it here too means we surface a loud failure right away
// if it's missing instead of a silent no-op deep inside start.js.
// mediawiki.api: used via new mw.Api() elsewhere in start.js.
mw.loader.using(["oojs-ui-core", "mediawiki.api", MODULE]).then(
function () {
console.log(MODULE + " hate barkirin — require() dixebite.");
},
function (err) {
mw.notify("Xeta barkirinê: " + err, { type: "error" });
}
);
}).fail(function () {
mw.notify(
"Nikarî " + BASE + "{.js,/util.js,/data.json,.css} bixwîne. " +
"Kontrol bike ku her sê rûpel hene û navên wan rast in.",
{ type: "error" }
);
});
})();
iahp4uph3l424duub5pcn5y5b0urmgj
Modul:quote doc
828
1358569
6333684
6331139
2026-08-14T18:21:40Z
Wikihez
7344
6333684
Scribunto
text/plain
--[=[
Ev modul fonksiyonên ji bo çêkirina belgekirina şablonên {{quote-*}} dihewîne. Modul bixwe pêkanînê dihewîne, ji bo
ku ji koda Lua ya din were gazîkirin. Li [[Module:quote doc/templates]] binêre ji bo fonksiyona ku rasterast ji
şablonan tê gazîkirin.
Nivîskar: Benwing2
]=]
local export = {}
local m_table = require("Module:table")
local rfind = mw.ustring.find
local rsplit = mw.text.split
local rsubn = mw.ustring.gsub
local u = mw.ustring.char
local unpack = unpack or table.unpack -- Lua 5.2 compatibility
local TEMP_DOUBLE_LBRACE = u(0xFFF0)
local TEMP_DOUBLE_RBRACE = u(0xFFF1)
-- version of rsubn() that discards all but the first return value
local function rsub(term, foo, bar)
local retval = rsubn(term, foo, bar)
return retval
end
local function preprocess(desc)
if desc:find("{") then
desc = mw.getCurrentFrame():preprocess(desc)
end
return desc
end
local ku_vowels = {a = true, e = true, ["ê"] = true, i = true, ["î"] = true, o = true, u = true, ["û"] = true}
-- Add the Kurdish oblique indefinite suffix (-ekê after a consonant, -yekê after a vowel, to break hiatus) to
-- `word`, since Kurdish marks indefiniteness with a suffix rather than a prefix word like English "a"/"an". The
-- oblique form is used (rather than bare -ek/-yek) because every <<item:a>> substitution in this module's text
-- follows the ezafe linker "ya", which puts the following noun in the oblique case.
local function ku_add_indefinite(word)
local last_char = mw.ustring.sub(word, -1)
if ku_vowels[last_char] then
return word .. "yekê"
else
return word .. "ekê"
end
end
local function generate_param_intro_text(ty)
return [=[
Beşên li jêr parametreyên heyî îzah dikin. Ji ber ku pir parametre hene, ew di nav koman de hatine teqsîmkirin.
Hin parametre mecbûrî ne ku bi şiklê '''(mecbûrî)''' (heke neyên dayîn, xetayek dide) hatine nîşankirin û yên bi nîşana
'''(nîv-mecbûrî)''' tê maneyê ku eger neyên dayîn, mesajeke kontrolkirinê dide. Parametreyên bi '''herfên stûr''' ji bo şablona
{{şx|]=] .. ty .. [=[}} xisûsî ne û bi şablonên din ên {{şx|jêder-*}} re nayên bikaranîn, an jî bikaranîneke wan a cuda heye.
Hemû kom ji xeynî ya ewil qismê jêderê kontrol dikin. Koma ewil rêzên jêgirtinê kontrol dike (rêzên ku nivîsa
jêgirtinê, tercime, latînîzekirin, standardîzekirin, hwd. nîşan didin).
Di hin parametreyên wekî sernav, nivîskar, weşanxane, hwd. de dikare nivîsa biyanî hebe. Wextê nivîsên biyanî tê de
hebin divê ev parametre ''guherkerên pêşiyê (annotations)'' an jî ''guherkerên paşiyê (inline modifiers)'' bi kar
bînin. ''Guherkerên pêşiyê (annotations)'' wekî pêşgireke koda zimanî (wek {ar:} ji bo erebî, {zh:} ji bo çînî an
{ru:} ji bo rûsî) dikevin pêşiya nivîsa biyanî. ''Guherkerên paşiyê (inline modifiers)'' dikevin li paşiya nivîsa
biyanî. Nimûneyek ku her duyan dihewîne:
<code>ru:Баллада о королевском бутерброде<t:Şiîra Nanê Qiralî></code>
wek {{zim|ru|Баллада о королевском бутерброде}} [''Ballada o korolevskom buterbrode, Şiîra Nanê Qiralî''] xuya
dike. Koda zimanî dibe alîkar ku fonta munasib were bikaranîn dema nivîs tê nîşandan (her çend naskirina skrîpta
nivîsê bêyî van kodan jî çêdibe), û transliterasyona otomatîk çêdike heke mimkûn be. Guherkerên paşiyê tercime,
translîterasyona manuel û tiştên bi vî rengî diyar dikin.
Kodên taybet ên jêrîn li şûna kodên zimên jî tên naskirin:
* {w:``link``}: Lînk bi Wîkîpediyaya îngilîzî, wek nimûne {w:William Shakespeare}. Ev wek {``link``} xuya dike. Ev
wek nivîsandina {{şx|w|William Shakespeare}} e, ku ew jî dikare were bikaranîn.
* {w:``lang``:``link``}: Lînk bi Wîkîpediyayeke bi zimanekî din, wek nimûne {w:fr:Jeanne d'Arc}. Ev wek {``link``}
xuya dike. Ev wek nivîsandina {{şx|w|2=lang=fr|3=Jeanne d'Arc}} e, ku ew jî dikare were bikaranîn.
* {lw:``lang``:``link``}: Lînk bi Wîkîpediyayeke bi zimanekî din û {``link``} li gorî koda zimên a bi {``lang``}
hatiye dayîn were formatkirin, wek nimûne {lw:zh:毛泽东} (forma nivîskî ya çînî ya {{w|Mao Zedong}}). Ev pêdivî ye ku
{``lang``} kodeke zimên be ku li Wîkîpediyayê û Wîkîferhengê heman wateyê bide (ev ji bo piraniya kodên zimên ên
Wîkîpediyayê derbasdar e, lê ne ji bo hr ji bo Wîkîpediyaya xirwatî û sr ji bo Wîkîpediyaya sirbî, û ne jî ji bo hin
zimanên din ên kêmzanîn). Ev wek nivîsandina {zh:{{w|lang=zh|毛泽东}}} e. Ev dê naskirin û formatkirina
taybet a xeta nivîsê ya li gorî ziman bike û forma xuyayî bi çîna CSS a munasib a li gorî ziman nîşan bide. Heke
latînîzekirina otomatîk ji bo zimanê diyarkirî çalak be, ew latînîzekirin dê xuya bibe, ji bilî ku latînîzekirineke
din bi {<tr:...>} were dayîn an nîşandana latînîzekirinê bi {<tr:->} were vemirandin. Bala xwe bide ku bikaranîna
wek {lw:ru:Лев Толстой} (forma nivîskî ya rûsî ya {{w|Leo Tolstoy}}) hinekî dişibihe nivîsandina
{{şx|lw|ru|Лев Толстой}} (ji ber vê ye pêşgir dişibihe navê şablonê), lê ya duyem latînîzekirinan wek {{şx|l}}
nîşan dide (di kevanan de ne di parantezan de), û bikaranîna {{şx|lw}} destûrê nade guherkerên paşiyê, ji ber ku
ew bo HTML'ê tê formatkirin.
* {lw:``lang``:[[``link``|``display``]]}: Lînk bi {``link``} bi Wîkîpediyayeke bi zimanekî din, lê
wek {``display``} xuya bike, li gorî koda zimên a bi {``lang``} hatiye dayîn were formatkirin. Ev wek {lw:...} ya li
jor dixebite, lê destûrê dide ku lînk û xuyabûn cuda werin diyarkirin, wek nimûne
{lw:ru:[[Маркс, Карл|Карл Ге́нрих Маркс]]}, ku forma xuyayî forma nivîskî ya rûsî ya
{{w|Karl Marx|Karl Heinrich Marx}} e û forma lînkê jî ew e ku nav çawa di madeya Wîkîpediyaya rûsî de tê
bikaranîn (bi paşnav pêşî).
* {w:[[``link``|``display``]]} û {w:``lang``:[[``link``|``display``]]}: Lînk bi
Wîkîpediyaya îngilîzî an bi zimanekî din, lînk ji forma xuyayî cuda were diyarkirin. Ev kêmtir kêrhatî ne ji ya
{lw:...} çimkî tu dikarî lînka Wîkîpediyayê rasterast jî diyar bikî, wek nimûne bi
{{code||[[w:William Shakespeare|W(illiam) Shakespeare]]}} an {{code||[[w:fr:Jeanne d'Arc|Joan of Arc]]}} bi heman
hejmara herfan.
* {s:``link``}: Lînk bi rûpela Wîkîçavkaniya îngilîzî ya {``link``}, wek nimûne {s:The Rainbow Trail} (romanek ji
{{w|Zane Grey}}).
* {s:``lang``:``link``}: Lînk bi Wîkîçavkaniyeke bi zimanekî din. Ev bi mahiyet dişibihe {w:``lang``:``link``} ji
bo Wîkîpediyayê.
* {ls:``lang``:``link``}: Lînk bi Wîkîçavkaniyeke bi zimanekî din û {``link``} li gorî koda zimên a bi {``lang``}
hatiye dayîn were formatkirin. Ev bi mahiyet dişibihe {lw:``lang``:``link``} ji bo Wîkîpediyayê.
* {ls:``lang``:[[``link``|``display``]]}: Lînk bi {``link``} bi Wîkîçavkaniyeke bi zimanekî din, lê
wek {``display``} xuya bike, li gorî koda zimên a bi {``lang``} hatiye dayîn were formatkirin, wek nimûne
{ls:ko:[[조선_독립의_서#一._槪論|조선 독립의 서]]} (belgeyek li ser serxwebûna Kore di dema dagirkirina
Japonî de). Ev bi mahiyet dişibihe {lw:``lang``:[[``link``|``display``]]} ji bo Wîkîpediyayê.
* {s:[[``link``|``display``]]} û {s:``lang``:[[``link``|``display``]]}: Lînk bi
Wîkîçavkaniya îngilîzî an bi zimanekî din, lînk ji forma xuyayî cuda were diyarkirin. Ev kêmtir kêrhatî ne ji ya
{ls:...} çimkî tu dikarî lînka Wîkîçavkaniyê rasterast jî diyar bikî, wek nimûne bi
{{code||[[s:The Tempest (Shakespeare)|The Tempest]]}} an
{{code||[[s:fr:Fables de La Fontaine (édition originale)|Fables de La Fontaine]]}} bi heman hejmara herfan.
Herwiha, hin parametre dikarin çend ''hebûnên'' bi niqteya bi virgul (;) ji hev cuda hebin (nivîskar, weşanxane, hwd.). Ev bi
giştî ji bo hemû parametreyên kesan (nivîskar, terciman, edîtor, hwd.) derbasdar e, herwiha ji bo hin parametreyên din
jî, wek li jêr hatiye nîşandan. Di van parametreyan de, her hebûn dikare guherkerên pêşiyê û/an guherkerên
paşiyê hebe, wek li jor. Nimûneyek <code>zh:張福運<t:Chang Fu-yun>; zh:張景文<t:Chang Ching-wen></code> e, ku du
navên bi çînî diyar dike, her yek bi latînîzekirinekê. Bi giştî, van parametreyan bi niqteyên bi virgul neyên nîşandan, lê
bi gelemperî bi kome (,) û/an kelîmeya ''û'' — ev bi parametreya taybet û cihê wê yê di jêderê de girêdayî ye. Niqteya bi virgul
tenê ji bo cudakirina hebûnan di têketinê de tên bikaranîn; kome nayên bikaranîn ji ber ku nav dikarin kome tê de
hebin, wek {Sammy Davis, Jr.} an {Alfred, Lord Tennyson}. Niqteyên bi virgul di nava kevan an kevanên çargoşe de nayên
hesibandin wekî sînorker; ji ber vê yekê, nirxeke parametreyê wek {George Orwell [pseudonym; Eric Blair]} yek hebûnê
diyar dike, ne du. Bi heman rengî, hebûnên HTML'ê yên bi niqteya bi virgul a dawî wek {&oacute;} jî tên naskirin û ne wekî
sînorker.
Ji bo parametreyên ku kesan diyar dikin (wek {{para|nivîskar}}, {{para|terciman}}, {{para|edîtor}}), li dû niqteya bi virgul
{et al.} binivîse wek kesekî normal. Koda binesaziyê vê taybet dihesibîne, bi herfên xar nîşan dide û sînorkera ku
normal berî wê were xuya nake.
Wek îstisnayeke sînorkirina hebûnan bi niqteyên bi virgul, heke tu komê wek herfa yekem a parametreyeke pirhebûnî bicîh bikî,
ew kom tê paşguhkirin û mayîya nirxê li gorî koman tê dabeşkirin, ne li gorî niqteyên bi virgul. Wek nimûne,
{,Joe Bloggs, Mary Worth, et al.} wek {Joe Bloggs; Mary Worth; et al.} tê hesibandin. Bi giştî ev şêwe nayê
tewsiyekirin, lê dema meriv rêzeke dirêj a bi kome ji hev cuda ya nivîskaran ji cihekî din (wek Google Scholar)
kopî dike, dikare bibe alîkar.
Guherkerên paşiyê yên jêrîn tên naskirin:]=]
end
local function generate_inline_modifiers(ty)
return {
{"t", [=[Tercimeya parametreyê an hebûna behskirî. Di kevanên çargoşe de li dû nirxê tê nîşandan. Ji bo nivîskar
an hebûnên din ên ku behsa kesan dikin, tê tewsiyekirin ku parametreya <code><t:...></code> ji bo nivîsandina
forma "asayî" an ne-zanistî ya navî were bikaranîn, û bi îxtiyarî parametreya <code><tr:...></code> jî ji bo
latînîzekirina zanistî. Wek nimûne, navê rûsî {{qal|ru||Пётр Чайко́вский|tr=-}} dibe ku wek {{w|Pyotr Tchaikovsky}}
were tercimekirin lê wek ''Pjotr Čajkóvskij'' were latînîzekirin. Girêdanên Wîkîpediyayê li gorî hewceyê bi
{{şx|w}} an rasterast bi {{code||[[w:LINK|NAME]]}} zêde bike.]=]},
{"gloss", [=[Bernavê <code><t:...></code>. Bi giştî, <code><t:...></code> tê tercihkirin.]=]},
{"alt", [=[Forma xuyayî ya parametreyê an hebûna behskirî. Bi giştî ev ne lazim e, çimkî tu her tim dikarî
girêdaneke du-perçeyî wek {{code||[[Dennis Robertson (economist)|D.H. Robertson]]}} bikar bînî.]=]},
{"tr", [=[Latînîzekirina parametreyê an hebûna behskirî, heke ne bi herfên latînî be. {{para|t}} ya jorîn ji bo
kengî tercime, kengî latînîzekirin ji bo navên kesan were bikaranîn binêre. Heke pêşgireke koda zimên hatibe
dayîn û nivîs ne bi herfên latînî be, latînîzekirineke otomatîk dê were peydakirin heke ziman vê piştgirî bike û ev
guherker neyê dayîn. Di wê rewşê de, {<tr:-}> bikar bîne da ku latînîzekirina otomatîk neyê xuyakirin.]=]},
{"subst", [=[Şêwaz(ên) cîguherînê ku têne bikaranîn ji bo mîna kirina latînîzekirineke rast, li şûna diyarkirina
latînîzekirineke bi dest. Ev guherker bi awayekî wekhev bi parametreya {{para|subst}} dixebite, lê ji bo hebûna
behskirî ne ji bo nivîsa giştî ya jêgirtinê. Nimûneyên bikaranînê li nimûneyên {{şx|jêder-kitêb}} binêre.]=]},
{"ts", [=[Nivîsandina fonetîk a parametreyê an hebûna behskirî, heke ne bi herfên latînî be û di zimanekî de ku
latînîzekirin ji telafuza rastîn pir cuda ye (wek akadî an tîbetî). Vê tenê ji bo dayîna telafuza IPA'yê bikar
neyîne. Heke were dayîn, ev di navbera du xêzikan de tê nîşandan, wek
<code>[``latînîzekirin`` /``nivîsandina fonetîk``/, ``tercime``]</code>.]=]},
{"sc", [=[Koda xeta nivîsê ya nivîsa parametreyê an hebûna behskirî, heke ne bi xeta latînî be. Li
[[Wiktionary:Scripts]] binêre. Kêm caran lazim e ev were diyarkirin, çimkî koda xeta nivîsê bi xwe (bi giştî bi
rastî) ji nivîsê tê naskirin.]=]},
{"f", [=[Guhertoya "biyanî" ya parametreyê an hebûna behskirî, ango guhertoya bi xeteke nivîsê ya cuda ji ya
nirxê bixwe. Ev çend awayan hene:
# {<f:``biyanî``>}: Awayê herî sade. Nivîsa biyanî dê naskirina xeta nivîsê ya serbixwe ji zimanan bistîne û wek
xwe, di hundirê kevanan de berî tercimeyê were nîşandan. Bi giştî bikaranîna vê awayî nayê tewsiyekirin ji ber
ku girîngiya nivîsê dibe ku ne diyar be; guhertoya jêrîn a bi etîket bikar bîne.
# {<f:/``xeta nivîsê``:``biyanî``>}: Wek ya berê, lê koda xeta nivîsê eşkere hatiye dayîn, ji bo rewşa ku naskirin
xelet dixebite.
# {<f:``etîket``:``biyanî``>}: Etîketek zêde bike ku berî nivîsa biyanî were nîşandan. Etîket dikare kodeke zimên
be (bi zimanên etîmolojiyê ve jî), kodeke xeta nivîsê, an nivîseke azad. Heke wek kodeke zimên were naskirin,
navê resmî yê ziman wek etîket tê nîşandan û ziman ji bo naskirina xeta nivîsê ya nivîsa biyanî, li gorî xeta
nivîsê ya destûrdayî ya wî ziman, tê bikaranîn. Heke etîket wek kodeke xeta nivîsê were naskirin, ew wek xeta
nivîsê ya nivîsa biyanî tê bikaranîn dema nivîs tê nîşandan, û navê resmî yê xeta nivîsê wek etîket tê nîşandan.
Wekî din, etîket dikare nivîseke azad be (wek pergaleke latînîzekirinê wek `Pinyin`), û wek xwe tê nîşandan, bi
naskirina xeta nivîsê ya serbixwe ji zimanan li ser nivîsa biyanî.
# {<f:``etîket``/``xeta nivîsê``:``biyanî``>}: Wek ya berê, lê koda xeta nivîsê eşkere hatiye dayîn, ji bo rewşa
ku naskirin xelet dixebite.
# {<f:``etîket``,``etîket``,...:``biyanî``>}: Ji bo nivîseke biyanî çend etîketan zêde bike. Hemû etîket bi
xêzika dabeşker ji hev cuda tên nîşandan wek li jor, lê tenê etîketa yekem ji bo naskirina xeta nivîsê tê
bikaranîn.
# {<f:``etîket``,``etîket``,.../``xeta nivîsê``:``biyanî``>}: Wek ya berê, lê koda xeta nivîsê eşkere hatiye
dayîn, ji bo rewşa ku naskirin xelet dixebite.
Berevajî guherkerên din ên paşiyê, guherkera {<f:...>} dikare çend caran were dayîn ji bo nîşandana guhertoyên
cuda yên biyanî yên hebûneke diyarkirî. Nimûneyeke kêrhatî ev e:
* {Liou Kia-hway<f:Hant:劉家槐><f:Pinyin:Liú Jiāhuái>}
Li vir, em navê nivîskar wek di çavkaniyê de hatiye dayîn diyar dikin, li dû wê guhertoya orîjînal a bi çînî û
herwiha guhertoyeke standard a Pinyin.]=]},
{"q", [=[Etîketa çepê ya parametreyê an hebûna behskirî, berî wê wiha tê nîşandan: {{q|etîketa çepê}}.]=]},
{"qq", [=[Etîketa rastê ya parametreyê an hebûna behskirî, li dû wê wiha tê nîşandan: {{q|etîketa rastê}}.]=]},
}
end
--[===[
Ravekirina parametreyên takekesî ji bo perçeya jêderê ya jêgirtinê (ango rêza yekem). Ji ber ku pir parametre hene, em
wan bi koman dabeş dikin. Nirxa ya jêrîn lîsteyeke koman e, her kom bi vî rengî ye:
1. Perçeya yekem sernavê koma parametreyan e.
2. Perçeya duyem a îxtiyarî, heke rêzik be, nivîsa pêşgotinê ye ku komê bi hûrgilî rave dike, û dê berî tabloya
parametreyan were nîşandan. Rêzik dikare pirrêzî be (bi [=[...]=] bicîh bike), û rêzên domdar taybetmendiyek hene;
li jêr binêre.
3. Hemû perçeyên din parametreyên takekesî rave dikin.
Ravekirina parametreyeke takekesî bi vî rengî ye:
1. Perçeya yekem nav an navên parametreyê ye. Heke rêzik be, tenê navê gengaz ê parametreyê diyar dike, û wek
lîsteyeke yek-perçeyî ya bi navê parametreyê tê hesibandin. Lîsteyeke rêzikan bikar bîne ji bo diyarkirina çend
bernavên bi heman wateyê, wek {"tlr", "translator", "translators"}. Tu dikarî herwiha lîsteyeke parametreyên
girêdayî yên mantiqî jî diyar bikî, ku hemû parametre bi rave kirineke yekane têne şirovekirin. Di vê rewşê de,
<code>useand = true</code> li dû navên parametreyan binivîse, ku dibe sedem parametre bi "û" li şûna "an" werin
girêdan (wek normal ji bo bernavan). Heke <code>useand</code> hatibe dayîn, perçeyên takekesî yên lîsteyê bixwe
dikarin lîsteyên bernavan bin, ku bi xêzika dabeşker ji hev cuda tên nîşandan. Her perçe dikare, li şûna rêzikekê,
tabloyek bi forma {param = "PARAM", non_generic = BOOLEAN} jî be, ku heke <code>non_generic = true</code>,
parametre taybet e ji bo pêkanîneke {{şx|quote-*}} ya diyarkirî, ne giştî.
Wek nimûne:
* {"tlr", "translator", "translators"} wek "|tlr=, |translator= an |translators=" tê nîşandan, behsa sê bernavan
dike.
* {"chapter_series", "chapter_seriesvolume", useand = true} wek "|chapter_series= û |chapter_seriesvolume="
tê nîşandan, behsa parametreyên girêdayî yên mantiqî dike.
* {{"chapter_series", {param = "entry_series", non_generic = true}},
{"chapter_seriesvolume", {param = "entry_seriesvolume", non_generic = true}},
useand = true} wek "|chapter_series=/<b>|entry_series=</b> û |chapter_seriesvolume=/<b>|entry_seriesvolume=</b>"
tê nîşandan, behsa komên bernavan ên parametreyên girêdayî yên mantiqî dike, hinek ji wan ne giştî ne (li vir,
parametreyên {{para|entry_*}} bernavên taybet ên {{şx|jêder-kitêb}} in).
Qadên din ên navdar jî gengaz in:
* <code>useand = true</code>: Parametreyan bi "û" li şûna "an" girêbide; li jor binêre.
* <code>annotated = true</code>: Diyar dike ku parametre(yên) dikarin bi guherkerên pêşiyê û/an guherkerên
paşiyê werin nîşankirin.
* <code>multientity = true</code>: Diyar dike ku parametre(yên) dikarin ji çend hebûnên bi niqteya bi virgul ji hev cuda pêk
bên (wek nivîskar, terciman, edîtor, weşanxane an cih), her yek dikare bi guherkerên pêşiyê û/an guherkerên
paşiyê were nîşankirin.
* <code>boolean = true</code>: Parametre(yên) nirxa wan boolean e, û wek nimûne {{para|bêtarîx|1}} tê nîşandan, ne
bi tenê wek {{para|tarîx}}.
* <code>required = true</code>: Parametre(yên) lazim in, û wek nimûne {{para|sernav|req=1}} tê nîşandan, ne bi
tenê wek {{para|nivîskar}}.
* <code>literal = true</code>: Nirxa parametreyê (ku divê tenê yek hebe) ravekirinên parametreyên jixwe-formatkirî
dihewîne û divê wek xwe were nîşandan, ne bêtir were formatkirin.
2. Perçeya duyem ravekirina parametreyê/parametreyan e. Rêzik dikare pirrêzî be (bi [=[...]=] bicîh bike), û rêzên
domdar taybetmendiyek hene. Bi taybetî, xêzikeke nû û valahiya li dû wê bi gelemperî dibe valahiyeke yekane, da ku
rêzeke dirêj bikare bi çend rêzan û bi navbereke munasib were nivîsandin. Ev nabe dema ji yek xêzikeke nû zêdetir li
pey hev hebin (di wê rewşê de, hemû xêzikên nû wek xwe dimînin). Heke herfa yekem a rêzekê nîşana lîsteyekê be
(<code>#</code> an <code>*</code>), valahiya berî wê tê rakirin lê xêzika nû ya berê wek xwe dimîne. Ev destûrê
dide ku lîste di ravekirinên parametreyan de bên dayîn.
]===]
local function generate_params(ty)
return {
{"Parametreyên nivîsa jêgirtî",
[=[Parametreyên jêrîn nivîsa jêgirtî bixwe rave dikin. Ev kom digel koma jêrîn (ji bo nivîsa jêgirtî ya orîjînal)
nivîsa jêgirtinê rave dikin, dema hemû komên din ên parametreyan rêza jêderê kontrol dikin. Parametreyên vê koma
dikarin neyên dayîn heke nivîsa jêgirtî cuda were nîşandan (wek nimûne di hin zimanên rojhilata Asyayê de, ku
şablonên xwe hene ji bo nîşandana nivîsa jêgirtî, wek {{şx|ja-x}} ji bo japonî, {{şx|zh-x}} ji bo çînî,
{{şx|ko-x}} ji bo koreyî, {{şx|th-x}} ji bo tayî û {{şx|km-x}} ji bo khmerî). Tevî wê jî, {{para|1}} divê were
dayîn da ku zimanê jêgirtinê diyar bike.]=],
{{"1", required = true},
[=[Lîsteyeke kodên zimên ên bi kome ji hev cuda, ku zimanê/zimanên nivîsa jêgirtî diyar dike; ji bo lîsteya
kodan, li [[Wiktionary:List of languages]] binêre. Heke ziman ne îngilîzî be, şablon vê rastiyê bi nîşandana
{(bi ``ziman``)} (ji bo yek zimanî), an {(bi ``ziman`` û ``ziman``)} (ji bo du zimanan), an {(bi ``ziman``,
``ziman`` ... û ``ziman``)} (ji bo sê an zêdetir zimanan) diyar dike. Rûpela madeyê dê herwiha li kategoriyeke bi
forma {Kategorî:Jêgirtinên bi ``ziman``} were zêdekirin, ji bo zimanê yekem ê lîsteyê (ji bilî ku
{{para|zimanê-termê}} hatibe dayîn, di wê rewşê de ew ziman ji bo kategoriyê tê bikaranîn, an
{{para|nekat|1}} hatibe dayîn, di wê rewşê de rûpel nakeve tu kategoriyekê). Zimanê yekem ê lîsteyê herwiha fonta
tê bikaranîn û latînîzekirina munasib jî diyar dike, heke nivîs ne bi herfên latînî be.
{{para|zimanê-eserê}} bikar bîne ji bo diyarkirina zimanê/zimanên ku <<collection>> bixwe pê hatiye nivîsandin:
li jêr binêre.
<small>Parametreya {{para|lang}} bernaveke kevin e ji bo vê parametreyê; ji kerema xwe bikar neyîne. Heke ev were
bikaranîn, hemû parametreyên hejmarî yek ji dor tên xwarê.</small>]=]},
{{"jêgirtin", "jg"},
[=[Nivîsa ku tê jêgirtin. Tîpên qalind bikar bîne ji bo diyarkirina termê ku tê îzahkirin, wiha:
{{code||<nowiki>'''mirovnasî'''</nowiki>}}.]=]},
{"zimanê-eserê",
[=[Lîsteyeke kodên zimên ên bi kome ji hev cuda, ku zimanê/zimanên ku kitêb pê hatiye nivîsandin diyar dike, heke
ji nivîsa jêgirtî cuda be; ji bo lîsteya kodan, li [[Wiktionary:List of languages]] binêre.]=]},
{"zimanê-termê",
[=[Kodeke zimên ku zimanê termê tê îzahkirin diyar dike, heke ji nivîsa jêgirtî cuda be; ji bo lîsteya kodan, li
[[Wiktionary:List of languages]] binêre. Heke were dayîn, ev ziman ew e ku dema rûpel li kategoriyeke bi forma
{Kategorî:Jêgirtinên bi ``ziman``} tê zêdekirin tê bikaranîn; wekî din, zimanê yekem ê bi {{para|1}} hatiye dayîn
tê bikaranîn. Vê parametreyê tenê bide heke zimanê jêgirtinê ji zimanê termê cuda be, wek nimûne jêgirtineke
îngilîziya navîn ku ji bo termeke îngilîziya nûjen tê bikaranîn, an tarîfeke îngilîzî ya termeke viyetnamî di
ferhengeke viyetnamî-îngilîzî de.]=]},
{{"parantez", boolean = true},
[=[Jêgirtinekê bi [[bracket|kevanan]] dorpêç bike. Ev nîşan dide ku jêgirtin an behskirineke termekê ye (wek
nimûne, "hin kes dibêjin kelîmeya '''''manoeuvre''''' zehmet e meriv rast binivîse") li şûna bikaranîneke rastîn a wê
(wek nimûne, "divê em bi baldarî '''manoeuvre''' bikin da ku aloziyê çênekin"), an jî nimûneeke rastîn a termekê
nade lê agahiyan li ser kelîmeyên eleqedar pêşkêş dike.]=]},
{{"tercime", "werger"},
[=[Heke nivîsa jêgirtî bi îngilîzî/kurmancî nebe, ev parametre dikare ji bo pêşkêşkirina [[wergêr|tercimeyek]]ê
were bikaranîn.]=]},
{"hrf",
[=[Heke nivîsa jêgirtî bi îngilîzî/kurmancî nebe û tercimeya bi {{para|tercime}} hatiye dayîn îdyomatîk be, ev
parametre dikare ji bo pêşkêşkirina tercimeyeke [[herfî]] were bikaranîn.]=]},
{"footer",
[=[Ev parametre dikare ji bo diyarkirina nivîseke serbixwe li binî, wek şirove an têbînî, were bikaranîn. (Bi
zanebûn wek "footer" maye, kurmancîkirin nehatiye kirin.)]=]},
{"norm",
[=[Heke nivîsa jêgirtî bi rastnivîsîna ne-standard hatibe nivîsandin, ev parametre guhertoya standardkirî ya
nivîsê peyda dike. Ev bi taybetî ji bo jêgirtinên kevn e. Wek nimûne, ji bo poloniya kevn, ev parametre dikare
guhertoyeke li gorî rastnivîsîna poloniya nûjen peyda bike, û ji bo nivîsa rûsî ya berî reforma rastnivîsînê ya
1917an, dikare rastnivîsîna reforma nû peyda bike.]=]},
{"tr",
[=[Heke nivîsa jêgirtî {{w|pergaleke nivîsandinê}} ya cuda ji {{w|alfabeya latînî}} (alfabeya normal a bi
îngilîzî tê bikaranîn) bikar tîne, ev parametre dikare ji bo pêşkêşkirina [[latînîzekirin]]eke wê were bikaranîn.
Bala xwe bide ku gelek ziman latînîzekirineke otomatîk peyda dikin heke ev arguman neyê dayîn. Heke guhertoyeke
standardkirî ya nivîsê bi {{para|norm}} hatibe dayîn, latînîzekirin dê li ser vê guhertoyê be, heke gengaz be
(heke latînîzekirina guhertoya standardkirî têk biçe an standardkirin bi herfên latînî û orîjînal ne bi herfên
latînî be, dê li ser nivîsa rastîn a jêgirtî be).]=]},
{"subst",
[=[Cîguherînên fonetîk ku têne bikaranîn ji bo çareserkirina latînîzekirinên nerêbaz di hin zimanan de bi
pergaleke nivîsandinê ya ne-latînî û latînîzekirina otomatîk (wek rûsî û yîdî). Fikra bingehîn ev e ku nivîsa
jêgirtî berî latînîzekirinê bi awayekî fonetîk ji nû ve were nivîsandin, da ku latînîzekirin bi rastî telafuzê
nîşan bide ne rastnivîsîna nerêbaz. Heke were dayîn, divê yek an çend rêzikên cîguherînê bin, bi kome ji hev cuda,
her rêzika cîguherînê bi forma {JI//BO} ye ({JI/BO} jî tê qebûlkirin), ku {JI} nivîsa çavkaniyê ya bi xeta
nivîsê ya çavkaniyê (wek kîrîlî an îbranî) diyar dike û {BO} jî nivîsa cîguherîner e, ew jî bi xeta nivîsê ya
çavkaniyê. Cîguherîn bi rêzê tên bikaranîn û ne mecbûr in bi kelîmeyek tevayî re li hev bên. Bala xwe bide ku
şêwazên Lua dikarin li şûna nivîsa rasterast di {JI} û {BO} de werin bikaranîn; li [[WT:LUA]] binêre. Ev tê wê
wateyê ku bi taybetî, xêzikên di {JI} de divê wek {%-} bên nivîsandin da ku neyên şîrovekirin wekî hejmarkera
şêwaza Lua ya ne-çavdar.
Ji bo nimûneyên bikaranîna vê parametreyê li nimûneyên {{şx|jêder-kitêb}} binêre. Nimûneyên din di belgekirina
{{şx|ux}} de têne dîtin; bikaranîn wek şablonê wekhev e. Heke {{para|norm}} ji bo peydakirina guhertoyeke
standardkirî ya nivîsê tê bikaranîn, cîguherîn dê ji bo vê guhertoyê jî bên bikaranîn dema ew tê latînîzekirin.]=]},
{"ts",
[=[Nivîsandina fonetîk a nivîsa jêgirtî, heke ne bi herfên latînî be di zimanekî de ku latînîzekirin ji telafuza
rastîn pir cuda ye (wek akadî, misrî ya kevn û tîbetî). Ev nebe tenê ji bo dayîna telafuza IPA'yê were
bikaranîn.]=]},
{"sc",
[=[Koda xeta nivîsê ya nivîsa jêgirtî, heke ne bi xeta latînî be. Ji bo agahiyên zêdetir li
[[Wiktionary:Scripts]] binêre. Kêm caran lazim e ev were diyarkirin çimkî xeta nivîsê ji nivîsa jêgirtî tê
naskirin.]=]},
{"normsc",
[=[Koda xeta nivîsê ya nivîsa standardkirî di {{para|norm}} de, heke ne bi xeta latînî be. Heke neyê dayîn, û
nirxek di {{para|sc}} de hatibe dayîn, ev nirx dê ji bo diyarkirina xeta nivîsê ya nivîsa standardkirî were
bikaranîn; wekî din (an heke {{para|normsc|auto}} hatibe dayîn), xeta nivîsê ya nivîsa standardkirî ji nivîsê
bixwe tê naskirin.]=]},
{"e",
[=[Etîket(ên) nivîsa jêgirtî. Etîket heman etîketên di {{şx|lb}}, {{şx|alt}}, {{şx|desc}} û
{{şx|syn}}/{{şx|ant}}/hwd. de ne, û li gorî ziman cuda ne. Ji bo dîtina etîketên diyarkirî yên zimanekî, li
belgekirina {{şx|lb}} binêre. Heke etîketek neyê naskirin, wek xwe tê nîşandan. Çend etîket dikarin werin dayîn,
bi kome ji hev cuda bêyî valahî di navbera etîketan de (komeke bi valahiyeke li dûv wê nayê hesibandin wekî
sînorker, lê wek perçeyeke etîketê tê hesibandin). Etîket wek etîketên rastê tên nîşandan, ango bi herfên xar, di
kevanan de û li rastê nivîsa jêgirtî.]=]},
},
{"Parametreyên nivîsa jêgirtî ya orîjînal",
[=[Parametreyên jêrîn nivîsa jêgirtî ya orîjînal rave dikin, dema nivîsa jêgirtî ya termê ku tê îzahkirin
tercimeyek e.]=],
{"zimanê-orîjînal",
[=[Lîsteyeke kodên zimên ên bi kome ji hev cuda, ku zimanê/zimanên orîjînal ê ku nivîsa jêgirtî jê hatiye
tercimekirin diyar dike; ji bo lîsteya kodan, li [[Wiktionary:List of languages]] binêre. Şablon vê rastiyê bi
nîşandana {tercimeya orîjînala bi ``ziman``} (ji bo yek zimanî), an {tercimeya orîjînala bi ``ziman`` û
``ziman``} (ji bo du zimanan), an {tercimeya orîjînala bi ``ziman``, ``ziman`` ... û ``ziman``} (ji bo sê an
zêdetir zimanan) diyar dike.]=]},
{"metna-orîjînal",
[=[Guhertoya orîjînal a nivîsa jêgirtî, ku nivîsa di {{para|jêgirtin}} de jê hatiye tercimekirin. Ev nivîs divê bi
koda zimên a zimanê nivîsê pêşgir bike, wek nimûne {<nowiki>gl:O teito é de '''pedra'''.</nowiki>} ji bo nivîsa
orîjînal a bi galîsî. Dema nivîsa jêgirtî ya sereke ji îngilîzî hatibe tercimekirin, çêtir e nivîsa îngilîzî ya
li hev were di {{para|metna-orîjînal}} de bête danîn, ne di {{para|tercime}} de; ya duyem ji bo tercimeyeke
dubare bo îngilîzî ya nivîsa tercimekirî bikar bîne (ji bilî ku nivîsa jêgirtî tercimeyeke azad a orîjînal be, ne
lazim e).]=]},
{"norm-orîjînal",
[=[Heke nivîsa jêgirtî ya orîjînal bi rastnivîsîna ne-standard hatibe nivîsandin, ev parametre guhertoya
standardkirî peyda dike. Ev dişibihe parametreya {{para|norm}} ji bo nivîsa jêgirtî ya sereke.]=]},
{"tr-orîjînal",
[=[Heke nivîsa jêgirtî ya orîjînal {{w|pergaleke nivîsandinê}} ya cuda ji {{w|alfabeya latînî}} bikar tîne, ev
parametre dikare ji bo pêşkêşkirina latînîzekirineke wê were bikaranîn. Ev dişibihe parametreya {{para|tr}} ji
bo nivîsa jêgirtî ya sereke.]=]},
{"subst-orîjînal",
[=[Cîguherînên fonetîk ku têne bikaranîn ji bo çareserkirina latînîzekirinên nerêbaz ên nivîsa jêgirtî ya
orîjînal di hin zimanan de bi pergaleke nivîsandinê ya ne-latînî û latînîzekirina otomatîk (wek rûsî û yîdî). Ev
dişibihe parametreya {{para|subst}} ji bo nivîsa jêgirtî ya sereke.]=]},
{"ts-orîjînal",
[=[Nivîsandina fonetîk a nivîsa jêgirtî ya orîjînal, heke ne bi herfên latînî be di zimanekî de ku latînîzekirin
ji telafuza rastîn pir cuda ye (wek akadî, misrî ya kevn û tîbetî). Ev dişibihe parametreya {{para|ts}} ji bo
nivîsa jêgirtî ya sereke û nebe tenê ji bo dayîna telafuza IPA'yê were bikaranîn.]=]},
{"sc-orîjînal",
[=[Koda xeta nivîsê ya nivîsa jêgirtî ya orîjînal, heke ne bi xeta latînî be. Ji bo agahiyên zêdetir li
[[Wiktionary:Scripts]] binêre. Kêm caran lazim e ev were diyarkirin çimkî xeta nivîsê ji nivîsa jêgirtî tê
naskirin.]=]},
{"normsc-orîjînal",
[=[Koda xeta nivîsê ya nivîsa standardkirî di {{para|norm-orîjînal}} de, heke ne bi xeta latînî be. Heke neyê
dayîn, û nirxek di {{para|sc-orîjînal}} de hatibe dayîn, ev nirx dê were bikaranîn; wekî din (an heke
{{para|normsc-orîjînal|auto}} hatibe dayîn), xeta nivîsê ji nivîsê bixwe tê naskirin.]=]},
{"e-orîjînal",
[=[Etîket(ên) nivîsa jêgirtî ya orîjînal. Ev dişibihe parametreya {{para|e}} ji bo nivîsa jêgirtî ya sereke.]=]},
},
{"Parametreyên li gorî tarîxê",
{"tarîx",
[=[Tarîxa ku <<work>> hatiye weşandin. An {{para|sal}} (û bi îxtiyarî {{para|meh}}), an {{para|tarîx}} bikar
bîne, ne herduyan. Nirxa {{para|tarîx}} divê tarîxeke rastîn be, bi an bêyî roj, ne nivîseke azad. Çend format
tên qebûlkirin; tê tewsiyekirin ku an bi forma ISO 8601 (''SAL''-''MEH''-''ROJ'') binivîse, wek nimûne
{2023-08-11}, an jî mehê bi tevahî binivîse, wek nimûne {2023 tebax 11} (guhertoyên vê jî tên qebûlkirin, wek
{tebax 11 2023} an {11 tebax 2023}). Tu dikarî rojê derxî û koda dê hewl bide tarîxê tenê bi meh û salê nîşan
bide. Bêyî girêdana bi forma têketinê, derana wê dê bi forma {'''''SAL''''' ''Meh'' ''ROJ''} (an tenê
{'''''SAL''''' ''Meh''}) were nîşandan, wek {'''2023''' tebax 11} (an {'''2023''' tebax} heke roj nehatibe
dayîn).]=]},
{{"sal", "meh", annotated = true, useand = true},
[=[Sal û (bi îxtiyarî) meha ku <<work>> hatiye weşandin. Nirxên van parametreyan neyên şîrovekirin, û heke lazim
be nivîseke azad dikare were dayîn. Heke berî salê {c.} hebe, wek nimûne {c. 1665}, ev nîşan dide ku sala weşandinê
{{lg|c.|nêzîkî}} sala diyarkirî ye; bi heman rengî {a.} nîşan dide sala weşandinê {{lg|a.|berî}} sala diyarkirî
ye, û {p.} nîşan dide sala weşandinê {{lg|p.|piştî}} sala diyarkirî ye. Sal bi herfên qalind tê nîşandan ji bilî
ku nirxa parametreya {{para|sal}} bixwe jixwe herfên qalind tê de hebin, û meh (heke were dayîn) li dû wê tê.
Heke ne tarîx û ne jî sal/meh hatibe dayîn, şablon peyama "(Tu dikarî [[:Category:Requests for date|tarîxa]] vê
jêgirtinê binivîsî?)" nîşan dide û rûpelê li kategoriya [[:Category:Requests for date in LANG entries]] zêde
dike, bi zimanê di {{para|1}} de hatiye dayîn. Peyam û zêdekirina kategoriyê dikarin bi {{para|bêtarîx|1}} werin
vemirandin, lê tê tewsiyekirin ku tu hewl bidî tarîxek an tarîxeke texmînî bidî li şûna vê. Zêdekirina
kategoriyê bi tenê dikare bi {{para|nekat|1}} were vemirandin, lê bi giştî ev nayê tewsiyekirin.]=]},
{"tarîxa-destpêkê",
[=[Heke weşandin di nava rêzeyeke tarîxan de bûbe, tarîxa destpêkê bixe {{para|tarîxa-destpêkê}} (an
{{para|sala-destpêkê}}/{{para|meha-destpêkê}}) û tarîxa dawî jî bixe {{para|tarîx}} (an
{{para|sal}}/{{para|meh}}). Forma {{para|tarîxa-destpêkê}} wek ya {{para|tarîx}} e. Heke tarîx heman salê hebin
lê meh û roja wan cuda be, sal tenê carekê tê nîşandan, bi heman rengî heke tenê roj cuda be. Tenê yekê ji
{{para|tarîxa-destpêkê}} an {{para|sala-destpêkê}}/{{para|meha-destpêkê}} bikar bîne, ne herduyan.]=]},
{{"sala-destpêkê", "meha-destpêkê", annotated = true, useand = true},
[=[Wekî din, rêzeyekê bi bicîhkirina sal û meha destpêkê di {{para|sala-destpêkê}} û (bi îxtiyarî)
{{para|meha-destpêkê}} de diyar bike. Ev dikarin nivîseke azad hebin, wek {{para|sal}} û {{para|meh}}. Ji bo
diyarkirina ku weşandin nêzîkî, berî an piştî rêzeyeke diyarkirî ye, nîşanera munasib ({c.}, {a.} an {p.}) berî
nirxa {{para|sal}} bicîh bike, ne berî nirxa {{para|sala-destpêkê}}.]=]},
{{"bêtarîx", boolean = true},
[=[Heke <<work>> bêtarîx be û tu tarîx (heta ya texmînî) bi awayekî maqûl neyê destnîşankirin, {{para|bêtarîx|1}}
diyar bike. Ev rêza lênêrînê ya ku bi giştî tê nîşandan heke tarîx neyê dayîn, vedimirîne. Vê tenê ji ber ku tu
tarîxê nizanî bikar neyîne; li şûna wê, tarîxê derxe û bihêle rêza lênêrînê were nîşandan û rûpel li kategoriya
munasib a lênêrînê were zêdekirin, da ku kesekî din bikaribe alîkariyê bike.]=],},
},
{"Parametreyên li gorî nivîskar",
{{"nivîskar", list = true, multientity = true},
[=[Nav(ên) nivîskar(an) ê/ên <<work>> ya jêgirtî. Çend nivîskaran bi niqteya bi virgul ji hev cuda bike, an parametreyên
zêde {{para|nivîskar2}}, {{para|nivîskar3}}, hwd. bikar bîne. Wekî din, {{para|paşnav}} û {{para|pêşnav}} bikar
bîne (ji bo pêşnav, û navên navîn an herfên pêşî), digel {{para|paşnav2}}/{{para|pêşnav2}} ji bo nivîskarên zêde.
Herduyan bi hev re bikar neyîne.]=]},
{{"paşnav", "pêşnav", useand = true, list = true},
[=[Pêşnav (digel navên navîn an herfên pêşî) û paşnav(ên) nivîskar(an) ê/ên <<work>> ya jêgirtî. Ji bo nivîskarên
zêde {{para|paşnav2}}/{{para|pêşnav2}}, {{para|paşnav3}}/{{para|pêşnav3}}, hwd. bikar bîne. Tê tercihkirin ku
{{para|nivîskar}} li şûna {{para|paşnav}}/{{para|pêşnav}} were bikaranîn, bi taybetî ji bo navên axaftvanên
zimanên biyanî, ku dibe hêsan nebe ew bikevin pêşnav û paşnavan. Bala xwe bide ku van parametreyan guherkerên
paşiyê an guherkerên pêşiyê piştgirî nakin, û naskirina xeta nivîsê ya otomatîk nakin; ji ber vê yekê ew tenê
dikarin ji bo navên bi herfên latînî werin bikaranîn.]=]},
{{"lînka-nivîskar", list = true},
[=[Navê meqaleyeke [https://en.wikipedia.org Wîkîpediyaya îngilîzî] li ser nivîskar, ku dê bi nav(ên) di
{{para|nivîskar}} an {{para|paşnav}}/{{para|pêşnav}} de hatine dayîn ve were girêdan. Meqaleyên zêde dikarin bi
navên nivîskarên din ve bi parametreyên {{para|lînka-nivîskar2}}, {{para|lînka-nivîskar3}}, hwd. werin girêdan.
Pêşgira {:en:} an {w:} zêde neke.
Wekî din, navê her kesî rasterast girêbide, wiha:
{{para|nivîskar|<nowiki>[[w:Kathleen Taylor (biologist)|Kathleen Taylor]]</nowiki>}} an
{{para|nivîskar|<nowiki>{{w|Samuel Johnson}}</nowiki>}}.]=]},
{{"hevnivîskar", multientity = true},
"Nav(ên) hevnivîskar(ên) <<work>>. Çend navan bi niqteya bi virgul ji hev cuda bike."},
{{"nivîskarê-sereke", multientity = true},
[=[Heke tu dixwazî diyar bikî ku perçeyek ji <<work:a>>, wek pêşgotin an destpêk, ji hêla kê ve hatiye nivîsandin,
{{para|nivîskar}} bikar bîne, û {{para|nivîskarê-sereke}} jî bikar bîne ji bo diyarkirina nivîskar(ên) perçeya
sereke ya <<work>>. Çend nivîskaran bi niqteya bi virgul ji hev cuda bike.]=]},
{{"terciman", multientity = true},
[=[Nav(ên) terciman(ên) <<collection>>. Çend navan bi niqteya bi virgul ji hev cuda bike. Xuyabûna rastîn girêdayî ye ka
nivîskar an hevnivîskar berî wê hatine nîşandan an na. Heke ne, forma {John Doe, Mary Bloggs, wergêr} an
{John Doe, Mary Bloggs, Richard Roe, wergêr} tê bikaranîn, bi navan pêşî. Wekî din, forma
{tercimekirina John Doe û Mary Bloggs} an {tercimekirina John Doe, Mary Bloggs û Richard Roe} tê bikaranîn, da ku
nivîskar(an) ji terciman(an) baştir cuda bike. Bala xwe bide ku di her du rewşan de jî niqteya bi virgul di derana wê de
nayên bikaranîn wek sînorker.]=]},
{{"edîtor", multientity = true},
[=[Nav(ên) edîtor(ên) <<collection>>. Çend navan bi niqteya bi virgul ji hev cuda bike. Ev bi prensîbên dişibihin ên
tercimanan, wek li jor: bêyî nivîskar, hevnivîskar an terciman berî wê, forma {John Doe, edîtor} an
{John Doe, Mary Bloggs, Richard Roe, edîtor} (heke ji edîtorekî zêdetir hebe) tê bikaranîn. Wekî din, forma
{bi edîtoriya John Doe û Mary Bloggs} an {bi edîtoriya John Doe, Mary Bloggs û Richard Roe} tê bikaranîn.]=],},
{{"editors", multientity = true},
[=[Nav(ên) edîtorên <<collection>>. Çend navan bi niqteya bi virgul ji hev cuda bike. Ferqa vê ya digel {{para|edîtor}}
ev e ku dema nivîskar, hevnivîskar an terciman berî wê tune, ev parametre her tim "edîtor" nîşan dide, dema
{{para|edîtor}} li gorî hejmara hebûnên diyarkirî "edîtor" an "edîtor" nîşan dide. (Hîna bernavek kurmancî ji bo
dîtina vê cudatiyê bi taybetî nehatiye çêkirin; "editors" bikar bîne.)]=]},
{{"berhevkar", multientity = true},
[=[Nav(ên) berhevkar(ên) <<collection>>. Çend navan bi niqteya bi virgul ji hev cuda bike. Berhevkar dişibihin edîtoran lê
bi taybetî ji bo berhevokên ji materyalên çavkaniyê (wek çîrokên devkî, stranên gelêrî, nameyên kesekî navdar,
hwd.) têne bikaranîn. Ev qad wek {{para|edîtor}} dixebite lê "berhevkirin" li şûna "edîtorî" û "berhevkar(an)"
li şûna "edîtor(an)" nîşan dide.]=]},
{{"compilers", multientity = true},
[=[Nav(ên) berhevkarên <<collection>>. Çend navan bi niqteya bi virgul ji hev cuda bike. Ji bo kengî ev bête bikaranîn li
{{para|berhevkar}} binêre. (Hîna bernavek kurmancî ji bo vê cudatiyê nehatiye çêkirin; "compilers" bikar bîne.)]=]},
{{"jê-tê-girtin", multientity = true},
[=[Navê kesê tê jêgirtin, heke hemû nivîsa jêgirtî jêgirtina kesekî din e ne ya nivîskar bixwe.]=]},
},
{"Parametreyên li gorî sernav",
{{"sernav", annotated = true, required = true},
[=[Sernavê <<collection>>.]=]},
{"tercimeya-sernav",
[=[Heke sernavê <<collection>> bi îngilîzî/kurmancî nebe, ev parametre dikare ji bo pêşkêşkirina tercimeyeke
sernav were bikaranîn, wekî alternatîfek ji bo diyarkirina tercimeyê bi guherkereke paşiyê (li jor
binêre).]=]},
{{"serî", annotated = true},
[=[{{w|Rêzefirotina kitêban|Serî}}ya ku <<collection>> endamê wê ye.]=]},
{{"cildê-seriyê", annotated = true},
[=[Hejmara cildê <<collection>> di nava seriyê de ku endamê wê ye.]=]},
{"url",
[=[URL'ya an navnîşana webê ya malperekê derveyî ku nivîsa tam a <<work>> tê de heye. ''Bi hîç malperekê ku
muhtewaya wê mafê telîfê xera dike ve negire''.]=]},
{"urls",
[=[Nivîseke azad, ji bo çend URL'yan. Berevajî {{para|url}}, edîtor divê bixwe kevanên URL'ê {[]} zêde bike.]=]},
},
{"Parametreyên li gorî beşê",
{{"beş", annotated = true},
[=[Beşa <<collection>> ya jêgirtî. Tu dikarî an hejmareke beşê bi hejmarên erebî an romayî diyar bikî (wek nimûne,
{{para|beş|7}} an {{para|beş|VII}}), an jî sernavekî beşê (wek nimûne, {{para|beş|Destpêk}}). Beşeke bi hejmarên
erebî an romayî ya diyarkirî bi kelîmeya "beş" tê pêşgirtin, dema sernavekî beşê di "gîrçikên nîşandanê" de tê
girtin.]=]},
{{"hejmara-beşê", annotated = true},
[=[Heke navê beşê di {{para|beş}} de hatibe dayîn, {{para|hejmara-beşê}} bikar bîne ji bo dayîna hejmara beşê ya
li hev, ku dê di kevanan de li dû kelîmeya "beş" were nîşandan, wek nimûne {"Ceribandin" (beş 4)}.]=]},
{{"beş-sade", annotated = true},
[=[Nirxa tam a beşê, ku wek xwe tê nîşandan. Peyva "beş" û her gîrçikên xwestî zêde bike. Heke hem {{para|beş}}
hem jî {{para|beş-sade}} hatibin dayîn, nirxa {{para|beş-sade}} li dû beşê, di kevanan de, tê nîşandan. Ev kêrhatî
ye heke beşên vê <<collection>>ê bi kelîmeyek din a ji "beş" cuda werin binavkirin.]=]},
{"urlya-beşê",
[=[[[w:Universal Resource Locator|URL]]'ya an navnîşana webê ya rûpeleke derveyî ku beş pê ve tê girêdan. Bala
xwe bide ku bi giştî çêtir e {{para|urlya-rûpelê}} bikar bînî ji bo girêdana rasterast bi rûpela nivîsa jêgirtî,
heke gengaz be. ''Bi hîç malperekê ku muhtewaya wê mafê [[w:copyright|telîfê]] xera dike ve negire''.]=]},
{"tercimeya-beş",
[=[Heke beşa <<collection>> bi îngilîzî/kurmancî nebe, ev parametre dikare ji bo pêşkêşkirina tercimeyeke navê
beşê were bikaranîn, wekî alternatîfek ji bo diyarkirina tercimeyê bi guherkereke paşiyê (li jor binêre).]=]},
{{"tercimanê-beşê", multientity = true},
[=[Tercimanê beşê, heke ji tercimanê giştî yê <<collection>> cuda be (bi {{para|terciman}} hatiye diyarkirin).]=]},
{{"seriya-beşê", "cildê-seriya-beşê", useand = true, annotated = true},
[=[Heke ev beş perçeyek e ji seriyeke beşên dişibihin, {{para|seriya-beşê}} dikare ji bo diyarkirina navê seriyê
were bikaranîn, û {{para|cildê-seriya-beşê}} jî ji bo diyarkirina jimareya seriyê, heke hebe. Parametreyên
{{para|serî}} û {{para|cildê-seriyê}} yên ji bo <<collection>> bi tevahî bide ber hev. Ev parametre bi taybetî ji
bo stûnên dubareyî yên di rojnameyekê an tiştekî bi vî rengî de têne bikaranîn. Di {{şx|jêder-kovar}} de,
parametreya {{para|beş}} wek {{para|sernav}} an {{para|meqale}} tê binavkirin û ji bo navê meqaleyeke kovarê,
kovarê an rojnameyê tê bikaranîn, û parametreya {{para|seriya-beşê}} jî wek {{para|seriya-meqaleyê}} tê binavkirin
û ji bo navê stûn an seriya meqaleyan a ku meqale perçeyek ji wê ye tê bikaranîn.]=]},
},
{"Parametreyên li gorî qismê",
{{"qisim", annotated = true},
[=[Vê parametreyê bikar bîne ji bo diyarkirina perçeyeke (bi giştî bi hejmar) ji <<work:a>>, wekî alternatîf an
temamkerê diyarkirina beşekê. Wek nimûne, di lîstikeke şanoyê de, {{para|qisim|perde II, dîmen iv}} bikar bîne, û
di meqaleyeke kovareke teknîkî de, {{para|qisim|4}} bikar bîne. Heke nirxa vê parametreyê wek hejmareke romayî an
erebî xuya bike, ew bi kelîmeya "qisim" tê pêşgirtin, wekî din wek xwe tê nîşandan (bide ber hev bi awayê wekhev ê
{{para|beş}}).]=]},
{{"hejmara-qismê", annotated = true},
[=[Heke navê qismekê di {{para|qisim}} de hatibe dayîn, {{para|hejmara-qismê}} bikar bîne ji bo dayîna hejmara
qismê ya li hev, ku dê di kevanan de li dû kelîmeya "qisim" were nîşandan, wek nimûne {Ceribandin (qisim 4)}.]=]},
{{"qisim-sade", annotated = true},
[=[Nirxa tam a qismê, ku wek xwe tê nîşandan; bide ber {{para|beş-sade}}. (Ev tenê ji bo temambûnê hatiye dayîn û
bi giştî ne kêrhatî ye, çimkî nirxa {{para|qisim}} jî wek xwe tê nîşandan heke wek hejmarekê xuya nake.)]=]},
{"urlya-qismê",
[=[[[w:Universal Resource Locator|URL]]'ya an navnîşana webê ya rûpeleke derveyî ku qisim pê ve tê girêdan. ''Bi
hîç malperekê ku muhtewaya wê mafê [[w:copyright|telîfê]] xera dike ve negire''.]=]},
{"tercimeya-qism",
[=[Heke qisma <<work>> bi îngilîzî/kurmancî nebe, ev parametre dikare ji bo pêşkêşkirina tercimeyeke qismê were
bikaranîn, wekî alternatîfek ji bo diyarkirina tercimeyê bi guherkereke paşiyê (li jor binêre).]=]},
{{"rêzeya-qismê", "cildê-seriya-qismê", useand = true, annotated = true},
[=[Heke ev qisim perçeyek e ji seriyeke qismên dişibihin, {{para|rêzeya-qismê}} dikare ji bo diyarkirina navê
seriyê were bikaranîn, û {{para|cildê-seriya-qismê}} jî ji bo diyarkirina jimareya seriyê, heke hebe. Parametreyên
{{para|serî}} û {{para|cildê-seriyê}} yên ji bo <<collection>> bi tevahî, û {{para|seriya-beşê}} û
{{para|cildê-seriya-beşê}} yên ji bo beşekê bide ber hev.]=]},
},
{"Parametreyên li gorî rûpel û rêzê",
{{"rûpel", "rûpelên", annotated = true},
[=[Hejmara rûpel(an) an rêzeya rûpelan a <<work>>. Xeta dirêj (–) bikar bîne ji bo cudakirina hejmarên rûpelan a
rêzeyê. Bi normal, {{para|rûpel}} û {{para|rûpelên}} bernavên hev in, û koda bixwe naskirin dike ka "rûpel" a
yekjimar an "rûpelên" a pirjimar were nîşandan. Koda naskirinê "rûpelên" nîşan dide heke xeta dirêj (–), xeteke
dirêjtir (—), xêzikek di navbera hejmaran de, an komek li dû valahiyekê û di navbera hejmaran de bibîne (valahî
lazim e, da ku hejmar wek {1,478} bi cudakera hezaran neyên hesibandin wekî çend rûpel). Ji bo vemirandina vê
naskirinê (wek nimûne, hin kitêb rûpelên xêzikî hene wek {3-16}), berî nirxê nîşana devnîgaşê ({!}) bicîh bike;
heke ev were dayîn, navê parametreyê diyar dike ka "rûpel" an "rûpelên" were nîşandan. Wekî din, {{para|rûpel-sade}}
bikar bîne. Wekî rewşeke taybet, nirxa {bêhejmar} dibe sedem {rûpela bêhejmar} were nîşandan.]=]},
{{"rûpel-sade", annotated = true},
[=[Nivîseke azad ku rûpel an rûpelên nivîsa jêgirtî diyar dike, wek nimûne {rûpela 8an} an {berga paşîn}. Tenê
yekê ji {{para|rûpel}}, {{para|rûpelên}} û {{para|rûpel-sade}} bikar bîne.]=]},
{"urlya-rûpelê",
[=[URL'ya an navnîşana webê ya rûpela ku rûpel(ên) <<work>> ê behskirî tê de ne. Hejmara rûpel(an) dê pê ve bê
girêdan.]=]},
{{"rêz", "rêzên", annotated = true},
[=[Hejmara rêz(an) a nivîsa jêgirtî, wek nimûne {47} an {151–154}. Ev parametre wek {{para|rûpel}} û
{{para|rûpelên}} dixebitin. Hejmara rêzan bi gelemperî di lîstikên şanoyê, helbestan û hin berhemên teknîkî de tên
bikaranîn.]=]},
{{"rêz-sade", annotated = true},
[=[Nivîseke azad ku hejmara rêz(an) a nivîsa jêgirtî diyar dike, wek nimûne {beytên 44–45} an {jêrenot 3}. Tenê
yekê ji {{para|rêz}}, {{para|rêzên}} û {{para|rêz-sade}} bikar bîne.]=]},
{"urlya-rêzê", [=[URL'ya an navnîşana webê ya rûpela ku rêz(ên) <<work>> ê behskirî tê de ne. Hejmara rêz(an) dê
pê ve bê girêdan.]=]},
{{"stûn", "stûnên", "stûn-sade", useand = true, annotated = true},
[=[Hejmara stûn(an) a nivîsa jêgirtî. Ev parametre wek {{para|rûpel}}, {{para|rûpelên}} û {{para|rûpel-sade}}
dixebitin.]=]},
{"urlya-stûnê",
[=[URL'ya hejmara stûn(an) a nivîsa jêgirtî. Ev parametre wek {{para|urlya-rûpelê}} dixebite.]=]},
},
{"Parametreyên li gorî weşandinê",
{{"weşanxane", multientity = true},
[=[Navê yek an çend weşanxaneyên <<collection>>. Heke ji weşanxaneyekê zêdetir hebe, navan bi niqteya bi virgul ji hev
cuda bike.]=]},
{{"cih", multientity = true},
[=[Cihê ku <<collection>> lê hatiye weşandin. Heke ji cihekî zêdetir hebe, ciyan bi niqteya bi virgul ji hev cuda bike,
wiha: {London; New York, N.Y.}.]=]},
{{"çap", annotated = true},
[=[Çapa <<collection>> ya jêgirtî, wek nimûne, {2an} an <code>3an a rastkirî û nûvekirî</code>. Li dû vê nivîsê
kelîmeya "çap" tê zêdekirin (ji bo vemirandina vê {{para|çap-sade}} bikar bîne). Heke ji çapa yekem a <<collection>>
tê jêgirtin, bi giştî ne lazim e ev rastî were diyarkirin.]=]},
{{"çap-sade", annotated = true},
[=[Nivîseke azad ku çapa <<collection>> ya jêgirtî diyar dike, wek nimûne {çapa 3an} an {çapa 5an,
dîjîtalîzekirî} an {guhertoya 3.72}.]=]},
{{"sala-weşandinê", "meha-weşandinê", annotated = true, useand = true},
[=[Heke {{para|sal}} ji bo diyarkirina sala guhertoya orîjînal a <<issue>> tê bikaranîn, {{para|sala-weşandinê}}
dikare ji bo diyarkirina sala guhertoya ku jê hatiye jêgirtin were bikaranîn, wek nimûne
{|sal=1665|sala-weşandinê=2005}. {{para|meha-weşandinê}} dikare bi îxtiyarî ji bo diyarkirina meha weşandinê were
bikaranîn. Sala weşandinê bi kelîmeya "weşandî" tê pêşgirtin. Ev parametre wek {{para|sal}} û {{para|meh}} têne
xebitandin (ji bilî ku sal bi awayekî standard bi herfên qalind nayê nîşandan). Ev tê wê wateyê, wek nimûne, ku
pêşgirên {c.}, {a.} û {p.} têne naskirin ji bo diyarkirina ku weşandin nêzîkî/berî/piştî tarîxeke diyarkirî
bûye.]=]},
{"tarîxa-weşandinê",
[=[Tarîxa ku guhertoya <<issue>> ya jêgirtî pê hatiye weşandin. An {{para|sala-weşandinê}} (û bi îxtiyarî
{{para|meha-weşandinê}}), an {{para|tarîxa-weşandinê}} bikar bîne, ne herduyan. Wek {{para|tarîx}}, nirxa
{{para|tarîxa-weşandinê}} divê tarîxeke rastîn be, bi an bêyî roj, ne nivîseke azad. Heman format wek yên
{{para|tarîx}} tên naskirin.]=]},
{{"sala_destpêkê-weşandin", "meha-destpêkê-weşandin", annotated = true, useand = true},
[=[Heke weşandina guhertoya jêgirtî di nava rêzeyeke tarîxan de bûbe, sala destpêkê (û bi îxtiyarî meh) bi van
parametreyan diyar bike û tarîxa dawî jî bixe {{para|sala-weşandinê}}/{{para|meha-weşandinê}} (an
{{para|tarîxa-weşandinê}}). Ev bi awayekî wekhev bi {{para|sala-destpêkê}}/{{para|meha-destpêkê}} dixebite. Kêm
caran lazim e van parametreyan bikar bînî.]=]},
{"tarîxa-destpêkê-weşandin",
[=[Tarîxa destpêkê ya weşandina guhertoya jêgirtî, wekî alternatîfek ji bo diyarkirina
{{para|sala_destpêkê-weşandin}}/{{para|meha-destpêkê-weşandin}}. Ev wek {{para|tarîxa-destpêkê}} dixebite. Kêm
caran lazim e ev parametre were diyarkirin.]=]},
{{"sala-orîjînal", "meha-orîjînal", annotated = true, useand = true},
[=[Sala ku <<work>> cara pêşî hatiye weşandin, heke <<work>> ya jêgirtî guhertoyeke nû ya <<work:a>> ye (ne tenê
çapeke nû). Wek nimûne, heke ji çapeke nûjen a Shakespeare an Milton tê jêgirtin, tarîxa çapa nûjen bixe
{{para|sal}}/{{para|meh}} an {{para|tarîx}} û tarîxa çapa orîjînal jî bixe
{{para|sala-orîjînal}}/{{para|meha-orîjînal}} an {{para|tarîxa-orîjînal}}. {{para|meha-orîjînal}} dikare bi
îxtiyarî ji bo dayîna meha weşandina orîjînal were bikaranîn, an tarîxeke tam bi {{para|tarîxa-orîjînal}} were
dayîn. An {{para|sala-orîjînal}}/{{para|meha-orîjînal}}, an {{para|tarîxa-orîjînal}} bikar bîne, ne herduyan. Ev
parametre wek {{para|sal}} û {{para|meh}} têne xebitandin (ji bilî ku sal bi awayekî standard bi herfên qalind
nayê nîşandan). Ev tê wê wateyê, wek nimûne, ku pêşgirên {c.}, {a.} û {p.} têne naskirin ji bo diyarkirina ku
weşandina orîjînal nêzîkî/berî/piştî tarîxeke diyarkirî bûye.]=]},
{"tarîxa-orîjînal",
[=[Tarîxa ku guhertoya orîjînal a <<work>> ya jêgirtî pê hatiye weşandin. An {{para|sala-orîjînal}} (û bi
îxtiyarî {{para|meha-orîjînal}}), an {{para|tarîxa-orîjînal}} bikar bîne, ne herduyan. Wek {{para|tarîx}}, nirxa
{{para|tarîxa-orîjînal}} divê tarîxeke rastîn be, bi an bêyî roj, ne nivîseke azad. Heman format wek yên
{{para|tarîx}} tên naskirin.]=]},
{{"sala-destpêkê-orîjînal", "meha-destpêkê-orîjînal", annotated = true, useand = true},
[=[Sal/meha destpêkê ya guhertoya orîjînal a weşandinê, heke weşandin di nava rêzeyeke tarîxan de bûbe. An
{{para|sala-destpêkê-orîjînal}} (û bi îxtiyarî {{para|meha-destpêkê-orîjînal}}), an
{{para|tarîxa-destpêkê-orîjînal}} bikar bîne, ne herduyan. Ev bi awayekî wekhev bi {{para|sala-destpêkê}} û
{{para|meha-destpêkê}} dixebite, û pir kêm caran lazim e were diyarkirin.]=]},
{"tarîxa-destpêkê-orîjînal",
[=[Tarîxa destpêkê ya guhertoya orîjînal a weşandinê, heke weşandin di nava rêzeyeke tarîxan de bûbe. Ev wek
{{para|tarîxa-destpêkê}} dixebite, û pir kêm caran lazim e were diyarkirin.]=]},
{{"platform", multientity = true},
[=[Platforma ku <<work>> lê hatiye weşandin. Ev ji bo platformên berhevkirina muhtewayê ne wek {{w|YouTube}},
{{w|Issuu}} û {{w|Magzter}}. (Hîna bernavek kurmancî ji bo vê parametreyê nehatiye çêkirin.) Ev wek "bi rêya
PLATFORM" tê nîşandan.]=]},
{{"çavkanî", multientity = true},
[=[Çavkaniya muhtewaya <<work>>. Ev bi taybetî ji bo ajansên nûçeyan e wek {{w|Associated Press}}, {{w|Reuters}}
û {{w|Agence France-Presse}} (AFP) (û ji ber vê yekê di {{şx|jêder-kovar}} de wek {{para|ajans}} tê binavkirin).
Ev wek "ji ÇAVKANÎ hatiye wergirtin" tê nîşandan.]=]},
},
{"Parametreyên li gorî cildê",
{{"cild", "cildên", annotated = true},
[=[Hejmara cild(an) a <<collection>>. Ev wek "cild CILD" tê nîşandan, an "cildên CILDÊN" heke rêzeyeke hejmaran
were dayîn. Ka "cild" an "cildên" were nîşandan bi awayekî wekhev ê {{para|rûpel}} û {{para|rûpelên}} tê
naskirin; {!} li destpêka nirxê bicîh bike ji bo vemirandina vê û rêzgirtina navê parametreyê. {{para|cild-sade}}
bikar bîne heke tu nexwazî kelîmeya "cild" berî hejmara cildê xuya bibe.]=]},
{{"cild-sade", annotated = true},
[=[Nivîseke azad ku hejmara cild(an) a <<collection>> diyar dike, wek nimûne {kitêba II}. Tenê yekê ji
{{para|cild}}, {{para|cildên}} û {{para|cild-sade}} bikar bîne.]=]},
{"urlya-cild",
[=[URL'ya an navnîşana webê ya rûpela li hev a cildê ku nivîsa jêgirtî tê de ye, heke <<collection>> çend cild
hebin bi URL'yên cuda. Hejmara cild(an) dê pê ve bê girêdan.]=]},
{{{"hejmar", "nimare"}, {"hejmarên", "nimareyên"}, {"hejmar-sade", "nimare-sade"}, useand = true, annotated = true},
[=[Hejmara/hejmarên nivîsa jêgirtî. Ev parametre wek {{para|rûpel}}, {{para|rûpelên}} û {{para|rûpel-sade}}
dixebitin, ji bilî ku nivîsa xuyayî kelîmeya "hejmar" an "nimare" dihewîne (bêyî ferqa ka koma parametreyên
{{para|hejmar}} an {{para|nimare}} têne bikaranîn; ew bernavên hev in). Nimûneyên bikaranîna {{para|hejmar-sade}}
{kitêb 2} in (heke <<collection>> bi cildan hatibe dabeşkirin û cild jî bi kitêban) an {Hejmara Taybet 1} (ku
têgeh ji almanî hatiye wergirtin, wateya "hejmareke taybet" dide).]=]},
{{{"urlya-hejmarê", "urlya-nimareyê"}, useand = true},
[=[URL'ya hejmara/hejmarên nivîsa jêgirtî. Ev parametre wek {{para|urlya-cild}} dixebite.]=]},
},
{"Parametreyên li gorî nasnameyê",
{{"doi", "DOI"}, [=[[[w:Digital object identifier|Nasnameya berhema dîjîtal]] (DOI) ya <<work>>.]=]},
{{"isbn", "ISBN"}, [=[[[w:International Standard Book Number|Hejmara Standard a Navneteweyî ya Kitêbê]] (ISBN) ya
<<collection>>. ISBN'ên 13-reqem tên tercihkirin li ser yên 10-reqem.]=]},
{{"issn", "ISSN"}, [=[[[w:International Standard Serial Number|Hejmara Rêzimalî ya Standard a Navneteweyî]]
(ISSN) ya <<collection>>.]=]},
{{"jstor", "JSTOR"}, [=[Hejmara [[w:JSTOR|JSTOR]] ya <<work>>.]=]},
{{"lccn", "LCCN"}, [=[[[w:Library of Congress Control Number|Hejmara Kontrolê ya Pirtûkxaneya Kongreyê]] (LCCN)
ya <<work>>.]=]},
{{"oclc", "OCLC"}, [=[Hejmara [[w:OCLC|Online Computer Library Center]] (OCLC) ya <<work>> (ku dikare li malpera
[http://www.worldcat.org WorldCat] were lêgerandin).]=]},
{{"ol", "OL"}, [=[Hejmara [[w:Open Library|Open Library]] (bêyî "OL") ya <<work>>.]=]},
{{"pmid", "PMID"}, [=[Nasnameya [[w:PubMed#PubMed identifier|PubMed]] (PMID) ya <<work>>.]=]},
{{"pmcid", "PMCID"}, [=[Nasnameya [[w:PubMed Central#PMCID|PubMed Central]] (PMCID) ya <<work>>.]=]},
{{"ssrn", "SSRN"}, [=[Nasnameya [[w:Social Science Research Network|Social Science Research Network]] (SSRN) ya
<<work>>.]=]},
{"bibcode", [=[{{w|Bibcode}}ya (koda bîbliyografîk, di pergalên daneyên stêrnasî de tê bikaranîn) <<work>>.]=]},
{"id", [=[Her nasnameyeke din a <<work>>.]=]},
},
{"Parametreyên li gorî arşîv û gihiştinê",
{{"urlya-arşîvê", "tarîxa-arşîvê", useand = true}, [=[{{para|urlya-arşîvê}} û {{para|tarîxa-arşîvê}} (ku divê
digel hev werin dayîn) bikar bîne ji bo diyarkirina URL'ya an navnîşana webê ya rûpeleke malperekê wek
[https://archive.org Internet Archive] an [https://perma.cc Perma.cc] ku rûpel lê hatiye arşîvkirin, û tarîxa ku
rûpel lê hatiye arşîvkirin.]=]},
{"tarîxa-gihiştinê", [=[Heke rûpel neyê arşîvkirin, {{para|tarîxa-gihiştinê}} bikar bîne ji bo diyarkirina tarîxa
dawî ya ku rûpel hatiye gihiştin. Berevajî parametreyên din ên tarîxê, ev parametre nivîseke azad e. (Heke rûpel
hatibe arşîvkirin, ne lazim e ev parametre were bikaranîn.)]=]},
},
{"Parametreyên cihêreng ên rêza jêderê",
{"format", [=[Formata ku <<work>> lê ye, wek nimûne, {hardcover} an {paperback} ji bo kitêbekê an {blog} ji bo
rûpeleke webê. (Hîna bernavek kurmancî ji bo vê parametreyê nehatiye çêkirin.)]=]},
{"janr", [=[{{w|Janra edebî}} ya <<work>>, wek nimûne {fiction} an {non-fiction}.]=]},
{"medium", [=[Medyaya qeydkirina <<work>>, wek nimûne, {Blu-ray}, {CD}, {DVD}, {fîlim}, {podcast}, {berhema
televizyonê}, {qeyda dengî} an {kaseta vîdyoyê}. (Hîna bernavek kurmancî ji bo vê parametreyê nehatiye
çêkirin.)]=]},
{{"nekat", boolean = true}, [=[{{para|nekat|1}} diyar bike ji bo vemirandina zêdekirina rûpelê li kategoriyeke bi
forma {Kategorî:Jêgirtinên bi ``ziman``}. Ev bi normal nabe were kirin.]=]},
{{"nocolon", boolean = true}, [=[{{para|nocolon|1}} diyar bike ji bo vemirandina zêdekirina niqteya bi virgul li dawiya
rêza jêderê. (Hîna bernavek kurmancî ji bo vê parametreyê nehatiye çêkirin.) Ev dikare were bikaranîn heke sernav
bixwe (an kêm caran, nirxeke din a rêza jêderê) termê behskirî nîşan bide. Bawer bike ku tu herfên qalind ên
sêalî bikar tînî di termê behskirî de, wek nimûne <code><nowiki>'''term'''</nowiki></code>, da ku diyar bike ka
nivîsa jêgirtî kîjan e.]=]},
{{"wekçavkanî", boolean = true}, [=[{{para|wekçavkanî|1}} diyar bike ji bo zorkirina formata "çavkaniyê" (nivîskar
pêşî).]=]},
{{"wekjêgirtin", boolean = true}, [=[{{para|wekjêgirtin|1}} diyar bike ji bo zorkirina formata "jêgirtinê" (sal
pêşî).]=]},
},
{"Guhertoya nû ya <<work:a>> (parametreyên <code>*2</code>)",
[=[Parametreyên jêrîn dikarin werin bikaranîn ji bo diyarkirina guhertoyeke nû ya <<work>>, wek çapeke nû, çapeke
din, an guhertoyeke din a ji nû ve hatî weşandin. Awayê giştî yê vê ev e:
# {{para|versiyona-nû|ji nû ve hatiye weşandin wekî}}, {{para|versiyona-nû|hate tercimekirin wekî}},
{{para|versiyona-nû|hate jêgirtin di}} an tiştên bi vî rengî diyar bike ji bo nîşandana ka guhertoya nû çi ye.
(Di hin rewşan de, ev parametre dikare neyê dayîn; li jêr binêre.)
# Nivîskar(ên) guhertoya nû bi {{para|2nivîskar}} diyar bike (çend nivîskaran bi niqteya bi virgul ji hev cuda bike) an
{{para|2paşnav}}/{{para|2pêşnav}}.
# Taybetmendiyên mayî yên guhertoya nû bi zêdekirina {2} li dû parametreyên li jor hatine diyarkirin bide, wek
nimûne {{para|sernav2}} ji bo sernavê guhertoya nû, {{para|rûpel2}} ji bo hejmara rûpelê ya guhertoya nû, hwd.
Hin parametreyên taybet wekî alternatîfek ji bo diyarkirina guhertoyeke nû bi vî rengî têne peyakirin. Wek nimûne,
parametreyên {{para|orîjînal}} û {{para|ji-aliyê}} dikarin werin bikaranîn dema guhertoyeke tercimekirî ya
<<work:a>> tê jêgirtin; li jêr binêre.]=],
{"versiyona-nû",
[=[Şablon dihesibîne ku guhertoyeke nû ya <<work>> tê behskirin heke {{para|versiyona-nû}} an {{para|cih2}}
hatibin dayîn, an heke parametreyên nivîskarê guhertoya nû hatibin dayîn ({{para|2nivîskar}} an {{para|2paşnav}}),
an heke parametreyeke din a sernav an nivîskarê guhertoya nû hatibe dayîn (her yek ji {{para|beş2}},
{{para|sernav2}}, {{para|terciman2}}, {{para|edîtor2}}). Paşê wiha tevdigere:
* Heke nivîskar, edîtor û/an sernav hatibin dayîn, "ji nû ve hatiye weşandin wekî" nîşan dide.
* Heke tenê cih, weşanxane û tarîxa weşandinê hatibin dayîn, "ji nû ve hatiye weşandin" nîşan dide.
* Heke çapek hatibe dayîn, tu nivîs nayê nîşandan.
{{para|versiyona-nû}} bikar bîne ji bo betalkirina vê tevgerê, wek nimûne, bi nîşandana "hate jêgirtin di" an
"ji nû ve hatiye çapkirin wekî".]=]},
{{"2nivîskar", multientity = true},
[=[Nivîskarê guhertoya nû. Çend nivîskaran bi niqteya bi virgul ji hev cuda bike. Wekî din, {{para|2paşnav}} û
{{para|2pêşnav}} bikar bîne.]=]},
{{"2paşnav", "2pêşnav", useand = true},
[=[Pêşnav (digel navên navîn an herfên pêşî) û paşnavê nivîskarê guhertoya nû. Tê tercihkirin ku
{{para|2nivîskar}} li şûna {{para|2paşnav}}/{{para|2pêşnav}} were bikaranîn, ji ber çend sedeman:
# Navên axaftvanên zimanên biyanî dibe hêsan nebe ew bikevin pêşnav û paşnavan.
# Tenê yek nivîskar dikare bi {{para|2paşnav}}/{{para|2pêşnav}} were diyarkirin, dema çend nivîskarên bi niqteya bi virgul
ji hev cuda dikarin bi {{para|2nivîskar}} werin dayîn.
# Guherkerên paşiyê ji bo {{para|2paşnav}} û {{para|2pêşnav}} nayên piştgirîkirin û naskirina xeta nivîsê
nayê kirin, tê wê wateyê ku tenê navên bi herfên latînî têne piştgirîkirin.]=]},
{"2lînka-nivîskar",
[=[Navê meqaleyeke [https://en.wikipedia.org Wîkîpediyaya îngilîzî] li ser nivîskar, ku dê bi nav(ên) di
{{para|2nivîskar}} an {{para|2paşnav}}/{{para|2pêşnav}} de hatine dayîn ve were girêdan. Pêşgira {:en:} an {w:}
zêde neke. Wekî din, navê her kesî rasterast girêbide, wiha:
{{para|2nivîskar|<nowiki>[[w:Kathleen Taylor (biologist)|Kathleen Taylor]]</nowiki>}}.]=]},
{{"{{para|sernav2}}, {{para|edîtor2}}, {{para|cih2}}, ''hwd.''", literal = true, multientity = true},
[=[Piraniya parametreyên li jor hatine navborîn dikarin li guhertoyeke nû ya <<work>> werin sepandin bi
zêdekirina {2} li dû navê parametreyê. Tê tewsiyekirin ku bi kêmanî agahiyên çapkirinê yên guhertoya nû ya
<<work>> bi {{para|cih2}}, {{para|weşanxane2}}, û {{para|tarîx2}} an {{para|sal2}} bêne dayîn.]=]},
},
{"Awayên taybet ên alternatîf ên diyarkirina guhertoyeke nû ya <<work:a>>",
[=[Parametreyên jêrîn awayên alternatîf peyda dikin ji bo diyarkirina guhertoyeke nû ya <<work:a>>, wek çapeke nû
an tercimeyek, an rewşeke ku perçeyek ji <<work:a>> di ya din de tê jêgirtin. Heke tu bibînî ku ev parametre têrê
nakin ji bo diyarkirina hemû agahiyên li ser her du berheman, hewl nede agahiyên zêde bi zorê tê xin. Li şûna wê,
awayê li jor hatiye rave kirin bikar bîne, bi {{para|versiyona-nû}} û {{para|2nivîskar}}, {{para|sernav2}},
hwd.]=],
{{"orîjînal", annotated = true},
[=[Heke tu {{w|berhemeke derekî}} wek tercimeyekê jêgirî dikî, {{para|orîjînal}} bikar bîne ji bo diyarkirina
sernavê berhema orîjînal, {{para|ji-aliyê}} ji bo diyarkirina nivîskarê berhema orîjînal û {{para|deriv}} ji bo
diyarkirina cureyê berhema derekî. An {{para|orîjînal}}, an {{para|ji-aliyê}} divê were dayîn da ku ev awa
kêrhatî be. Heke her sê hatibin dayîn, koda {``deriv`` ya ``orîjînal`` ji hêla ``ji-aliyê`` ve} nîşan dide. Heke
{{para|orîjînal}} neyê dayîn, nivîsa xwerû {orîjînal} tê bikaranîn. Heke {{para|deriv}} neyê dayîn, nivîsa xwerû
{tercime} tê bikaranîn. Heke {{para|ji-aliyê}} neyê dayîn, perçeya "ji hêla {``ji-aliyê``} ve" nayê nîşandan.]=]},
{{"ji-aliyê", multientity = true},
[=[Heke tu {{w|berhemeke derekî}} wek tercimeyekê jêgirî dikî, {{para|ji-aliyê}} bikar bîne ji bo diyarkirina
nivîskar(ên) berhema orîjînal. Li {{para|orîjînal}} ya li jor binêre.]=]},
{"deriv",
[=[Heke tu {{w|berhemeke derekî}} wek tercimeyekê jêgirî dikî, {{para|deriv}} bikar bîne ji bo diyarkirina cureyê
berhema derekî. (Hîna bernavek kurmancî ji bo vê parametreyê nehatiye çêkirin.) Li {{para|orîjînal}} ya li jor
binêre.]=]},
{{"cihê-jêgirtinê", annotated = true},
[=[Heke nivîsa jêgirtî ji kitêba A ye ku dibêje ev nivîs ji kitêbeke din a B hatiye wergirtin, van bike:
* {{para|sernav}}, {{para|çap}}, û {{para|kesên-din}} bikar bîne ji bo dayîna agahiyan li ser kitêba B. (Wek
nimûne, {{para|kesên-din}} dikare wiha were bikaranîn: {{para|kesên-din=1893, rûpel 72}}.)
* {{para|cihê-jêgirtinê}} (ji bo sernavê kitêba A), {{para|cih}}, {{para|weşanxane}}, {{para|sal}},
{{para|rûpel}}, {{para|oclc}}, û parametreyên din ên standard bikar bîne ji bo dayîna agahiyan li ser kitêba
A.]=]},
},
}
end
local quote_mods = {
["jêder-kitêb"] = {
{"#substitute", work = "kitêb", collection = "kitêb", issue = "kitêb"},
{"sal", addalias = "2"},
{"nivîskar", addalias = "3"},
{"sernav", addalias = "4"},
{"url", addalias = "5"},
{"rûpel", addalias = "6"},
{"jêgirtin", addalias = "7"},
{"tercime", addalias = "8"},
{"beş", addalias = "made", append_desc = [=[Parametreya {{para|made}} dikare were bikaranîn heke ji ferhengekê tê
jêgirtin.]=]},
{"tercimeya-beş", addalias = "tercimeya-made", replace_desc = [=[Heke beşa, an madeya, kitêbê bi îngilîzî/kurmancî
nebe, ev parametre dikare ji bo pêşkêşkirina tercimeyeke navê beş an madeyê were bikaranîn, wekî alternatîfek ji
bo diyarkirina tercimeyê bi guherkereke paşiyê (li jor binêre).]=]},
{"urlya-beşê", addalias = "urlya-madeyê", replace_desc = [=[[[w:Universal Resource Locator|URL]]'ya an navnîşana
webê ya rûpeleke derveyî ku beş an made pê ve tê girêdan. Wek nimûne, heke kitêb hejmara rûpelan tune, rûpel dikare
bi navê beş an madeyê ve, bi vê parametreyê, were girêdan. ''Bi hîç malperekê ku muhtewaya wê mafê
[[w:copyright|telîfê]] xera dike ve negire''.]=]},
},
["jêder-kovar"] = {
{"#substitute", work = "meqale", collection = "kovar", issue = "hejmara kovarê"},
{"sal", addalias = "2"},
{"nivîskar", addalias = "3"},
{"sernav", replace_params = {"kovar", "kovar", "xezete", "xebat", "5", annotated = true}},
{"tercimeya-sernav", replace_params = {"tercimeya-kovar", "tercimeya-kovar", "tercimeya-xezete", "tercimeya-xebat"}},
{"url", addalias = "6"},
{"rûpel", addalias = "7"},
{"jêgirtin", addalias = "8"},
{"tercime", addalias = "9"},
{"çavkanî", addalias = "ajans"},
{"#replace_group", "Parametreyên li gorî beşê", {"Parametreyên li gorî meqaleyê",
{{"sernav", "meqale", "4", annotated = true, semi_required = true},
[=[Sernavê meqaleya kovarê ya jêgirtî, ku dê di "gîrçikên nîşandanê yên xemilandî" de were girtin.]=]},
{{"sernav-sade", "meqale-sade", annotated = true},
[=[Sernavê meqaleyê, ku wek xwe tê nîşandan. Her gîrçikên xwestî û kelîmeyên din zêde bike. Heke hem
{{para|sernav}} hem jî {{para|sernav-sade}} hatibin dayîn, nirxa {{para|sernav-sade}} li dû sernavî, di
kevanan de, tê nîşandan. Ev kêrhatî ye wek nimûne ji bo diyarkirina hejmara meqaleyê an nasnameyeke din.]=]},
{{"urlya-sernav", "urlya-meqaleyê"},
[=[[[w:Universal Resource Locator|URL]]'ya an navnîşana webê ya rûpeleke derveyî ku meqale pê ve tê girêdan.
Bala xwe bide ku bi giştî çêtir e {{para|urlya-rûpelê}} bikar bînî ji bo girêdana rasterast bi rûpela nivîsa
jêgirtî, heke gengaz be. ''Bi hîç malperekê ku muhtewaya wê mafê [[w:copyright|telîfê]] xera dike ve
negire''.]=]},
{{"tercimeya-sernav", "tercimeya-meqale"},
[=[Heke meqaleya kovarê bi îngilîzî/kurmancî nebe, ev parametre dikare ji bo pêşkêşkirina tercimeyeke sernav
were bikaranîn, wekî alternatîfek ji bo diyarkirina tercimeyê bi guherkereke paşiyê (li jor binêre).]=]},
{{"tercimanê-meqaleyê", multientity = true},
[=[Tercimanê meqaleyê, heke ji tercimanê giştî yê kovarê cuda be (bi {{para|terciman}} hatiye diyarkirin).]=]},
{{"seriya-meqaleyê", "cildê-seriya-meqaleyê", annotated = true, useand = true},
[=[Heke ev meqale perçeyek e ji seriyeke meqaleyên dişibihin, {{para|seriya-meqaleyê}} dikare ji bo
diyarkirina navê seriyê were bikaranîn, û {{para|cildê-seriya-meqaleyê}} jî ji bo diyarkirina jimareya seriyê,
heke hebe. Parametreyên {{para|serî}} û {{para|cildê-seriyê}} yên ji bo kovarê bi tevahî bide ber hev. Ev
parametre dikarin werin bikaranîn, wek nimûne, ji bo stûnên dubareyî yên di rojnameyekê de.]=]},
}
},
},
}
local function canonicalize_paramspec(paramspec, add_non_generic)
-- Canonicalize a top-level string param to a list.
if type(paramspec) == "string" then
paramspec = {paramspec}
end
for j, paramset in ipairs(paramspec) do
-- Canonicalize a second-level string param to a list.
if type(paramset) ~= "table" or paramset.param then
paramset = {paramset}
paramspec[j] = paramset
end
for k, param in ipairs(paramset) do
-- Canonicalize a single param to object form.
if type(param) == "string" then
param = {param = param}
if add_non_generic and param.non_generic == nil then
param.non_generic = true
end
paramset[k] = param
end
end
end
return paramspec
end
local function canonicalize_param_group(group, add_non_generic)
local ind = 2
if type(group[2]) == "string" then
ind = ind + 1
end
for i = ind, #group do
-- Canonicalize the parameter spec to the maximally-expressed form for easier processing.
local paramspec, desc = unpack(group[i])
group[i][1] = canonicalize_paramspec(paramspec, add_non_generic)
end
end
local function canonicalize_param_list(params, add_non_generic)
-- Canonicalize an addalias= spec to a list for easier processing.
if type(params) ~= "table" or params.param then
params = {params}
end
for i, p in ipairs(params) do
-- Canonicalize.
if type(p) == "string" then
p = {param = p}
params[i] = p
end
if add_non_generic and p.non_generic == nil then
p.non_generic = true
end
end
return params
end
-- Apply the modifications specified in `mods` to the parameters in `params`.
local function apply_mods(params, mods)
local mod_table = {}
local subvals
-- First, convert the modifications to a dictionary for easy lookup as we traverse the existing parameters.
for _, mod in ipairs(mods) do
local param = mod[1]
if param == "#substitute" then
mod[1] = nil
subvals = mod
elseif param ~= "#replace_group" then
-- Need to do replace_group after aliases because replace_group might introduce new params that we don't want aliases
-- to touch (e.g. |title= in {{quote-journal}}).
mod_table[param] = mod
end
end
-- Process each group in turn.
for _, group in ipairs(params) do
canonicalize_param_group(group)
local ind = 2
if type(group[2]) == "string" then
ind = ind + 1
end
for i = ind, #group do
-- Go through each parameter group looking for modifications, and make them. To avoid problems
-- side-effecting lists as we process them, we first clone the group and iterate over the clone, which
-- remains unmodified.
local paramspec, desc = unpack(group[i])
local specclone = m_table.deepCopy(paramspec)
for j, paramset in ipairs(specclone) do
for k, param in ipairs(paramset) do
local mod = mod_table[param.param]
if mod then
if mod.addalias then
-- Canonicalize an addalias= spec to a list for easier processing.
local to_add = canonicalize_param_list(mod.addalias, "add non-generic")
for _, ta in ipairs(to_add) do
if paramspec.useand then
-- Top level refers to logically-related params so alias goes at second level.
table.insert(paramspec[j], ta)
else
table.insert(paramspec, {ta})
end
end
end
if mod.replace_params then
group[i][1] = canonicalize_paramspec(mod.replace_params, "add non-generic")
end
if mod.append_desc then
group[i][2] = group[i][2] .. " " .. mod.append_desc
end
if mod.replace_desc then
group[i][2] = mod.replace_desc
end
end
end
end
end
end
for _, mod in ipairs(mods) do
local param = mod[1]
if param == "#replace_group" then
local _, existing_group_name, new_group = unpack(mod)
canonicalize_param_group(new_group)
local ind = 2
if type(new_group[2]) == "string" then
ind = ind + 1
end
for i = ind, #new_group do
local paramspec, desc = unpack(new_group[i])
for j, paramset in ipairs(paramspec) do
for k, param in ipairs(paramset) do
if param.non_generic == nil then
param.non_generic = true
end
end
end
end
local replaced = false
for i, group in ipairs(params) do
if group[1] == existing_group_name then
params[i] = new_group
replaced = true
break
end
end
if not replaced then
error(("Internal error: Unable to locate existing group '%s'"):format(existing_group_name))
end
end
end
return subvals
end
-- Format a param spec as found in the first element of a param description.
local function format_param_spec(paramspec)
if type(paramspec) ~= "table" or paramspec.param then
paramspec = {paramspec}
end
local function format_one_param(param, non_generic)
if non_generic then
param = "<b>" .. param .. "</b>"
end
if paramspec.boolean then
return ("<code>|%s=1</code>"):format(param)
else
return ("<code>|%s=</code>"):format(param)
end
end
local function format_all_params_no_list(suffix)
local formatted = {}
for _, paramset in ipairs(paramspec) do
if type(paramset) ~= "table" or paramset.param then
paramset = {paramset}
end
local formatted_paramset = {}
for _, p in ipairs(paramset) do
if type(p) == "string" then
p = {param = p}
end
-- Skip ...2 and ...3 versions of numeric params.
if suffix == "" or not rfind(p.param, "^[0-9]+") then
table.insert(formatted_paramset, format_one_param(p.param .. suffix, p.non_generic))
end
end
local to_insert = table.concat(formatted_paramset, "/")
if to_insert ~= "" then
table.insert(formatted, to_insert)
end
end
return m_table.serialCommaJoin(formatted, {conj = paramspec.useand and "and" or "or"})
end
local function format_all_params()
if paramspec.list then
local formatted = {}
table.insert(formatted, format_all_params_no_list(""))
table.insert(formatted, format_all_params_no_list("2"))
table.insert(formatted, format_all_params_no_list("3"))
table.insert(formatted, "hwd.")
return table.concat(formatted, "; ")
else
return format_all_params_no_list("")
end
end
local formatted_params
if paramspec.literal then
formatted_params = preprocess(paramspec[1][1].param)
else
formatted_params = format_all_params()
end
local reqtext = paramspec.required and " '''(lazim)'''" or ""
return formatted_params .. reqtext
end
local function process_continued_string(desc, subvals)
desc = rsub(desc, "{{", TEMP_DOUBLE_LBRACE)
desc = rsub(desc, "}}", TEMP_DOUBLE_RBRACE)
-- Join continuation lines. Do it twice in case of a single-character line (admittedly rare).
desc = rsub(desc, "([^\n])\n[ \t]*([^ \t\n#*])", "%1 %2")
desc = rsub(desc, "([^\n])\n[ \t]*([^ \t\n#*])", "%1 %2")
-- Remove whitespace before list elements.
desc = rsub(desc, "\n[ \t]*([#*])", "\n%1")
desc = rsub(desc, "^[ \t]*([#*])", "%1")
-- placeholder variable names between double backquotes
desc = rsub(desc, "``([A-Za-z0-9_%-]+)``", "<var>%1</var>")
-- variable/parameter names between backquotes
desc = rsub(desc, "`([A-Za-z0-9_%-]+)`", '<code class="n">%1</code>')
desc = rsub(desc, "%b{}", function(m0) -- {} blocks
return "<code>" .. m0:sub(2, -2) .. "</code>"
end)
desc = rsub(desc, "<<([^><]+)>>", function(item)
local parts = rsplit(item, ":")
item = parts[1]
if subvals[item] then
if type(subvals[item]) == "string" then
item = subvals[item]
elseif type(subvals[item]) == "number" then
item = "" .. subvals[item]
else
error("The item '<<" .. item .. ">>' is a " .. type(items[item]) .. " and can't be concatenated.")
end
else
error("The item '" .. item .. "' was not found in the 'subvals' table.")
end
for i, part in ipairs(parts) do
if i > 1 then
if part == "a" then
item = ku_add_indefinite(item)
elseif part == "cap" then
item = mw.getContentLanguage():ucfirst(item)
end
end
end
return item
end)
desc = rsub(desc, TEMP_DOUBLE_LBRACE, "{{")
desc = rsub(desc, TEMP_DOUBLE_RBRACE, "}}")
desc = preprocess(desc)
return desc
end
local function format_parameter_group(group, subvals, level)
local parts = {}
local function ins(txt)
table.insert(parts, txt)
end
local prefsuf = ("="):rep(level)
ins(prefsuf .. process_continued_string(group[1], subvals) .. prefsuf)
local ind = 2
if type(group[2]) == "string" then
ins(process_continued_string(group[2], subvals))
ind = ind + 1
end
ins('{| class="wikitable"')
ins("! Parametre")
ins("! Dikare bê etîketkirin")
ins("! Dikare çend hebûnên bi niqteya bi virgul ji hev cuda bihewîne")
ins("! Têbînî")
for i = ind, #group do
local paramspec, desc = unpack(group[i])
ins('|- style="vertical-align: top"')
ins('| style="text-align: center" | ' .. format_param_spec(paramspec))
ins('| style="text-align: center" | ' .. ((paramspec.annotated or paramspec.multientity) and "'''Erê'''" or "Na"))
ins('| style="text-align: center" | ' .. (paramspec.multientity and "'''Erê'''" or "Na"))
ins("| " .. process_continued_string(desc, subvals))
end
ins("|}")
return table.concat(parts, "\n")
end
local function format_inline_modifiers(mods)
local parts = {}
local function ins(txt)
table.insert(parts, txt)
end
ins('{| class="wikitable"')
ins("! Guherker")
ins("! Têbînî")
for _, modspec in ipairs(mods) do
local modifier, desc = unpack(modspec)
ins('|- style="vertical-align: top"')
ins('| style="text-align: center" | <code>' .. modifier .. "</code>")
ins("| " .. process_continued_string(desc, {}))
end
ins("|}")
return table.concat(parts, "\n")
end
local function format_introduction(template)
local parts = {}
local function ins(txt)
table.insert(parts, txt)
end
ins("===Destpêk===")
ins(process_continued_string(generate_param_intro_text(template), {}))
ins("")
ins('{| class="wikitable"')
ins("! Guherker")
ins("! Têbînî")
for _, modspec in ipairs(generate_inline_modifiers(template)) do
local modifier, desc = unpack(modspec)
ins('|- style="vertical-align: top"')
ins('| style="text-align: center" | <code>' .. modifier .. "</code>")
ins("| " .. process_continued_string(desc, {}))
end
ins("|}")
return table.concat(parts, "\n")
end
function export.show_doc(template)
if type(template) == "table" then
template = template.args[1]
end
local params = generate_params(template)
local mods = quote_mods[template]
if not mods then
error(("No modifications found for template '%s'"):format(template))
end
local subvals = apply_mods(params, mods)
local parts = { format_introduction(template) }
for _, group in ipairs(params) do
table.insert(parts, format_parameter_group(group, subvals, 3))
end
return table.concat(parts, "\n\n")
end
return export
36etxlat32cc4a8ovd14z1qgm0gwycz
diğer yandan
0
1358583
6333627
6333604
2026-08-14T14:12:46Z
Wikihez
7344
6333627
wikitext
text/x-wiki
== {{ziman|tr}} ==
=== Girêdek ===
{{girêdek|tr}}
# [[ji hela din ve]], [[ji alîyekî din ve]]
#* {{nimûne?|ku}}
==== Etîmolojî ====
{{ji?|tr}}
b3f512czhdftyq1ywsdwhxbzcx3rihb
6333628
6333627
2026-08-14T14:13:15Z
Wikihez
7344
/* Girêdek */ (bi [[MediaWiki:Gadget-AjaxEdit.js|AjaxEdit]]ê re)
6333628
wikitext
text/x-wiki
== {{ziman|tr}} ==
=== Girêdek ===
{{girêdek|tr}}
# [[ji hêla din ve]], [[ji alîyekî din ve]]
#* {{nimûne?|ku}}
==== Etîmolojî ====
{{ji?|tr}}
fkouiiybdf0wnay02dw2ilwzk1f233o
Alîkarî:NavFrame
12
1358584
6333613
2026-08-14T13:23:27Z
Ghybu
1393
Ghybuî/ê navê [[Alîkarî:NavFrame]] weke [[Alîkarî:Tablo]] guhart
6333613
wikitext
text/x-wiki
#BERALÎKIRIN [[Alîkarî:Tablo]]
76rlv7xlaihfhobef5fbldkiah6bew6
Gotûbêj:henîşk
1
1358585
6333664
2026-08-14T16:07:32Z
Wikihez
7344
/* Telafûz */ beşeke nû
6333664
wikitext
text/x-wiki
== Telafûz ==
Ez zêde ji telafûzê fam nakim feqat dibêjim bavê min bi herfa {{q|ku|ح|tr=ḧ}} telafûz dike. Li Dêrsimê jî eynî ye? [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:07, 14 tebax 2026 (UTC)
sx1lfvm7szqd07h3dugd54c2vkz3ik2
6333665
6333664
2026-08-14T16:07:43Z
Wikihez
7344
/* Telafûz */ Bersiv
6333665
wikitext
text/x-wiki
== Telafûz ==
Ez zêde ji telafûzê fam nakim feqat dibêjim bavê min bi herfa {{q|ku|ح|tr=ḧ}} telafûz dike. Li Dêrsimê jî eynî ye? [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:07, 14 tebax 2026 (UTC)
:@[[Bikarhêner:Ghbyu|Ghbyu]] [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:07, 14 tebax 2026 (UTC)
o47oey0jm4cjeq128jvct9uwrzttwys
6333666
6333665
2026-08-14T16:08:00Z
Wikihez
7344
/* Telafûz */ Bersiv
6333666
wikitext
text/x-wiki
== Telafûz ==
Ez zêde ji telafûzê fam nakim feqat dibêjim bavê min bi herfa {{q|ku|ح|tr=ḧ}} telafûz dike. Li Dêrsimê jî eynî ye? [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:07, 14 tebax 2026 (UTC)
:@[[Bikarhêner:Ghbyu|Ghbyu]] [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:07, 14 tebax 2026 (UTC)
::@[[Bikarhêner:Ghybu|Ghybu]] [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:08, 14 tebax 2026 (UTC)
ahxzzrqma639kn8wrufe73o8oabpu84
6333667
6333666
2026-08-14T16:08:14Z
Wikihez
7344
/* Telafûz */ (bi [[MediaWiki:Gadget-AjaxEdit.js|AjaxEdit]]ê re)
6333667
wikitext
text/x-wiki
== Telafûz ==
Ez zêde ji telafûzê fam nakim feqat dibêjim bavê min bi herfa {{q|ku|ح|tr=ḧ}} telafûz dike. Li Dêrsimê jî eynî ye? [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:07, 14 tebax 2026 (UTC)
:Ping: @[[Bikarhêner:Ghybu|Ghybu]] [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:08, 14 tebax 2026 (UTC)
s9agz9e33h1prx40qrh3w9zq50vkphy
6333676
6333667
2026-08-14T16:38:01Z
Ghybu
1393
/* Telafûz */ Bersiv
6333676
wikitext
text/x-wiki
== Telafûz ==
Ez zêde ji telafûzê fam nakim feqat dibêjim bavê min bi herfa {{q|ku|ح|tr=ḧ}} telafûz dike. Li Dêrsimê jî eynî ye? [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:07, 14 tebax 2026 (UTC)
:Ping: @[[Bikarhêner:Ghybu|Ghybu]] [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:08, 14 tebax 2026 (UTC)
::Min wekî {{q|ku|hebûn}} {{IPAchar|/h/}} bîstiye. Belkî wekî {{IPAchar|/ħ/}} jî tê bivlêvkirin feqet nizanim. [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 16:38, 14 tebax 2026 (UTC)
hd2qxaoom65bbrzooeog7aig9rflkrw
6333677
6333676
2026-08-14T16:40:07Z
Ghybu
1393
/* Telafûz */
6333677
wikitext
text/x-wiki
== Telafûz ==
Ez zêde ji telafûzê fam nakim feqat dibêjim bavê min bi herfa {{q|ku|ح|tr=ḧ}} telafûz dike. Li Dêrsimê jî eynî ye? [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:07, 14 tebax 2026 (UTC)
:Ping: @[[Bikarhêner:Ghybu|Ghybu]] [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:08, 14 tebax 2026 (UTC)
::Min wekî {{q|ku|hebûn}} {{IPAchar|/h/}} bîstiye. Belkî wekî {{IPAchar|/ħ/}} jî tê bivlêvkirin feqet ez ew nizanim. [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 16:38, 14 tebax 2026 (UTC)
tr7iieytwpk8lukel0q3xr9nupqulke
Bikarhêner:Wikihez/skrîpt/py/test.py
2
1358586
6333689
2026-08-14T18:38:16Z
Wikihez
7344
Rûpel bi "<syntaxhighlight lang="html"> <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>start.js — Ghybu's feedback, interpreted</title> <style> :root { --surface-1: #fcfcfb; --page: #f9f9f7; --text-primary: #0b0b0b; --text-secondary: #52514e; --text-muted: #898781; --gridline: #e1e0d9; --border: rgba(11,11,11,0.10); --blue: #2a78d6; --blue-tint: #eaf2fc; --orange: #d15a1c; --orange-tint: #fdefe6; --gr..." hat çêkirin
6333689
wikitext
text/x-wiki
<syntaxhighlight lang="html">
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>start.js — Ghybu's feedback, interpreted</title>
<style>
:root {
--surface-1: #fcfcfb;
--page: #f9f9f7;
--text-primary: #0b0b0b;
--text-secondary: #52514e;
--text-muted: #898781;
--gridline: #e1e0d9;
--border: rgba(11,11,11,0.10);
--blue: #2a78d6;
--blue-tint: #eaf2fc;
--orange: #d15a1c;
--orange-tint: #fdefe6;
--gray-tint: #f1f0ed;
--gray-border: #c3c2b7;
--red: #c53b3b;
--red-tint: #fbeceb;
}
* { box-sizing: border-box; }
body {
margin: 0;
background: var(--page);
color: var(--text-primary);
font-family: system-ui, -apple-system, "Segoe UI", sans-serif;
line-height: 1.5;
}
.wrap { max-width: 1080px; margin: 0 auto; padding: 40px 24px 80px; }
h1 { font-size: 22px; margin: 0 0 4px; }
.subtitle { color: var(--text-secondary); font-size: 14px; margin: 0 0 28px; }
h2 { font-size: 16px; margin: 40px 0 12px; padding-bottom: 8px; border-bottom: 1px solid var(--gridline); }
h3 { font-size: 13px; margin: 0 0 10px; color: var(--text-secondary); text-transform: uppercase; letter-spacing: 0.03em; }
p { color: var(--text-secondary); font-size: 14px; }
.card {
background: var(--surface-1);
border: 1px solid var(--border);
border-radius: 10px;
padding: 18px 20px;
}
.quote {
background: var(--surface-1);
border-left: 3px solid var(--gray-border);
border-radius: 0 8px 8px 0;
padding: 14px 18px;
font-size: 13.5px;
color: var(--text-secondary);
white-space: pre-wrap;
}
table { width: 100%; border-collapse: collapse; font-size: 13.5px; background: var(--surface-1); border: 1px solid var(--border); border-radius: 10px; overflow: hidden; }
th, td { text-align: left; padding: 10px 12px; border-bottom: 1px solid var(--gridline); vertical-align: top; }
th { background: var(--gray-tint); color: var(--text-secondary); font-weight: 600; font-size: 12px; text-transform: uppercase; letter-spacing: 0.02em; }
tr:last-child td { border-bottom: none; }
.kurd { font-style: italic; color: var(--text-primary); }
.tag { display: inline-block; font-size: 11px; font-weight: 600; padding: 2px 8px; border-radius: 999px; }
.tag-req { background: var(--blue-tint); color: var(--blue); }
.tag-notreq { background: var(--gray-tint); color: var(--text-secondary); border: 1px solid var(--gray-border); }
/* ── Diagram ───────────────────────────────────────────── */
.diagrams { display: grid; grid-template-columns: 1fr 1fr; gap: 24px; align-items: start; }
@media (max-width: 760px) { .diagrams { grid-template-columns: 1fr; } }
.diagram-col h3 { text-align: center; }
.stack { display: flex; flex-direction: column; gap: 6px; }
.box {
border-radius: 8px;
padding: 10px 12px;
font-size: 13px;
border: 1.5px solid var(--gray-border);
background: var(--surface-1);
position: relative;
}
.box .label { font-weight: 600; }
.box .sub { color: var(--text-muted); font-size: 11.5px; margin-top: 2px; }
.box.required { border-color: var(--blue); background: var(--blue-tint); }
.box.required .label { color: var(--blue); }
.box.hidden { border-style: dashed; background: var(--gray-tint); color: var(--text-muted); }
.box.hidden .label { color: var(--text-secondary); }
.box.moved { border-color: var(--orange); background: var(--orange-tint); }
.box.moved .label { color: var(--orange); }
.flag {
position: absolute; top: -8px; right: -8px;
background: var(--red); color: #fff; font-size: 10px; font-weight: 700;
width: 18px; height: 18px; border-radius: 999px;
display: flex; align-items: center; justify-content: center;
}
.arrow { text-align: center; color: var(--text-muted); font-size: 12px; margin: 0; }
.tabstrip { display: flex; gap: 6px; flex-wrap: wrap; margin-top: 6px; }
.tabchip {
font-size: 11px; padding: 3px 9px; border-radius: 6px 6px 0 0;
background: var(--gray-tint); border: 1px solid var(--gray-border); border-bottom: none;
color: var(--text-secondary);
}
.tabpanel {
border: 1px dashed var(--gray-border); border-radius: 0 8px 8px 8px;
padding: 8px 10px; font-size: 12px; color: var(--text-muted); background: var(--gray-tint);
}
.legend { display: flex; gap: 18px; flex-wrap: wrap; font-size: 12px; color: var(--text-secondary); margin-top: 10px; }
.legend span { display: inline-flex; align-items: center; gap: 6px; }
.swatch { width: 12px; height: 12px; border-radius: 3px; display: inline-block; }
.qlist { padding-left: 0; list-style: none; margin: 0; }
.qlist li {
background: var(--surface-1); border: 1px solid var(--border); border-left: 3px solid var(--red);
border-radius: 0 8px 8px 0; padding: 12px 16px; margin-bottom: 10px; font-size: 13.5px;
}
.qlist .en { color: var(--text-muted); font-size: 12px; margin-top: 4px; }
code { background: var(--gray-tint); padding: 1px 5px; border-radius: 4px; font-size: 12px; }
.footer-note { color: var(--text-muted); font-size: 12px; margin-top: 40px; }
</style>
</head>
<body>
<div class="wrap">
<h1>start.js — reading Ghybu's feedback into a concrete change list</h1>
<p class="subtitle">Ghybu's Kurmanji talk-page comment (14 Tebax 2026), translated and mapped onto the actual wizard/output structure in <code>start.js</code>, so you can confirm the reading before anything gets built.</p>
<h2>1. The original message, point by point</h2>
<table>
<tr><th style="width:6%">#</th><th style="width:12%">Necessary?</th><th style="width:38%">Kurmanji (Ghybu)</th><th>What I think this means</th></tr>
<tr>
<td>1</td>
<td><span class="tag tag-notreq">ne hewce ye</span></td>
<td class="kurd">"bnr-h" were rakirin</td>
<td>Remove the <code>bnr-h</code> ("see also") field from the always-visible area of the form.</td>
</tr>
<tr>
<td>2</td>
<td><span class="tag tag-notreq">ne hewce ye</span></td>
<td class="kurd">Wêne (resim) were rakirin (li jêr were nivîsandin)</td>
<td>Same for the image (Wêne) field — take it out of the top area; it belongs further down, with the rest of the optional fields (see point 6).</td>
</tr>
<tr>
<td>3</td>
<td><span class="tag tag-notreq">ne hewce ye</span></td>
<td class="kurd">"Bilêvkirin" bin beşa Ziman û ser "Cureyê rêzimanî" hatiye nivîsandin: ne baş e. Bin beşa "Cureyê peyvê" were nivîsandin. Cem "Mane" li aliyê rast wekî "tab"</td>
<td>Right now Pronunciation (<code>=== Bilêvkirin ===</code>) is written directly under the Language header and <em>above</em> the part-of-speech header — confirmed in the code, <code>steps.pron.output</code> is inserted right after <code>steps.lang.output</code>, before the POS section. Ghybu wants it nested <em>under</em> the part-of-speech section instead, and shown as a tab next to Mane (Meaning) rather than an always-open field.</td>
</tr>
<tr>
<td>4</td>
<td><span class="tag tag-req">hewce ye</span></td>
<td class="kurd">"Cureyê rêzimanî" û "Parametreyên cureyê rêzimanî" cem hev werin nivîsandin. Nivîsa "Parametreyên ..." ne baş e. Tenê "Cins/zayend" ji bo navdêran bes e. Ji bo lêkeran jî "Cureyê lêkerê" (rehê dema niha, ...)</td>
<td>Merge the two separate questions "Cureyê rêzimanî" (choose part of speech) and "Parametreyên cureyê rêzimanî" (its parameters, currently a second question card) into one. Drop the generic "Parametreyên..." label; show a label specific to the chosen part of speech instead — "Cins/zayend" for nouns (navdêr), "Cureyê lêkerê" for verbs (lêker).</td>
</tr>
<tr>
<td>5</td>
<td>—</td>
<td class="kurd">"Bikaranîn" û "Bilêvkirin, hevmane, jê, alt., .." wekî "tab" cem "Mane"</td>
<td>Usage notes, and the pronunciation/synonym/derived-word/alt-form cluster, should all become tabs sitting right beside the Mane (Meaning) field — not separate always-open sections scattered down the page.</td>
</tr>
<tr>
<td>6</td>
<td><span class="tag tag-notreq">ne hewce ne</span></td>
<td class="kurd">Beşên din jî li jêr di bin beşa "Bilêvkirin, hevmane, jê, alt, .."</td>
<td>Everything else that's optional (inflection, related words, coordinate terms, hypernym/hyponym, etymology, cognates, dialects, translations, sources, further reading…) folds into that same tabbed area too.</td>
</tr>
</table>
<p style="margin-top:14px">His own summary of the logic, in the PS: <span class="kurd">"tiştên ku hewce ne werin dîtin, yên ku ne hewce ne wekî 'tab' çêke"</span> — <em>necessary things stay visible by default; unnecessary things become tabs.</em></p>
<h2>2. Current structure vs. what the feedback proposes</h2>
<div class="diagrams">
<div class="diagram-col">
<h3>Current (in start.js today)</h3>
<div class="stack">
<div class="box hidden"><span class="flag">1</span><div class="label">bnr-h</div><div class="sub">always-visible field, top of form</div></div>
<div class="box required"><div class="label">Ziman (Language)</div></div>
<div class="box hidden"><span class="flag">3</span><div class="label">Bilêvkirin (Pronunciation)</div><div class="sub">always-open, sits between Language and POS</div></div>
<div class="box required"><div class="label">Cureyê rêzimanî (POS)</div></div>
<div class="box hidden"><span class="flag">4</span><div class="label">Parametreyên cureyê rêzimanî</div><div class="sub">separate question card, generic label</div></div>
<div class="box hidden"><span class="flag">2</span><div class="label">Wêne (Image)</div><div class="sub">always-visible field</div></div>
<div class="box required"><div class="label">Mane (Meaning)</div></div>
<div class="box hidden">
<div class="label">Existing tab bar (only 3 of ~20 optional sections)</div>
<div class="tabstrip">
<div class="tabchip">Bingehîn</div><div class="tabchip">Lînkkirin</div><div class="tabchip">Bikaranîn</div>
</div>
<div class="tabpanel">tewandin · etîmolojî · zarava · werger · hevmane/dijmane · jê/têkildar/alt · notên bikaranînê · alfabeyendin · dûnde · çavkanî · bêhtir bixwîne</div>
</div>
</div>
</div>
<div class="diagram-col">
<h3>Proposed (my reading of the feedback)</h3>
<div class="stack">
<div class="box required"><div class="label">Ziman (Language)</div></div>
<div class="box moved"><div class="label">Cureyê peyvê (POS + its params, merged)</div><div class="sub">one question; label switches: "Cins/zayend" for nouns, "Cureyê lêkerê" for verbs</div></div>
<div class="box required"><div class="label">Mane (Meaning)</div></div>
<div class="box moved">
<div class="label">Tab strip, right beside Mane</div>
<div class="tabstrip">
<div class="tabchip">Bilêvkirin</div><div class="tabchip">Bikaranîn</div><div class="tabchip">Hevmane / Dijmane</div><div class="tabchip">Jê / Têkildar / Alt.</div><div class="tabchip">Wêne</div><div class="tabchip">bnr-h</div><div class="tabchip">…</div>
</div>
<div class="tabpanel">everything not required lives here, collapsed until clicked — pronunciation, image, bnr-h, usage notes, synonyms/antonyms, derived/related/alt-form words, inflection, hypernym/hyponym, etymology, cognates, dialects, translations, sources, further reading</div>
</div>
</div>
</div>
</div>
<div class="legend">
<span><span class="swatch" style="background:var(--blue-tint);border:1.5px solid var(--blue)"></span>required, always visible</span>
<span><span class="swatch" style="background:var(--orange-tint);border:1.5px solid var(--orange)"></span>moved / merged / relabeled</span>
<span><span class="swatch" style="background:var(--gray-tint);border:1.5px dashed var(--gray-border)"></span>optional today, stays visible today</span>
<span><span class="swatch" style="background:var(--red);border-radius:999px"></span>feedback point # it maps to</span>
</div>
<h2>3. Worth confirming with Ghybu before building this</h2>
<ul class="qlist">
<li>
Wêne (resim) — birrîn e an tenê bibe tab? Nirxandina min: dibe "tab", ne rakirina bêqisûr, çunkî di PS-ê de gotiye "yên ku ne hewce ne wekî tab çêke" ne "jê bibe".
<div class="en">Should the image field be a tab (collapsed by default) like everything else marked "not necessary," or actually removed from the wizard entirely? Point 2 says "rakirin" (remove), but the PS logic frames "not necessary" items as things that become tabs, not things that get deleted. I read it as "becomes a tab" — worth a one-line confirmation.</div>
</li>
<li>
Ji bo "Cureyê rêzimanî" yên din (ne navdêr, ne lêker — mînak rengdêr, hoker, daçek…), gelo etîketek taybet a "parametre" jî hewce ye, an ew jî dikarin bêyî sernav bimînin?
<div class="en">Point 4 only names "Cins/zayend" for nouns and "Cureyê lêkerê" for verbs. What should the merged section's label be for every other part of speech (adjective, adverb, preposition, etc.)? Generic/no label, or something else per POS?</div>
</li>
<li>
Tab-a "Bilêvkirin" — divê rasterast li jêr sernavê beşa cureyê rêzimanî (di rûpelê de) bimîne wekî <code>==== Bilêvkirin ====</code>, an tenê di forma dagirtinê (wizard) de wekî tab xuya bike lê di derdana rûpelê de cîhê xwe yê heyî bihêle?
<div class="en">For point 3 — is this purely a wizard-UI change (how the fields are arranged while filling the form), or should the generated wiki page's actual heading order change too (Bilêvkirin currently prints before the POS header on the live page)? Both need to move for the fix to hold — worth confirming that's understood, since it changes the wikitext output, not just the form layout.</div>
</li>
</ul>
<h2>4. For implementation, once confirmed</h2>
<p>Rough map from each point to where it lives in <code>start.js</code>, for whoever implements this:</p>
<table>
<tr><th style="width:8%">Point</th><th style="width:30%">Code location</th><th>Change needed</th></tr>
<tr><td>1</td><td><code>steps.bnrh</code> — line 2713; ordering — line 3537</td><td>Fold into the tab system instead of the top-level always-visible list.</td></tr>
<tr><td>2</td><td><code>steps.resim</code> — line 2613</td><td>Same — currently always-visible (<code>visible: true</code> once lang+pos set); move into tab strip.</td></tr>
<tr><td>3</td><td><code>steps.pron</code> — line 1154; output order — line 4094 (prints before <code>sectionTexts</code>, i.e. before the POS section)</td><td>Nest pron's output inside the POS section's output instead of before it; add it as a tab entry near <code>steps.dfn</code>.</td></tr>
<tr><td>4</td><td><code>steps.pos</code> — line 1253; <code>steps.posparams</code> — line 1346 (label at 1348–1349)</td><td>Render as one combined question card; make the posparams label conditional on <code>values.pos</code> (navdêr → "Cins/zayend", lêker → "Cureyê lêkerê").</td></tr>
<tr><td>5, 6</td><td><code>STEP_GROUPS</code> — line 3544</td><td>Already the right mechanism — extend it to cover pron/resim/bnrh and every step not currently grouped, and move the tab bar's DOM position to sit next to the Mane (<code>dfn</code>) field.</td></tr>
</table>
<p class="footer-note">Built from a read-through of the ~5,300-line <code>start.js</code> gadget (Kurdish Wiktionary's word-entry wizard) in your Wiki folder, cross-checked against the actual output order the script assembles (<code>getWikitext</code>, line 4090) rather than just the wizard's visual order — that's how point 3 could be confirmed as a real bug, not just a stylistic complaint.</p>
</div>
</body>
</html>
</syntaxhighlight>
ais925qjt7haku027l8tsakshpehb0b
6333703
6333689
2026-08-14T19:23:56Z
Wikihez
7344
6333703
wikitext
text/x-wiki
<syntaxhighlight lang="html">
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>start.js — tab structure, before vs. after</title>
<style>
:root {
--page: #f9f9f7;
--surface-1: #fcfcfb;
--text-primary: #0b0b0b;
--text-secondary: #52514e;
--text-muted: #898781;
--gridline: #e1e0d9;
--border: rgba(11,11,11,0.10);
--blue: #2a78d6;
--blue-tint: #eaf2fc;
--orange: #d15a1c;
--orange-tint: #fdefe6;
--gray-tint: #f1f0ed;
--gray-border: #c3c2b7;
}
* { box-sizing: border-box; }
body {
margin: 0;
background: var(--page);
color: var(--text-primary);
font-family: system-ui, -apple-system, "Segoe UI", sans-serif;
line-height: 1.5;
}
.wrap { max-width: 1100px; margin: 0 auto; padding: 40px 24px 80px; }
h1 { font-size: 21px; margin: 0 0 4px; }
.subtitle { color: var(--text-secondary); font-size: 14px; margin: 0 0 30px; }
h2 { font-size: 15px; margin: 0 0 14px; text-align: center; color: var(--text-secondary); text-transform: uppercase; letter-spacing: 0.04em; }
.cols { display: grid; grid-template-columns: 1fr 1fr; gap: 28px; align-items: start; }
@media (max-width: 820px) { .cols { grid-template-columns: 1fr; } }
.always-box {
border: 1.5px solid var(--blue);
background: var(--blue-tint);
border-radius: 8px;
padding: 10px 14px;
margin-bottom: 16px;
}
.always-box .cap { font-size: 11px; font-weight: 700; color: var(--blue); text-transform: uppercase; letter-spacing: 0.04em; margin-bottom: 6px; }
.always-box .items { font-size: 13px; color: var(--text-primary); line-height: 1.7; }
.always-box .items .sub { color: var(--text-muted); font-size: 11.5px; }
.tabbar { display: flex; gap: 3px; flex-wrap: wrap; border-bottom: 2px solid var(--gray-border); margin-bottom: 0; }
.tabchip {
font-size: 12.5px; font-weight: 600; padding: 7px 13px; border-radius: 6px 6px 0 0;
background: var(--gray-tint); border: 1px solid var(--gray-border); border-bottom: none;
color: var(--text-secondary);
}
.tabchip.new { background: var(--orange-tint); border-color: var(--orange); color: var(--orange); }
.panel {
border: 1px solid var(--gray-border); border-top: none; border-radius: 0 0 8px 8px;
background: var(--surface-1); padding: 12px 14px; margin-bottom: 4px;
}
.panel .steplist { list-style: none; margin: 0; padding: 0; font-size: 13px; }
.panel .steplist li { padding: 3px 0; border-bottom: 1px dashed var(--gridline); }
.panel .steplist li:last-child { border-bottom: none; }
.panel .steplist li .en { color: var(--text-muted); font-size: 11px; }
.panel.new-tab { border-color: var(--orange); background: var(--orange-tint); }
.panel .newitem { color: var(--orange); font-weight: 600; }
.panel .newitem .en { color: var(--orange); opacity: 0.75; }
.taboverlay { position: relative; margin-bottom: 22px; }
.legend { display: flex; gap: 20px; flex-wrap: wrap; font-size: 12px; color: var(--text-secondary); margin: 26px 0 6px; justify-content: center; }
.legend span { display: inline-flex; align-items: center; gap: 6px; }
.swatch { width: 12px; height: 12px; border-radius: 3px; display: inline-block; }
.note {
background: var(--surface-1); border: 1px solid var(--border); border-left: 3px solid var(--orange);
border-radius: 0 8px 8px 0; padding: 12px 16px; font-size: 13px; color: var(--text-secondary); margin-top: 30px;
}
code { background: var(--gray-tint); padding: 1px 5px; border-radius: 4px; font-size: 12px; }
.footer-note { color: var(--text-muted); font-size: 12px; margin-top: 28px; }
</style>
</head>
<body>
<div class="wrap">
<h1>start.js wizard — tab structure before and after</h1>
<p class="subtitle">What's implemented now, reflecting the actual <code>STEP_GROUPS</code>/<code>ordered_steps</code> code — not the earlier proposal sketch.</p>
<div class="cols">
<div>
<h2>Before</h2>
<div class="always-box">
<div class="cap">Always visible, no tabs</div>
<div class="items">
bnr-h <span class="sub">(binêre herwiha)</span><br>
Ziman <span class="sub">(language)</span><br>
Bilêvkirin <span class="sub">(pronunciation)</span><br>
Cureyê rêzimanî <span class="sub">(part of speech)</span><br>
Parametreyên cureyê rêzimanî <span class="sub">(its parameters — separate question)</span><br>
Wêne <span class="sub">(image)</span>
</div>
</div>
<div class="taboverlay">
<div class="tabbar">
<div class="tabchip">Bingehîn</div>
<div class="tabchip">Lînkkirin</div>
<div class="tabchip">Bikaranîn</div>
</div>
</div>
<div style="display:grid; grid-template-columns:1fr 1fr 1fr; gap:10px;">
<div class="panel">
<ul class="steplist">
<li>Mane <span class="en">meaning</span></li>
<li>tewandin <span class="en">inflection</span></li>
<li>etîmolojî <span class="en">etymology</span></li>
<li>bi zaravayên din <span class="en">dialects</span></li>
<li>werger <span class="en">translations</span></li>
</ul>
</div>
<div class="panel">
<ul class="steplist">
<li>jê <span class="en">derived from</span></li>
<li>têkildar <span class="en">related</span></li>
<li>herwiha binêre <span class="en">see also</span></li>
<li>formên alternatîv <span class="en">alt. forms</span></li>
<li>hevmane <span class="en">synonyms</span></li>
<li>dijmane <span class="en">antonyms</span></li>
<li>jornav <span class="en">hypernym</span></li>
<li>jêrnav <span class="en">hyponym</span></li>
</ul>
</div>
<div class="panel">
<ul class="steplist">
<li>Notên bikaranînê <span class="en">usage notes</span></li>
<li>bi alfabeyên din <span class="en">other alphabets</span></li>
<li>dûnde <span class="en">loaned into</span></li>
<li>çavkanî <span class="en">sources</span></li>
<li>Bêhtir bixwîne <span class="en">further reading</span></li>
</ul>
</div>
</div>
</div>
<div>
<h2>After</h2>
<div class="always-box">
<div class="cap">Always visible, no tabs</div>
<div class="items">
Ziman <span class="sub">(language)</span><br>
Cureyê rêzimanî <span class="sub">+ its parameters — one fused question now</span>
</div>
</div>
<div class="taboverlay">
<div class="tabbar">
<div class="tabchip">Bingehîn</div>
<div class="tabchip new">Bilêvkirin</div>
<div class="tabchip">Lînkkirin</div>
<div class="tabchip">Bikaranîn</div>
<div class="tabchip new">Din</div>
</div>
</div>
<div style="display:grid; grid-template-columns:1fr 0.7fr 1fr 1fr 0.8fr; gap:8px;">
<div class="panel">
<ul class="steplist">
<li>Mane <span class="en">meaning</span></li>
<li>tewandin <span class="en">inflection</span></li>
<li>etîmolojî <span class="en">etymology</span></li>
<li>bi zaravayên din <span class="en">dialects</span></li>
<li>werger <span class="en">translations</span></li>
</ul>
</div>
<div class="panel new-tab">
<ul class="steplist">
<li class="newitem">bilêvkirin <span class="en">pronunciation</span></li>
</ul>
</div>
<div class="panel">
<ul class="steplist">
<li>jê <span class="en">derived from</span></li>
<li>têkildar <span class="en">related</span></li>
<li>herwiha binêre <span class="en">see also</span></li>
<li>formên alternatîv <span class="en">alt. forms</span></li>
<li>hevmane <span class="en">synonyms</span></li>
<li>dijmane <span class="en">antonyms</span></li>
<li>jornav <span class="en">hypernym</span></li>
<li>jêrnav <span class="en">hyponym</span></li>
</ul>
</div>
<div class="panel">
<ul class="steplist">
<li>Notên bikaranînê <span class="en">usage notes</span></li>
<li>bi alfabeyên din <span class="en">other alphabets</span></li>
<li>dûnde <span class="en">loaned into</span></li>
<li>çavkanî <span class="en">sources</span></li>
<li>Bêhtir bixwîne <span class="en">further reading</span></li>
</ul>
</div>
<div class="panel new-tab">
<ul class="steplist">
<li class="newitem">resim <span class="en">image</span></li>
<li class="newitem">bnr-h <span class="en">see also tpl.</span></li>
</ul>
</div>
</div>
</div>
</div>
<div class="legend">
<span><span class="swatch" style="background:var(--blue-tint);border:1.5px solid var(--blue)"></span>required, still always visible</span>
<span><span class="swatch" style="background:var(--gray-tint);border:1px solid var(--gray-border)"></span>unchanged tab / subsection</span>
<span><span class="swatch" style="background:var(--orange-tint);border:1.5px solid var(--orange)"></span>new tab, or moved into a tab</span>
</div>
<div class="note">
Net effect: "always visible" shrank from 6 fields to 2 (Ziman, and the now-merged Cureyê rêzimanî question). Everything else lives behind one of 5 tabs instead of 3 — Bilêvkirin got pulled out into its own tab since it's a per-word field, not really a "usage" or "linking" concern; Wêne and bnr-h landed together in a catch-all "Din" (other) tab since neither fit the existing three topics. Tab order is Bingehîn, Bilêvkirin, Lînkkirin, Bikaranîn, Din — Bingehîn stays first (and default-active) specifically because it's the one holding Mane.
</div>
<p class="footer-note">Reflects the current <code>STEP_GROUPS</code> array in start.js, plus the <code>ordered_steps</code>/tab-bar-insertion fix from the blank-Bilêvkirin-tab bug.</p>
</div>
</body>
</html>
</syntaxhighlight>
41kd0pt79amxqsncfpv8jeui5vqqzph
Bikarhêner:Wikihez/Gadget-test/data.json
2
1358587
6333693
2026-08-14T18:56:40Z
Wikihez
7344
Rûpel bi "{ "langChoices": { "ku": "kurmancî", "zza": "zazakî", "ckb": "soranî", "sdh": "kurdiya başûrî", "hac": "hewramî", "de": "almanî", "ar": "erebî", "fa": "farisî", "fr": "fransî", "fi": "fînî", "en": "îngilîzî", "ja": "japonî", "sv": "swêdî", "tr": "tirkî" }, "posChoices": { "navdêr": "Navdêr (îsm)", "lêker": "Lêker (fiîl)", "rengdêr": "Rengdêr (sifet)", "hoker": "Hoker (zerf)", "serenav": "Serenav (..." hat çêkirin
6333693
json
application/json
{
"langChoices": {
"ku": "kurmancî",
"zza": "zazakî",
"ckb": "soranî",
"sdh": "kurdiya başûrî",
"hac": "hewramî",
"de": "almanî",
"ar": "erebî",
"fa": "farisî",
"fr": "fransî",
"fi": "fînî",
"en": "îngilîzî",
"ja": "japonî",
"sv": "swêdî",
"tr": "tirkî"
},
"posChoices": {
"navdêr": "Navdêr (îsm)",
"lêker": "Lêker (fiîl)",
"rengdêr": "Rengdêr (sifet)",
"hoker": "Hoker (zerf)",
"serenav": "Serenav (îsmê xisûsî)",
"artîkel": "Artîkel",
"baneşan": "Baneşan (nîda)",
"bazinedaçek": "Bazinedaçek",
"cînav": "Cînav (zemîr)",
"daçek": "Daçek (edat)",
"girêdek": "Girêdek",
"gotineke pêşiyan": "Gotineke pêşiyan",
"hejmar": "Hejmar",
"hevok": "Hevok (cimle)",
"îfade": "Îfade",
"kurtenav": "Kurtenav",
"navgir": "Navgir",
"paşdaçek": "Paşdaçek",
"paşgir": "Paşgir",
"pêşdaçek": "Pêşdaçek",
"pêşgir": "Pêşgir",
"pirtik": "Pirtik",
"reh": "Reh",
"sembol": "Sembol",
"tîp": "Tîp (herf)"
},
"posExamples": {
"navdêr": "Kelîmeyên ji bo tiştan (sêv, heywan, qedeh) yan terman (dilşadî, bextiyarî hwd.) di rêzimanê de.",
"lêker": "Kelîmeyên ji bo kirin an bûyînê wekî 'nivîsîn' yan 'xeber dan'.",
"rengdêr": "Kelîmeyên ku wesfa navdêran nîşan didin wekî 'sêva sor' yan 'xwarina şîrîn'.",
"hoker": "Kelîmeyên ku dem, cih yan awayê kirinê diyar dikin wekî 'bi vî awayî' yan 'demkî'.",
"daçek": "Kelîmeyên ku cih, dem yan hereketê diyar dikin wekî 'di.. de' yan 'ji'.",
"cînav": "Kelîmeyên ku li şûna navdêran tên bikaranîn daku navdêr neyên dubarekirin wekî 'ew' yan 'em'.",
"baneşan": "Kelîmeyên ku hest, deng hwd. îfade dikin wekî 'noşî!' yan 'aferîn'.",
"serenav": "Navdêrên ku şexsiyetên ferdî nîşan didin, wek navên kes, cih an organîzasyonan nimûne 'London' yan 'Diyarbekir'.",
"gotineke pêşiyan": "Gotinên ku di nav xelkê de bi berbelavî tên bikaranîn bo nimûne 'Serê neêşe ne hewceyî destmalê ye'."
},
"genderLabels": {
"m": "mê",
"n": "nêr",
"nt": "nêtar",
"mn": "mê yan nêr",
"mnmane": "mê yan nêr li gorî maneyê",
"mndudil": "mê yan nêr bikaranîn dudil e",
"g": "giştî",
"y": "yekjimar",
"p": "pirjimar"
},
"tplDefs": {
"rastnivîs": {
"langs": [
"ku"
],
"noLang": true
},
"ku-Latn": {
"langs": [
"ku"
],
"noLang": true
},
"ku-tewîna-nav": {
"langs": [
"ku"
],
"noLang": true
},
"sdh-Arab": {
"langs": [
"sdh"
],
"noLang": true
},
"hac-Arab": {
"langs": [
"hac"
],
"noLang": true
},
"ja-romanîzekirin": {
"langs": [
"ja"
],
"noLang": true
},
"ckb-Arab": {
"langs": [
"ckb"
],
"noLang": true
},
"zza-awayê-Jacobsonê": {
"langs": [
"zza"
]
},
"awayekî din": {
"langs": null
},
"guharto": {
"langs": null
},
"hevmaneya": {
"langs": null
},
"kevnbûyî": {
"langs": null
},
"kêmpeyda": {
"langs": null
},
"kurtkirin": {
"langs": null
},
"paşnav": {
"langs": null
},
"şaşnivîs": {
"langs": null
}
},
"jederDefs": {
"jêder-kitêb": {
"label": "Kitêb",
"fields": {
"nivîskar": "Nivîskar",
"sernav": "Sernav",
"sernavê orjînal": "Sernavê orjînal",
"terciman": "Terciman",
"weşanxane": "Weşanxane",
"cih": "Cih",
"sal": "Sal",
"çap": "Çap",
"rûpel": "Rûpel",
"isbn": "ISBN",
"url": "URL"
}
},
"jêder-kovar": {
"label": "Kovar",
"fields": {
"nivîskar": "Nivîskar",
"nivîskar2": "Nivîskar 2",
"sernav": "Sernav",
"sernavê orjînal": "Sernavê orjînal",
"kovar": "Kovar",
"terciman": "Terciman",
"weşanxane": "Weşanxane",
"cild": "Cild",
"hejmar": "Hejmar",
"sal": "Sal",
"rûpel": "Rûpel",
"url": "URL"
}
},
"jêder-websîte": {
"label": "Websîte",
"fields": {
"nivîskar": "Nivîskar",
"sernav": "Sernav",
"terciman": "Terciman",
"websîte": "Websîte",
"url": "URL",
"arşîv": "Arşîva URLê",
"sal": "Sal",
"tarîx": "Tarîx"
}
}
},
"pronTpls": {
"ku-IPA": {
"desc": "IPAya otomatîk ji bo kurmancî (kontrol hewce ye)",
"snippet": "* {{ku-IPA}}",
"langs": [
"ku"
],
"noLang": true
},
"ku-kîte": {
"desc": "Hecekirina otomatîk ji bo kurmancî",
"snippet": "* {{ku-kîte}}",
"langs": [
"ku"
],
"noLang": true
},
"zza-IPA": {
"desc": "IPAya otomatîk ji bo zazakî",
"snippet": "* {{zza-IPA}}",
"langs": [
"zza"
],
"noLang": true
},
"zza-kîte": {
"desc": "Hecekirina otomatîk ji bo zazakî",
"snippet": "* {{zza-kîte}}",
"langs": [
"zza"
],
"noLang": true
},
"IPA": {
"desc": "Alfabeya fonetîk a navmiletî (IPA)",
"snippet": "* {{IPA|CODE|/…/}}"
},
"deng": {
"desc": "Nimûneya telafûzê bi dosyeya dengî",
"snippet": "* {{deng|CODE|navê_dosyayê.ogg|dever=}}"
},
"bilêv": {
"desc": "{{bilêv|herf|nerm, req|hejmar}}",
"snippet": "* {{bilêv|herf|cure|hejmar}}"
},
"kîte": {
"desc": "Şablona hecekirinê",
"snippet": "* {{kîte|CODE|he|ce}}"
},
"hevdeng": {
"desc": "Hevdeng — gotinên bi heman dengî",
"snippet": "* {{hevdeng|CODE|…}}"
}
},
"etymTpls": {
"ji": {
"desc": "Ji zimanekî din hatiye — {{ji|en|ku|anatomy|tr=|t=}}",
"snippet": "{{ji|SOURCELANG|CODE|…}}"
},
"deyn": {
"desc": "Deynkirî — {{deyn|lang|kod|kelîme}}",
"snippet": "{{deyn|SOURCELANG|CODE|…}}"
},
"mîr": {
"desc": "Mîrasmayî — {{mîr|lang|kod|kelîme}}",
"snippet": "{{mîr|SOURCELANG|CODE|…}}"
},
"qertaf": {
"desc": "Ji bi pêşgir, paşgir û hevedudanî — {{qertaf|kod|pêşgir-|reh}}",
"snippet": "{{qertaf|CODE|…|…}}"
},
"q": {
"desc": "Referans bo rûpelekê — {{q|kod|kelîme}} navê zimanî dernakeve",
"snippet": "{{q|CODE|…}}"
},
"hv": {
"desc": "Hevreh — {{hv|lang|kelîme}} navê zimanî derdikeve",
"snippet": "{{hv|SOURCELANG|…}}"
},
"nh": {
"desc": "Nehevreh — {{nh|lang|kelîme}} navê zimanî derdikeve",
"snippet": "{{nh|SOURCELANG|…}}"
},
"cotreh": {
"desc": "Cotreh — teror {{cotreh|ku|tirs}}",
"snippet": "{{cotreh|CODE|…}}"
},
"yekser": {
"desc": "tercimeya yekser — {{yekser|lang|kod|kelîme}}",
"snippet": "{{yekser|SOURCELANG|CODE|…}}"
},
"wergirtin": {
"desc": "Wergirtina maneyê — {{wergirtin|lang|kod|kelîme}}",
"snippet": "{{wergirtin|SOURCELANG|CODE|…}}"
},
"paşvesazî": {
"desc": "Paşvesazî — greed {{paşvesazî|en|greedy}}",
"snippet": "{{paşvesazî|CODE|…}}"
},
"qusandin": {
"desc": "Qusandin — Miho {{qusandin|ku|Mihemmed}}",
"snippet": "{{qusandin|CODE|…}}"
},
"têkilkirin": {
"desc": "Têkilkirin — sormancî {{têkilkirin|ku|soranî|kurmancî}}",
"snippet": "{{têkilkirin|CODE|…}}"
},
"nyz": {
"desc": "Nayê zanîn — {{nyz|ku|hûr=1}}",
"snippet": "{{nyz|CODE}}"
},
"onom": {
"desc": "Onomatopoetîk — {{onom|ku|hûr=1}}",
"snippet": "{{onom|CODE}}"
},
"navmiletî": {
"desc": "Navmiletî — {{navmiletî|ku|hûr=1}}",
"snippet": "{{navmiletî|CODE}}"
},
"neo": {
"desc": "neolojîzm — {{neolojîzm|ku|hûr=1}}",
"snippet": "{{neolojîzm|CODE}}"
}
},
"metadata": {
"aa": {
"haswikt": 1,
"sc": [
"Latn",
"Ethi"
]
},
"ab": {
"haswikt": 1,
"sc": [
"Cyrl",
"Latn",
"Geor"
]
},
"aer": {
"sc": "Latn"
},
"af": {
"g": [
"y",
"p"
],
"haswikt": 1
},
"ak": {
"haswikt": 1
},
"akk": {
"g": [
"n",
"m",
"n-p",
"m-p"
],
"sc": "Xsux"
},
"als": {
"haswikt": 1
},
"am": {
"g": [
"n",
"m",
"n-p",
"m-p"
],
"haswikt": 1,
"sc": "Ethi"
},
"an": {
"g": [
"n",
"m",
"n-p",
"m-p"
],
"haswikt": 1
},
"ang": {
"alt": 1,
"g": [
"n",
"m",
"nt",
"n-p",
"m-p",
"nt-p"
],
"haswikt": 1
},
"ar": {
"g": [
"n",
"m",
"n-p",
"m-p",
"p"
],
"alt": 1,
"haswikt": 1,
"sc": "Arab"
},
"arc": {
"g": [
"n",
"m",
"n-p",
"m-p"
],
"sc": [
"Hebr",
"Syrc"
]
},
"are": {},
"arz": {
"alt": 1,
"g": [
"n",
"m",
"n-p",
"m-p"
],
"sc": "Arab"
},
"as": {
"haswikt": 1,
"sc": "Beng"
},
"ast": {
"g": [
"n",
"m",
"n-p",
"m-p"
],
"haswikt": 1
},
"av": {
"haswikt": 1
},
"ay": {
"haswikt": 1
},
"az": {
"g": [
"y",
"p"
],
"haswikt": 1,
"sc": [
"Latn",
"Cyrl",
"Arab"
]
},
"ba": {
"g": [
"y",
"p"
],
"sc": "Cyrl"
},
"bar": {},
"bat-smg": {
"g": [
"n",
"m",
"n-p",
"m-p"
]
},
"bbl": {
"sc": "Geor"
},
"be": {
"g": [
"n",
"m",
"nt",
"n-p",
"m-p",
"nt-p",
"p",
"împf",
"pf"
],
"haswikt": 1,
"sc": "Cyrl"
},
"be-x-old": {
"sc": "Cyrl"
},
"bg": {
"g": [
"n",
"m",
"nt",
"n-p",
"m-p",
"nt-p",
"p",
"împf",
"pf"
],
"haswikt": 1,
"sc": "Cyrl"
},
"bh": {
"haswikt": 1,
"sc": "Deva"
},
"bhb": {
"sc": "Deva"
},
"bi": {
"haswikt": 1
},
"blt": {
"sc": "Tavt"
},
"bm": {
"haswikt": 1,
"sc": [
"Latn",
"Nkoo",
"Arab"
]
},
"bn": {
"haswikt": 1,
"sc": "Beng"
},
"bo": {
"haswikt": 1,
"sc": "Tibt"
},
"br": {
"g": [
"n",
"m"
],
"haswikt": 1
},
"ca": {
"g": [
"n",
"m",
"n-p",
"m-p"
],
"haswikt": 1
},
"cdo": {
"sc": "Hani"
},
"ce": {
"sc": "Cyrl"
},
"ch": {
"haswikt": 1
},
"chr": {
"haswikt": 1,
"sc": "Cher"
},
"cjy": {
"sc": "Hani"
},
"ckb": {
"haswikt": 1,
"sc": "Arab",
"wsc": "ku-Arab"
},
"cmn": {
"sc": "Hani",
"wiktprefix": "zh"
},
"co": {
"haswikt": 1
},
"cpx": {
"sc": "Hani"
},
"cr": {
"haswikt": 1,
"sc": "Cans"
},
"crh": {},
"cs": {
"g": [
"n",
"m",
"nt",
"n-p",
"m-p",
"nt-p",
"p",
"împf",
"pf"
],
"haswikt": 1
},
"csb": {
"g": [
"n",
"m",
"nt",
"n-p",
"m-p",
"nt-p",
"p",
"împf",
"pf"
],
"haswikt": 1
},
"cu": {
"g": [
"n",
"m",
"nt",
"n-p",
"m-p",
"nt-p",
"p",
"împf",
"pf"
],
"sc": [
"Cyrs",
"Glag"
]
},
"cv": {
"sc": "Cyrl"
},
"cy": {
"g": [
"n",
"m",
"n-p",
"m-p"
],
"haswikt": 1
},
"czh": {
"sc": "Hani"
},
"czo": {
"sc": "Hani"
},
"da": {
"g": [
"g",
"nt",
"g-p",
"nt-p",
"p"
],
"haswikt": 1
},
"dax": {},
"de": {
"g": [
"n",
"m",
"nt",
"n-p",
"m-p",
"nt-p",
"p"
],
"haswikt": 1,
"allowCaps": 1
},
"dhg": {},
"djb": {},
"dji": {},
"djr": {},
"dng": {
"sc": "Cyrl"
},
"dsb": {
"g": [
"n",
"m",
"nt",
"n-p",
"m-p",
"nt-p",
"p",
"împf",
"pf"
]
},
"dsx": {},
"duj": {},
"dv": {
"g": [
"y",
"p"
],
"haswikt": 1,
"sc": "Thaa"
},
"dz": {
"haswikt": 1,
"sc": "Tibt"
},
"el": {
"g": [
"n",
"m",
"nt",
"n-p",
"m-p",
"nt-p"
],
"haswikt": 1
},
"en": {
"g": [
"y",
"p"
],
"haswikt": 1
},
"eo": {
"g": [
"y",
"p"
],
"haswikt": 1
},
"es": {
"g": [
"n",
"m",
"n-p",
"m-p",
"p"
],
"haswikt": 1
},
"et": {
"g": [
"y",
"p"
],
"haswikt": 1
},
"ett": {
"g": [
"y",
"p"
],
"sc": "Ital"
},
"eu": {
"g": [
"y",
"p"
],
"haswikt": 1
},
"fa": {
"haswikt": 1,
"g": [
"y",
"p"
],
"sc": "Arab",
"wsc": "fa-Arab"
},
"fa-cls": {
"wiktprefix": "fa",
"sc": "Arab",
"wsc": "fa-Arab"
},
"fa-ira": {
"wiktprefix": "fa",
"sc": "Arab",
"wsc": "fa-Arab"
},
"fi": {
"g": [
"y",
"p"
],
"haswikt": 1
},
"fil": {},
"fj": {
"haswikt": 1
},
"fo": {
"g": [
"n",
"m",
"nt"
],
"haswikt": 1
},
"fr": {
"g": [
"n",
"m",
"mnmane",
"n-p",
"m-p",
"p"
],
"haswikt": 1
},
"frm": {
"g": [
"n",
"m",
"n-p",
"m-p"
]
},
"fro": {
"g": [
"n",
"m",
"n-p",
"m-p"
]
},
"fur": {
"g": [
"n",
"m",
"n-p",
"m-p"
]
},
"fy": {
"g": [
"g",
"nt",
"p"
],
"haswikt": 1
},
"ga": {
"g": [
"n",
"m",
"n-p",
"m-p",
"p"
],
"haswikt": 1
},
"gan": {
"sc": "Hani"
},
"gd": {
"g": [
"n",
"m",
"n-p",
"m-p"
],
"haswikt": 1
},
"gez": {
"sc": "Ethi"
},
"gl": {
"g": [
"n",
"m",
"n-p",
"m-p"
],
"haswikt": 1
},
"gmw-ecg": {
"g": [
"n",
"m",
"nt",
"p"
],
"allowCaps": 1
},
"gmy": {
"sc": "Linb"
},
"gn": {
"haswikt": 1
},
"gnn": {
"sc": "Latn"
},
"got": {
"g": [
"n",
"m",
"nt",
"n-p",
"m-p",
"nt-p"
],
"sc": "Goth"
},
"grc": {
"g": [
"n",
"m",
"nt",
"n-p",
"m-p",
"nt-p",
"p"
]
},
"gsw": {
"g": [
"n",
"m",
"nt",
"p"
],
"allowCaps": 1
},
"gu": {
"g": [
"n",
"m",
"nt",
"n-p",
"m-p",
"nt-p"
],
"haswikt": 1,
"sc": "Gujr"
},
"guf": {
"sc": "Latn"
},
"gv": {
"haswikt": 1
},
"ha": {
"haswikt": 1
},
"hak": {
"sc": "Hani"
},
"har": {
"sc": "Ethi"
},
"he": {
"alt": 1,
"g": [
"n",
"m",
"n-p",
"m-p",
"p"
],
"haswikt": 1,
"sc": "Hebr"
},
"hi": {
"g": [
"n",
"m",
"n-p",
"m-p",
"p"
],
"haswikt": 1,
"sc": "Deva"
},
"hif": {
"sc": [
"Latn",
"Deva"
]
},
"hit": {
"sc": "Xsux"
},
"hrx": {
"g": [
"n",
"m",
"nt",
"n-p",
"m-p",
"nt-p"
],
"haswikt": 1
},
"hsb": {
"g": [
"n",
"m",
"nt",
"n-p",
"m-p",
"nt-p",
"p",
"împf",
"pf"
],
"haswikt": 1
},
"hsn": {
"sc": "Hani"
},
"hu": {
"g": [
"y",
"p"
],
"haswikt": 1
},
"hy": {
"g": [
"y",
"p"
],
"haswikt": 1,
"sc": "Armn"
},
"ia": {
"haswikt": 1
},
"id": {
"haswikt": 1
},
"ie": {
"haswikt": 1
},
"ik": {
"haswikt": 1
},
"ike": {
"sc": "Cans"
},
"ikt": {
"sc": "Cans"
},
"io": {
"haswikt": 1
},
"is": {
"g": [
"n",
"m",
"nt",
"n-p",
"m-p",
"nt-p"
],
"haswikt": 1
},
"it": {
"g": [
"n",
"m",
"n-p",
"m-p",
"p"
],
"haswikt": 1
},
"iu": {
"haswikt": 1,
"sc": "Cans"
},
"ja": {
"haswikt": 1,
"sc": "Jpan"
},
"jay": {
"sc": "Latn"
},
"jbo": {
"haswikt": 1
},
"jv": {
"haswikt": 1
},
"ka": {
"g": [
"y",
"p"
],
"haswikt": 1
},
"khb": {
"sc": [
"Talu",
"Lana",
"Thai"
]
},
"kjh": {
"sc": "Cyrl"
},
"kk": {
"haswikt": 1,
"g": [
"y",
"p"
],
"sc": "Cyrl"
},
"kkh": {
"sc": [
"Lana",
"Thai"
]
},
"kl": {
"haswikt": 1
},
"km": {
"haswikt": 1,
"sc": "Khmr"
},
"kn": {
"haswikt": 1,
"sc": "Knda"
},
"ku": {
"g": [
"n",
"m",
"mnmane",
"mndudil",
"n-p",
"m-p",
"p"
],
"wiktprefix": "ku"
},
"ko": {
"haswikt": 1,
"sc": "Kore"
},
"krc": {
"g": [
"y",
"p"
],
"sc": "Cyrl"
},
"ks": {
"haswikt": 1,
"sc": [
"Arab",
"Deva"
],
"wsc": "ks-Arab"
},
"kw": {
"haswikt": 1
},
"ky": {
"haswikt": 1,
"g": [
"y",
"p"
],
"sc": "Cyrl"
},
"la": {
"alt": 1,
"g": [
"n",
"m",
"nt",
"n-p",
"m-p",
"nt-p"
],
"haswikt": 1
},
"lb": {
"g": [
"n",
"m",
"nt",
"p"
],
"haswikt": 1,
"allowCaps": 1
},
"lez": {
"sc": "Cyrl"
},
"li": {
"haswikt": 1
},
"lki": {
"wiktprefix": "ku"
},
"lld": {
"g": [
"n",
"m",
"n-p",
"m-p"
],
"haswikt": 1
},
"lmo": {
"g": [
"n",
"m",
"n-p",
"m-p"
],
"haswikt": 1
},
"ln": {
"haswikt": 1
},
"lo": {
"haswikt": 1,
"sc": "Laoo"
},
"lt": {
"alt": 1,
"g": [
"n",
"m",
"n-p",
"m-p"
],
"haswikt": 1
},
"lv": {
"g": [
"n",
"m",
"n-p",
"m-p"
],
"haswikt": 1
},
"lzz": {
"sc": "Geor"
},
"mg": {
"haswikt": 1
},
"mh": {
"haswikt": 1
},
"mi": {
"g": 0,
"haswikt": 1
},
"mk": {
"g": [
"n",
"m",
"nt",
"n-p",
"m-p",
"nt-p",
"p",
"împf",
"pf"
],
"haswikt": 1,
"sc": "Cyrl"
},
"ml": {
"haswikt": 1,
"sc": "Mlym"
},
"mn": {
"g": [
"y",
"p"
],
"haswikt": 1,
"sc": [
"Cyrl",
"Mong"
]
},
"mnp": {
"sc": "Hani"
},
"mo": {
"haswikt": 1,
"sc": "Cyrl"
},
"mol": {
"sc": "Cyrl"
},
"mr": {
"g": [
"n",
"m",
"nt"
],
"haswikt": 1,
"sc": "Deva"
},
"ms": {
"haswikt": 1,
"sc": [
"Latn",
"Arab"
]
},
"mt": {
"g": [
"n",
"m",
"n-p",
"m-p",
"p"
],
"haswikt": 1
},
"mwp": {
"sc": "Latn"
},
"my": {
"haswikt": 1,
"sc": "Mymr"
},
"na": {
"haswikt": 1
},
"nah": {
"haswikt": 1
},
"nan": {
"wiktprefix": "zh-min-nan",
"sc": "Hani"
},
"nb": {
"g": [
"n",
"m",
"nt",
"n-p",
"m-p",
"nt-p",
"p"
],
"wiktprefix": "no"
},
"nds-de": {
"g": [
"n",
"m",
"nt",
"n-p",
"m-p",
"nt-p"
],
"wiktprefix": "nds"
},
"nds-nl": {
"g": [
"n",
"m",
"nt",
"n-p",
"m-p",
"nt-p"
],
"wiktprefix": "nds"
},
"ne": {
"haswikt": 1,
"sc": "Deva"
},
"nl": {
"g": [
"n",
"m",
"nt",
"n-p",
"m-p",
"nt-p",
"p"
],
"haswikt": 1
},
"nn": {
"g": [
"n",
"m",
"nt",
"n-p",
"m-p",
"nt-p",
"p"
],
"haswikt": 1
},
"no": {
"g": [
"n",
"m",
"nt",
"n-p",
"m-p",
"nt-p",
"p"
],
"haswikt": 1
},
"nod": {
"sc": "Lana"
},
"non": {
"g": [
"n",
"m",
"nt",
"n-p",
"m-p",
"nt-p"
]
},
"oc": {
"g": [
"n",
"m",
"n-p",
"m-p"
],
"haswikt": 1
},
"om": {
"haswikt": 1
},
"or": {
"haswikt": 1,
"sc": "Orya"
},
"orv": {
"g": [
"n",
"m",
"nt",
"n-p",
"m-p",
"nt-p",
"p",
"împf",
"pf"
],
"sc": "Cyrs"
},
"osc": {
"sc": "Ital"
},
"ota": {
"g": [
"y",
"p"
],
"sc": "Arab",
"wsc": "ota-Arab"
},
"pa": {
"g": [
"n",
"m",
"n-p",
"m-p",
"p"
],
"haswikt": 1,
"sc": [
"Guru",
"Arab"
]
},
"pdt": {
"g": [
"n",
"m",
"nt",
"n-p",
"m-p",
"nt-p"
],
"wiktprefix": "nds"
},
"peo": {
"sc": "Xpeo"
},
"phn": {
"sc": "Phnx"
},
"pi": {
"g": [
"n",
"m",
"nt",
"n-p",
"m-p",
"nt-p"
],
"haswikt": 1
},
"pjt": {
"sc": "Latn"
},
"pl": {
"g": [
"n",
"m",
"nt",
"n-p",
"m-p",
"nt-p",
"p",
"împf",
"pf"
],
"haswikt": 1
},
"pms": {
"g": [
"n",
"m",
"n-p",
"m-p"
],
"haswikt": 1
},
"pox": {
"g": [
"n",
"m",
"nt",
"n-p",
"m-p",
"nt-p",
"împf",
"pf"
]
},
"prs": {
"wiktprefix": "fa",
"sc": "Arab",
"wsc": "fa-Arab"
},
"ps": {
"g": [
"n",
"m",
"n-p",
"m-p",
"p"
],
"haswikt": 1,
"sc": "Arab",
"wsc": "ps-Arab"
},
"pt": {
"g": [
"n",
"m",
"n-p",
"m-p",
"p"
],
"haswikt": 1
},
"qu": {
"haswikt": 1
},
"rgn": {
"g": [
"n",
"m",
"n-p",
"m-p"
]
},
"rit": {
"sc": "Latn"
},
"rm": {
"g": [
"n",
"m"
],
"haswikt": 1
},
"rn": {
"haswikt": 1
},
"ro": {
"g": [
"n",
"m",
"nt",
"n-p",
"m-p",
"nt-p",
"p"
],
"haswikt": 1,
"sc": [
"Latn",
"Cyrl"
]
},
"roa-rup": {
"haswikt": 1
},
"ru": {
"alt": 1,
"g": [
"n",
"m",
"nt",
"n-p",
"m-p",
"nt-p",
"p",
"împf",
"pf"
],
"haswikt": 1,
"sc": "Cyrl"
},
"rue": {
"g": [
"n",
"m",
"nt",
"n-p",
"m-p",
"nt-p",
"p",
"împf",
"pf"
],
"sc": "Cyrl"
},
"ruo": {
"g": [
"n",
"m",
"nt",
"n-p",
"m-p",
"nt-p"
]
},
"rup": {
"g": [
"n",
"m",
"nt",
"n-p",
"m-p",
"nt-p"
],
"wiktprefix": "roa-rup"
},
"ruq": {
"g": [
"n",
"m",
"nt",
"n-p",
"m-p",
"nt-p"
]
},
"rw": {
"haswikt": 1
},
"sa": {
"g": [
"n",
"m",
"nt",
"n-p",
"m-p",
"nt-p"
],
"haswikt": 1,
"sc": "Deva"
},
"sah": {
"sc": "Cyrl"
},
"sc": {
"haswikt": 1
},
"scn": {
"g": [
"n",
"m",
"n-p",
"m-p"
],
"haswikt": 1
},
"sco": {
"sc": "Latn"
},
"sd": {
"haswikt": 1,
"sc": "Arab",
"wsc": "sd-Arab"
},
"sdh": {
"sc": "Arab",
"wiktprefix": "ku"
},
"sg": {
"haswikt": 1
},
"sh": {
"alt": 1,
"g": [
"n",
"m",
"nt",
"n-p",
"m-p",
"nt-p",
"p",
"împf",
"pf"
],
"haswikt": 1,
"sc": [
"Latn",
"Cyrl"
]
},
"si": {
"haswikt": 1,
"sc": "Sinh"
},
"simple": {
"haswikt": 1
},
"sk": {
"g": [
"n",
"m",
"nt",
"n-p",
"m-p",
"nt-p",
"p",
"împf",
"pf"
],
"haswikt": 1
},
"sl": {
"alt": 1,
"g": [
"n",
"m",
"nt",
"n-p",
"m-p",
"nt-p",
"p",
"împf",
"pf"
],
"haswikt": 1
},
"sm": {
"haswikt": 1
},
"sn": {
"haswikt": 1
},
"so": {
"haswikt": 1
},
"spx": {
"sc": "Ital"
},
"sq": {
"g": [
"n",
"m"
],
"haswikt": 1
},
"ss": {
"haswikt": 1
},
"st": {
"haswikt": 1
},
"su": {
"haswikt": 1
},
"sux": {
"sc": "Xsux"
},
"sv": {
"g": [
"g",
"nt",
"g-p",
"nt-p"
],
"haswikt": 1
},
"sva": {
"sc": "Geor"
},
"sw": {
"nclass": 1,
"haswikt": 1
},
"syc": {
"sc": "Syrc"
},
"syr": {
"sc": "Syrc"
},
"szl": {
"g": [
"n",
"m",
"nt",
"n-p",
"m-p",
"nt-p",
"p",
"împf",
"pf"
]
},
"ta": {
"haswikt": 1,
"sc": "Taml"
},
"tdd": {
"sc": "Tale"
},
"te": {
"haswikt": 1,
"sc": "Telu"
},
"tg": {
"g": [
"y",
"p"
],
"haswikt": 1,
"sc": "Cyrl"
},
"th": {
"haswikt": 1,
"sc": "Thai"
},
"ti": {
"haswikt": 1,
"sc": "Ethi"
},
"tig": {
"sc": "Ethi"
},
"tiw": {
"sc": "Latn"
},
"tk": {
"g": [
"y",
"p"
],
"haswikt": 1
},
"tl": {
"haswikt": 1,
"sc": [
"Latn",
"Tglg"
]
},
"tmr": {
"sc": "Hebr"
},
"tn": {
"haswikt": 1
},
"to": {
"haswikt": 1
},
"tpi": {
"haswikt": 1
},
"tr": {
"g": [
"y",
"p"
],
"alt": 1,
"haswikt": 1
},
"ts": {
"haswikt": 1
},
"tt": {
"g": [
"y",
"p"
],
"haswikt": 1
},
"tts": {
"sc": "Thai"
},
"tw": {
"haswikt": 1
},
"udi": {
"sc": [
"Cyrl",
"Latn",
"Armn",
"Geor"
]
},
"ug": {
"g": [
"y",
"p"
],
"haswikt": 1,
"sc": "Arab",
"wsc": "ug-Arab"
},
"uga": {
"sc": "Ugar"
},
"uk": {
"g": [
"n",
"m",
"nt",
"n-p",
"m-p",
"nt-p",
"p",
"împf",
"pf"
],
"haswikt": 1,
"sc": "Cyrl"
},
"ulk": {
"sc": "Latn"
},
"ur": {
"g": [
"n",
"m",
"n-p",
"m-p",
"p"
],
"haswikt": 1,
"sc": "Arab",
"wsc": "ur-Arab"
},
"uz": {
"g": [
"y",
"p"
],
"haswikt": 1
},
"vec": {
"g": [
"n",
"m",
"n-p",
"m-p"
],
"haswikt": 1
},
"vi": {
"haswikt": 1
},
"vls": {
"g": [
"n",
"m",
"nt",
"n-p",
"m-p",
"nt-p"
]
},
"vo": {
"haswikt": 1
},
"wa": {
"haswikt": 1
},
"wbp": {
"sc": "Latn"
},
"wo": {
"haswikt": 1
},
"wuu": {
"sc": "Hani"
},
"xae": {
"sc": "Ital"
},
"xcr": {
"sc": "Cari"
},
"xfa": {
"sc": "Ital"
},
"xh": {
"alt": 1,
"nclass": 1,
"haswikt": 1
},
"xlc": {
"sc": "Lyci"
},
"xld": {
"sc": "Lydi"
},
"xlu": {
"sc": "Xsux"
},
"xmf": {
"sc": "Geor"
},
"xno": {
"g": [
"n",
"m",
"n-p",
"m-p"
]
},
"xrr": {
"sc": "Ital"
},
"xst": {
"sc": "Ethi"
},
"xum": {
"sc": "Ital"
},
"xve": {
"sc": "Ital"
},
"xvo": {
"sc": "Ital"
},
"yi": {
"g": [
"n",
"m",
"nt",
"n-p",
"m-p",
"nt-p",
"p"
],
"haswikt": 1,
"sc": "Hebr"
},
"yo": {
"haswikt": 1
},
"yua": {
"g": [
"y",
"p"
],
"alt": 1
},
"yue": {
"sc": "Hani"
},
"za": {
"haswikt": 1,
"sc": "Latn"
},
"zh-classical": {
"sc": "Hani"
},
"zh-min-nan": {
"haswikt": 1
},
"zh-yue": {
"sc": "Hani"
},
"zu": {
"alt": 1,
"nclass": 1,
"haswikt": 1
},
"zza": {
"g": [
"n",
"m",
"mn",
"n-p",
"m-p",
"p"
],
"wiktprefix": "diq"
}
},
"ziman": {
"ku": "kurmancî",
"en": "îngilîzî",
"tr": "tirkî",
"de": "almanî",
"pl": "polonî",
"ja": "japonî",
"fa": "farisî",
"sh": "sirboxirwatî",
"fr": "fransî",
"ka": "gurcî",
"it": "îtalî",
"fi": "fînî",
"ru": "rusî",
"es": "spanî",
"ar": "erebî",
"nl": "holendî",
"hi": "hindî",
"cs": "çekî",
"cmn": "mandarînî",
"pt": "portugalî",
"uk": "ûkraynî",
"hu": "mecarî",
"ko": "koreyî",
"be": "belarusî",
"la": "latînî",
"ckb": "soranî",
"sv": "swêdî",
"hy": "ermenî",
"bg": "bulgarî",
"ro": "romanyayî",
"da": "danmarkî",
"gl": "galîsî",
"el": "yûnanî",
"eo": "esperantoyî",
"tl": "tagalogî",
"fo": "ferî",
"vi": "viyetnamî",
"ca": "katalanî",
"is": "îzlendî",
"et": "estonî",
"az": "azerî",
"ceb": "sebwanoyî",
"mk": "makedonî",
"he": "îbranî",
"th": "tayî",
"lv": "latviyayî",
"sk": "slovakî",
"ms": "malezî",
"ga": "îrlendî",
"tg": "tacikî",
"grc": "yûnaniya kevn",
"sl": "slovenî",
"kk": "qazaxî",
"mi": "maorî",
"mn": "mongolî",
"sq": "albanî",
"uz": "ozbekî",
"lt": "lîtwanî",
"ur": "urdûyî",
"km": "ximêrî",
"id": "endonezyayî",
"cy": "weylsî",
"lo": "lawsî",
"bn": "bengalî",
"zza": "zazakî",
"ky": "kirgizî",
"yi": "yidîşî",
"gd": "gaelîka skotî",
"my": "burmayî",
"te": "telûgûyî",
"nb": "norweciya bokmålî",
"zh": "çînî",
"ps": "peştûyî",
"eu": "baskî",
"oc": "oksîtanî",
"sw": "swahîlî",
"ast": "astûrî",
"af": "afrîkansî",
"tk": "tirkmenî",
"nn": "norweciya nînorskî",
"yue": "kantonî",
"ug": "oygurî",
"rm": "romancî",
"sc": "sardînî",
"vo": "volapûkî",
"io": "îdoyî",
"ml": "malayalamî",
"mt": "maltayî",
"ba": "başkîrî",
"ta": "tamîlî",
"ang": "îngilîziya kevn",
"sa": "sanskrîtî",
"tt": "teterî",
"rup": "aromanî",
"nrf": "normandî",
"no": "norwecî",
"scn": "sicîlî",
"br": "bretonî",
"as": "asamî",
"bo": "tîbetî",
"nan": "minnanî",
"nv": "navajoyî",
"fy": "frîsî",
"pa": "puncabî",
"vec": "venîsî",
"fur": "friyolî",
"wa": "walonî",
"haw": "hawayî",
"lb": "luksembûrgî",
"am": "amharî",
"arz": "erebiya misrî",
"ia": "înterlîngua",
"kl": "kalalîsûtî",
"mr": "maratî",
"gv": "manksî",
"qu": "keçwayî",
"dsb": "sorbiya jêrîn",
"si": "kîngalî",
"kn": "kannadayî",
"sdh": "kurdiya başûrî",
"ota": "osmanî",
"gu": "gujaratî",
"ce": "çeçenî",
"jv": "javayî",
"pdt": "plodîşî",
"chr": "çerokî",
"nds": "nedersaksî",
"acw": "erebiya hîcazî",
"cu": "slaviya kevn",
"ne": "nepalî",
"kw": "kornî",
"hsb": "sorbiya jorîn",
"za": "zhuangî",
"os": "osetî",
"se": "samiya bakurî",
"dng": "dunganî",
"izh": "îngriyî",
"sco": "skotî",
"got": "gotî",
"or": "oriyayî",
"mnc": "mançûyî",
"crh": "teteriya krîmî",
"ltg": "latgalî",
"sah": "yakutî",
"ht": "haîtî",
"ary": "erebiya fasî",
"ha": "hawsayî",
"zu": "zuluyî",
"cv": "çuvaşî",
"yo": "yorubayî",
"ab": "abxazî",
"so": "somalî",
"frr": "frîsiya bakur",
"lad": "ladînoyî",
"an": "aragonî",
"ti": "tigrînî",
"aii": "aramiya nû ya asûrî",
"hak": "hakkayî",
"enm": "îngilîziya navîn",
"pi": "palî",
"navz": "navzimanî",
"ny": "çîçewayî",
"om": "oromoyî",
"nds-de": "almaniya jêrîn a almanî",
"lmo": "lombardî",
"csb": "kaşûbî",
"alt": "altayiya başûrî",
"arc": "aramî",
"bcl": "bîkoliya naverast",
"co": "korsîkayî",
"oj": "ojibweyî",
"pap": "papyamentoyî",
"rue": "rusînî",
"av": "avarî",
"txb": "toxarî B",
"xal": "kalmîkî",
"cop": "qiptî",
"mg": "malagasî",
"nap": "napolîtanî",
"gsw": "elmanîşî",
"dlm": "dalmatî",
"gn": "guwaranî",
"orv": "slaviya rojavayî ya kevn",
"tyv": "tuvanî",
"dv": "divehî",
"ady": "adîgeyî",
"bua": "buryatî",
"wuu": "wuyî",
"pam": "kapampanganî",
"myv": "erzayî",
"udm": "udmurtî",
"khb": "lueyî",
"rom": "romanî",
"su": "sundanî",
"ilo": "îlokanoyî",
"syc": "siryaniya klasîk",
"zdj": "şîngazîcayî",
"cdo": "min dongî",
"evn": "evenkî",
"kum": "kumikî",
"bal": "belûçî",
"lld": "ladînî",
"inh": "îngûşî",
"sd": "sindhî",
"lez": "lezgînî",
"fro": "fransiya kevn",
"non": "norsiya kevn",
"liv": "lîvonî",
"tet": "tetûmî",
"tpi": "tokpisinî",
"shn": "şanî",
"wo": "wolofî",
"mrw": "maranaoyî",
"gld": "nanayî",
"nah": "nahwatlî",
"ki": "kîkûyûyî",
"st": "sotoyiya başûr",
"mww": "hmongî",
"lij": "lîgûrî",
"rgn": "romagnolî",
"li": "lîmbûrgî",
"sm": "samoayî",
"sga": "îrlendiya kevn",
"ks": "keşmîrî",
"pms": "piedmontîsî",
"ccc": "çamicuroyî",
"hil": "hîlîgaynonî",
"xmf": "megrelî",
"hrx": "hunsrikî",
"rif": "tarifitî",
"krc": "karaçay-balkarî",
"war": "warayî",
"mwl": "mîrandî",
"syl": "sîlhetî",
"ee": "eweyî",
"ln": "lingalayî",
"pdc": "almaniya Pennsylvania",
"goh": "almaniya bilind a kevn",
"tly": "talişî",
"nci": "nahwatliya klasîk",
"ckt": "çukçî",
"ain": "aynuyî",
"uga": "ugarîtî",
"xh": "xosayî",
"sms": "samiya skoltî",
"kea": "kapverdî",
"ajp": "erebiya başûrê şamê",
"kjh": "xakasî",
"iu": "înuîtî",
"dz": "conxayî",
"srn": "sirananî",
"vro": "voroyî",
"mdf": "mokşayî",
"xcl": "ermeniya kevn",
"mhr": "mariya rojhilatî",
"cic": "çîkasawî",
"esu": "yupîkiya navendî",
"cjs": "şorî",
"wym": "wîlamowî",
"apw": "apaçiya rojava",
"mba": "higaononî",
"kaw": "javayiya kevn",
"ovd": "elfdalî",
"to": "tongî",
"ist": "îstriyotî",
"szl": "silesî",
"yua": "mayayiya yukatekî",
"tsg": "tausugî",
"zea": "zêlandî",
"bar": "bayerî",
"luy": "luhyayî",
"mzn": "mazenderanî",
"mhn": "mòçenoyî",
"kxd": "bruneyî",
"lzz": "lazî",
"kbd": "kabardî",
"afb": "erebiya kendavî",
"krl": "karelî",
"eve": "evenî",
"stq": "frîsiya saterlandî",
"ak": "akanî",
"tab": "tabasaranî",
"sat": "santalî",
"fj": "fîjî",
"sva": "svanî",
"egy": "misrî",
"ig": "îgboyî",
"hac": "hewramî",
"ay": "aymarayî",
"gur": "farefareyî",
"rw": "kînyarwandayî",
"twf": "taosî",
"koi": "komî-permyakî",
"lkt": "lakotayî",
"akl": "aklanon",
"yai": "yagnobî",
"ryu": "okînawanî",
"rhg": "rohingyayî",
"vep": "vepsî",
"smn": "samiya înarî",
"egl": "emilî",
"ty": "tahîtî",
"mdh": "maguindanaoyî",
"gag": "gagawzî",
"tzm": "temazîxtiya atlasa navendî",
"sgs": "samogîtî",
"ff": "fulahî",
"lou": "kreyoliya fransî ya Louisiana",
"mel": "melanauyiya navendî",
"niv": "nîvxî",
"aa": "afarî",
"gez": "etiyopiya klasîk",
"ext": "extremaduranî",
"frp": "frankoprovansî",
"kpv": "komî-zîriyî",
"udi": "udî",
"sma": "samiya başûr",
"nog": "nogayî",
"akk": "akadî",
"lbe": "lakî",
"min": "mînangkabawî",
"kg": "kîkongoyî",
"ban": "balînî",
"dlg": "dolganî",
"ace": "açehî",
"pox": "polabî",
"ppl": "pîpîlî",
"mnz": "monî",
"kaa": "karakalpakî",
"kab": "kabîlî",
"vot": "votî",
"luo": "luoyî",
"sn": "şonayî",
"swb": "komorî",
"roa-tar": "tarantinoyî",
"lg": "lugandayî",
"nds-nl": "saksoniya jêrîn ya holendî",
"dtp": "dusuniya navendî",
"shi": "taşelhitî",
"msk": "mansakayî",
"rap": "rapanuyî",
"mer": "meruyî",
"ik": "înupîakî",
"prg": "prusiya kevn",
"chk": "çûkî",
"kam": "kambayî",
"chy": "çeyenî",
"nod": "tayiya bakurî",
"akz": "alabamayî",
"xag": "aghwanî",
"ase": "zimanê destan ê emerîkî",
"nmn": "ǃxóõ",
"gun": "mbya guaraniyî",
"cr": "krî",
"yag": "yamanayî",
"otk": "tirkiya kevn",
"sid": "sidamoyî",
"tum": "tumbukayî",
"pjt": "pîttcantcatcarayî",
"sux": "sûmerî",
"bbl": "batsbî",
"jje": "jejuyî",
"bm": "bambarayî",
"frm": "fransiya navîn",
"tpn": "tupînambayî",
"pal": "farisiya navîn",
"bi": "bîslamayî",
"ksw": "s'gaw karenî",
"ssy": "sahoyî",
"bdr": "bajwayiya kendava rojava",
"sne": "bau bidayuh",
"sjd": "samiya kildînî",
"na": "nawrûyî",
"pag": "pangasînanî",
"abq": "abazayî",
"tn": "tswanayî",
"osx": "saksoniya kevn",
"aqc": "arçî",
"xsr": "şerpayî",
"kok": "konkanî",
"kln": "kalencînî",
"win": "wînnebagoyî",
"dar": "dargwayî",
"mfe": "kreyoliya morîtanî",
"iba": "îbanî",
"ae": "avestayî",
"mos": "moreyî",
"arn": "mapuçî",
"ill": "îranunî",
"mrj": "mariya rojavayî",
"cst": "ohloniya bakur",
"blt": "tay dam",
"apc": "erebiya bakûrê şamê",
"gan": "ganî",
"ii": "yiyiya siçuwayî",
"xto": "toxarî A",
"wmw": "mwanî",
"avd": "elwîrî-wîderî",
"pro": "oksîtaniya kevn",
"pcc": "buyî",
"jra": "jarayî",
"new": "newarî",
"unm": "unamî",
"mic": "mîkmakî",
"cjm": "çamiya rojhilatî",
"sdn": "galûrîsî",
"lus": "mizoyî",
"cjy": "jinî",
"tli": "tlingitî",
"bug": "bugî",
"pcd": "pîkardî",
"hop": "hopîyî",
"ofs": "frîsiya kevn",
"tft": "ternateyî",
"roa-opt": "portugaliya kevn",
"gil": "kîrîbatî",
"kac": "cingphoyî",
"csm": "sierra mîwokiya navendî",
"sdc": "sassarîsî",
"ood": "o'odhamî",
"hsn": "xiangî",
"ruo": "îstro-romanyayî",
"mbb": "bukidnon manoboyiya rojavayî",
"bho": "bojpûrî",
"ani": "andî",
"kgp": "kayingangî",
"ss": "swazî",
"mnp": "min beî",
"aho": "ahomî",
"moe": "montagnaîsî",
"naq": "namayî",
"mvi": "miyakoyî",
"duu": "drungî",
"lut": "luşûtsîdî",
"sce": "dongşîangî",
"bqi": "bextiyarî",
"mrc": "marîkopayî",
"gmh": "almaniya bilind a navîn",
"cim": "cimbrî",
"aer": "arrernteyiya rojavayî",
"agj": "argobbayî",
"ium": "îu mienî",
"tay": "atayalî",
"ale": "alêwîtî",
"str": "saanîçî",
"zku": "kaurnayî",
"pnt": "yûnaniya pontî",
"gmw-cfr": "frankoniya navendî",
"bxd": "pelayî",
"ems": "alutîqî",
"mtq": "muongî",
"hit": "hîtîtî",
"mak": "makasarî",
"bjn": "banjarî",
"nay": "ngarrindjerî",
"dak": "dakotayî",
"yrk": "nenetsiya tundra",
"pac": "pacohî",
"ch": "çamoroyî",
"vls": "flamiya rojava",
"acm": "erebiya iraqî",
"smj": "samiya lule",
"lmy": "lamboyayî",
"jam": "kreyoliya jameîkî",
"yka": "yakanî",
"gmw-ecg": "almaniya navendî ya rojhilat",
"xsv": "sûdovî",
"cdm": "çepangî",
"bdk": "buduxî",
"isd": "îsnagî",
"zgh": "amazîxiya fasî",
"css": "ohloniya başûr",
"kqr": "kîmaragangî",
"glk": "gîlekî",
"aeb": "erebiya tunusî",
"lki": "lekî",
"kdr": "karaîmî",
"kld": "gamîlaraayî",
"tdd": "tayî nüa",
"xqa": "karaxanîdî",
"nso": "sotoyiya bakur",
"crs": "kreyoliya seyşelî",
"mvv": "tagal murutî",
"kim": "tofalarî",
"swg": "swabî",
"pau": "palawî",
"wrh": "wiradhurî",
"cho": "çoktawî",
"tig": "tigreyî",
"ivv": "îvatanî",
"ddg": "fatalukuyî",
"rmf": "romaniya kalo fînî",
"pih": "pîtkarnî-norfolkî",
"phn": "fenîkî",
"ktu": "kitubayî",
"mwr": "marwarî",
"wbp": "warlpirî",
"zun": "zuniyî",
"crk": "kriya bejayî",
"ebk": "bontociya rojhilatî",
"nup": "nupeyî",
"yoi": "yonagunî",
"atj": "atîkamekwî",
"duo": "dupaningan agtayî",
"kca": "xantî",
"dta": "daurî",
"rar": "rarotongî",
"abe": "abenakî",
"aot": "atong (Hindistan)",
"osa": "osageyî",
"ami": "amîs",
"sea": "semaî",
"mh": "marşalî",
"mad": "madurayî",
"sei": "sêriyî",
"moh": "mohawkî",
"meu": "hîrî motuyî",
"pwn": "paîwanî",
"okm": "koreyiya navîn",
"xug": "kunigamî",
"amu": "amuzgoyî",
"ine-pro": "proto-hindûewropî",
"tzo": "tzotzîlî",
"ksc": "kalingayiya başûrî",
"sib": "sebopî",
"uum": "ûrûmî",
"kjj": "khinalugî",
"pis": "pijînî",
"peo": "farisiya kevn",
"sg": "sangoyî",
"tyz": "tàyî",
"kpy": "koryakî",
"ruq": "megleno-romanyayî",
"abs": "ambonezî-malezî",
"mas": "masayî",
"bdq": "bahnarî",
"mkz": "makasaeyî",
"mag": "magahî",
"oaa": "orokî",
"din": "dinkayî",
"zlw-slv": "slovînsî",
"olo": "livvî",
"mai": "maithilî",
"nhn": "nahwatliya navendî",
"nan-tws": "teoçewî",
"wuh": "wutunhuayî",
"tpw": "tûpiya kevn",
"gcf": "kreyoliya antîlleyî",
"knb": "lubuagan kalingayî",
"ket": "ketî",
"pua": "purepeçayî",
"xbr": "kamberayî",
"bor": "bororoyî",
"rmy": "romaniya vlaks",
"tao": "yamî",
"arq": "erebiya cezayirî",
"brh": "brahuiyî",
"chn": "çinook jargonî",
"cbk": "çavacanoyî",
"tvo": "tidoreyî",
"wbk": "waigalî",
"nio": "nganasanî",
"bsh": "kamkata-viriyî",
"roa-gal": "galoyî",
"krj": "kinaray-ayî",
"gmy": "yûnaniya mîkenî",
"ctd": "tedim çinî",
"ude": "udiheyî",
"gmw-rfr": "frankoniya rhine",
"tvl": "tuvalûyî",
"ibg": "îbanagî",
"ask": "aşkunî",
"ccp": "çakmayî",
"ts": "tsongayî",
"sje": "pite samî",
"esh": "iştihardî",
"quc": "k'içe'",
"ho": "hirî motuyî",
"hif": "fiji hindiyî",
"orh": "oroqenî",
"ett": "etrûskî",
"zai": "îsthmus zapotekî",
"bla": "blakfotî",
"zlw-opl": "poloniya kevn",
"ses": "sonxayî",
"lis": "lisuyî",
"kr": "kanuriyî",
"bbc": "bataktobayî",
"umb": "umbunduyî",
"rys": "yaeyamayî",
"arp": "arapaho",
"bol": "boleyî",
"com": "komançî",
"ifk": "tuwali ifugaoyî",
"ve": "vendayî",
"kri": "krioyî",
"aoz": "uab meto",
"yxg": "yagarayî",
"zom": "zouyî",
"ttt": "tatî",
"ams": "amamî-oşîmayiya başûrî",
"tts": "isanî",
"igl": "îgalayî",
"xda": "darkinjungî",
"fkv": "kvenî",
"chg": "çaxatayî",
"xwo": "oyratiya nivîsî",
"cab": "garîfunayî",
"atv": "altayiya bakurî",
"tiw": "tiwî",
"fit": "meänkiyelî",
"mnk": "mandinkayî",
"yox": "yoronî",
"tfn": "dena'inayî",
"hur": "halkomelemî",
"ryn": "amamî-oşimayiya bakurî",
"rop": "kriolî",
"ckv": "kavalanî",
"ulc": "ulçî",
"hts": "hadzayî",
"anq": "jarawa",
"dgr": "dogrîbî",
"myp": "pîrahayî",
"xfa": "faliskanî",
"gin": "hinukhî",
"pqm": "malecite-passamaquoddyî",
"mni": "manipurî",
"txg": "tangutî",
"trv": "tarokoyî",
"kha": "khasiyî",
"odt": "holendiya kevn",
"tby": "tabaruyî",
"drg": "rungusî",
"yur": "yurokî",
"neg": "negidalî",
"mga": "îrlendiya navîn",
"gor": "gorontaloyî",
"tcy": "tuluyî",
"oac": "oroçî",
"nia": "nîasî",
"skb": "saekî",
"bth": "biatah bidayuhî",
"nwy": "nottoway-meherrînî",
"chc": "katawbayî",
"bgc": "haryanvî",
"tih": "timugon murutî",
"itl": "îtelmenî",
"gml": "almaniya jêrîn a navîn",
"apj": "xîkarîyayî",
"yao": "yaoyî",
"okn": "oki-no-erabu",
"juc": "jurçenî",
"bnn": "bununî",
"nmb": "nambasiya mezin",
"cuk": "kunayî",
"uby": "ûbîkî",
"bpy": "manîpûriya bîşnûpriyayî",
"alr": "alutor",
"nys": "nyungayî",
"niq": "nandî",
"nnt": "nanticokeyî",
"shy": "şawî",
"xum": "umbriyî",
"kzg": "kikaiyî",
"blk": "pa'o karen",
"khi-kun": "ǃkungî",
"amw": "neo-aramiya rojavayî",
"kyh": "karokî",
"arw": "arawak",
"rkt": "kamtayî",
"ijc": "îzonî",
"jct": "krymçakî",
"xpq": "mohegan-pequotî",
"lnd": "lundayehî",
"xnb": "kanakanabuyî",
"niu": "nîwî",
"wls": "walîsî",
"axm": "ermeniya navîn",
"kap": "bezhtayî",
"ykg": "yukaghiriya bakurî",
"kky": "guugu yimidhirrî",
"hnj": "hmongiya hêşîn",
"dtr": "lotudî",
"kla": "klamatî-modokî",
"fax": "falayî",
"sjt": "ter samî",
"nxq": "naxî",
"oge": "gurciya kevn",
"apm": "çîrîkawayî",
"tzj": "tzutucîlî",
"tbl": "tbolî",
"inc-oas": "asamiya zû",
"hai": "haidayî",
"sou": "taiya başûrî",
"osc": "oskanî",
"shh": "şoşonî",
"xmz": "morî bawah",
"sju": "ume samî",
"xpr": "partî",
"gaa": "gayî",
"nch": "nahwatliya huastecaya navendî",
"bsk": "buruşaskiyî",
"bzj": "kreyoliya belizeyî",
"nhx": "nahwatliya mekayapan",
"ktb": "kambaatayî",
"xnn": "kankanayiya bakurî",
"pot": "potawatomî",
"agr": "aguarunayî",
"bsb": "bisayayiya bruneyî",
"cja": "çamiya rojavayî",
"nov": "noviyalî",
"kbp": "kabiyeyî",
"tkn": "toku-no-şîmayî",
"lzh": "çîniya klasîk",
"caa": "ç'orti'",
"paw": "pawnî",
"wbl": "waxiyî",
"rut": "rutulî",
"lud": "ludianî",
"gon": "gondiyî",
"lsd": "lîşana denî",
"pyu": "puyumayî",
"bej": "bejayî",
"sxr": "saaroayî",
"bsq": "bassayî",
"cmg": "mongoliya klasîk",
"mus": "krîkî",
"sas": "sasakî",
"mlm": "mulamî",
"aio": "aytonî",
"nuk": "nootkayî",
"aiw": "aarî",
"enq": "engayî",
"chl": "cahuillayî",
"huz": "hunzibî",
"grt": "garoyî",
"lic": "hlaiyî",
"fia": "nobiinî",
"osp": "spaniya kevn",
"amm": "amayî",
"ote": "otomiya mezquital",
"roa-leo": "leonîzî",
"dum": "holendiya navîn",
"awa": "awadhî",
"otw": "ottawayî",
"xbc": "baxterî",
"bem": "bembayî",
"ira-pro": "proto-îranî",
"dbl": "diyirbalî",
"mcm": "kristangî",
"ctu": "çolî",
"grk-mar": "yûnaniya mariupol",
"nst": "tangsayî",
"cak": "kaqçikelî",
"pov": "kreyoliya guinea-bissau",
"mbf": "malayiya baba",
"xsy": "saisiyatî",
"bno": "asî",
"lbj": "ladakhiyî",
"adt": "adnyamatanhayî",
"ttj": "tooroyî",
"apy": "apalayî",
"pim": "powhatanî",
"roa-brg": "bûrgûndî",
"szy": "sakizayayî",
"tkl": "tokelawî",
"wlm": "weylsiya navîn",
"gdo": "godoberî",
"ayn": "erebiya sanaanî",
"ksk": "kansayî",
"aht": "ahtnayî",
"btx": "batakiya karo",
"jdt": "tatiya cihû",
"cni": "aşanînkayî",
"skr": "seraikî",
"iir-pro": "proto-hindûîranî",
"yrl": "nhêngatûyî",
"sip": "sîkkîmî",
"ie": "înterlîngue",
"bin": "edoyî",
"sac": "foksî",
"wni": "komoriya ndzwanî",
"btq": "batekî",
"bkd": "binukid",
"gmq-scy": "skanî",
"rah": "rabhayî",
"ddo": "tsezî",
"tuw-sol": "solonî",
"gni": "gooniyandiyî",
"rmn": "romaniya balkanî",
"roa-poi": "poitevin-saintongeaisî",
"mqm": "marquesana başûr",
"tsu": "tsouyî",
"yol": "yolayî",
"fud": "futunî",
"umu": "munsî",
"wam": "massaçusettî",
"bsy": "sabah bisayayî",
"prn": "prasunî",
"clm": "klallamî",
"ssf": "thaoyî",
"jbo": "lojbanî",
"nus": "nuerî",
"mhx": "lhao voyî",
"hmc": "huişui hmongiya navendî",
"lrc": "luriya bakurî",
"tiy": "tirurayî",
"kkh": "khünî",
"nfr": "nafaanrayî",
"zpq": "zapotekiya zoogoço",
"suk": "sukumayî",
"rml": "romaniya baltîkî",
"ncj": "nahwatliya bakurê puebla",
"nhg": "nahwatliya tetelcingo",
"ars": "erebiya necdî",
"bh": "biharî",
"caq": "car nicobareseyî",
"wlc": "mwalî komorî",
"apd": "erebiya sudanî",
"mop": "mayayiya mopanî",
"yaq": "yaquî",
"pon": "ponpeyî",
"kwk": "kwak'walayî",
"wlo": "wolioyî",
"nnr": "narunggayî",
"agx": "aghulî",
"dty": "doteliyî",
"ybh": "yakkhayî",
"azz": "puebla nahuatliya çiyayî",
"yuy": "yuguriya rojhilat",
"tqw": "tonkawayî",
"hss": "harsusiyî",
"mqu": "mandarî",
"maz": "mazahuayiya navendî",
"ife": "îfèî",
"kmk": "limos kalingayî",
"shs": "şuswapî",
"hid": "hidatsayî",
"brg": "baureyî",
"wrr": "wardamanî",
"kis": "kîsî",
"acy": "erebiya qibrisî",
"tin": "tindî",
"gmq-osw": "swêdiya kevn",
"yuf": "havasupaî-walapaî-yavapaî",
"xdk": "darûkî",
"wau": "waujayî",
"ljp": "lampungî",
"alu": "areareyî",
"ach": "açolî",
"bkm": "komiya kamerûnî",
"ngn": "ngwoyî",
"bsa": "abînomnî",
"der": "deoriyî",
"shp": "şipibo-coniboyî",
"ycl": "lolopoyî",
"qua": "kuapawî",
"gmq-pro": "proto-norsî",
"nnv": "nukunuyî",
"zko": "kottî",
"khv": "khvarşiyî",
"nij": "ngajuyî",
"yog": "yogadî",
"raw": "rawangî",
"mfy": "mayoyî",
"nd": "ndebeliya bakurî",
"oko": "koreyiya kevn",
"fon": "fonî",
"abx": "abaknonî",
"rad": "radeyî",
"klj": "khalajî",
"tru": "turoyo",
"nag": "naga pidginî",
"crl": "kriya rojhilat ya bakurî",
"zlw-ocs": "çekiya kevn",
"aau": "abauyî",
"mrq": "marquesana bakur",
"sia": "samiya akkalayî",
"mjg-mgl": "mongghulî",
"car": "galîbî karîbî",
"roa-tou": "torangî",
"rel": "rendilleyî",
"oma": "omaha-poncayî",
"rmq": "kaloyî",
"rmo": "romaniya sinte",
"lep": "lepçayî",
"guw": "gunî",
"knj": "akatekî",
"slr": "salarî",
"sem-srb": "erebiya başûrî ya kevn",
"pad": "paumarî",
"yap": "yapî",
"xul": "ngunawalî",
"kzj": "kadazaniya beravî",
"fan": "fangî (Bantu)",
"brx": "bodoyî (Hindistan)",
"ane": "xârâcùù",
"cro": "crowî",
"ram": "kanelayî",
"tea": "temiarî",
"cnk": "khumi çinî",
"tkr": "tsakhurî",
"ulk": "meryamî",
"tzh": "tzeltalî",
"avk": "kotavayî",
"mjg-mgr": "mangghuerî",
"xav": "xavanteyî",
"kmv": "kreyoliya fransî ya karipúna",
"aas": "aasayî",
"guz": "gusiiyî",
"erk": "efateyiya başûr",
"ngh": "nlûyî",
"cel-gau": "gaulisî",
"hz": "hereroyî",
"alq": "algonquinî",
"cay": "cayugayî",
"inz": "înesenyoyî",
"sgr": "sangisarî",
"iro-min": "mingoyî",
"dru": "rukaiyî",
"tta": "tuteloyî",
"lui": "luiseñoyî",
"mgm": "mambayî",
"xpm": "pumpokolî",
"kyj": "karaoyî",
"ksd": "tolaiyî",
"pkc": "baekceyî",
"pcm": "pidgîniya nîjeryayî",
"kjg": "khmuyî",
"cow": "cowlitzî",
"cyo": "cuyunonî",
"msn": "vuresî",
"jhi": "jehaiyî",
"map-bms": "banyumasanî",
"fla": "montana salişî",
"skd": "sierra miwokiya başûrî",
"xpu": "punîkî",
"tsd": "tsakonî",
"gue": "gurindjiyî",
"ksi": "krisayî",
"pni": "aohengî",
"par": "panamintî",
"ulb": "ulukwumî",
"miq": "miskitoyî",
"mcb": "maçiguengayî",
"kls": "kalaşayî",
"sdo": "bukar-sadung bidayuhî",
"nr": "ndebeliya başûrî",
"mch": "maquiritarî",
"msb": "masbatenyoyî",
"tsi": "tsimşî",
"gmq-gut": "gutnişî",
"tus": "tuskarorayî",
"lmw": "miwokiya golî",
"srs": "sarceeyî",
"zag": "zaghawayî",
"klb": "kiliwayî",
"kmc": "kamiya başûrî",
"beg": "belaîtî",
"inc-ash": "prakrîtiya aşokanît",
"kj": "kwanyamayî",
"ng": "ndongayî",
"irk": "îraqwî",
"grk-ita": "grîkoyî",
"aaq": "penobskotî",
"kek": "q'eqçiyî",
"ojb": "ojibweyiya bakurî",
"txu": "kayapó",
"one": "oneidayî",
"ktv": "katuyiya rojhilatî",
"nhe": "nahwatliya huastekaya rojhilatî",
"lwl": "lawayiya rojhilatî",
"lua": "luba-kasayî",
"bjb": "barngarla",
"acu": "açuarî",
"cof": "tsafikiyî",
"gwi": "gwiçinî",
"urk": "urak lawoi'",
"tar": "tarahumarayiya navendî",
"kva": "bagvalalî",
"hni": "haniyî",
"sek": "sekanî",
"cpg": "yûnaniya kapadokyayî",
"wmb": "wambayayî",
"xld": "lîdyayî",
"amn": "amanabî",
"haa": "hänî",
"cdy": "çadongî",
"akr": "arakî",
"kju": "kaşayayî",
"ada": "adangmeyî",
"alh": "alawayî",
"gdq": "mehriyî",
"tmo": "temoqî",
"kus": "kusaalî",
"dwu": "dhuwalî",
"pak": "parakanã",
"agg": "angorî",
"wao": "wappoyî",
"aji": "ajië",
"cas": "tsimaneyî",
"byq": "basayî",
"xls": "lusîtanî",
"gcr": "kreyoliya guwiyanîsî",
"apk": "apaçiya deştan",
"kut": "kutenaiyî",
"gmw-jdt": "danmarkiya jersey",
"hus": "wastekî",
"rej": "rejangî",
"dog": "dogonî",
"roa-lor": "lorrainî",
"emb": "embalohî",
"tnq": "taînoyî",
"crj": "kriya rojhilat ya başûrî",
"nuj": "nyolî (Uganda)",
"gmq-oda": "danmarkiya kevn",
"akv": "axvaxî",
"doi": "dogriyî",
"trp": "kokborokî",
"geh": "hutterisçî",
"gul": "gullahî",
"coo": "comoxî",
"ije": "biseniyî",
"itk": "îtaliya cihû",
"rmc": "romaniya karpatyayî",
"gmw-gts": "gottscheerîşî",
"ttg": "tutongî",
"ngu": "nahwatliya guerrero",
"pse": "malayiya navendî",
"onw": "nubiya kevn",
"qui": "kuwileytî",
"giw": "gelaoyiya spî",
"ojw": "ojibweyiya rojavayî",
"gay": "gayoyî",
"rmw": "romaniya welşî",
"nhw": "nahwatliya huastecaya rojavayî",
"xkl": "bakungî",
"loz": "loziyî",
"yij": "yindcîbarndî",
"kry": "krytsî",
"ple": "palueyî",
"tht": "tahltanî",
"mkq": "bay miwokî",
"sks": "maiayî",
"mhe": "besisî",
"mrv": "mangarevanî",
"nrm": "naromî",
"chp": "çîpewî",
"bll": "biloxî",
"knx": "kendayanî",
"khw": "khowarî",
"dua": "diwalayî",
"roa-cha": "şampanyî",
"gug": "guaraniyiya paraguayanî",
"dsn": "dusnerî",
"tmh": "tuaregî",
"pmf": "pamonayî",
"smq": "samoyî",
"tal": "talî",
"yuc": "yuçî",
"mqy": "manggarayî",
"bts": "batakiya simalungun",
"tos": "totonakiya çiyayî",
"oia": "oyratayî",
"blz": "balantak",
"bjz": "baruga",
"kai": "karekareyî",
"zav": "zapotekiya yatzaçî",
"okd": "okodiayî",
"ndd": "nde-nsele-nta",
"omc": "moçikayî",
"bto": "iriga bikolanoyî",
"okr": "kirikeyî",
"top": "totonakiya papantla",
"xer": "xerenteyî",
"xlc": "lîkî",
"mid": "mandaicî",
"suy": "suyayî",
"chz": "ozumacin çinantecî",
"pah": "tenharimî",
"til": "tillamookî",
"afn": "defakayî",
"guc": "wayuuyî",
"ojp": "japoniya kevn",
"lif": "limbuyî",
"efi": "efikî",
"mek": "mêkêoyî",
"ayl": "erebiya lîbyayî",
"bnt-phu": "phuthî",
"kne": "kankanaeyî",
"ktn": "karitiyanayî",
"abl": "abûngî",
"rtm": "rotumanî",
"wyb": "ngiyambaayî",
"crg": "mîçîfî",
"kxu": "kuiyî (Hindistan)",
"cts": "bicolanoyiya northern catanduanes",
"dje": "zarmayî",
"plw": "palawanoyî",
"xlu": "luwiyanî",
"koy": "koyukonî",
"vmw": "makhuwayî",
"vmf": "frankiya rojhilatî",
"bru": "bruyiya rojhilatî",
"kmb": "kimbunduyî",
"xsa": "sabaeanî",
"tbk": "tagbanwayiya kalamî",
"kzt": "tambunan dusunî",
"xng": "mongoliya navîn",
"acn": "açangî",
"bwx": "bu-nao bunuyî",
"cwg": "çewongî",
"vmb": "mbabaramî",
"ijs": "îjoyiya başûr-rojhilat",
"asb": "assînîboyî",
"nzd": "nzadî",
"itv": "îtawitî",
"lvk": "lavukaleveyî",
"bde": "badeyî",
"tbc": "takyayî",
"aby": "aneme wakeyî",
"urb": "urubú-kaaporî",
"coh": "çiçonyi-çidzihana-çikauma",
"dbj": "ida'anî",
"smk": "bolinaoyî",
"lbx": "lawanganî",
"kfr": "kaççiyî",
"hlt": "nga layî",
"agm": "angaatahayî",
"xpg": "firîgî",
"smr": "simeulueyî",
"vma": "martuthunirayî",
"gub": "guajajarayî",
"chf": "tabasco çontalî",
"mqs": "makyaniya rojava",
"iby": "îbaniyî",
"cng": "qiangiya bakurî",
"jac": "jakaltekî",
"trw": "torwalî",
"lti": "lêtîyî",
"scl": "şinayî",
"gwr": "gwereyî",
"dgc": "casiguran dumagat agtayî",
"btm": "batakiya mandaîlîng",
"puj": "punan tubuyî",
"oka": "okanaganî",
"gek": "gerkayî",
"mat": "matlatzincayî",
"kio": "kiowayî",
"cku": "koasatî",
"kms": "kamasauyî",
"xaa": "erebiya endulusî",
"gut": "maleku jaikayî",
"aou": "a'ou",
"elx": "îlamî",
"peh": "bonanî",
"pgl": "îrlendiya prîmîtîv",
"myx": "masabayî",
"spp": "supyireyî",
"xnt": "narragansettî",
"cad": "caddoyî",
"aap": "pará arárayî",
"rme": "angloromanî",
"ura": "urarinayî",
"mpm": "mixteciya yosondúa",
"poe": "popolocayiya san juan atzingo",
"sgd": "surigaononî",
"kvh": "komodoyî",
"xtc": "kaduglî",
"tjg": "tunjungî",
"azg": "san pedro amuzgos amuzgo",
"uun": "pazehî",
"udl": "uldemeyî",
"skp": "sekapanî",
"isi": "nkem-nkumî",
"wrz": "warrayî",
"its": "îsekiriyî",
"tgb": "tobilungî",
"bdy": "bandjalangî",
"ssb": "samayiya başûrî",
"hnn": "hanunooyî",
"enn": "engenniyî",
"srm": "saramakkanî",
"dmr": "damariya rojhilat",
"djo": "jangkangî",
"kij": "kîlîvîlayî",
"rob": "tae'",
"sad": "sandaweyî",
"har": "harariyî",
"hov": "hovonganî",
"pos": "popolucayiya sayula",
"sit-bok": "bokarî",
"kns": "kensiuyî",
"mbd": "dibabawon manoboyî",
"asu": "tocantins asurînî",
"sjw": "şawneeyî",
"btw": "butuanonî",
"jut": "jutişî",
"bgs": "tagabawayî",
"xsb": "sambalî",
"mkf": "miyayî",
"mrn": "çeke holoyî",
"kui": "kuikúroyî",
"hup": "hupayî",
"abm": "abanyomî",
"ukk": "muak sa-aakî",
"lbk": "bontociya navendî",
"dbp": "duwaiyî",
"jup": "hupdëî",
"cce": "çopiyî",
"muy": "muyangî",
"agt": "agtayiya kagayanî ya navendî",
"sxn": "sangirî",
"brc": "kreyoliya holendî ya berbiceyî",
"yux": "yukaghiriya başûrî",
"zpv": "zapotekiya çiçicapan",
"teo": "atesoyî",
"dif": "dieriyî",
"maq": "mazateciya çiquihuitlan",
"sgh": "şughnî",
"gnc": "guwançî",
"ega": "egayî",
"kbh": "camsayî",
"bni": "bangî",
"tdj": "tajioyî",
"ngi": "ngizimî",
"bue": "beothukî",
"pok": "pokangayî",
"myw": "muyuwî",
"bkn": "bukîtan",
"dyu": "dyulayî",
"asn": "xingú asuriní",
"cme": "cermayî",
"tna": "takanayî",
"mia": "miamî",
"epi": "epieyî",
"mcq": "eseyî",
"kyu": "kayahiya rojavayî",
"sai-pyk": "pykobjê",
"zaa": "zapotekiya sierra de juarez",
"dhv": "dehûyî",
"bxk": "bukusuyî",
"nuz": "nahwatliya tlamacazapa",
"trm": "tregamî",
"cps": "capiznonî",
"slm": "pangutaran samayî",
"cia": "cia-ciayî",
"abv": "erebiya bahranî",
"lod": "berawanî",
"mhj": "mogholî",
"mnv": "rennelleseyî",
"gir": "gelaoyiya sor",
"bfq": "badagayî",
"wyi": "woiwurrungî",
"eya": "eyakî",
"awk": "awabakal",
"zoc": "zoqueyiya copainala",
"smw": "sumbawayî",
"ank": "goemayî",
"mbl": "maxakalî",
"tbd": "kakî aeyî",
"nez": "nez perceyî",
"crn": "corayî",
"sai-tap": "tapayunayî",
"see": "senekayî",
"huv": "huaveyî",
"apn": "apinayé",
"mfa": "malayiya pattani",
"crx": "karriyerî",
"mam": "mamî",
"ibl": "îbaloiyî",
"cac": "çujî",
"kdt": "kuyî",
"ocu": "tlahuicayî",
"hvn": "sabuyî",
"cjp": "cabecarî",
"xbi": "kombioyî",
"xra": "krahô",
"blc": "bella koola",
"peq": "pomoyiya başûrî",
"bpz": "bilbayî",
"mzp": "movimayî",
"lhu": "lahuyî",
"kge": "komeringî",
"tue": "tuyukayî",
"taa": "tananaya jêrîn",
"vkp": "kreyoliya portugalî ya korlai",
"cmo": "mnongiya navendî",
"mov": "mojaveyî",
"kkz": "kaskayî",
"zro": "zaparoyî",
"mnb": "munayî",
"mwf": "murînpatayî",
"zkg": "goguryeoyî",
"kiw": "kiwaiyiya bakur-rojhilat",
"ebr": "ebrieyî",
"pmt": "tuamotuanî",
"roa-ang": "angevinî",
"ssg": "seimatî",
"hch": "huiçolî",
"bew": "betawî",
"ycn": "yucunayî",
"mbr": "nukak makuyî",
"apq": "a-pucikwar",
"nym": "nyamwezî",
"tbi": "gaamî",
"obi": "obispeñoyî",
"pri": "paicî",
"lu": "luba-katangayî",
"kcg": "tyapî",
"yui": "yurutî",
"kvm": "kendemî",
"djk": "aukanî",
"rir": "ribunî",
"lrg": "laragiayî",
"wnw": "wintuyî",
"woe": "woleayî",
"ljl": "li’oyî",
"kic": "kîkapûyî",
"ndh": "ndalî",
"hdy": "hadiyyayî",
"cbs": "caşinahuayî",
"kys": "baram kayanî",
"nxg": "ngadhayî",
"hix": "hixkaryanayî",
"mpe": "majangî",
"pwm": "molbogî",
"nyn": "nyankoleyî",
"ilb": "îlayî",
"qya": "qiwenyayî",
"wrk": "garawayî",
"def": "dezfuliyî",
"oym": "wayampî",
"rkb": "rikbaktsayî",
"sai-msk": "masakarayî",
"itz": "îtzayî",
"sgc": "kipsigisî",
"ppi": "paipaî",
"tji": "tujiayiya bakurî",
"yak": "yakîmayî",
"gvp": "para gaviãoyî",
"jmc": "maçameyî",
"bfs": "bayiya başûrî",
"ncb": "nicobariya navendî",
"kvb": "kubuyî",
"veo": "venturenyoyî",
"poi": "popolucayiya highland",
"bny": "bintuluyî",
"bhp": "bîmayî",
"rim": "nyaturuyî",
"sog": "sogdî",
"rth": "ratahanî",
"mse": "museyî",
"ncl": "nahwatliya mîçoakanê",
"acp": "akîpayiya rojhilatî",
"pao": "paiuteyiya bakurî",
"iyx": "yaayî",
"zhx-tai": "taişanîzî",
"coe": "koreguajeyî",
"ser": "serranoyî",
"nko": "nkonyayî",
"mgq": "malilayî",
"ppo": "folopayî",
"alc": "kawésqar",
"abg": "abagayî",
"wro": "wororayî",
"kre": "panarayî",
"tuv": "turkanayî",
"dav": "taitayî",
"ppk": "umayî",
"roa-oca": "katalaniya kevn",
"tso-lya": "çolyanî",
"myu": "mundurukú",
"dcc": "deccaniyî",
"lsi": "laşiyî",
"ugo": "gongî",
"nab": "nambikwarayî",
"lil": "lillooetî",
"gqi": "guiqiongî",
"gah": "alekanoyî",
"ncz": "natçezî",
"xom": "komoyî",
"prk": "paraukî",
"bea": "beaverî",
"sky": "sikayanayî",
"pui": "puinaveyî",
"kgg": "kusundayî",
"lml": "ragayî",
"ore": "orejónî",
"vbb": "babariya başûr-rojhilat",
"mbp": "wiwayî",
"bft": "baltî",
"lgg": "lugbarayî",
"mxd": "modangî",
"mir": "isthmus mixeyî",
"enf": "forest enetsî",
"pkp": "pukapukanî",
"kzi": "kelabît bariyoyî",
"wba": "waraoyî",
"xeg": "ǁxegwî",
"cpa": "palantla çinantecî",
"men": "mendeyî",
"btu": "batuyî",
"psy": "piscatawayî",
"xhu": "hurî",
"for": "foreyî",
"deg": "degemayî",
"sai-oto": "otomacoyî",
"nhv": "nahwatliya temascaltepec",
"gme-cgo": "gothîkiya krimî",
"kyi": "kîputî",
"olt": "lîtwanyayiya kevn",
"alp": "aluneyî",
"nbb": "ndoeyî",
"uvl": "loteyî",
"pab": "parecî",
"nbh": "ngamoyî",
"dra-okn": "kannadayiya kevn",
"aak": "ankaveyî",
"wiv": "vîtûyî",
"kuz": "kunzayî",
"atb": "zaiwa",
"aca": "açaguwayî",
"zmr": "maranungkuyî",
"xke": "kerehoyî",
"isk": "îşkaşimiyî",
"dig": "digoyî",
"agn": "agutaynenî",
"bji": "burjî",
"klw": "linduyî",
"bwi": "baniwayî",
"ygr": "yagariayî",
"mez": "menomineeyî",
"kag": "kajamanî",
"mey": "hassaniyayî",
"umo": "umotinayî",
"yii": "yidinyî",
"twy": "tawoyanî",
"ktw": "katoyî",
"ari": "arîkara",
"ysr": "sirenikî",
"adz": "adzerayî",
"spo": "spokanî",
"cgg": "rukîgayî",
"wuv": "wuvulu-auayî",
"etu": "ejaghamî",
"jmd": "yamdenayî",
"mhy": "ma'anyanî",
"tae": "taryanayî",
"kzr": "karangî",
"zhn": "nong zhuangî",
"ess": "yupikiya sîberyaya navendî",
"teg": "teke-tegeyî",
"cqd": "çuanqiandian cluster miaoyî",
"sri": "sirianoyî",
"dag": "dagbaniyî",
"gae": "warekenayî",
"lre": "laurentî",
"tbt": "kitemboyî",
"pgn": "paelignianî",
"onb": "lingaoyî",
"pth": "pataxó hã-ha",
"vmg": "minigirî",
"yah": "yazghulamî",
"kxn": "kanowitî",
"kde": "makondeyî",
"api": "apiaká",
"och": "çîniya kevn",
"pre": "prînsîpenî",
"mgr": "mambwe-lunguyî",
"stp": "tepehuaniya başûr-rojhilat",
"kak": "kayapa kallahanî",
"myg": "mantayî",
"kee": "keresiya rojhilatî",
"mfh": "matalî",
"bkr": "bakumpaî",
"alw": "alaba",
"pml": "sabirî",
"rag": "logûlî",
"mei": "midobî",
"mjy": "mahicanî",
"blm": "belî",
"nhu": "nooneyî",
"kuf": "katuyiya rojavayî",
"cux": "tepeuxila cuicatecî",
"nyy": "nyakyusayî",
"mtf": "murikî (Gîneya nû)",
"mrt": "margî",
"mpj": "martu wangkayî",
"tlh": "klîngonî",
"enh": "tundra enetsî",
"sai-crd": "coroado purî",
"umi": "ukitî",
"tcb": "tanakrosî",
"kpt": "karatayî",
"xvn": "vandalî",
"xsm": "kasemî",
"ltc": "çîniya navîn",
"yuz": "yuracareyî",
"bhw": "biyakî",
"sqt": "soqotrî",
"dny": "deniyî",
"lcp": "lawayiya rojavayî",
"tpx": "akatepekiya me'phaayî",
"ake": "akawaîo",
"jeb": "jeberoyî",
"gup": "gunwingguyî",
"xeb": "eblaiteyî",
"zkt": "xîtanî",
"lex": "luangî",
"mnq": "minriqî",
"njm": "angamî",
"sge": "segayî",
"hoi": "holîkaçukî",
"tee": "huehuetla tepehuayî",
"bil": "bileyî",
"gej": "genî",
"wim": "wik-mungkanî",
"oyd": "oydayî",
"gvj": "guajayî",
"blw": "balangao",
"lgt": "pahîyî",
"sai-cac": "cacanî",
"xok": "xoklengî",
"knv": "taboyî",
"slc": "salibayî (Kolombiya)",
"noz": "nayî",
"bnq": "bantîkî",
"ykm": "yakamulî",
"dym": "yanda dogonî",
"cri": "sãotomenseyî",
"shu": "erebiya çadî",
"tcs": "creoleyiya torres strait",
"gmw-stm": "sathmar swabî",
"rbl": "miraya bikolî",
"mbn": "macaguanî",
"mgu": "mailuyî",
"pib": "yineyî",
"yku": "kuamasî",
"gva": "kaskihayî",
"sai-yur": "yurumanguî",
"clw": "çulymî",
"bln": "bîkolanoyiya başûr katanduanî",
"mxi": "mozarabîkî",
"sob": "sobeyî",
"agd": "agarabiyî",
"bxe": "ongotayî",
"ito": "îtonamayî",
"mmq": "aisî",
"gnd": "zulgo-gemzekî",
"wig": "wik-ngathanayî",
"dto": "tommo soyî",
"suz": "sunwarî",
"rol": "romblomanonî",
"llu": "lawî",
"jaa": "jamamadiyî",
"bns": "bundelî",
"wal": "wolayttayî",
"oui": "oyguriya kevn",
"bjt": "balanta-ganjayî",
"alk": "alakî",
"nhr": "naroyî",
"gmw-vog": "almaniya volga",
"nsn": "nehanî",
"kqe": "kalaganî",
"end": "endeyî",
"jui": "ngadcurî",
"hay": "hayayî",
"svb": "ulau-suainî",
"saz": "sauraştrayî",
"mep": "miriwungî",
"ert": "eritaiyî",
"yen": "yendangî",
"mxb": "mixteciya tezoatlan",
"pmw": "plains miwokî",
"fak": "fangî (Beboid)",
"sai-bet": "betoî",
"arl": "arabela",
"cks": "tayoyî",
"nrn": "nornî",
"kao": "kassonkeyî",
"blb": "bilua",
"wab": "wabî",
"kwd": "kwaioyî",
"abr": "abronî",
"wbi": "wanjî",
"cso": "soçiapam çinantecî",
"kmo": "kwomayî",
"ddw": "dawera-daweloorî",
"zae": "zapotekiya yareni",
"rac": "rasawayî",
"bra": "brajî",
"naz": "nahwatliya koatepek",
"qwm": "kipçakî",
"ayz": "maybratî",
"amp": "alamblakî",
"sit-liz": "lizuyî",
"jum": "jumjumî",
"tub": "tübatulabalî",
"hih": "pamosuyî",
"kbc": "kadiweuyî",
"tun": "tunikayî",
"cod": "cocamayî",
"abt": "ambulasî",
"ame": "yaneşa'",
"xed": "hdî",
"yrb": "yarebayî",
"mbc": "macuşî",
"sai-mal": "malalî",
"khs": "kasuayî",
"soz": "temî",
"mva": "manamî",
"bcu": "bîlîwayî",
"zpo": "zapotekiya amatlan",
"tfr": "teribeyî",
"xgf": "gabrielino-fernandeñoyî",
"aah": "abu' arapeşî",
"adn": "adangî",
"btn": "ratagnonî",
"gby": "gbariyî",
"sxb": "subayî",
"onn": "onobasuluyî",
"aih": "aî-çamî",
"djm": "jamsayî",
"wun": "bunguyî",
"bhv": "bahauyî",
"ahk": "akha",
"tow": "jemezî",
"duw": "dusun wituyî",
"alj": "alanganî",
"sbk": "safwayî",
"kho": "xotanî",
"ndj": "ndambayî",
"mmh": "mehinakuyî",
"ttw": "long watî",
"sai-cat": "catacaoyî",
"kck": "kalangayî",
"yav": "yangbenî",
"heh": "heheyî",
"szw": "sawayî",
"phk": "phakeyî",
"aoa": "angolar",
"xur": "urartûyî",
"txn": "taranganiya rojava",
"piv": "pilenî",
"xta": "mixtekiya alcozauca",
"ute": "uteyî",
"tad": "tauseyî",
"yug": "yugî",
"zum": "kumzarî",
"nkr": "nukuoroyî",
"xaw": "kawaiisuyî",
"mpa": "mpotoyî",
"zng": "mangî",
"gad": "gaddangî",
"drn": "damariya rojava",
"oca": "ocainayî",
"mcg": "mapoyoyî",
"gbm": "garhwaliyî",
"sbh": "sorî-harenganî",
"kew": "kewayî",
"mki": "dhatkî",
"obt": "bretoniya kevn",
"alo": "larike-wakasihu",
"drl": "baagandjiyî",
"tog": "tongayî (Malawî)",
"tdl": "surî",
"met": "matoyî",
"cle": "lealao çinantecî",
"gmq-jmk": "jamtîşî",
"gvf": "golinî",
"tlc": "totonakiya misantla",
"bfg": "busang kayanî",
"kvc": "kovêyî",
"kay": "kamayurayî",
"hei": "heiltsukî",
"urt": "uratî",
"nll": "nihalî",
"bdp": "bendeyî",
"ybe": "yuguriya rojavayî",
"nbr": "numanayî",
"mht": "mandahuacayî",
"wap": "wapişanayî",
"dzg": "dazagayî",
"wrg": "warunguyî",
"tiv": "tivî",
"tox": "tobî",
"kvo": "dobelî",
"ubl": "buhi'non bikolî",
"aja": "ajayî",
"toi": "tongayî (Zambiya)",
"sus": "susuyî",
"nhm": "nahwatliya morelos",
"mcf": "matsesî",
"lew": "ledo kailiyî",
"ckx": "cakayî",
"bxg": "bangalayî",
"nem": "nemî",
"mgo": "meta'",
"eno": "engganoyî",
"crd": "coeur d'aleneyî",
"bdb": "basapî",
"cui": "cuibayî",
"emx": "erromintxelayî",
"bsw": "baysoyî",
"piw": "pimbweyî",
"nim": "nilambayî",
"mzs": "makanîzî",
"njo": "aoyî",
"duk": "uyajitayayî",
"old": "moçî",
"sam": "aramiya samarî",
"mlq": "malinkî",
"awd-kaw": "kawişanayî",
"mro": "mruyî",
"sjm": "mapunî",
"bot": "bongoyî",
"lay": "lama baiyî",
"aif": "agî",
"bks": "masbate sorsogon",
"ibd": "îwaidjayî",
"dob": "dobûyî",
"noa": "woun meuyî",
"too": "totonakiya xicotepec de juarez",
"duv": "duvleyî",
"bqo": "baloyî",
"mna": "mbulayî",
"pbh": "panareyî",
"cav": "cavineñayî",
"scg": "sanggauyî",
"con": "cofanî",
"ubr": "ubirî",
"ata": "pele-ata",
"ngj": "ngieyî",
"ers": "ersuyî",
"tro": "taraoyî",
"yki": "yokeyî",
"tya": "tauyayî",
"byk": "biaoyî",
"tuq": "tedagayî",
"xrn": "arinî",
"mhq": "mandanî",
"ktx": "kaxarariyî",
"beu": "blagarî",
"mtv": "asaro'oyî",
"zca": "zapotekiya coatecas altas",
"abd": "manîdeyî",
"imn": "îmondayî",
"ofo": "ofoyî",
"avv": "avá-kanoeîro",
"ree": "rejang kayanî",
"klr": "khalingî",
"dby": "dibiyasoyî",
"bzd": "bribriyî",
"iwm": "îwamî",
"bvk": "bukatî",
"mgw": "matumbî",
"aus-wul": "wulguruyî",
"mto": "totontepec mixeyî",
"inc-ogu": "gujaratiya kevn",
"kpm": "kohoyî",
"bgz": "banggaî",
"klg": "tagakaulu kalaganî",
"xab": "sambeyî",
"pnz": "panayî (Afrîkaya navendî)",
"snl": "sangilî",
"aoc": "pemon",
"cul": "culinayî",
"nnq": "ngindoyî",
"cji": "çamalalî",
"urh": "urhoboyî",
"hoc": "hoyî",
"yok-nvy": "yokutiya geliyê bakurî",
"nbp": "nnamî",
"qyp": "kuiripî",
"ski": "sikayî",
"whk": "wahau kenyahî",
"fos": "sirayayî",
"paa-nun": "nungonî",
"mtd": "mualangî",
"mrh": "mara çinî",
"xeu": "keoru-ahiayî",
"ass": "îpulo",
"ing": "deg xinagî",
"ajg": "adjayî",
"kjl": "khamî",
"wed": "wedauyî",
"mxz": "maselayiya navendî",
"miw": "akoyeyî",
"lmc": "limilnganî",
"bag": "tukî",
"bva": "bareinî",
"yal": "yalunkayî",
"asa": "pare",
"sai-col": "colanî",
"kdd": "yankunytjatjarayî",
"pne": "penaniya rojavayî",
"hna": "minayî",
"ayp": "erebiya mezopotamyayî ya bakur",
"can": "çambriyî",
"yey": "yeyî",
"szc": "semaq beriyî",
"byd": "benyadu'",
"yok-svy": "yokutiya geliyê başûrî",
"xet": "setayî",
"aro": "araona",
"ntw": "nottowayî",
"szv": "isubuyî",
"crw": "çrauyî",
"kyz": "kayabiyî",
"asl": "asîluluyî",
"poz-abi": "abay-sembwakî",
"tsx": "mubamî",
"ify": "keley-i kallahanî",
"srv": "waray sorsogonî",
"ong": "oloyî",
"mvm": "muyayî",
"lam": "lambayî",
"icl": "zimanê destan ê îzlandê",
"xww": "wemba-wembayî",
"ixl": "îxilî",
"ape": "bukiyîpî",
"rui": "rufijî",
"mhl": "mauwakeyî",
"lgr": "lengoyî",
"nmy": "namuyî",
"ncn": "naunayî",
"pez": "penaniya rojhilatî",
"mfg": "mixiforeyî",
"bei": "bekatî'",
"ydg": "yidghayî",
"cwd": "kriya woods",
"mmn": "mamanwayî",
"nai-kat": "kathlametî",
"cje": "çruyî",
"ark": "arîkapûyî",
"fut": "futuna-anîwayî",
"wad": "wandamenî",
"tew": "tewayî",
"nyo": "nyoroyî",
"bky": "bokyî",
"tjm": "timucuayî",
"ysg": "sonagayî",
"ogu": "ogbronuagumî",
"mnj": "munjî",
"gwd": "gawwadayî",
"fbl": "west albay bikolî",
"uiv": "îyiveyî",
"bkq": "bakairí",
"ibe": "akpesî",
"maa": "mazateciya san jerónimo tecóatl",
"jig": "jinguluyî",
"tvd": "tsuvadî",
"xod": "kokodayî",
"adw": "amondawayî",
"guu": "yanomamöî",
"srh": "sarikolî",
"nam": "ngan'gityemerrî",
"hto": "minica huitotoyî",
"yby": "yaweyuhayî",
"urz": "uru-eu-wau-wau",
"ewo": "ewondoyî",
"cal": "karolînî",
"arr": "arara-karo",
"yup": "yukpayî",
"iai": "îaaiyî",
"wbh": "wandayî",
"dmw": "mudburrayî",
"xel": "keloyî",
"rma": "ramayî",
"zwa": "zayî",
"emi": "mûssaû-emîrakî",
"lai": "lambyayî",
"dim": "dimeyî",
"agu": "agwakatekî",
"zin": "zinzayî",
"kiv": "kimbuyî",
"dbg": "dogul domî",
"bzg": "babuzayî",
"roa-ole": "leoniya kevn",
"bun": "şerbroyî",
"gnn": "gumatjî",
"mhs": "bûrî",
"pln": "palenqueroyî",
"aus-guw": "guwarî",
"tgt": "tagbanwayiya navendî",
"mwv": "mentawaî",
"kke": "kakabeyî",
"pla": "mianî",
"bpr": "koronadal blaanî",
"oty": "tamîliya kevn",
"ywr": "yawuruyî",
"nai-tap": "tapaçultecî",
"sai-sec": "seçurayî",
"pid": "piaroayî",
"mih": "mixteciya çayuco",
"icr": "kreyoliya îngilîzî ya îslanderê",
"hoh": "hobyótî",
"fab": "annoboneseyî",
"ssm": "semnamî",
"ncg": "nisga'ayî",
"mkg": "makî (Çîn)",
"max": "malayiya moluccana bakur",
"zak": "zanakî",
"kxv": "kuviyî",
"xkn": "kayan river kayanî",
"fuy": "fuyugî",
"zpl": "zapotekiya laçixio",
"kwf": "kwara'aeyî",
"aig": "îngilîziya kreyolî ya antîgua û barbud",
"rai": "ramoaainayî",
"otd": "dohoyî",
"bey": "akuwagelî",
"nwr": "nawaruyî",
"tmq": "tumleoyî",
"tgx": "tagişî",
"pbr": "pangwayî",
"loj": "louyî",
"emp": "emberayiya bakurî",
"nho": "takuuyî",
"bco": "kalulî",
"ifb": "batad ifugaoyî",
"jao": "yanyuwayî",
"inc-ohi": "hindiya kevn",
"cup": "cupeñoyî",
"bci": "bawuleyî",
"ngo": "ngonî",
"nun": "anongî",
"yee": "yimasî",
"kxb": "krobuyî",
"hub": "huambisayî",
"nee": "kumakî",
"bec": "iceve-macî",
"smb": "simbarî",
"kuj": "kuriayî",
"ian": "îatmulî",
"cjv": "çuaveyî",
"zne": "zandeyî",
"ssd": "siroî",
"cbn": "nyah kurî",
"lwg": "wangayî",
"bmr": "muinanî",
"kya": "kwayayî",
"xem": "kembayanî",
"acz": "açeronî",
"pav": "wari'",
"egx-dem": "demotîkî",
"bph": "botlixî",
"lev": "lammayî",
"btp": "budibudî",
"bzq": "bulî",
"tdv": "toroyî",
"klq": "rumuyî",
"ojv": "javayiya ontongê",
"bdi": "burunî",
"wya": "wyandotî",
"pbb": "paezî",
"lfn": "lingua franca nova",
"jit": "jitayî",
"amq": "amahaî",
"tcf": "mepaya malînaltepekî",
"ebu": "embuyî",
"rwm": "ambayî",
"pnh": "penrhynî",
"and": "ansus",
"pej": "pomoyiya bakurî",
"kue": "kumanî",
"fip": "fipayî",
"kcn": "nubiyî",
"lol": "mongoyî",
"bwd": "biwaydokayî",
"aia": "arosî",
"zau": "zangskarî",
"pud": "punan aputî",
"ikz": "îkizuyî",
"bgb": "bobongko",
"thk": "tharakayî",
"ymc": "mujiya başûrî",
"mny": "manyawayî",
"xwa": "kwazayî",
"wrs": "warisî",
"nai-tip": "tipaî",
"teu": "sooyî",
"ked": "kereweyî",
"szp": "suaboyî",
"rgr": "resigaroyî",
"bdm": "budumayî",
"nib": "nakameyî",
"lek": "leyponî",
"guh": "guahiboyî",
"bqr": "burusuyî",
"apl": "lipan",
"bnd": "banda",
"tsj": "tşanglayî",
"xme-old": "mediya kevn",
"ppn": "papapanayî",
"mwp": "kala lagaw yayî",
"bfa": "bariyî",
"plh": "paulohî",
"btd": "batakiya dairî",
"ure": "uruyî",
"sty": "tatariya sîberî",
"buy": "mmaniyî",
"xyy": "yorta yortayî",
"xdy": "malayîk dayakî",
"kmj": "kumarbhag pahariayî",
"vun": "vunjoyî",
"cuh": "çukayî",
"lgl": "walayî",
"pna": "punan bah-biauyî",
"now": "nyamboyî",
"gqa": "ga'andayî",
"thm": "thavungî",
"acr": "açiyî",
"cir": "tiriyî",
"mxr": "murîkî (Malezya)",
"swp": "suauyî",
"zor": "zoqueyiya rayón",
"wic": "wiçitayî",
"suw": "sumbwayî",
"bum": "buluyî (Kamerûn)",
"rnw": "rungwayî",
"nak": "nakanayî",
"trs": "trîkuyiya çicahuaxtla",
"lpo": "lipoyî",
"gwe": "gwenoyî",
"cbd": "carijonayî",
"mot": "barî",
"tlv": "taliabuyî",
"xsu": "sanumayî",
"sjl": "mijî",
"pip": "peroyî",
"acx": "erebiya ummanî",
"ybb": "yembayî",
"uln": "unserdeutsch",
"yil": "yindjilandjî",
"ykn": "kua-nsî",
"apu": "apurinã",
"sso": "sissanoyî",
"puc": "punan merapî",
"mwn": "nyamwangayî",
"bpa": "dakakayî",
"mmd": "maonanî",
"bof": "bolonî",
"ati": "attié",
"wji": "warjî",
"lra": "rara bakati'",
"mlu": "toabaîtayî",
"bdd": "bunamayî",
"bfd": "bafutî",
"keu": "akebuyî",
"wod": "wolanî",
"ksb": "şambalayî",
"mff": "nakî",
"azn": "durango nahuatliya rojavayî ya jêrîn",
"asi": "buruwayî",
"ala": "alago",
"tpy": "trumaî",
"zms": "mbesayî",
"kib": "koalibî",
"jun": "juangî",
"guf": "gupapuynguyî",
"liy": "banda-bambariyî",
"sai-pam": "pamiguayî",
"loa": "lolodayî",
"elm": "elemeyî",
"aad": "amalî",
"lcm": "tungagî",
"twh": "tai dónî",
"ppm": "papumayî",
"xmr": "meroytîkî",
"kno": "konoyî (sierra leone)",
"kzz": "kalabrî",
"emw": "emplawasî",
"pnk": "pawnakayî",
"gym": "ngäbereyî",
"mxj": "mijuyî",
"lun": "lundayî",
"kos": "kosraeyî",
"kzx": "kamarianî",
"aan": "anambeyî",
"ukq": "ukwayî",
"tau": "tananaya jorîn",
"anc": "ngas",
"rcf": "kreyola fransî ya réunion",
"knm": "kanamariyî",
"bvy": "baybayanonî",
"jnj": "yemsayî",
"onu": "unuayî",
"bdh": "tara bakayî",
"pij": "pijaoyî",
"mks": "mixteciya silacayoapan",
"juh": "honeyî",
"etx": "etenî",
"sai-chr": "çarruayî",
"aui": "anukî",
"cuc": "usila çinantecî",
"xme-ott": "tatiya kevn",
"njj": "njenî",
"mng": "mnongiya rojhilatî",
"cih": "çinaliyî",
"ard": "arabana",
"val": "vehesî",
"aos": "taykatî",
"peb": "pomoyiya rojhilatî",
"xcb": "kumbrîkî",
"clk": "iduyî",
"aem": "aremî",
"vut": "vuteyî",
"teq": "temeinî",
"siu": "sinagenî",
"xmm": "manado malayî",
"gdj": "kurtjarî",
"xau": "kauwerayî",
"atz": "arta",
"zsr": "zapoteciya rincona başûrî",
"wmt": "walmajarrî",
"ter": "terenoyî",
"sit-sit": "situyî",
"zns": "mangasî",
"kwz": "kwadiyî",
"iki": "îkoyî",
"prq": "aşeninka pereneyî",
"ztq": "zapotekiya quioquitani-quieri",
"wan": "wanî",
"txh": "thrasî",
"ahg": "qimant",
"boe": "mundablî",
"gww": "kwiniyî",
"ior": "înorî",
"ply": "bolyuyî",
"avt": "au",
"zpu": "zapotekiya yalalagî",
"bgv": "warkay-bîpîmî",
"srb": "sorayî",
"huu": "murui huitotoyî",
"zmm": "marimanindjî",
"xme-ker": "kermanî",
"gbv": "gbanuyî",
"awe": "awetí",
"xzh": "zhang-zhungî",
"wow": "wawonî",
"tqo": "toaripî",
"syb": "subaneniya navendî",
"ril": "riangî",
"nqo": "n'koyî",
"laj": "langoyî (Uganda)",
"bbh": "buganî",
"orr": "orumayî",
"gju": "gojriyî",
"ddd": "dongotonoyî",
"yik": "dongşanba laloyî",
"sai-bag": "baguayî",
"tsr": "akeî",
"txe": "totolî",
"nal": "nalikî",
"bez": "kîbenayî",
"jeh": "jehî",
"sem-saf": "safaitîkî",
"mka": "mbreyî",
"nai-jum": "jumaytepequeyî",
"ebg": "ebughuyî",
"cbv": "cacuayî",
"lnl": "bandayiya navendî ya başûr",
"inc-kho": "xolosî",
"tzx": "tabriakî",
"sln": "salînanî",
"ncr": "ncaneyî",
"kqt": "kadazaniya çemê kliasê",
"cbr": "caşibo-cacataiboyî",
"trt": "tunggareyî",
"tyj": "tai doyî",
"kpr": "korafe-yeghayî",
"hmt": "hamtaiyî",
"csi": "coast miwokî",
"bbi": "barombî",
"tvk": "ambrîmiya başûr-rojhilat",
"ynd": "yandruwandhayî",
"sai-sap": "saparayî",
"mik": "mikasukî",
"kid": "koşinî",
"bya": "batakiya palawan",
"awd-ana": "anauyayî",
"yrw": "yarawatayî",
"tnx": "tanemayî",
"lme": "peveyî",
"nbm": "ngbaka ma'boyî",
"myy": "macunayî",
"cao": "çacoboyî",
"anp": "angîka",
"sim": "seimî",
"nha": "nhandayî",
"kqn": "kaondeyî",
"ecr": "eteocretanî",
"crv": "çaurayî",
"bef": "benabenayî",
"aud": "anuta",
"yiy": "yir-yorontî",
"usp": "uspantekoyî",
"sry": "serayî",
"njy": "njyemî",
"mod": "mobilianî",
"mmt": "malalamaî",
"leu": "karayî (Gîneya nû)",
"mbe": "molaleyî",
"txi": "ikpengî",
"snc": "sinaugoroyî",
"noc": "nukî",
"mle": "manambuyî",
"kyr": "kuruayayî",
"ivb": "îbatanî",
"sai-chu": "çuruyayî",
"lsr": "aruopî",
"zaq": "zapotekiya aloapam",
"tef": "teressayî",
"siy": "sivandî",
"nyb": "nyangboyî",
"mpi": "mpadeyî",
"tcq": "kayî",
"kbt": "gabadiyî",
"dka": "dakpayî",
"bff": "bofî",
"ahs": "aşeyî",
"zar": "zapotekiya rincón",
"xct": "tibetiya klasîk",
"afz": "obokuîtayî",
"mnf": "mundanî",
"mpw": "mapidianî",
"gza": "ganzayî",
"acv": "açumawî",
"zmu": "muruwarî",
"zmt": "maringarrî",
"lbc": "lakkiayî",
"gbg": "gbanziriyî",
"des": "desanoyî",
"kud": "awhelawayî",
"agc": "agatuyî",
"tob": "tobayî",
"suc": "subanoniya rojavayî",
"oni": "onînî",
"mne": "nabayî",
"itm": "îtu mbon uzoyî",
"ges": "geser-goromî",
"aza": "azhayî",
"nfl": "aiwooyî",
"tqp": "tomoipî",
"rof": "romboyî",
"ury": "oryayî",
"axg": "mato grosso arára",
"jax": "jambî malayî",
"gkn": "gokanayî",
"tbq-gkh": "gokhyî",
"bkz": "bungku",
"aik": "akeyî",
"tku": "totonaciya nekaksaya jorîn",
"sho": "şangayî",
"crp-rsn": "russenorskî",
"nss": "nalî",
"guo": "guayaberoyî",
"dun": "dusun deyahî",
"bsm": "busamiyî",
"ble": "balanta-kentohe",
"axx": "xaragure",
"sxg": "şixingî",
"apz": "safeyoka",
"awd-pai": "paikonekayî",
"muc": "mbu'",
"kgu": "kobolî",
"dbf": "edopiyî",
"bbp": "bandayiya rojavayî ya navendî",
"loe": "saluanî",
"nux": "mehekî",
"elk": "elkeiyî",
"yaf": "yakayî",
"tiz": "tai hongjinî",
"stu": "samtaoyî",
"nkg": "nekginî",
"koz": "korakî",
"aus-bra": "barranbinyayî",
"tlr": "talîsî",
"spc": "sapeyî",
"sai-pyg": "payaguayî",
"tbq-mil": "milangî",
"klp": "kamasayî",
"crz": "cruzeñoyî",
"boj": "ancamî",
"tan": "tangaleyî",
"svs": "savosavoyî",
"ppq": "peyî",
"ngg": "ngbaka manzayî",
"mpx": "misima-paneatî",
"kcp": "kangayî",
"cbi": "çaçiyî",
"bfc": "bayiya bakurî",
"yec": "yeniçeyî",
"sai-trr": "tarairiú",
"plg": "pilagayî",
"hoe": "horomî",
"yun": "benayî",
"any": "anyî",
"yis": "yisî",
"ush": "uşojoyî",
"tav": "tatuyoyî",
"sve": "serilî",
"gob": "playeroyî",
"nkz": "nkarî",
"moc": "mocovî",
"jko": "kuboyî",
"reg": "karayî (Tanzanya)",
"hul": "hulayî",
"chh": "çinookî",
"yub": "yugambalî",
"tbg": "tayrorayiya bakur",
"mdc": "maleyî",
"kuo": "kumukioyî",
"mvy": "indus kohistanî",
"foi": "foiyî",
"coz": "çoçotecî",
"bim": "bimobayî",
"agf": "argunî",
"kmx": "wabodayî",
"mtl": "montolî",
"kjr": "kuruduyî",
"kcb": "kawaçayî",
"ibn": "îbinoyî",
"scb": "çutî",
"atx": "arutanî",
"mvt": "mpotovoroyî",
"kxa": "kayrîrûyî",
"boq": "bogayayî",
"zpx": "zapotekiya san baltazar loxiça",
"wnc": "wantoatî",
"itd": "tidongiya başûrî",
"xog": "sogayî",
"ann": "obolo",
"unr": "mundarî",
"bzh": "mapos buangî",
"tye": "kyengayî",
"kyq": "kengayî",
"kwa": "dâwî",
"bou": "bondeyî",
"aul": "aulua",
"zty": "zapotekiya yatee",
"wrp": "waropenî",
"mmi": "musarî",
"buq": "bremî",
"auj": "awjîla",
"gtu": "aghu tharrnggalayî",
"zil": "zialoyî",
"tlb": "tobeloyî",
"mty": "nabî",
"lbz": "lardilî",
"gdd": "gêdagêdî",
"mdx": "dizinî",
"bgt": "bugotûyî",
"tpc": "azoyú me'phaayî",
"jmb": "zumbunî",
"tdn": "tondanoyî",
"rng": "rongayî",
"mtm": "matorî",
"djd": "jaminjungî",
"gol": "golayî",
"doz": "dorzeyî",
"nmk": "namakurayî",
"mnt": "maykulanî",
"lbl": "libon bikolî",
"gde": "gudeyî",
"bxs": "busamî",
"xmd": "mbudumî",
"kdq": "koçî",
"cah": "cahuaranoyî",
"bza": "bandiyî",
"aes": "alseayî",
"dsq": "tadaksahakî",
"tmj": "samarokenayî",
"att": "pamplona atta",
"xhd": "hadramî",
"brp": "barapasiyî",
"omw": "tairorayiya başûr",
"nif": "nekî",
"iyo": "mesakayî",
"luq": "lucumiyî",
"kqz": "koranayî",
"coc": "cocopayî",
"amj": "amdang",
"tlk": "talokî",
"spi": "saponî",
"nnf": "ngaingî",
"mlj": "miltuyî",
"luz": "luriya başûrî",
"xas": "kamassî",
"cua": "cuayî",
"afd": "andaî",
"yxl": "yarlî",
"sit-tgm": "tangamî",
"nga": "ngbakayî",
"mrg": "misingî",
"igm": "kanggapeyî",
"gop": "yeretuarî",
"myh": "makahî",
"kpg": "kapîngamarancîyî",
"ero": "horpayî",
"eto": "etonî (Kamerûn)",
"bcq": "bençî",
"srr": "sererî",
"mqz": "malasangayî",
"hui": "huliyî",
"cap": "çipayayî",
"uar": "tayrumayî",
"mox": "molimayî",
"nai-ipa": "ipaî",
"arh": "arhuako",
"wdj": "wadjiginyî",
"tem": "temneyî",
"snn": "sionayî",
"mxk": "monumboyî",
"kru": "kurukhî",
"inc-mas": "asamiya navîn",
"zoo": "zapotekiya asunción mixtepec",
"wme": "wambuleyî",
"pru": "puragî",
"qwt": "kwalhioqua-tlatskanaî",
"gbb": "kaytetyeyî",
"bux": "boghomî",
"atm": "ata",
"abn": "abuayî",
"zab": "zapotekiya san juan guelavia",
"wny": "wanyî",
"sai-qtm": "quitemoyî",
"mmf": "mundatî",
"gdm": "laalî",
"kxi": "keningau murutî",
"dwr": "dawroyî",
"bfw": "bondoyî",
"aux": "aurá",
"ttv": "titanî",
"nrz": "lalayî (Gîneya nû)",
"gbp": "gbaya-bossangoayî",
"awn": "awngî",
"zia": "ziayî",
"way": "wayanayî",
"sut": "subtiabayî",
"rog": "roglayiya bakurî",
"ono": "onondagayî",
"mbj": "nadëbî",
"mls": "masalitî",
"bbj": "ghomalayî'",
"dyi": "djiminiyî",
"bgg": "bugunî",
"ail": "aîmeleyî",
"wir": "wirafedî",
"cla": "ronî",
"ost": "osatuyî",
"kkr": "kir-balarî",
"dgb": "bunogeyî",
"yha": "bahayî",
"mcd": "şaranahuayî",
"rwk": "rwayî",
"ifu": "mayoyao ifugaoyî",
"lig": "ligbiyî",
"jek": "jeri kuoyî",
"ghs": "guhu-samaneyî",
"bdn": "baldemuyî",
"xkf": "xengxayî",
"tsb": "tsamaî",
"sle": "şolagayî",
"nai-spt": "sahaptinî",
"nas": "nasioyî",
"mhd": "mbuguyî",
"kfa": "kodavayî",
"jur": "jurúnayî",
"goa": "guroyî",
"efa": "efaiyî",
"aqn": "altaya bakurî",
"tjs": "tujyayiya başûrî",
"tdy": "tadyawanî",
"los": "loniuyî",
"jka": "kaerayî",
"afo": "eloyî",
"cba-cat": "catio çibçayî",
"bsn": "barasanayî",
"ama": "amanayé",
"sai-san": "sanavironî",
"prc": "paraçî",
"nej": "nekoyî",
"cms": "messapicî",
"kyl": "kalapuyayî",
"coj": "coçimiyî",
"byr": "baruyayî",
"aey": "ameleyî",
"aus-ynk": "yangkaalî",
"yta": "taluyî",
"pay": "peç",
"lse": "lusengoyî",
"cub": "cubeoyî",
"gac": "andamaniya mezin a têkel",
"yry": "yarluyandî",
"tgp": "tangoayî",
"mjt": "sawriya pahariayî",
"phl": "phalurayî",
"ngt": "ngeqî",
"xnr": "kangrî",
"ciy": "çaimayî",
"bca": "bayiya navendî",
"aog": "angoram",
"yrn": "yerongî",
"skz": "sekarî",
"pia": "pima bajoyî",
"mjb": "makaleroyî",
"hot": "hoteyî",
"cbt": "çayahuitayî",
"aor": "aore",
"uve": "uveyiya rojava",
"pbv": "pnarî",
"mkr": "malasî",
"qvy": "kueyuyî",
"nai-chi": "çiquimulillayî",
"bhi": "bhilalî",
"erg": "sieyî",
"plo": "popolucayiya oluta",
"aun": "molmo one",
"kun": "kunamayî",
"laz": "aribwatsayî",
"waj": "waffayî",
"xsi": "sioyî",
"ibr": "îbuoroyî",
"zaf": "zapotekiya ayoquesco",
"lbq": "wamparî",
"keg": "teseyî",
"nyt": "nyawaygî",
"akc": "mpur",
"mnx": "manikionî",
"kmq": "kwamayî",
"khz": "keaparayî",
"ilk": "îlongotî",
"gaj": "gadsupî",
"aqp": "atakapa",
"kgr": "abunî",
"zpf": "zapotekiya san pedro quiatoni",
"sok": "sokoroyî",
"odu": "odualî",
"muh": "mündü",
"lbb": "labelî",
"knl": "keninjalî",
"bna": "boneratî",
"auy": "auyana",
"ade": "adeleyî",
"zpw": "zapotekiya zaniza",
"opm": "oksapminî",
"mug": "musguyî",
"hob": "mariyiya awistronezî",
"ywl": "laluyiya rojavayî",
"ksx": "kêdangî",
"gbq": "gbaya-bozoumî",
"xbm": "bretoniya navîn",
"kmn": "awtuwî",
"ziw": "zigulayî",
"wbm": "wayî",
"tgo": "sudestî",
"opo": "opaoyî",
"lan": "laruyî",
"xuu": "khweyî",
"gid": "gidarî",
"bvj": "baanî",
"zzj": "zuojiang zhuangî",
"wpc": "wirö",
"rnn": "roonî",
"don": "dourayî",
"bhj": "bahingî",
"lib": "likumî",
"akj": "jeru",
"awd-gnu": "guinauyî",
"dux": "duunî",
"bqp": "busayî",
"nsk": "naskapî",
"mqb": "mbukoyî",
"kwl": "kofyarî",
"nai-jtp": "jutiapayî",
"grd": "guruntumî",
"llp": "efateyiya bakur",
"agy": "altaya başûrî",
"yar": "yabaranayî",
"khc": "tukang besiya bakur",
"sbl": "sambaliya botolan",
"crc": "lonwolwolî",
"xkg": "kagoroyî",
"hdn": "haidayiya bakurî",
"sai-ctq": "catuquinaruyî",
"bbb": "barayî",
"amr": "amarakaerî",
"yky": "yakomayî",
"bsx": "yangkamî",
"tmz": "tamanakuyî",
"zsa": "sarasirayî",
"nig": "ngalakanî",
"khl": "lusiyî",
"xow": "kowakî",
"hem": "hembayî",
"pga": "erebiya jubayê",
"bhm": "batharî",
"bzb": "andioyî",
"yko": "yasayî",
"sax": "sayî",
"ypg": "pholayî",
"nnh": "ngiemboonî",
"mpd": "maçinereyî",
"vic": "kreyoliya giravên virginê",
"kdp": "kaningdon-nindemî",
"sit-cha": "çairelî",
"yes": "yeskwayî",
"uur": "urayî (Vanuatu)",
"mhu": "taraonî",
"slu": "selaruyî",
"xtd": "mixtekiya diuxi-tilantongo",
"utr": "etuloyî",
"bnv": "benerafî",
"ydk": "yoidikî",
"trr": "tauşîroyî",
"srk": "serudung murutî",
"xpo": "poçutekî",
"nkx": "nkorooyî",
"kes": "kugboyî",
"kgm": "karipúnayî",
"cax": "çiquitanoyî",
"big": "biangaî",
"vil": "vilelayî",
"dtu": "tebul ure dogonî",
"tty": "sikaritaî",
"rmg": "norweciya traveller",
"mlw": "molokoyî",
"biq": "bipî",
"ylu": "aribwaungî",
"wga": "wagayayî",
"tnz": "ten'ednî",
"qum": "sipakapenseyî",
"pue": "puelçeyî",
"nop": "numanggangî",
"mzq": "mori atasî",
"awd-kus": "kustenauyî",
"idi": "îdî",
"kzf": "da'a kailiyî",
"bib": "bîssayî",
"zad": "zapotekiya cajonos",
"waz": "wampurî",
"tll": "tetelayî",
"pur": "puruborayî",
"nih": "nyihayî",
"tnk": "kwamerayî",
"ilv": "îlueyî",
"dmn-dam": "damayî (Sierra leone)",
"cba-ata": "atanquesî",
"abu": "abureyî",
"zpt": "zapotekiya san vicente coatlan",
"aaw": "solongyî",
"opy": "ofayeyî",
"dtb": "labuk-kinabatangan kadazanî",
"ikt": "înuvialuktunî",
"auu": "auye",
"adi": "adî",
"wsk": "waskiayî",
"tix": "tiwayiya başûrî",
"atu": "reel",
"mui": "musî",
"iso": "îsokoyî",
"gya": "gbayayiya bakur-rojava",
"auw": "awyî",
"zik": "zimakanî",
"sai-way": "wayumarayî",
"sue": "suenayî",
"sai-opo": "opónî",
"srf": "nafî",
"qxs": "kiangiya başûrî",
"ggt": "gituayî",
"bcd": "babariya bakur",
"xam": "ǀxamî",
"wiu": "wiruyî",
"rro": "roroyî",
"osi": "osingî",
"mvb": "mattolî",
"mjk": "matukarî",
"lln": "leleyî (Çad)",
"kiy": "kirikiriyî",
"sit-jap": "japhugî",
"tds": "doutaî",
"blf": "buol",
"akt": "akolet",
"apb": "sa'a",
"awd-mpr": "maypureyî",
"jee": "jerungî",
"saj": "sahuyî",
"pkn": "pakanhayî",
"kkx": "kohinî",
"nai-cal": "calusayî",
"bgf": "banganduyî",
"ybm": "yabenî",
"bhq": "tukang besî başûr",
"mxe": "mele-filayî",
"lom": "loomayî",
"hka": "kaheyî",
"emn": "emanî",
"boi": "barbarenyoyî",
"aie": "amarayî",
"anh": "nendî",
"mej": "meyahî",
"kcl": "kalayî",
"hro": "haroiyî",
"enc": "enî",
"amy": "amî",
"yde": "yangum deyî",
"taj": "tamangiya rojhilatî",
"sar": "saravekayî",
"szb": "ngalumî",
"inm": "minaeanî",
"kwh": "kowyayî",
"hed": "herdeyî",
"cuy": "cuitlatecî",
"yvt": "yaviteroyî",
"sgw": "sebat bet gurageyî",
"nph": "phomî",
"mjs": "mişipî",
"mda": "madayî (Nîjerya)",
"wat": "kaninuwayî",
"blo": "anîî",
"yss": "yessan-mayoyî",
"ona": "selk'namî",
"pny": "pinyinî",
"noe": "nimadî",
"crm": "kriya mûsî",
"hhy": "hoyahoyayî",
"bzz": "evantî",
"inc-apa": "apabhramsayî",
"uuu": "uyî",
"seu": "serui-lautî",
"pbi": "podokoyî",
"mhc": "moçoyî",
"kzw": "kaririyî",
"faa": "fasuyî",
"sai-chi": "çirinoyî",
"yab": "yuhupî",
"vit": "vitî",
"myl": "momayî",
"crb": "island caribî",
"frq": "forakî",
"cog": "çongî",
"brk": "birgidî",
"waq": "wagemanî",
"nuy": "nunggubuyuyî",
"mdb": "morigî",
"idu": "îdomayî",
"fun": "fulniôî",
"dao": "daai çinî",
"wnb": "wanambreyî",
"skv": "skouyî",
"sai-pur": "purukotó",
"nyi": "nyimangî",
"kwn": "kwangaliyî",
"kec": "keigayî",
"gbu": "gagaduyî",
"dnj": "danî",
"bus": "bokobaruyî",
"ado": "abuyî",
"zpn": "zapotekiya santa ines yatzeçi",
"aml": "war-jaîntî",
"mij": "mungbamî",
"lbu": "labuyî",
"ken": "kenyangî",
"ipo": "îpikoyî",
"zam": "zapotekoyiya mahuatlana navendî",
"wac": "wasko-wişramî",
"sww": "sowayî",
"msu": "musomî",
"rkm": "markayî",
"slp": "lamaholotî",
"gso": "gbayayiya başûr-rojava",
"ahb": "axamb",
"kit": "agobî",
"bfi": "zimanê destan ê brîtanî",
"taz": "toçoyî",
"swi": "suî",
"prm": "kibirî",
"gis": "gizigayiya bakur",
"doe": "doeyî",
"abj": "aka-beayî",
"hnh": "ǁaniyî",
"roo": "rotokasî",
"nlv": "nahwatliya orizaba",
"npl": "nahwatliya pueblaya başûr-rojhilatî",
"llc": "leleyî (Gîne)",
"fkk": "kirya-konzelî",
"mde": "bura mabangî",
"bdl": "bajwayiya endonezyayî",
"bss": "akooseyî",
"scw": "şayî",
"lsm": "saamiayî",
"pqa": "pa'ayî",
"nmq": "nambyayî",
"mbq": "maysînî",
"jib": "jibuyî",
"bhs": "buwalî",
"sjo": "xibeyî",
"abw": "pal",
"nxa": "naueteyî",
"mck": "mbundayî",
"jmx": "juxtlahuaca mixteciya rojavayî",
"clu": "caluyanunî",
"ybo": "yabongî",
"tuo": "tukanoyî",
"nml": "ndemlî",
"mfx": "meloyî",
"lop": "lopayî",
"kzv": "komyandaretî",
"kct": "kaianî",
"has": "haislayî",
"mmw": "emayî",
"cyb": "cayubabayî",
"bcj": "bardî",
"awd-ama": "amarizanayî",
"ylr": "yalarnngayî",
"ago": "taînaeyî",
"prw": "parawenî",
"enw": "enwangî",
"kog": "coguiyî",
"bst": "basketoyî",
"ymo": "yangum monî",
"uda": "udayî",
"tma": "tamayî (Çad)",
"sre": "sarayî",
"nbv": "ngamamboyî",
"mcv": "minanibaî",
"koh": "koyoyî",
"zbt": "batuî",
"anb": "andoa",
"yaw": "yawalapitî",
"tnc": "tanimuca-retuarã",
"sbx": "seberuangî",
"yhl": "hlepho phowayî",
"bzv": "bebeyî",
"anf": "anîmere",
"yet": "yetfayî",
"pir": "piratapuyoyî",
"nmw": "nimoayî",
"nhb": "bengî",
"tbo": "tawalayî",
"szd": "seruyî",
"poy": "pogoloyî",
"bve": "malayiya berau",
"ctm": "çitimaçayî",
"aaf": "aranadanî",
"mkh-mvi": "viyetnamiya navîn",
"mnd": "mondeyî",
"mup": "malvî",
"kse": "kuniyî",
"btf": "birgîtî",
"aac": "ariyî",
"tex": "tennetî",
"kbb": "kaxuyanayî",
"ula": "fungwayî",
"dsh": "daasanaçî",
"zps": "zapotekiya coatlan",
"wnp": "wanapî",
"scs": "slaveyiya bakur",
"lid": "nyindrouyî",
"kvi": "kwangî",
"idb": "îndo-portegîzî",
"bdt": "bokotoyî",
"ate": "atemble",
"zpi": "zapotekiya santa maria quiegolani",
"tvy": "timor pidginî",
"sol": "solosî",
"rjs": "rajbanşî",
"ogc": "ogbahî",
"mth": "mungguî",
"dmc": "gavakî",
"zaj": "zaramoyî",
"sss": "soyî",
"nai-okw": "okwanuçuyî",
"hia": "lamangî",
"gyg": "gbayiyî",
"duy": "dicamay agtayî",
"sgt": "brokpakeyî",
"yix": "axi yî",
"tcx": "todayî",
"sui": "sukî",
"phi-nag": "nagtipunan agtayî",
"ixc": "îxcatecî",
"giz": "gizigayiya başûr",
"baa": "babatanayî",
"akm": "aka-bo",
"wiy": "wiyotî",
"tnt": "tontemboanî",
"uta": "otankî",
"nhc": "nahwatliya tabasco",
"mph": "maungî",
"led": "lenduyî",
"kiz": "kisiyî",
"dva": "duauyî",
"bvr": "burarrayî",
"yig": "wusa nasuyî",
"neb": "tourayî",
"shv": "şehrî",
"nnm": "namiayî",
"nai-wji": "jicaqueyiya rojavayî",
"gve": "duwetî",
"yln": "buyangiya langnî",
"blq": "baluan-pam",
"jiv": "şuarî",
"quv": "sakapultekoyî",
"ynk": "naukanskî",
"mgy": "mbungayî",
"kpx": "koiariyiya çiyayî",
"ktz": "juǀ'hoanî",
"ofu": "efutopî",
"wes": "cameroon pidginî",
"dba": "bangi meyî",
"aab": "alumu-tesuyî",
"bkj": "pande",
"ndg": "ndengerekoyî",
"bbo": "konabereyî",
"zka": "kaimbulawayî",
"hgm": "haiǁomî",
"alv-ama": "amasî",
"ttm": "tutçoneyiya bakurî",
"nen": "nengoneyî",
"zmf": "mfinuyî",
"ruf": "luguruyî",
"kfq": "korkuyî",
"tmd": "haruaî",
"eot": "eotileyî",
"sem-amm": "ammoniteyî",
"tdk": "tambasî",
"sba": "ngambayî",
"lue": "luvaleyî",
"khq": "koyra çiiniyî",
"doc": "kamiya bakurî",
"sai-cul": "cullî",
"ano": "andoque",
"yww": "yawarawargayî",
"uji": "tanjijilî",
"ypz": "phuzayî",
"nsq": "miwokiya sierraya bakurî",
"sgb": "mag-ançî aytayî",
"ish": "esanî",
"aoi": "anîndîlyakwa",
"uri": "urimî",
"yer": "tarokî",
"shb": "ninamî",
"kpj": "karajayî",
"hoz": "hozoyî",
"twm": "tawang monpayî",
"mqo": "modoleyî",
"meo": "malayiya kedah",
"bbv": "karnaî",
"agl": "fembeyî",
"ctg": "çittagonianî",
"tkq": "teeyî",
"wmd": "mamaindeyî",
"kjn": "kunjenî",
"kmg": "kâteyî",
"bqq": "biritaiyî",
"aai": "arîfama-mînîafîayî",
"swj": "sirayî",
"puw": "puluwatî",
"rin": "nunguyî",
"bdo": "moromî",
"khj": "kuturmiyî",
"fvr": "furî",
"dbq": "dabayî",
"blr": "blang",
"mfi": "wandalayî",
"xsl": "slaveyiya başûr",
"pww": "pwoyiya bakurî",
"knp": "kwanjayî",
"gbi": "galelayî",
"bqc": "bokoyî",
"zpr": "zapotekiya santiago xanica",
"sai-tim": "timoteyî",
"rki": "rakhineyî",
"ogb": "ogbiayî",
"mpv": "mungkipî",
"ker": "kerayî",
"iqu": "îquitoyî",
"gou": "gavarî",
"bvf": "boorî",
"tmb": "avavayî",
"was": "waşoyî",
"tkp": "tîkopyayî",
"reb": "rembongî",
"ogo": "khanayî",
"diu": "gcirikuyî",
"orw": "oro wînî",
"nlx": "nahalî",
"vme": "maselayiya rojhilat",
"ltn": "latundê",
"bvx": "baboleyî",
"aci": "aka-karî",
"rug": "rovyanayî",
"kqs": "kissiya bakurî",
"dmu": "dubuyî",
"bwr": "burayî",
"bkc": "baka",
"akf": "akpayî",
"wut": "wutungî",
"she": "şekoyî",
"pma": "paamayî",
"mgi": "jilî",
"gvl": "gulayî",
"dyy": "dyaabugayî",
"aiy": "aliyî",
"xin": "xincayî",
"skf": "sakirabiayî",
"zmp": "mbuunî",
"bex": "jûr modoyî",
"mea": "menkayî",
"kfc": "konda-dorayî",
"kbw": "kaîepî",
"cto": "embera-catioyî",
"cam": "cemuhî",
"bae": "baré",
"tce": "tutçoneyiya başûrî",
"nfu": "mfumteyî",
"lcq": "luhuyî",
"oco": "korniya kevn",
"ktg": "kalkatunguyî",
"sja": "epenayî",
"col": "columbia-wenatçiyî",
"alx": "amol",
"wca": "yanomamî",
"xxt": "tamborayî",
"auk": "heyo",
"cuo": "cumanagotoyî",
"sai-and": "andoqueroyî",
"yva": "yawayî",
"due": "umiray dumaget agtayî",
"kml": "tanudan kalingayî",
"ptr": "piamatsinayî",
"blx": "mag-îndî ayta",
"gcl": "kreyoliya îngilîzî ya grenadî",
"ese": "ese ejjayî",
"uvh": "urî",
"nsm": "semayî",
"nin": "ninzoyî",
"hra": "hrangkholî",
"nai-taw": "tawasayî",
"sbi": "setî",
"mvq": "moereyî",
"mqg": "malayiya kota bangun kutai",
"uwa": "kuku-uwanhî",
"iow": "çiwereyî",
"bid": "bidiyoyî",
"yuk": "yukî",
"teh": "tehuelçeyî",
"mkc": "siliputî",
"zle-ono": "novgorodiya kevn",
"wmh": "waima'ayî",
"tio": "teopî",
"yae": "pumeyî",
"mqn": "moroneneyî",
"zma": "mandayî (Awistralya)",
"kdc": "kutuyî",
"kyt": "kayagarî",
"mps": "dadibî",
"byn": "blinî",
"cns": "asmatiya navendî",
"utp": "abayî",
"zpc": "zapotekiya çoapan",
"den": "slaveyî",
"pwo": "pwoyiya rojavayî",
"mub": "mubî",
"mev": "manoyî",
"bij": "kwankayî",
"kyo": "kelonî",
"inb": "îngayî",
"aph": "athpare",
"zas": "zapotekiya santo domingo albarradas",
"ral": "ralteyî",
"irn": "îrantxeyî",
"dge": "degenanî",
"boa": "borayî",
"adj": "adyukruyî",
"zal": "zauzouyî",
"wax": "watamî",
"tca": "tîkunayî",
"agv": "remontado agta",
"omg": "omaguayî",
"xru": "marriammuyî",
"khn": "khandeşiyî",
"gji": "gejiyî",
"ayd": "ayabadhu",
"zmb": "zimbayî",
"toj": "tojolabalî",
"syk": "sukurî",
"bnf": "masiwang",
"glw": "glavdayî",
"bav": "babungoyî",
"akx": "aka-kede",
"ots": "otomiya estado de meksîka",
"mjj": "mawakî",
"leh": "lenjeyî",
"kss": "kissiyiya başûrî",
"kbz": "duhwayî",
"sth": "şeltayî",
"myf": "bambassî",
"ald": "alladînî",
"ego": "eggonî",
"cbu": "candoşi-şaprayî",
"tmc": "tumakî",
"pgs": "pangsengî",
"ndz": "ndogoyî",
"knd": "kondayî",
"haj": "hajongî",
"cmi": "embera-çamiyî",
"mlp": "bargamî",
"yat": "yambetayî",
"bsg": "başkardiyî",
"pek": "pençalî",
"lwo": "luwoyî",
"kpk": "kpanî",
"kdx": "kamî",
"cug": "cungî",
"anx": "andra-hus",
"sey": "secoyayî",
"pio": "piapocoyî",
"jgo": "ngombayî",
"miy": "mixteciya ayutla",
"gyn": "kreyoliya îngilîzî ya guyanî",
"hoa": "hoavayî",
"amx": "anmatyerre",
"tdm": "tarumayî",
"sza": "semelayî",
"pit": "pitta-pittayî",
"nsz": "nisenanî",
"mis-mmd": "mîmiya decorseyî",
"mky": "makianiya rojhilat",
"kdj": "karamojongî",
"hre": "hreyî",
"bie": "bepourî",
"ena": "apaliyî",
"vgr": "vaghrî",
"sze": "sezeyî",
"not": "nomatsiguengayî",
"mif": "mofu-gudurî",
"mfp": "malayiya makassar",
"kul": "kulereyî",
"huo": "huyî",
"biu": "biete",
"twe": "teiwayî",
"stv": "silt'eyî",
"mqj": "mamasayî",
"kug": "kupayî",
"chw": "çuaboyî",
"zkr": "zakhringî",
"waw": "waiwaî",
"ntp": "tepehuaniya bakurî",
"pmi": "pumiya bakurî",
"hux": "nüpode huitotoyî",
"mor": "moroyî",
"mha": "mandayî (Hindistan)",
"thd": "kuuk thaayorreyî",
"dgz": "dagayî",
"mae": "bo-rukulî",
"sjg": "assangorî",
"zpg": "zapotekiya guevea de humboldt",
"tcz": "thado çinî",
"nyv": "nyulnyulî",
"aso": "dano",
"bld": "bolango",
"snk": "soninkeyî",
"sai-mar": "maratinoyî",
"laf": "lafofayî",
"krk": "kerekî",
"gyl": "gayilî",
"ksr": "borongî",
"avi": "avîkam",
"wah": "watubelayî",
"tpl": "tlacoapa me'phaayî",
"mfr": "marrithiyelî",
"khr": "khariayî",
"giq": "gelaoyiya hêşîn",
"aye": "ayere",
"owl": "weylsiya kevn",
"zsu": "sukurumî",
"nhk": "nahwatliya cosoleacaque",
"law": "laujeyî",
"izr": "îzereyî",
"goi": "gobasiyî",
"wog": "wogamusinî",
"ttu": "torauyî",
"dts": "toro so dogonî",
"mcw": "mawayî",
"azc-ktn": "kitanemukî",
"ddj": "jaruyî",
"dma": "dumayî",
"bkh": "bakoko",
"aqz": "akuntsu",
"pdo": "padoeyî",
"nnb": "nandeyî",
"dzl": "dzalayî",
"bax": "bamumî",
"xiy": "xipayayî",
"tct": "t'enî",
"lht": "lo-togayî",
"kkk": "kokotayî",
"lot": "lotukoyî",
"tdc": "embera-tadó",
"bjc": "barijî",
"aew": "ambakîç",
"tkm": "takelmayî",
"sbp": "sanguyî (Tanzanya)",
"sai-ptg": "patagónî",
"lgk": "neververî",
"ybj": "haşayî",
"amg": "amurdag",
"yns": "yansî",
"udu": "udukî",
"mwm": "sarî",
"ums": "pendauyî",
"wii": "minidienî",
"pbn": "kpasamî",
"cuq": "cunî",
"bbd": "bauyî",
"aty": "aneityum",
"ngc": "ngombeyî (Kongo)",
"kxo": "kanoeyî",
"ags": "esîmbî",
"bxb": "belanda borî",
"urn": "uruangnirinî",
"mis-mmn": "mîmiya naçtigalî",
"hru": "hrusoyî",
"apt": "apatanî",
"yon": "yongkomî",
"vag": "vaglayî",
"vkl": "kulisusuyî",
"kxh": "karoyî",
"jab": "hyamî",
"smg": "simbalî",
"asj": "nsarî",
"knk": "kurankoyî",
"kaf": "katsoyî",
"yml": "îamaleleyî",
"brt": "bitareyî",
"bao": "waîmaha",
"tla": "tepehuaniya başûr-rojavayî",
"pmj": "pumiya başûrî",
"nuf": "nusuyî",
"mrl": "mortlockeseyî",
"man": "mandingoyî",
"ign": "îgnacianoyî",
"bzn": "boanoyî (Maluku)",
"xss": "assanî",
"wne": "wanecî",
"thf": "thangmî",
"kjb": "q'anjob'alî",
"sai-muc": "mucuçî",
"msw": "mansoankayî",
"kem": "kemakî",
"bnp": "bolayî",
"aqm": "atohwaim",
"zat": "zapotekiya tabaa",
"sov": "sonsorolî",
"lhn": "lahananî",
"kjq": "keresiya rojavayî",
"dei": "demisayî",
"kwi": "awa-cuaiquerî",
"aez": "aekayî",
"zay": "zayse-zergullayî",
"una": "watutiya bakur",
"ctl": "tlacoatzintepec çinantecî",
"squ": "squamîşî",
"omb": "ombayî",
"sur": "mwaghavulî",
"umc": "marrusînî",
"lbn": "lametî",
"phi-din": "dinapigue agtayî",
"buw": "bubiyî",
"ahn": "ahàn",
"zrn": "zirenkelî",
"srg": "sulodî",
"ora": "orohayî",
"mtn": "matagalpayî",
"kco": "kinalaknayî",
"hmd": "a-hmaoyî",
"woc": "wogeoyî",
"tqr": "toronayî",
"rbb": "rumaî palaungî",
"ott": "otomiya temoaya",
"nhi": "nahwatliya zacatlan-ahuacatlan-tepetzintla",
"mgk": "mawesî",
"dus": "dumiyî",
"bzu": "burmesoyî",
"bbu": "bakulungî",
"trn": "trinitarioyî",
"sdp": "şerdukpenî",
"sbv": "sabineyî",
"sai-jrj": "jirajirayî",
"gvs": "gumawanayî",
"dnn": "dzuunî",
"tte": "bwanabwanayî",
"bcf": "bamuyî",
"xir": "xiriânayî",
"two": "tswapongî",
"sai-tab": "tabancaleyî",
"lgq": "logbayî",
"klm": "kolomî",
"ngs": "gvokoyî",
"eka": "ekajukî",
"dbw": "bankan tey dogonî",
"aly": "alyawarr",
"yad": "yaguayî",
"ndp": "ndoyî",
"mcr": "menyayî",
"xon": "konkombayî",
"kka": "kakandayî",
"hao": "haköyî",
"ckl": "cibakî",
"jbk": "barikewayî",
"abc": "ambala ayta",
"yaa": "yaminahuayî",
"sny": "saniyo-hiyeweyî",
"mmc": "miçoacan mazahuayî",
"xkq": "koronî",
"had": "hatamî",
"sai-cop": "copallenî",
"swy": "saruayî",
"nid": "ngandî",
"mhi": "ma'dî",
"cpo": "kpeeyî",
"anz": "anem",
"unz": "unde kailî",
"sai-tpr": "taparitayî",
"sed": "sedangî",
"fpe": "piçinglisî",
"mxy": "mixteciya noçixtlana başûr-rojhilatî",
"bfz": "mahasu paharî",
"sai-esm": "esmeraldayî",
"urv": "uruavayî",
"seh": "senayî",
"spx": "pîkeneyiya başûr",
"cag": "nivacleyî",
"zkk": "karankawayî",
"bkl": "berik",
"yut": "yopnoyî",
"vai": "vaî",
"slw": "sialumî",
"noj": "nonuyayî",
"caf": "karrieriya başûrî",
"fag": "finonganî",
"ibh": "bihî",
"awt": "araweté",
"tyx": "teke-tyeeyî",
"mog": "mongondowî",
"knt": "katukinayî",
"bwm": "biwatî",
"apr": "arop-lokep",
"atr": "waîmîrî-atroarî",
"mtt": "motayî",
"pym": "fyamî",
"dlk": "dahalikî",
"bzl": "boanoyî (sulawesî)",
"abp": "abenlen ayta",
"zaw": "zapotekiya mitla",
"svm": "slavomolisanoyî",
"zpz": "zapotekiya texmelucan",
"tit": "tiniguayî",
"rax": "rangî",
"asx": "muratayak",
"mvr": "marauyî",
"lha": "lahayî (Viyetnam)",
"irh": "îrarûtûyî",
"sai-gay": "gayónî",
"awi": "aekyom",
"mcy": "watutiya başûr",
"tpt": "tlaçiçilco tepehuayî",
"sto": "stoneyî",
"rea": "rerauyî",
"aom": "ömie",
"tlx": "khehekî",
"mrx": "dineorî",
"oro": "orokoloyî",
"acl": "akar-baleyî",
"wbw": "woî",
"otn": "otomiya tenango",
"gia": "kitjayî",
"ats": "gros ventre",
"tri": "trió",
"zmz": "mbandjayî",
"yzg": "e'ma buyangî",
"bwa": "bwatûyî",
"bcw": "banayî",
"ywt": "xişanba laloyî",
"tsc": "tswayî",
"gmw-tsx": "saksoniya transylvanyayê",
"fap": "palorî",
"nwa": "nawathinehenayî",
"mue": "media lenguayî",
"kcx": "kaçama-ganjuleyî",
"dah": "gwahatikeyî",
"ekg": "ekariyî",
"cbc": "carapanayî",
"bxw": "bankayî",
"ygw": "yagwoiayî",
"tbr": "tumtumî",
"tgw": "tagwana senoufoyî",
"pnr": "panimî",
"njt": "ndyuka-trio pidginî",
"vnk": "lovonoyî",
"kma": "konniyî",
"hal": "halangî",
"awc": "cicipu",
"bch": "bariyayî",
"gfk": "patpatarî",
"ule": "luleyî",
"vkm": "kamakanî",
"xht": "hattîkî",
"btz": "batakiya alas-kluet",
"dti": "ana tinga dogonî",
"yre": "yaoureyî",
"udj": "ujirî",
"tpu": "tampuanî",
"ung": "ngarinyinî",
"xjb": "minjungbalî",
"slz": "ma'yayî",
"kpe": "kpelleyî",
"xla": "kamulayî",
"kpc": "curripacoyî",
"bvz": "bawziyî",
"ets": "yekheeyî",
"bbn": "uneapayî",
"tvw": "sedoayî",
"crp-spp": "pidginiya samoan plantation",
"ngq": "ngoremeyî",
"mil": "mixteciya peñoles",
"sai-chn": "çanayî",
"kvu": "yinbaw karenî",
"txx": "tatanayî",
"lva": "maku'ayî",
"gel": "fakkanciyî",
"bom": "beromî",
"cvn": "valle nacional çinantecî",
"sya": "siangî",
"bql": "bilakurayî",
"arv": "arbore",
"sai-yup": "yupuayî",
"vnp": "vunapuyî",
"sbb": "simboyî",
"gmw-pro": "proto-cermeniya rojava",
"nbn": "kurî",
"wbv": "wajarrî",
"mwh": "moûk-arîakî",
"bwp": "mandobo bawahî",
"fie": "fyerî",
"dal": "dahaloyî",
"aba": "abeyî",
"zpm": "zapotekiya mixtepec",
"wky": "wangkayutyuruyî",
"laq": "qabiaoyî",
"nja": "nzanyî",
"dmo": "kemezungî",
"dro": "daro-matu melanauyî",
"ato": "atong (Kamerun)",
"yif": "açeyî",
"zts": "zapotekiya tilquiapan",
"lah": "lahndayî",
"iry": "îrayayî",
"roa-bbn": "bourbonnais-berriçonî",
"aal": "afadeyî",
"czn": "zenzontepekiya çatîno",
"mpl": "watutiya navîn",
"lmg": "lamogayî",
"nlg": "gelayî",
"ayo": "ayoreoyî",
"zoh": "zoqueyiya çimalapa",
"mtp": "wiçi lhamtes noctenî",
"suv": "sulungî",
"xmt": "matbatî",
"zga": "kingayî",
"jbt": "jabutiyî",
"gof": "gofayî",
"rmt": "domarî",
"bwu": "bulî (Gana)",
"jod": "wojenakayî",
"yyu": "torricelli yauyî",
"sbf": "şaboyî",
"yan": "mayangnayî",
"kii": "kitsaiyî",
"trc": "trîkuyiya copala",
"shx": "şeyî",
"pgu": "paguyî",
"gwa": "mbatoyî",
"dyo": "jola-fonyiyî",
"yas": "gunuyî",
"igb": "ebirayî",
"plz": "paluanî",
"alv-gwa": "gwarayî",
"eke": "ekitî",
"cfd": "carayî",
"abb": "bankonî",
"amc": "amahuaca",
"rhp": "yahangî",
"lmb": "mereiyî",
"koa": "konomalayî",
"hlb": "halbiyî",
"eme": "emerillonî",
"nai-cig": "ciguayoyî",
"ael": "ambeleyî",
"jay": "yan-nhanguyî",
"tak": "talayî",
"mmy": "migaamayî",
"lmd": "lumunî",
"kfp": "korwayî",
"woi": "kamangî",
"akg": "anakalunguyî",
"nai-per": "pericú",
"nrl": "ngarlumayî",
"mew": "maakayî",
"hig": "kamweyî",
"hnd": "hindkoyiya başûrî",
"cuv": "cuvokî",
"ylg": "yeloguyî",
"une": "unemeyî",
"tpj": "tapieteyî",
"sos": "seenkuyî",
"nsh": "ngoşieyî",
"mit": "mixteciya pueblaya başûr",
"mxx": "mahouyî",
"bzk": "kreyoliya nîkaraguayî",
"esq": "esselenî",
"nbc": "çangî",
"anu": "anuak",
"snu": "senggî",
"mpu": "makurapî",
"hbb": "hubayî",
"cbg": "çimilayî",
"wti": "bertayî",
"app": "apma",
"spg": "sianî",
"snf": "noonî",
"mkp": "moikodî",
"viv": "idunayî",
"gem-pro": "proto-cermenî",
"omx": "moniya kevn",
"maw": "mamprulî",
"are": "arrernteya rojavayî",
"zah": "zangwalî",
"ssl": "sisaalayiya rojavayî",
"mpc": "mangarayî",
"qun": "kuynaultî",
"gyd": "kayardildî",
"ikx": "îkî",
"dij": "daiyî",
"bwq": "boboyiya başûrî",
"aum": "asu",
"axb": "abipon",
"zac": "zapotekiya ocotlan",
"xwk": "wangkumarayî",
"nzi": "nzimayî",
"mzv": "manzayî",
"kwe": "kwerbayî",
"sjk": "kemi samî",
"gmv": "gamoyî",
"bkt": "bolokî",
"atw": "atsugewî",
"zpk": "zapotekiya tlacolulita",
"wbe": "waritaî",
"ray": "rapayî",
"ojs": "ojibweyiya severnê",
"zmd": "maridanî",
"kxz": "kerewoyî",
"irr": "îrî",
"gbr": "gbagyiyî",
"bzx": "bozoyiya hainyaxo",
"aya": "awar",
"res": "reşeyî",
"oin": "oneyiya inebu",
"mwe": "mwerayî",
"ite": "îteneyî",
"gaf": "gendeyî",
"gdl": "diraşayî",
"nfd": "ahwayî",
"tlm": "tolomakoyî",
"mgv": "matengoyî",
"gqn": "kinikinaoyî",
"jah": "jah hutî",
"gog": "gogoyî",
"doy": "dompoyî",
"bfj": "bafanjî",
"xwc": "wokkonî",
"tei": "torricellî",
"sha": "şall-zwallî",
"stn": "owayî",
"emy": "mayaniya epigrafîk",
"azd": "durango nahuatliya rojavayî",
"bls": "balaesang",
"dul": "alabat island agtayî",
"xan": "xamtangayî",
"plk": "şinayiya kohistanî",
"sai-sac": "sacatayî",
"apf": "pahanan agta",
"npa": "nar phuyî",
"mfn": "mbembeyiya çema crossê",
"czk": "knaanicî",
"jow": "jowuluyî",
"cbb": "cabiyariyî",
"bpq": "banda malayî",
"sit-tsh": "tşobdunî",
"sbe": "salibayî (Gîneya nû)",
"mfj": "mefeleyî",
"lok": "lokoyî",
"kdu": "kadaruyî",
"ekp": "ekpeyeyî",
"bap": "bantawa",
"ali": "amaimonî",
"ynu": "yahunayî",
"tuf": "tuneboyiya navendî",
"ppu": "paporayî",
"dcr": "negerhollandsî",
"meq": "mereyî",
"nai-knm": "konomihuyî",
"ijn": "kalabariyî",
"hla": "haliayî",
"alm": "amblongî",
"ynn": "yanayî",
"ntj": "ngaanyatjarrayî",
"kbq": "kamanoyî",
"anm": "analî",
"ukg": "ukurigumayî",
"mav": "satere-maweyî",
"mfz": "mabaanî",
"kqq": "krenakî",
"hns": "hindustaniyiya karibî",
"taf": "tapirapeyî",
"mig": "mixteciya san miguel el grande",
"kni": "kanufiyî",
"sai-chp": "çapacurayî",
"cko": "anufoyî",
"wnu": "usanî",
"spe": "sepayî (Gîneya nû)",
"xrw": "karawayî",
"bnt-cmw": "çimwiinî",
"vam": "vanimoyî",
"sjr": "siar-lakî",
"poo": "pomoyiya navendî",
"mlz": "malaynonî",
"xks": "kumbewahayî",
"ldb": "idunî",
"tqb": "tembeyî",
"nai-sin": "sinacantanî",
"nur": "nuguriayî",
"mqx": "mamujuyî",
"unn": "kurnayî",
"bcn": "bîbaalî",
"ttr": "terayî",
"wkd": "moyî",
"kzl": "kayeliyî",
"ntk": "îkomayî",
"gdg": "ga'dangî",
"gbj": "bodo gadabayî",
"abi": "abîdjî",
"zao": "zapotekiya ozolotepec",
"sai-wnm": "wanhamî",
"thp": "thompsonî",
"cwe": "kwereyî",
"xbn": "kenaboî",
"gnq": "ganayî",
"tcc": "datoogayî",
"ztg": "zapotekiya xanaguia",
"zmj": "maridjabinî",
"lak": "lakayî",
"kvr": "kerînçî",
"ggu": "gbanî",
"anv": "denya",
"aof": "bragat",
"awr": "awera",
"zhb": "zhabayî",
"www": "wawayî",
"stb": "subaneniya bakurî",
"ret": "rettayî",
"oon": "öngeyî",
"mlv": "mwotlapî",
"mzr": "marúboyî",
"lag": "langiyî",
"kxc": "khonsoyî",
"itx": "îtikî",
"bja": "budza",
"ayu": "ayuyî",
"tba": "aikanayî",
"txm": "tominî",
"orx": "oroyî",
"nhq": "nahwatliya huaxcaleca",
"mpq": "matisî",
"kfk": "kinnauriyî",
"kzh": "dongolawiyî",
"bck": "bunabayî",
"ksf": "bafiayî"
}
}
6328as36jplx59cby35s36retpk1abc
6333735
6333693
2026-08-14T21:12:56Z
Wikihez
7344
6333735
json
application/json
{
"langChoices": {
"ku": "kurmancî",
"zza": "zazakî",
"ckb": "soranî",
"sdh": "kurdiya başûrî",
"hac": "hewramî",
"de": "almanî",
"ar": "erebî",
"fa": "farisî",
"fr": "fransî",
"fi": "fînî",
"en": "îngilîzî",
"ja": "japonî",
"sv": "swêdî",
"tr": "tirkî"
},
"posChoices": {
"navdêr": "Navdêr (îsm)",
"lêker": "Lêker (fiîl)",
"rengdêr": "Rengdêr (sifet)",
"hoker": "Hoker (zerf)",
"serenav": "Serenav (îsmê xisûsî)",
"artîkel": "Artîkel",
"baneşan": "Baneşan (nîda)",
"bazinedaçek": "Bazinedaçek",
"cînav": "Cînav (zemîr)",
"daçek": "Daçek (edat)",
"girêdek": "Girêdek",
"gotineke pêşiyan": "Gotineke pêşiyan",
"hejmar": "Hejmar",
"hevok": "Hevok (cimle)",
"îfade": "Îfade",
"kurtenav": "Kurtenav",
"navgir": "Navgir",
"paşdaçek": "Paşdaçek",
"paşgir": "Paşgir",
"pêşdaçek": "Pêşdaçek",
"pêşgir": "Pêşgir",
"pirtik": "Pirtik",
"reh": "Reh",
"sembol": "Sembol",
"tîp": "Tîp (herf)"
},
"posExamples": {
"navdêr": "Kelîmeyên ji bo tiştan (sêv, heywan, qedeh) yan terman (dilşadî, bextiyarî hwd.) di rêzimanê de.",
"lêker": "Kelîmeyên ji bo kirin an bûyînê wekî 'nivîsîn' yan 'xeber dan'.",
"rengdêr": "Kelîmeyên ku wesfa navdêran nîşan didin wekî 'sêva sor' yan 'xwarina şîrîn'.",
"hoker": "Kelîmeyên ku dem, cih yan awayê kirinê diyar dikin wekî 'bi vî awayî' yan 'demkî'.",
"daçek": "Kelîmeyên ku cih, dem yan hereketê diyar dikin wekî 'di.. de' yan 'ji'.",
"cînav": "Kelîmeyên ku li şûna navdêran tên bikaranîn daku navdêr neyên dubarekirin wekî 'ew' yan 'em'.",
"baneşan": "Kelîmeyên ku hest, deng hwd. îfade dikin wekî 'noşî!' yan 'aferîn'.",
"serenav": "Navdêrên ku şexsiyetên ferdî nîşan didin, wek navên kes, cih an organîzasyonan nimûne 'London' yan 'Diyarbekir'.",
"gotineke pêşiyan": "Gotinên ku di nav xelkê de bi berbelavî tên bikaranîn bo nimûne 'Serê neêşe ne hewceyî destmalê ye'."
},
"genderLabels": {
"m": "mê",
"n": "nêr",
"nt": "nêtar",
"mn": "mê û nêr",
"mnmane": "mê yan nêr li gorî maneyê",
"g": "giştî",
"y": "yekjimar",
"p": "pirjimar"
},
"tplDefs": {
"awayê Jacobsonê": {
"langs": [
"zza"
]
},
"rastnivîs": {
"langs": [
"ku"
],
"noLang": true
},
"ku-Latn": {
"langs": [
"ku"
],
"noLang": true
},
"sdh-Arab": {
"langs": [
"sdh"
],
"noLang": true
},
"hac-Arab": {
"langs": [
"hac"
],
"noLang": true
},
"ja-romanîzekirin": {
"langs": [
"ja"
],
"noLang": true
},
"ckb-Arab": {
"langs": [
"ckb"
],
"noLang": true
},
"awayekî din": {
"langs": null
},
"guharto": {
"langs": null
},
"hevmaneya": {
"langs": null
},
"kevnbûyî": {
"langs": null
},
"kêmpeyda": {
"langs": null
},
"şaşnivîs": {
"langs": null
}
},
"jederDefs": {
"jêder-kitêb": {
"label": "Kitêb",
"fields": {
"nivîskar": "Nivîskar",
"sernav": "Sernav",
"sernavê orjînal": "Sernavê orjînal",
"terciman": "Terciman",
"weşanxane": "Weşanxane",
"cih": "Cih",
"sal": "Sal",
"çap": "Çap",
"rûpel": "Rûpel",
"isbn": "ISBN",
"url": "URL"
}
},
"jêder-kovar": {
"label": "Kovar",
"fields": {
"nivîskar": "Nivîskar",
"nivîskar2": "Nivîskar 2",
"sernav": "Sernav",
"sernavê orjînal": "Sernavê orjînal",
"kovar": "Kovar",
"terciman": "Terciman",
"weşanxane": "Weşanxane",
"cild": "Cild",
"hejmar": "Hejmar",
"sal": "Sal",
"rûpel": "Rûpel",
"url": "URL"
}
},
"jêder-websîte": {
"label": "Websîte",
"fields": {
"nivîskar": "Nivîskar",
"sernav": "Sernav",
"terciman": "Terciman",
"websîte": "Websîte",
"url": "URL",
"arşîv": "Arşîva URLê",
"sal": "Sal",
"tarîx": "Tarîx"
}
}
},
"pronTpls": {
"ku-IPA": {
"desc": "IPAya otomatîk ji bo kurmancî (kontrol hewce ye)",
"snippet": "* {{ku-IPA}}",
"langs": [
"ku"
],
"noLang": true
},
"ku-kîte": {
"desc": "Hecekirina otomatîk ji bo kurmancî",
"snippet": "* {{ku-kîte}}",
"langs": [
"ku"
],
"noLang": true
},
"zza-IPA": {
"desc": "IPAya otomatîk ji bo zazakî",
"snippet": "* {{zza-IPA}}",
"langs": [
"zza"
],
"noLang": true
},
"zza-kîte": {
"desc": "Hecekirina otomatîk ji bo zazakî",
"snippet": "* {{zza-kîte}}",
"langs": [
"zza"
],
"noLang": true
},
"IPA": {
"desc": "Alfabeya fonetîk a navmiletî (IPA)",
"snippet": "* {{IPA|CODE|/…/}}"
},
"bilêv": {
"desc": "{{bilêv|herf|nerm, req|hejmar}}",
"snippet": "* {{bilêv|herf|cure|hejmar}}"
},
"kîte": {
"desc": "Şablona hecekirinê",
"snippet": "* {{kîte|CODE|he|ce}}"
},
"hevdeng": {
"desc": "Hevdeng — gotinên bi heman dengî",
"snippet": "* {{hevdeng|CODE|…}}"
}
},
"etymTpls": {
"ji": {
"desc": "Ji zimanekî din hatiye — {{ji|en|ku|anatomy|tr=|t=}}",
"snippet": "{{ji|SOURCELANG|CODE|…}}"
},
"deyn": {
"desc": "Deynkirî — {{deyn|lang|kod|kelîme}}",
"snippet": "{{deyn|SOURCELANG|CODE|…}}"
},
"mîr": {
"desc": "Mîrasmayî — {{mîr|lang|kod|kelîme}}",
"snippet": "{{mîr|SOURCELANG|CODE|…}}"
},
"qertaf": {
"desc": "Ji bi pêşgir, paşgir û hevedudanî — {{qertaf|kod|pêşgir-|reh}}",
"snippet": "{{qertaf|CODE|…|…}}"
},
"q": {
"desc": "Referans bo rûpelekê — {{q|kod|kelîme}} navê zimanî dernakeve",
"snippet": "{{q|CODE|…}}"
},
"hv": {
"desc": "Hevreh — {{hv|lang|kelîme}} navê zimanî derdikeve",
"snippet": "{{hv|SOURCELANG|…}}"
},
"nh": {
"desc": "Nehevreh — {{nh|lang|kelîme}} navê zimanî derdikeve",
"snippet": "{{nh|SOURCELANG|…}}"
},
"cotreh": {
"desc": "Cotreh — teror {{cotreh|ku|tirs}}",
"snippet": "{{cotreh|CODE|…}}"
},
"yekser": {
"desc": "tercimeya yekser — {{yekser|lang|kod|kelîme}}",
"snippet": "{{yekser|SOURCELANG|CODE|…}}"
},
"wergirtin": {
"desc": "Wergirtina maneyê — {{wergirtin|lang|kod|kelîme}}",
"snippet": "{{wergirtin|SOURCELANG|CODE|…}}"
},
"paşvesazî": {
"desc": "Paşvesazî — greed {{paşvesazî|en|greedy}}",
"snippet": "{{paşvesazî|CODE|…}}"
},
"qusandin": {
"desc": "Qusandin — Miho {{qusandin|ku|Mihemmed}}",
"snippet": "{{qusandin|CODE|…}}"
},
"têkilkirin": {
"desc": "Têkilkirin — sormancî {{têkilkirin|ku|soranî|kurmancî}}",
"snippet": "{{têkilkirin|CODE|…}}"
},
"nyz": {
"desc": "Nayê zanîn — {{nyz|ku|hûr=1}}",
"snippet": "{{nyz|CODE}}"
},
"onom": {
"desc": "Onomatopoetîk — {{onom|ku|hûr=1}}",
"snippet": "{{onom|CODE}}"
},
"navmiletî": {
"desc": "Navmiletî — {{navmiletî|ku|hûr=1}}",
"snippet": "{{navmiletî|CODE}}"
},
"neo": {
"desc": "neolojîzm — {{neolojîzm|ku|hûr=1}}",
"snippet": "{{neolojîzm|CODE}}"
}
},
"metadata": {
"aa": {
"haswikt": 1,
"sc": [
"Latn",
"Ethi"
]
},
"ab": {
"haswikt": 1,
"sc": [
"Cyrl",
"Latn",
"Geor"
]
},
"aer": {
"sc": "Latn"
},
"af": {
"g": [
"y",
"p"
],
"haswikt": 1
},
"ak": {
"haswikt": 1
},
"akk": {
"g": [
"n",
"m",
"n-p",
"m-p"
],
"sc": "Xsux"
},
"als": {
"haswikt": 1
},
"am": {
"g": [
"n",
"m",
"n-p",
"m-p"
],
"haswikt": 1,
"sc": "Ethi"
},
"an": {
"g": [
"n",
"m",
"n-p",
"m-p"
],
"haswikt": 1
},
"ang": {
"alt": 1,
"g": [
"n",
"m",
"nt",
"n-p",
"m-p",
"nt-p"
],
"haswikt": 1
},
"ar": {
"g": [
"n",
"m",
"n-p",
"m-p",
"p"
],
"alt": 1,
"haswikt": 1,
"sc": "Arab"
},
"arc": {
"g": [
"n",
"m",
"n-p",
"m-p"
],
"sc": [
"Hebr",
"Syrc"
]
},
"are": {},
"arz": {
"alt": 1,
"g": [
"n",
"m",
"n-p",
"m-p"
],
"sc": "Arab"
},
"as": {
"haswikt": 1,
"sc": "Beng"
},
"ast": {
"g": [
"n",
"m",
"n-p",
"m-p"
],
"haswikt": 1
},
"av": {
"haswikt": 1
},
"ay": {
"haswikt": 1
},
"az": {
"g": [
"y",
"p"
],
"haswikt": 1,
"sc": [
"Latn",
"Cyrl",
"Arab"
]
},
"ba": {
"g": [
"y",
"p"
],
"sc": "Cyrl"
},
"bar": {},
"bat-smg": {
"g": [
"n",
"m",
"n-p",
"m-p"
]
},
"bbl": {
"sc": "Geor"
},
"be": {
"g": [
"n",
"m",
"nt",
"n-p",
"m-p",
"nt-p",
"p",
"împf",
"pf"
],
"haswikt": 1,
"sc": "Cyrl"
},
"be-x-old": {
"sc": "Cyrl"
},
"bg": {
"g": [
"n",
"m",
"nt",
"n-p",
"m-p",
"nt-p",
"p",
"împf",
"pf"
],
"haswikt": 1,
"sc": "Cyrl"
},
"bh": {
"haswikt": 1,
"sc": "Deva"
},
"bhb": {
"sc": "Deva"
},
"bi": {
"haswikt": 1
},
"blt": {
"sc": "Tavt"
},
"bm": {
"haswikt": 1,
"sc": [
"Latn",
"Nkoo",
"Arab"
]
},
"bn": {
"haswikt": 1,
"sc": "Beng"
},
"bo": {
"haswikt": 1,
"sc": "Tibt"
},
"br": {
"g": [
"n",
"m"
],
"haswikt": 1
},
"ca": {
"g": [
"n",
"m",
"n-p",
"m-p"
],
"haswikt": 1
},
"cdo": {
"sc": "Hani"
},
"ce": {
"sc": "Cyrl"
},
"ch": {
"haswikt": 1
},
"chr": {
"haswikt": 1,
"sc": "Cher"
},
"cjy": {
"sc": "Hani"
},
"ckb": {
"haswikt": 1,
"sc": "Arab",
"wsc": "ku-Arab"
},
"cmn": {
"sc": "Hani",
"wiktprefix": "zh"
},
"co": {
"haswikt": 1
},
"cpx": {
"sc": "Hani"
},
"cr": {
"haswikt": 1,
"sc": "Cans"
},
"crh": {},
"cs": {
"g": [
"n",
"m",
"nt",
"n-p",
"m-p",
"nt-p",
"p",
"împf",
"pf"
],
"haswikt": 1
},
"csb": {
"g": [
"n",
"m",
"nt",
"n-p",
"m-p",
"nt-p",
"p",
"împf",
"pf"
],
"haswikt": 1
},
"cu": {
"g": [
"n",
"m",
"nt",
"n-p",
"m-p",
"nt-p",
"p",
"împf",
"pf"
],
"sc": [
"Cyrs",
"Glag"
]
},
"cv": {
"sc": "Cyrl"
},
"cy": {
"g": [
"n",
"m",
"n-p",
"m-p"
],
"haswikt": 1
},
"czh": {
"sc": "Hani"
},
"czo": {
"sc": "Hani"
},
"da": {
"g": [
"g",
"nt",
"g-p",
"nt-p",
"p"
],
"haswikt": 1
},
"dax": {},
"de": {
"g": [
"n",
"m",
"nt",
"n-p",
"m-p",
"nt-p",
"p"
],
"haswikt": 1,
"allowCaps": 1
},
"dhg": {},
"djb": {},
"dji": {},
"djr": {},
"dng": {
"sc": "Cyrl"
},
"dsb": {
"g": [
"n",
"m",
"nt",
"n-p",
"m-p",
"nt-p",
"p",
"împf",
"pf"
]
},
"dsx": {},
"duj": {},
"dv": {
"g": [
"y",
"p"
],
"haswikt": 1,
"sc": "Thaa"
},
"dz": {
"haswikt": 1,
"sc": "Tibt"
},
"el": {
"g": [
"n",
"m",
"nt",
"n-p",
"m-p",
"nt-p"
],
"haswikt": 1
},
"en": {
"g": [
"y",
"p"
],
"haswikt": 1
},
"eo": {
"g": [
"y",
"p"
],
"haswikt": 1
},
"es": {
"g": [
"n",
"m",
"n-p",
"m-p",
"p"
],
"haswikt": 1
},
"et": {
"g": [
"y",
"p"
],
"haswikt": 1
},
"ett": {
"g": [
"y",
"p"
],
"sc": "Ital"
},
"eu": {
"g": [
"y",
"p"
],
"haswikt": 1
},
"fa": {
"haswikt": 1,
"g": [
"y",
"p"
],
"sc": "Arab",
"wsc": "fa-Arab"
},
"fa-cls": {
"wiktprefix": "fa",
"sc": "Arab",
"wsc": "fa-Arab"
},
"fa-ira": {
"wiktprefix": "fa",
"sc": "Arab",
"wsc": "fa-Arab"
},
"fi": {
"g": [
"y",
"p"
],
"haswikt": 1
},
"fil": {},
"fj": {
"haswikt": 1
},
"fo": {
"g": [
"n",
"m",
"nt"
],
"haswikt": 1
},
"fr": {
"g": [
"n",
"m",
"mnmane",
"n-p",
"m-p",
"p"
],
"haswikt": 1
},
"frm": {
"g": [
"n",
"m",
"n-p",
"m-p"
]
},
"fro": {
"g": [
"n",
"m",
"n-p",
"m-p"
]
},
"fur": {
"g": [
"n",
"m",
"n-p",
"m-p"
]
},
"fy": {
"g": [
"g",
"nt",
"p"
],
"haswikt": 1
},
"ga": {
"g": [
"n",
"m",
"n-p",
"m-p",
"p"
],
"haswikt": 1
},
"gan": {
"sc": "Hani"
},
"gd": {
"g": [
"n",
"m",
"n-p",
"m-p"
],
"haswikt": 1
},
"gez": {
"sc": "Ethi"
},
"gl": {
"g": [
"n",
"m",
"n-p",
"m-p"
],
"haswikt": 1
},
"gmw-ecg": {
"g": [
"n",
"m",
"nt",
"p"
],
"allowCaps": 1
},
"gmy": {
"sc": "Linb"
},
"gn": {
"haswikt": 1
},
"gnn": {
"sc": "Latn"
},
"got": {
"g": [
"n",
"m",
"nt",
"n-p",
"m-p",
"nt-p"
],
"sc": "Goth"
},
"grc": {
"g": [
"n",
"m",
"nt",
"n-p",
"m-p",
"nt-p",
"p"
]
},
"gsw": {
"g": [
"n",
"m",
"nt",
"p"
],
"allowCaps": 1
},
"gu": {
"g": [
"n",
"m",
"nt",
"n-p",
"m-p",
"nt-p"
],
"haswikt": 1,
"sc": "Gujr"
},
"guf": {
"sc": "Latn"
},
"gv": {
"haswikt": 1
},
"ha": {
"haswikt": 1
},
"hak": {
"sc": "Hani"
},
"har": {
"sc": "Ethi"
},
"he": {
"alt": 1,
"g": [
"n",
"m",
"n-p",
"m-p",
"p"
],
"haswikt": 1,
"sc": "Hebr"
},
"hi": {
"g": [
"n",
"m",
"n-p",
"m-p",
"p"
],
"haswikt": 1,
"sc": "Deva"
},
"hif": {
"sc": [
"Latn",
"Deva"
]
},
"hit": {
"sc": "Xsux"
},
"hrx": {
"g": [
"n",
"m",
"nt",
"n-p",
"m-p",
"nt-p"
],
"haswikt": 1
},
"hsb": {
"g": [
"n",
"m",
"nt",
"n-p",
"m-p",
"nt-p",
"p",
"împf",
"pf"
],
"haswikt": 1
},
"hsn": {
"sc": "Hani"
},
"hu": {
"g": [
"y",
"p"
],
"haswikt": 1
},
"hy": {
"g": [
"y",
"p"
],
"haswikt": 1,
"sc": "Armn"
},
"ia": {
"haswikt": 1
},
"id": {
"haswikt": 1
},
"ie": {
"haswikt": 1
},
"ik": {
"haswikt": 1
},
"ike": {
"sc": "Cans"
},
"ikt": {
"sc": "Cans"
},
"io": {
"haswikt": 1
},
"is": {
"g": [
"n",
"m",
"nt",
"n-p",
"m-p",
"nt-p"
],
"haswikt": 1
},
"it": {
"g": [
"n",
"m",
"n-p",
"m-p",
"p"
],
"haswikt": 1
},
"iu": {
"haswikt": 1,
"sc": "Cans"
},
"ja": {
"haswikt": 1,
"sc": "Jpan"
},
"jay": {
"sc": "Latn"
},
"jbo": {
"haswikt": 1
},
"jv": {
"haswikt": 1
},
"ka": {
"g": [
"y",
"p"
],
"haswikt": 1
},
"khb": {
"sc": [
"Talu",
"Lana",
"Thai"
]
},
"kjh": {
"sc": "Cyrl"
},
"kk": {
"haswikt": 1,
"g": [
"y",
"p"
],
"sc": "Cyrl"
},
"kkh": {
"sc": [
"Lana",
"Thai"
]
},
"kl": {
"haswikt": 1
},
"km": {
"haswikt": 1,
"sc": "Khmr"
},
"kn": {
"haswikt": 1,
"sc": "Knda"
},
"ku": {
"g": [
"n",
"m",
"mn",
"n-p",
"m-p",
"p"
],
"wiktprefix": "ku"
},
"ko": {
"haswikt": 1,
"sc": "Kore"
},
"krc": {
"g": [
"y",
"p"
],
"sc": "Cyrl"
},
"ks": {
"haswikt": 1,
"sc": [
"Arab",
"Deva"
],
"wsc": "ks-Arab"
},
"kw": {
"haswikt": 1
},
"ky": {
"haswikt": 1,
"g": [
"y",
"p"
],
"sc": "Cyrl"
},
"la": {
"alt": 1,
"g": [
"n",
"m",
"nt",
"n-p",
"m-p",
"nt-p"
],
"haswikt": 1
},
"lb": {
"g": [
"n",
"m",
"nt",
"p"
],
"haswikt": 1,
"allowCaps": 1
},
"lez": {
"sc": "Cyrl"
},
"li": {
"haswikt": 1
},
"lki": {
"wiktprefix": "ku"
},
"lld": {
"g": [
"n",
"m",
"n-p",
"m-p"
],
"haswikt": 1
},
"lmo": {
"g": [
"n",
"m",
"n-p",
"m-p"
],
"haswikt": 1
},
"ln": {
"haswikt": 1
},
"lo": {
"haswikt": 1,
"sc": "Laoo"
},
"lt": {
"alt": 1,
"g": [
"n",
"m",
"n-p",
"m-p"
],
"haswikt": 1
},
"lv": {
"g": [
"n",
"m",
"n-p",
"m-p"
],
"haswikt": 1
},
"lzz": {
"sc": "Geor"
},
"mg": {
"haswikt": 1
},
"mh": {
"haswikt": 1
},
"mi": {
"g": 0,
"haswikt": 1
},
"mk": {
"g": [
"n",
"m",
"nt",
"n-p",
"m-p",
"nt-p",
"p",
"împf",
"pf"
],
"haswikt": 1,
"sc": "Cyrl"
},
"ml": {
"haswikt": 1,
"sc": "Mlym"
},
"mn": {
"g": [
"y",
"p"
],
"haswikt": 1,
"sc": [
"Cyrl",
"Mong"
]
},
"mnp": {
"sc": "Hani"
},
"mo": {
"haswikt": 1,
"sc": "Cyrl"
},
"mol": {
"sc": "Cyrl"
},
"mr": {
"g": [
"n",
"m",
"nt"
],
"haswikt": 1,
"sc": "Deva"
},
"ms": {
"haswikt": 1,
"sc": [
"Latn",
"Arab"
]
},
"mt": {
"g": [
"n",
"m",
"n-p",
"m-p",
"p"
],
"haswikt": 1
},
"mwp": {
"sc": "Latn"
},
"my": {
"haswikt": 1,
"sc": "Mymr"
},
"na": {
"haswikt": 1
},
"nah": {
"haswikt": 1
},
"nan": {
"wiktprefix": "zh-min-nan",
"sc": "Hani"
},
"nb": {
"g": [
"n",
"m",
"nt",
"n-p",
"m-p",
"nt-p",
"p"
],
"wiktprefix": "no"
},
"nds-de": {
"g": [
"n",
"m",
"nt",
"n-p",
"m-p",
"nt-p"
],
"wiktprefix": "nds"
},
"nds-nl": {
"g": [
"n",
"m",
"nt",
"n-p",
"m-p",
"nt-p"
],
"wiktprefix": "nds"
},
"ne": {
"haswikt": 1,
"sc": "Deva"
},
"nl": {
"g": [
"n",
"m",
"nt",
"n-p",
"m-p",
"nt-p",
"p"
],
"haswikt": 1
},
"nn": {
"g": [
"n",
"m",
"nt",
"n-p",
"m-p",
"nt-p",
"p"
],
"haswikt": 1
},
"no": {
"g": [
"n",
"m",
"nt",
"n-p",
"m-p",
"nt-p",
"p"
],
"haswikt": 1
},
"nod": {
"sc": "Lana"
},
"non": {
"g": [
"n",
"m",
"nt",
"n-p",
"m-p",
"nt-p"
]
},
"oc": {
"g": [
"n",
"m",
"n-p",
"m-p"
],
"haswikt": 1
},
"om": {
"haswikt": 1
},
"or": {
"haswikt": 1,
"sc": "Orya"
},
"orv": {
"g": [
"n",
"m",
"nt",
"n-p",
"m-p",
"nt-p",
"p",
"împf",
"pf"
],
"sc": "Cyrs"
},
"osc": {
"sc": "Ital"
},
"ota": {
"g": [
"y",
"p"
],
"sc": "Arab",
"wsc": "ota-Arab"
},
"pa": {
"g": [
"n",
"m",
"n-p",
"m-p",
"p"
],
"haswikt": 1,
"sc": [
"Guru",
"Arab"
]
},
"pdt": {
"g": [
"n",
"m",
"nt",
"n-p",
"m-p",
"nt-p"
],
"wiktprefix": "nds"
},
"peo": {
"sc": "Xpeo"
},
"phn": {
"sc": "Phnx"
},
"pi": {
"g": [
"n",
"m",
"nt",
"n-p",
"m-p",
"nt-p"
],
"haswikt": 1
},
"pjt": {
"sc": "Latn"
},
"pl": {
"g": [
"n",
"m",
"nt",
"n-p",
"m-p",
"nt-p",
"p",
"împf",
"pf"
],
"haswikt": 1
},
"pms": {
"g": [
"n",
"m",
"n-p",
"m-p"
],
"haswikt": 1
},
"pox": {
"g": [
"n",
"m",
"nt",
"n-p",
"m-p",
"nt-p",
"împf",
"pf"
]
},
"prs": {
"wiktprefix": "fa",
"sc": "Arab",
"wsc": "fa-Arab"
},
"ps": {
"g": [
"n",
"m",
"n-p",
"m-p",
"p"
],
"haswikt": 1,
"sc": "Arab",
"wsc": "ps-Arab"
},
"pt": {
"g": [
"n",
"m",
"n-p",
"m-p",
"p"
],
"haswikt": 1
},
"qu": {
"haswikt": 1
},
"rgn": {
"g": [
"n",
"m",
"n-p",
"m-p"
]
},
"rit": {
"sc": "Latn"
},
"rm": {
"g": [
"n",
"m"
],
"haswikt": 1
},
"rn": {
"haswikt": 1
},
"ro": {
"g": [
"n",
"m",
"nt",
"n-p",
"m-p",
"nt-p",
"p"
],
"haswikt": 1,
"sc": [
"Latn",
"Cyrl"
]
},
"roa-rup": {
"haswikt": 1
},
"ru": {
"alt": 1,
"g": [
"n",
"m",
"nt",
"n-p",
"m-p",
"nt-p",
"p",
"împf",
"pf"
],
"haswikt": 1,
"sc": "Cyrl"
},
"rue": {
"g": [
"n",
"m",
"nt",
"n-p",
"m-p",
"nt-p",
"p",
"împf",
"pf"
],
"sc": "Cyrl"
},
"ruo": {
"g": [
"n",
"m",
"nt",
"n-p",
"m-p",
"nt-p"
]
},
"rup": {
"g": [
"n",
"m",
"nt",
"n-p",
"m-p",
"nt-p"
],
"wiktprefix": "roa-rup"
},
"ruq": {
"g": [
"n",
"m",
"nt",
"n-p",
"m-p",
"nt-p"
]
},
"rw": {
"haswikt": 1
},
"sa": {
"g": [
"n",
"m",
"nt",
"n-p",
"m-p",
"nt-p"
],
"haswikt": 1,
"sc": "Deva"
},
"sah": {
"sc": "Cyrl"
},
"sc": {
"haswikt": 1
},
"scn": {
"g": [
"n",
"m",
"n-p",
"m-p"
],
"haswikt": 1
},
"sco": {
"sc": "Latn"
},
"sd": {
"haswikt": 1,
"sc": "Arab",
"wsc": "sd-Arab"
},
"sdh": {
"sc": "Arab",
"wiktprefix": "ku"
},
"sg": {
"haswikt": 1
},
"sh": {
"alt": 1,
"g": [
"n",
"m",
"nt",
"n-p",
"m-p",
"nt-p",
"p",
"împf",
"pf"
],
"haswikt": 1,
"sc": [
"Latn",
"Cyrl"
]
},
"si": {
"haswikt": 1,
"sc": "Sinh"
},
"simple": {
"haswikt": 1
},
"sk": {
"g": [
"n",
"m",
"nt",
"n-p",
"m-p",
"nt-p",
"p",
"împf",
"pf"
],
"haswikt": 1
},
"sl": {
"alt": 1,
"g": [
"n",
"m",
"nt",
"n-p",
"m-p",
"nt-p",
"p",
"împf",
"pf"
],
"haswikt": 1
},
"sm": {
"haswikt": 1
},
"sn": {
"haswikt": 1
},
"so": {
"haswikt": 1
},
"spx": {
"sc": "Ital"
},
"sq": {
"g": [
"n",
"m"
],
"haswikt": 1
},
"ss": {
"haswikt": 1
},
"st": {
"haswikt": 1
},
"su": {
"haswikt": 1
},
"sux": {
"sc": "Xsux"
},
"sv": {
"g": [
"g",
"nt",
"g-p",
"nt-p"
],
"haswikt": 1
},
"sva": {
"sc": "Geor"
},
"sw": {
"nclass": 1,
"haswikt": 1
},
"syc": {
"sc": "Syrc"
},
"syr": {
"sc": "Syrc"
},
"szl": {
"g": [
"n",
"m",
"nt",
"n-p",
"m-p",
"nt-p",
"p",
"împf",
"pf"
]
},
"ta": {
"haswikt": 1,
"sc": "Taml"
},
"tdd": {
"sc": "Tale"
},
"te": {
"haswikt": 1,
"sc": "Telu"
},
"tg": {
"g": [
"y",
"p"
],
"haswikt": 1,
"sc": "Cyrl"
},
"th": {
"haswikt": 1,
"sc": "Thai"
},
"ti": {
"haswikt": 1,
"sc": "Ethi"
},
"tig": {
"sc": "Ethi"
},
"tiw": {
"sc": "Latn"
},
"tk": {
"g": [
"y",
"p"
],
"haswikt": 1
},
"tl": {
"haswikt": 1,
"sc": [
"Latn",
"Tglg"
]
},
"tmr": {
"sc": "Hebr"
},
"tn": {
"haswikt": 1
},
"to": {
"haswikt": 1
},
"tpi": {
"haswikt": 1
},
"tr": {
"g": [
"y",
"p"
],
"alt": 1,
"haswikt": 1
},
"ts": {
"haswikt": 1
},
"tt": {
"g": [
"y",
"p"
],
"haswikt": 1
},
"tts": {
"sc": "Thai"
},
"tw": {
"haswikt": 1
},
"udi": {
"sc": [
"Cyrl",
"Latn",
"Armn",
"Geor"
]
},
"ug": {
"g": [
"y",
"p"
],
"haswikt": 1,
"sc": "Arab",
"wsc": "ug-Arab"
},
"uga": {
"sc": "Ugar"
},
"uk": {
"g": [
"n",
"m",
"nt",
"n-p",
"m-p",
"nt-p",
"p",
"împf",
"pf"
],
"haswikt": 1,
"sc": "Cyrl"
},
"ulk": {
"sc": "Latn"
},
"ur": {
"g": [
"n",
"m",
"n-p",
"m-p",
"p"
],
"haswikt": 1,
"sc": "Arab",
"wsc": "ur-Arab"
},
"uz": {
"g": [
"y",
"p"
],
"haswikt": 1
},
"vec": {
"g": [
"n",
"m",
"n-p",
"m-p"
],
"haswikt": 1
},
"vi": {
"haswikt": 1
},
"vls": {
"g": [
"n",
"m",
"nt",
"n-p",
"m-p",
"nt-p"
]
},
"vo": {
"haswikt": 1
},
"wa": {
"haswikt": 1
},
"wbp": {
"sc": "Latn"
},
"wo": {
"haswikt": 1
},
"wuu": {
"sc": "Hani"
},
"xae": {
"sc": "Ital"
},
"xcr": {
"sc": "Cari"
},
"xfa": {
"sc": "Ital"
},
"xh": {
"alt": 1,
"nclass": 1,
"haswikt": 1
},
"xlc": {
"sc": "Lyci"
},
"xld": {
"sc": "Lydi"
},
"xlu": {
"sc": "Xsux"
},
"xmf": {
"sc": "Geor"
},
"xno": {
"g": [
"n",
"m",
"n-p",
"m-p"
]
},
"xrr": {
"sc": "Ital"
},
"xst": {
"sc": "Ethi"
},
"xum": {
"sc": "Ital"
},
"xve": {
"sc": "Ital"
},
"xvo": {
"sc": "Ital"
},
"yi": {
"g": [
"n",
"m",
"nt",
"n-p",
"m-p",
"nt-p",
"p"
],
"haswikt": 1,
"sc": "Hebr"
},
"yo": {
"haswikt": 1
},
"yua": {
"g": [
"y",
"p"
],
"alt": 1
},
"yue": {
"sc": "Hani"
},
"za": {
"haswikt": 1,
"sc": "Latn"
},
"zh-classical": {
"sc": "Hani"
},
"zh-min-nan": {
"haswikt": 1
},
"zh-yue": {
"sc": "Hani"
},
"zu": {
"alt": 1,
"nclass": 1,
"haswikt": 1
},
"zza": {
"g": [
"n",
"m",
"mn",
"n-p",
"m-p",
"p"
],
"wiktprefix": "diq"
}
},
"ziman": {
"ku": "kurmancî",
"en": "îngilîzî",
"tr": "tirkî",
"de": "almanî",
"pl": "polonî",
"ja": "japonî",
"fa": "farisî",
"sh": "sirboxirwatî",
"fr": "fransî",
"ka": "gurcî",
"it": "îtalî",
"fi": "fînî",
"ru": "rusî",
"es": "spanî",
"ar": "erebî",
"nl": "holendî",
"hi": "hindî",
"cs": "çekî",
"cmn": "mandarînî",
"pt": "portugalî",
"uk": "ûkraynî",
"hu": "mecarî",
"ko": "koreyî",
"be": "belarusî",
"la": "latînî",
"ckb": "soranî",
"sv": "swêdî",
"hy": "ermenî",
"bg": "bulgarî",
"ro": "romanyayî",
"da": "danmarkî",
"gl": "galîsî",
"el": "yûnanî",
"eo": "esperantoyî",
"tl": "tagalogî",
"fo": "ferî",
"vi": "viyetnamî",
"ca": "katalanî",
"is": "îzlendî",
"et": "estonî",
"az": "azerî",
"ceb": "sebwanoyî",
"mk": "makedonî",
"he": "îbranî",
"th": "tayî",
"lv": "latviyayî",
"sk": "slovakî",
"ms": "malezî",
"ga": "îrlendî",
"tg": "tacikî",
"grc": "yûnaniya kevn",
"sl": "slovenî",
"kk": "qazaxî",
"mi": "maorî",
"mn": "mongolî",
"sq": "albanî",
"uz": "ozbekî",
"lt": "lîtwanî",
"ur": "urdûyî",
"km": "ximêrî",
"id": "endonezyayî",
"cy": "weylsî",
"lo": "lawsî",
"bn": "bengalî",
"zza": "zazakî",
"ky": "kirgizî",
"yi": "yidîşî",
"gd": "gaelîka skotî",
"my": "burmayî",
"te": "telûgûyî",
"nb": "norweciya bokmålî",
"zh": "çînî",
"ps": "peştûyî",
"eu": "baskî",
"oc": "oksîtanî",
"sw": "swahîlî",
"ast": "astûrî",
"af": "afrîkansî",
"tk": "tirkmenî",
"nn": "norweciya nînorskî",
"yue": "kantonî",
"ug": "oygurî",
"rm": "romancî",
"sc": "sardînî",
"vo": "volapûkî",
"io": "îdoyî",
"ml": "malayalamî",
"mt": "maltayî",
"ba": "başkîrî",
"ta": "tamîlî",
"ang": "îngilîziya kevn",
"sa": "sanskrîtî",
"tt": "teterî",
"rup": "aromanî",
"nrf": "normandî",
"no": "norwecî",
"scn": "sicîlî",
"br": "bretonî",
"as": "asamî",
"bo": "tîbetî",
"nan": "minnanî",
"nv": "navajoyî",
"fy": "frîsî",
"pa": "puncabî",
"vec": "venîsî",
"fur": "friyolî",
"wa": "walonî",
"haw": "hawayî",
"lb": "luksembûrgî",
"am": "amharî",
"arz": "erebiya misrî",
"ia": "înterlîngua",
"kl": "kalalîsûtî",
"mr": "maratî",
"gv": "manksî",
"qu": "keçwayî",
"dsb": "sorbiya jêrîn",
"si": "kîngalî",
"kn": "kannadayî",
"sdh": "kurdiya başûrî",
"ota": "osmanî",
"gu": "gujaratî",
"ce": "çeçenî",
"jv": "javayî",
"pdt": "plodîşî",
"chr": "çerokî",
"nds": "nedersaksî",
"acw": "erebiya hîcazî",
"cu": "slaviya kevn",
"ne": "nepalî",
"kw": "kornî",
"hsb": "sorbiya jorîn",
"za": "zhuangî",
"os": "osetî",
"se": "samiya bakurî",
"dng": "dunganî",
"izh": "îngriyî",
"sco": "skotî",
"got": "gotî",
"or": "oriyayî",
"mnc": "mançûyî",
"crh": "teteriya krîmî",
"ltg": "latgalî",
"sah": "yakutî",
"ht": "haîtî",
"ary": "erebiya fasî",
"ha": "hawsayî",
"zu": "zuluyî",
"cv": "çuvaşî",
"yo": "yorubayî",
"ab": "abxazî",
"so": "somalî",
"frr": "frîsiya bakur",
"lad": "ladînoyî",
"an": "aragonî",
"ti": "tigrînî",
"aii": "aramiya nû ya asûrî",
"hak": "hakkayî",
"enm": "îngilîziya navîn",
"pi": "palî",
"navz": "navzimanî",
"ny": "çîçewayî",
"om": "oromoyî",
"nds-de": "almaniya jêrîn a almanî",
"lmo": "lombardî",
"csb": "kaşûbî",
"alt": "altayiya başûrî",
"arc": "aramî",
"bcl": "bîkoliya naverast",
"co": "korsîkayî",
"oj": "ojibweyî",
"pap": "papyamentoyî",
"rue": "rusînî",
"av": "avarî",
"txb": "toxarî B",
"xal": "kalmîkî",
"cop": "qiptî",
"mg": "malagasî",
"nap": "napolîtanî",
"gsw": "elmanîşî",
"dlm": "dalmatî",
"gn": "guwaranî",
"orv": "slaviya rojavayî ya kevn",
"tyv": "tuvanî",
"dv": "divehî",
"ady": "adîgeyî",
"bua": "buryatî",
"wuu": "wuyî",
"pam": "kapampanganî",
"myv": "erzayî",
"udm": "udmurtî",
"khb": "lueyî",
"rom": "romanî",
"su": "sundanî",
"ilo": "îlokanoyî",
"syc": "siryaniya klasîk",
"zdj": "şîngazîcayî",
"cdo": "min dongî",
"evn": "evenkî",
"kum": "kumikî",
"bal": "belûçî",
"lld": "ladînî",
"inh": "îngûşî",
"sd": "sindhî",
"lez": "lezgînî",
"fro": "fransiya kevn",
"non": "norsiya kevn",
"liv": "lîvonî",
"tet": "tetûmî",
"tpi": "tokpisinî",
"shn": "şanî",
"wo": "wolofî",
"mrw": "maranaoyî",
"gld": "nanayî",
"nah": "nahwatlî",
"ki": "kîkûyûyî",
"st": "sotoyiya başûr",
"mww": "hmongî",
"lij": "lîgûrî",
"rgn": "romagnolî",
"li": "lîmbûrgî",
"sm": "samoayî",
"sga": "îrlendiya kevn",
"ks": "keşmîrî",
"pms": "piedmontîsî",
"ccc": "çamicuroyî",
"hil": "hîlîgaynonî",
"xmf": "megrelî",
"hrx": "hunsrikî",
"rif": "tarifitî",
"krc": "karaçay-balkarî",
"war": "warayî",
"mwl": "mîrandî",
"syl": "sîlhetî",
"ee": "eweyî",
"ln": "lingalayî",
"pdc": "almaniya Pennsylvania",
"goh": "almaniya bilind a kevn",
"tly": "talişî",
"nci": "nahwatliya klasîk",
"ckt": "çukçî",
"ain": "aynuyî",
"uga": "ugarîtî",
"xh": "xosayî",
"sms": "samiya skoltî",
"kea": "kapverdî",
"ajp": "erebiya başûrê şamê",
"kjh": "xakasî",
"iu": "înuîtî",
"dz": "conxayî",
"srn": "sirananî",
"vro": "voroyî",
"mdf": "mokşayî",
"xcl": "ermeniya kevn",
"mhr": "mariya rojhilatî",
"cic": "çîkasawî",
"esu": "yupîkiya navendî",
"cjs": "şorî",
"wym": "wîlamowî",
"apw": "apaçiya rojava",
"mba": "higaononî",
"kaw": "javayiya kevn",
"ovd": "elfdalî",
"to": "tongî",
"ist": "îstriyotî",
"szl": "silesî",
"yua": "mayayiya yukatekî",
"tsg": "tausugî",
"zea": "zêlandî",
"bar": "bayerî",
"luy": "luhyayî",
"mzn": "mazenderanî",
"mhn": "mòçenoyî",
"kxd": "bruneyî",
"lzz": "lazî",
"kbd": "kabardî",
"afb": "erebiya kendavî",
"krl": "karelî",
"eve": "evenî",
"stq": "frîsiya saterlandî",
"ak": "akanî",
"tab": "tabasaranî",
"sat": "santalî",
"fj": "fîjî",
"sva": "svanî",
"egy": "misrî",
"ig": "îgboyî",
"hac": "hewramî",
"ay": "aymarayî",
"gur": "farefareyî",
"rw": "kînyarwandayî",
"twf": "taosî",
"koi": "komî-permyakî",
"lkt": "lakotayî",
"akl": "aklanon",
"yai": "yagnobî",
"ryu": "okînawanî",
"rhg": "rohingyayî",
"vep": "vepsî",
"smn": "samiya înarî",
"egl": "emilî",
"ty": "tahîtî",
"mdh": "maguindanaoyî",
"gag": "gagawzî",
"tzm": "temazîxtiya atlasa navendî",
"sgs": "samogîtî",
"ff": "fulahî",
"lou": "kreyoliya fransî ya Louisiana",
"mel": "melanauyiya navendî",
"niv": "nîvxî",
"aa": "afarî",
"gez": "etiyopiya klasîk",
"ext": "extremaduranî",
"frp": "frankoprovansî",
"kpv": "komî-zîriyî",
"udi": "udî",
"sma": "samiya başûr",
"nog": "nogayî",
"akk": "akadî",
"lbe": "lakî",
"min": "mînangkabawî",
"kg": "kîkongoyî",
"ban": "balînî",
"dlg": "dolganî",
"ace": "açehî",
"pox": "polabî",
"ppl": "pîpîlî",
"mnz": "monî",
"kaa": "karakalpakî",
"kab": "kabîlî",
"vot": "votî",
"luo": "luoyî",
"sn": "şonayî",
"swb": "komorî",
"roa-tar": "tarantinoyî",
"lg": "lugandayî",
"nds-nl": "saksoniya jêrîn ya holendî",
"dtp": "dusuniya navendî",
"shi": "taşelhitî",
"msk": "mansakayî",
"rap": "rapanuyî",
"mer": "meruyî",
"ik": "înupîakî",
"prg": "prusiya kevn",
"chk": "çûkî",
"kam": "kambayî",
"chy": "çeyenî",
"nod": "tayiya bakurî",
"akz": "alabamayî",
"xag": "aghwanî",
"ase": "zimanê destan ê emerîkî",
"nmn": "ǃxóõ",
"gun": "mbya guaraniyî",
"cr": "krî",
"yag": "yamanayî",
"otk": "tirkiya kevn",
"sid": "sidamoyî",
"tum": "tumbukayî",
"pjt": "pîttcantcatcarayî",
"sux": "sûmerî",
"bbl": "batsbî",
"jje": "jejuyî",
"bm": "bambarayî",
"frm": "fransiya navîn",
"tpn": "tupînambayî",
"pal": "farisiya navîn",
"bi": "bîslamayî",
"ksw": "s'gaw karenî",
"ssy": "sahoyî",
"bdr": "bajwayiya kendava rojava",
"sne": "bau bidayuh",
"sjd": "samiya kildînî",
"na": "nawrûyî",
"pag": "pangasînanî",
"abq": "abazayî",
"tn": "tswanayî",
"osx": "saksoniya kevn",
"aqc": "arçî",
"xsr": "şerpayî",
"kok": "konkanî",
"kln": "kalencînî",
"win": "wînnebagoyî",
"dar": "dargwayî",
"mfe": "kreyoliya morîtanî",
"iba": "îbanî",
"ae": "avestayî",
"mos": "moreyî",
"arn": "mapuçî",
"ill": "îranunî",
"mrj": "mariya rojavayî",
"cst": "ohloniya bakur",
"blt": "tay dam",
"apc": "erebiya bakûrê şamê",
"gan": "ganî",
"ii": "yiyiya siçuwayî",
"xto": "toxarî A",
"wmw": "mwanî",
"avd": "elwîrî-wîderî",
"pro": "oksîtaniya kevn",
"pcc": "buyî",
"jra": "jarayî",
"new": "newarî",
"unm": "unamî",
"mic": "mîkmakî",
"cjm": "çamiya rojhilatî",
"sdn": "galûrîsî",
"lus": "mizoyî",
"cjy": "jinî",
"tli": "tlingitî",
"bug": "bugî",
"pcd": "pîkardî",
"hop": "hopîyî",
"ofs": "frîsiya kevn",
"tft": "ternateyî",
"roa-opt": "portugaliya kevn",
"gil": "kîrîbatî",
"kac": "cingphoyî",
"csm": "sierra mîwokiya navendî",
"sdc": "sassarîsî",
"ood": "o'odhamî",
"hsn": "xiangî",
"ruo": "îstro-romanyayî",
"mbb": "bukidnon manoboyiya rojavayî",
"bho": "bojpûrî",
"ani": "andî",
"kgp": "kayingangî",
"ss": "swazî",
"mnp": "min beî",
"aho": "ahomî",
"moe": "montagnaîsî",
"naq": "namayî",
"mvi": "miyakoyî",
"duu": "drungî",
"lut": "luşûtsîdî",
"sce": "dongşîangî",
"bqi": "bextiyarî",
"mrc": "marîkopayî",
"gmh": "almaniya bilind a navîn",
"cim": "cimbrî",
"aer": "arrernteyiya rojavayî",
"agj": "argobbayî",
"ium": "îu mienî",
"tay": "atayalî",
"ale": "alêwîtî",
"str": "saanîçî",
"zku": "kaurnayî",
"pnt": "yûnaniya pontî",
"gmw-cfr": "frankoniya navendî",
"bxd": "pelayî",
"ems": "alutîqî",
"mtq": "muongî",
"hit": "hîtîtî",
"mak": "makasarî",
"bjn": "banjarî",
"nay": "ngarrindjerî",
"dak": "dakotayî",
"yrk": "nenetsiya tundra",
"pac": "pacohî",
"ch": "çamoroyî",
"vls": "flamiya rojava",
"acm": "erebiya iraqî",
"smj": "samiya lule",
"lmy": "lamboyayî",
"jam": "kreyoliya jameîkî",
"yka": "yakanî",
"gmw-ecg": "almaniya navendî ya rojhilat",
"xsv": "sûdovî",
"cdm": "çepangî",
"bdk": "buduxî",
"isd": "îsnagî",
"zgh": "amazîxiya fasî",
"css": "ohloniya başûr",
"kqr": "kîmaragangî",
"glk": "gîlekî",
"aeb": "erebiya tunusî",
"lki": "lekî",
"kdr": "karaîmî",
"kld": "gamîlaraayî",
"tdd": "tayî nüa",
"xqa": "karaxanîdî",
"nso": "sotoyiya bakur",
"crs": "kreyoliya seyşelî",
"mvv": "tagal murutî",
"kim": "tofalarî",
"swg": "swabî",
"pau": "palawî",
"wrh": "wiradhurî",
"cho": "çoktawî",
"tig": "tigreyî",
"ivv": "îvatanî",
"ddg": "fatalukuyî",
"rmf": "romaniya kalo fînî",
"pih": "pîtkarnî-norfolkî",
"phn": "fenîkî",
"ktu": "kitubayî",
"mwr": "marwarî",
"wbp": "warlpirî",
"zun": "zuniyî",
"crk": "kriya bejayî",
"ebk": "bontociya rojhilatî",
"nup": "nupeyî",
"yoi": "yonagunî",
"atj": "atîkamekwî",
"duo": "dupaningan agtayî",
"kca": "xantî",
"dta": "daurî",
"rar": "rarotongî",
"abe": "abenakî",
"aot": "atong (Hindistan)",
"osa": "osageyî",
"ami": "amîs",
"sea": "semaî",
"mh": "marşalî",
"mad": "madurayî",
"sei": "sêriyî",
"moh": "mohawkî",
"meu": "hîrî motuyî",
"pwn": "paîwanî",
"okm": "koreyiya navîn",
"xug": "kunigamî",
"amu": "amuzgoyî",
"ine-pro": "proto-hindûewropî",
"tzo": "tzotzîlî",
"ksc": "kalingayiya başûrî",
"sib": "sebopî",
"uum": "ûrûmî",
"kjj": "khinalugî",
"pis": "pijînî",
"peo": "farisiya kevn",
"sg": "sangoyî",
"tyz": "tàyî",
"kpy": "koryakî",
"ruq": "megleno-romanyayî",
"abs": "ambonezî-malezî",
"mas": "masayî",
"bdq": "bahnarî",
"mkz": "makasaeyî",
"mag": "magahî",
"oaa": "orokî",
"din": "dinkayî",
"zlw-slv": "slovînsî",
"olo": "livvî",
"mai": "maithilî",
"nhn": "nahwatliya navendî",
"nan-tws": "teoçewî",
"wuh": "wutunhuayî",
"tpw": "tûpiya kevn",
"gcf": "kreyoliya antîlleyî",
"knb": "lubuagan kalingayî",
"ket": "ketî",
"pua": "purepeçayî",
"xbr": "kamberayî",
"bor": "bororoyî",
"rmy": "romaniya vlaks",
"tao": "yamî",
"arq": "erebiya cezayirî",
"brh": "brahuiyî",
"chn": "çinook jargonî",
"cbk": "çavacanoyî",
"tvo": "tidoreyî",
"wbk": "waigalî",
"nio": "nganasanî",
"bsh": "kamkata-viriyî",
"roa-gal": "galoyî",
"krj": "kinaray-ayî",
"gmy": "yûnaniya mîkenî",
"ctd": "tedim çinî",
"ude": "udiheyî",
"gmw-rfr": "frankoniya rhine",
"tvl": "tuvalûyî",
"ibg": "îbanagî",
"ask": "aşkunî",
"ccp": "çakmayî",
"ts": "tsongayî",
"sje": "pite samî",
"esh": "iştihardî",
"quc": "k'içe'",
"ho": "hirî motuyî",
"hif": "fiji hindiyî",
"orh": "oroqenî",
"ett": "etrûskî",
"zai": "îsthmus zapotekî",
"bla": "blakfotî",
"zlw-opl": "poloniya kevn",
"ses": "sonxayî",
"lis": "lisuyî",
"kr": "kanuriyî",
"bbc": "bataktobayî",
"umb": "umbunduyî",
"rys": "yaeyamayî",
"arp": "arapaho",
"bol": "boleyî",
"com": "komançî",
"ifk": "tuwali ifugaoyî",
"ve": "vendayî",
"kri": "krioyî",
"aoz": "uab meto",
"yxg": "yagarayî",
"zom": "zouyî",
"ttt": "tatî",
"ams": "amamî-oşîmayiya başûrî",
"tts": "isanî",
"igl": "îgalayî",
"xda": "darkinjungî",
"fkv": "kvenî",
"chg": "çaxatayî",
"xwo": "oyratiya nivîsî",
"cab": "garîfunayî",
"atv": "altayiya bakurî",
"tiw": "tiwî",
"fit": "meänkiyelî",
"mnk": "mandinkayî",
"yox": "yoronî",
"tfn": "dena'inayî",
"hur": "halkomelemî",
"ryn": "amamî-oşimayiya bakurî",
"rop": "kriolî",
"ckv": "kavalanî",
"ulc": "ulçî",
"hts": "hadzayî",
"anq": "jarawa",
"dgr": "dogrîbî",
"myp": "pîrahayî",
"xfa": "faliskanî",
"gin": "hinukhî",
"pqm": "malecite-passamaquoddyî",
"mni": "manipurî",
"txg": "tangutî",
"trv": "tarokoyî",
"kha": "khasiyî",
"odt": "holendiya kevn",
"tby": "tabaruyî",
"drg": "rungusî",
"yur": "yurokî",
"neg": "negidalî",
"mga": "îrlendiya navîn",
"gor": "gorontaloyî",
"tcy": "tuluyî",
"oac": "oroçî",
"nia": "nîasî",
"skb": "saekî",
"bth": "biatah bidayuhî",
"nwy": "nottoway-meherrînî",
"chc": "katawbayî",
"bgc": "haryanvî",
"tih": "timugon murutî",
"itl": "îtelmenî",
"gml": "almaniya jêrîn a navîn",
"apj": "xîkarîyayî",
"yao": "yaoyî",
"okn": "oki-no-erabu",
"juc": "jurçenî",
"bnn": "bununî",
"nmb": "nambasiya mezin",
"cuk": "kunayî",
"uby": "ûbîkî",
"bpy": "manîpûriya bîşnûpriyayî",
"alr": "alutor",
"nys": "nyungayî",
"niq": "nandî",
"nnt": "nanticokeyî",
"shy": "şawî",
"xum": "umbriyî",
"kzg": "kikaiyî",
"blk": "pa'o karen",
"khi-kun": "ǃkungî",
"amw": "neo-aramiya rojavayî",
"kyh": "karokî",
"arw": "arawak",
"rkt": "kamtayî",
"ijc": "îzonî",
"jct": "krymçakî",
"xpq": "mohegan-pequotî",
"lnd": "lundayehî",
"xnb": "kanakanabuyî",
"niu": "nîwî",
"wls": "walîsî",
"axm": "ermeniya navîn",
"kap": "bezhtayî",
"ykg": "yukaghiriya bakurî",
"kky": "guugu yimidhirrî",
"hnj": "hmongiya hêşîn",
"dtr": "lotudî",
"kla": "klamatî-modokî",
"fax": "falayî",
"sjt": "ter samî",
"nxq": "naxî",
"oge": "gurciya kevn",
"apm": "çîrîkawayî",
"tzj": "tzutucîlî",
"tbl": "tbolî",
"inc-oas": "asamiya zû",
"hai": "haidayî",
"sou": "taiya başûrî",
"osc": "oskanî",
"shh": "şoşonî",
"xmz": "morî bawah",
"sju": "ume samî",
"xpr": "partî",
"gaa": "gayî",
"nch": "nahwatliya huastecaya navendî",
"bsk": "buruşaskiyî",
"bzj": "kreyoliya belizeyî",
"nhx": "nahwatliya mekayapan",
"ktb": "kambaatayî",
"xnn": "kankanayiya bakurî",
"pot": "potawatomî",
"agr": "aguarunayî",
"bsb": "bisayayiya bruneyî",
"cja": "çamiya rojavayî",
"nov": "noviyalî",
"kbp": "kabiyeyî",
"tkn": "toku-no-şîmayî",
"lzh": "çîniya klasîk",
"caa": "ç'orti'",
"paw": "pawnî",
"wbl": "waxiyî",
"rut": "rutulî",
"lud": "ludianî",
"gon": "gondiyî",
"lsd": "lîşana denî",
"pyu": "puyumayî",
"bej": "bejayî",
"sxr": "saaroayî",
"bsq": "bassayî",
"cmg": "mongoliya klasîk",
"mus": "krîkî",
"sas": "sasakî",
"mlm": "mulamî",
"aio": "aytonî",
"nuk": "nootkayî",
"aiw": "aarî",
"enq": "engayî",
"chl": "cahuillayî",
"huz": "hunzibî",
"grt": "garoyî",
"lic": "hlaiyî",
"fia": "nobiinî",
"osp": "spaniya kevn",
"amm": "amayî",
"ote": "otomiya mezquital",
"roa-leo": "leonîzî",
"dum": "holendiya navîn",
"awa": "awadhî",
"otw": "ottawayî",
"xbc": "baxterî",
"bem": "bembayî",
"ira-pro": "proto-îranî",
"dbl": "diyirbalî",
"mcm": "kristangî",
"ctu": "çolî",
"grk-mar": "yûnaniya mariupol",
"nst": "tangsayî",
"cak": "kaqçikelî",
"pov": "kreyoliya guinea-bissau",
"mbf": "malayiya baba",
"xsy": "saisiyatî",
"bno": "asî",
"lbj": "ladakhiyî",
"adt": "adnyamatanhayî",
"ttj": "tooroyî",
"apy": "apalayî",
"pim": "powhatanî",
"roa-brg": "bûrgûndî",
"szy": "sakizayayî",
"tkl": "tokelawî",
"wlm": "weylsiya navîn",
"gdo": "godoberî",
"ayn": "erebiya sanaanî",
"ksk": "kansayî",
"aht": "ahtnayî",
"btx": "batakiya karo",
"jdt": "tatiya cihû",
"cni": "aşanînkayî",
"skr": "seraikî",
"iir-pro": "proto-hindûîranî",
"yrl": "nhêngatûyî",
"sip": "sîkkîmî",
"ie": "înterlîngue",
"bin": "edoyî",
"sac": "foksî",
"wni": "komoriya ndzwanî",
"btq": "batekî",
"bkd": "binukid",
"gmq-scy": "skanî",
"rah": "rabhayî",
"ddo": "tsezî",
"tuw-sol": "solonî",
"gni": "gooniyandiyî",
"rmn": "romaniya balkanî",
"roa-poi": "poitevin-saintongeaisî",
"mqm": "marquesana başûr",
"tsu": "tsouyî",
"yol": "yolayî",
"fud": "futunî",
"umu": "munsî",
"wam": "massaçusettî",
"bsy": "sabah bisayayî",
"prn": "prasunî",
"clm": "klallamî",
"ssf": "thaoyî",
"jbo": "lojbanî",
"nus": "nuerî",
"mhx": "lhao voyî",
"hmc": "huişui hmongiya navendî",
"lrc": "luriya bakurî",
"tiy": "tirurayî",
"kkh": "khünî",
"nfr": "nafaanrayî",
"zpq": "zapotekiya zoogoço",
"suk": "sukumayî",
"rml": "romaniya baltîkî",
"ncj": "nahwatliya bakurê puebla",
"nhg": "nahwatliya tetelcingo",
"ars": "erebiya necdî",
"bh": "biharî",
"caq": "car nicobareseyî",
"wlc": "mwalî komorî",
"apd": "erebiya sudanî",
"mop": "mayayiya mopanî",
"yaq": "yaquî",
"pon": "ponpeyî",
"kwk": "kwak'walayî",
"wlo": "wolioyî",
"nnr": "narunggayî",
"agx": "aghulî",
"dty": "doteliyî",
"ybh": "yakkhayî",
"azz": "puebla nahuatliya çiyayî",
"yuy": "yuguriya rojhilat",
"tqw": "tonkawayî",
"hss": "harsusiyî",
"mqu": "mandarî",
"maz": "mazahuayiya navendî",
"ife": "îfèî",
"kmk": "limos kalingayî",
"shs": "şuswapî",
"hid": "hidatsayî",
"brg": "baureyî",
"wrr": "wardamanî",
"kis": "kîsî",
"acy": "erebiya qibrisî",
"tin": "tindî",
"gmq-osw": "swêdiya kevn",
"yuf": "havasupaî-walapaî-yavapaî",
"xdk": "darûkî",
"wau": "waujayî",
"ljp": "lampungî",
"alu": "areareyî",
"ach": "açolî",
"bkm": "komiya kamerûnî",
"ngn": "ngwoyî",
"bsa": "abînomnî",
"der": "deoriyî",
"shp": "şipibo-coniboyî",
"ycl": "lolopoyî",
"qua": "kuapawî",
"gmq-pro": "proto-norsî",
"nnv": "nukunuyî",
"zko": "kottî",
"khv": "khvarşiyî",
"nij": "ngajuyî",
"yog": "yogadî",
"raw": "rawangî",
"mfy": "mayoyî",
"nd": "ndebeliya bakurî",
"oko": "koreyiya kevn",
"fon": "fonî",
"abx": "abaknonî",
"rad": "radeyî",
"klj": "khalajî",
"tru": "turoyo",
"nag": "naga pidginî",
"crl": "kriya rojhilat ya bakurî",
"zlw-ocs": "çekiya kevn",
"aau": "abauyî",
"mrq": "marquesana bakur",
"sia": "samiya akkalayî",
"mjg-mgl": "mongghulî",
"car": "galîbî karîbî",
"roa-tou": "torangî",
"rel": "rendilleyî",
"oma": "omaha-poncayî",
"rmq": "kaloyî",
"rmo": "romaniya sinte",
"lep": "lepçayî",
"guw": "gunî",
"knj": "akatekî",
"slr": "salarî",
"sem-srb": "erebiya başûrî ya kevn",
"pad": "paumarî",
"yap": "yapî",
"xul": "ngunawalî",
"kzj": "kadazaniya beravî",
"fan": "fangî (Bantu)",
"brx": "bodoyî (Hindistan)",
"ane": "xârâcùù",
"cro": "crowî",
"ram": "kanelayî",
"tea": "temiarî",
"cnk": "khumi çinî",
"tkr": "tsakhurî",
"ulk": "meryamî",
"tzh": "tzeltalî",
"avk": "kotavayî",
"mjg-mgr": "mangghuerî",
"xav": "xavanteyî",
"kmv": "kreyoliya fransî ya karipúna",
"aas": "aasayî",
"guz": "gusiiyî",
"erk": "efateyiya başûr",
"ngh": "nlûyî",
"cel-gau": "gaulisî",
"hz": "hereroyî",
"alq": "algonquinî",
"cay": "cayugayî",
"inz": "înesenyoyî",
"sgr": "sangisarî",
"iro-min": "mingoyî",
"dru": "rukaiyî",
"tta": "tuteloyî",
"lui": "luiseñoyî",
"mgm": "mambayî",
"xpm": "pumpokolî",
"kyj": "karaoyî",
"ksd": "tolaiyî",
"pkc": "baekceyî",
"pcm": "pidgîniya nîjeryayî",
"kjg": "khmuyî",
"cow": "cowlitzî",
"cyo": "cuyunonî",
"msn": "vuresî",
"jhi": "jehaiyî",
"map-bms": "banyumasanî",
"fla": "montana salişî",
"skd": "sierra miwokiya başûrî",
"xpu": "punîkî",
"tsd": "tsakonî",
"gue": "gurindjiyî",
"ksi": "krisayî",
"pni": "aohengî",
"par": "panamintî",
"ulb": "ulukwumî",
"miq": "miskitoyî",
"mcb": "maçiguengayî",
"kls": "kalaşayî",
"sdo": "bukar-sadung bidayuhî",
"nr": "ndebeliya başûrî",
"mch": "maquiritarî",
"msb": "masbatenyoyî",
"tsi": "tsimşî",
"gmq-gut": "gutnişî",
"tus": "tuskarorayî",
"lmw": "miwokiya golî",
"srs": "sarceeyî",
"zag": "zaghawayî",
"klb": "kiliwayî",
"kmc": "kamiya başûrî",
"beg": "belaîtî",
"inc-ash": "prakrîtiya aşokanît",
"kj": "kwanyamayî",
"ng": "ndongayî",
"irk": "îraqwî",
"grk-ita": "grîkoyî",
"aaq": "penobskotî",
"kek": "q'eqçiyî",
"ojb": "ojibweyiya bakurî",
"txu": "kayapó",
"one": "oneidayî",
"ktv": "katuyiya rojhilatî",
"nhe": "nahwatliya huastekaya rojhilatî",
"lwl": "lawayiya rojhilatî",
"lua": "luba-kasayî",
"bjb": "barngarla",
"acu": "açuarî",
"cof": "tsafikiyî",
"gwi": "gwiçinî",
"urk": "urak lawoi'",
"tar": "tarahumarayiya navendî",
"kva": "bagvalalî",
"hni": "haniyî",
"sek": "sekanî",
"cpg": "yûnaniya kapadokyayî",
"wmb": "wambayayî",
"xld": "lîdyayî",
"amn": "amanabî",
"haa": "hänî",
"cdy": "çadongî",
"akr": "arakî",
"kju": "kaşayayî",
"ada": "adangmeyî",
"alh": "alawayî",
"gdq": "mehriyî",
"tmo": "temoqî",
"kus": "kusaalî",
"dwu": "dhuwalî",
"pak": "parakanã",
"agg": "angorî",
"wao": "wappoyî",
"aji": "ajië",
"cas": "tsimaneyî",
"byq": "basayî",
"xls": "lusîtanî",
"gcr": "kreyoliya guwiyanîsî",
"apk": "apaçiya deştan",
"kut": "kutenaiyî",
"gmw-jdt": "danmarkiya jersey",
"hus": "wastekî",
"rej": "rejangî",
"dog": "dogonî",
"roa-lor": "lorrainî",
"emb": "embalohî",
"tnq": "taînoyî",
"crj": "kriya rojhilat ya başûrî",
"nuj": "nyolî (Uganda)",
"gmq-oda": "danmarkiya kevn",
"akv": "axvaxî",
"doi": "dogriyî",
"trp": "kokborokî",
"geh": "hutterisçî",
"gul": "gullahî",
"coo": "comoxî",
"ije": "biseniyî",
"itk": "îtaliya cihû",
"rmc": "romaniya karpatyayî",
"gmw-gts": "gottscheerîşî",
"ttg": "tutongî",
"ngu": "nahwatliya guerrero",
"pse": "malayiya navendî",
"onw": "nubiya kevn",
"qui": "kuwileytî",
"giw": "gelaoyiya spî",
"ojw": "ojibweyiya rojavayî",
"gay": "gayoyî",
"rmw": "romaniya welşî",
"nhw": "nahwatliya huastecaya rojavayî",
"xkl": "bakungî",
"loz": "loziyî",
"yij": "yindcîbarndî",
"kry": "krytsî",
"ple": "palueyî",
"tht": "tahltanî",
"mkq": "bay miwokî",
"sks": "maiayî",
"mhe": "besisî",
"mrv": "mangarevanî",
"nrm": "naromî",
"chp": "çîpewî",
"bll": "biloxî",
"knx": "kendayanî",
"khw": "khowarî",
"dua": "diwalayî",
"roa-cha": "şampanyî",
"gug": "guaraniyiya paraguayanî",
"dsn": "dusnerî",
"tmh": "tuaregî",
"pmf": "pamonayî",
"smq": "samoyî",
"tal": "talî",
"yuc": "yuçî",
"mqy": "manggarayî",
"bts": "batakiya simalungun",
"tos": "totonakiya çiyayî",
"oia": "oyratayî",
"blz": "balantak",
"bjz": "baruga",
"kai": "karekareyî",
"zav": "zapotekiya yatzaçî",
"okd": "okodiayî",
"ndd": "nde-nsele-nta",
"omc": "moçikayî",
"bto": "iriga bikolanoyî",
"okr": "kirikeyî",
"top": "totonakiya papantla",
"xer": "xerenteyî",
"xlc": "lîkî",
"mid": "mandaicî",
"suy": "suyayî",
"chz": "ozumacin çinantecî",
"pah": "tenharimî",
"til": "tillamookî",
"afn": "defakayî",
"guc": "wayuuyî",
"ojp": "japoniya kevn",
"lif": "limbuyî",
"efi": "efikî",
"mek": "mêkêoyî",
"ayl": "erebiya lîbyayî",
"bnt-phu": "phuthî",
"kne": "kankanaeyî",
"ktn": "karitiyanayî",
"abl": "abûngî",
"rtm": "rotumanî",
"wyb": "ngiyambaayî",
"crg": "mîçîfî",
"kxu": "kuiyî (Hindistan)",
"cts": "bicolanoyiya northern catanduanes",
"dje": "zarmayî",
"plw": "palawanoyî",
"xlu": "luwiyanî",
"koy": "koyukonî",
"vmw": "makhuwayî",
"vmf": "frankiya rojhilatî",
"bru": "bruyiya rojhilatî",
"kmb": "kimbunduyî",
"xsa": "sabaeanî",
"tbk": "tagbanwayiya kalamî",
"kzt": "tambunan dusunî",
"xng": "mongoliya navîn",
"acn": "açangî",
"bwx": "bu-nao bunuyî",
"cwg": "çewongî",
"vmb": "mbabaramî",
"ijs": "îjoyiya başûr-rojhilat",
"asb": "assînîboyî",
"nzd": "nzadî",
"itv": "îtawitî",
"lvk": "lavukaleveyî",
"bde": "badeyî",
"tbc": "takyayî",
"aby": "aneme wakeyî",
"urb": "urubú-kaaporî",
"coh": "çiçonyi-çidzihana-çikauma",
"dbj": "ida'anî",
"smk": "bolinaoyî",
"lbx": "lawanganî",
"kfr": "kaççiyî",
"hlt": "nga layî",
"agm": "angaatahayî",
"xpg": "firîgî",
"smr": "simeulueyî",
"vma": "martuthunirayî",
"gub": "guajajarayî",
"chf": "tabasco çontalî",
"mqs": "makyaniya rojava",
"iby": "îbaniyî",
"cng": "qiangiya bakurî",
"jac": "jakaltekî",
"trw": "torwalî",
"lti": "lêtîyî",
"scl": "şinayî",
"gwr": "gwereyî",
"dgc": "casiguran dumagat agtayî",
"btm": "batakiya mandaîlîng",
"puj": "punan tubuyî",
"oka": "okanaganî",
"gek": "gerkayî",
"mat": "matlatzincayî",
"kio": "kiowayî",
"cku": "koasatî",
"kms": "kamasauyî",
"xaa": "erebiya endulusî",
"gut": "maleku jaikayî",
"aou": "a'ou",
"elx": "îlamî",
"peh": "bonanî",
"pgl": "îrlendiya prîmîtîv",
"myx": "masabayî",
"spp": "supyireyî",
"xnt": "narragansettî",
"cad": "caddoyî",
"aap": "pará arárayî",
"rme": "angloromanî",
"ura": "urarinayî",
"mpm": "mixteciya yosondúa",
"poe": "popolocayiya san juan atzingo",
"sgd": "surigaononî",
"kvh": "komodoyî",
"xtc": "kaduglî",
"tjg": "tunjungî",
"azg": "san pedro amuzgos amuzgo",
"uun": "pazehî",
"udl": "uldemeyî",
"skp": "sekapanî",
"isi": "nkem-nkumî",
"wrz": "warrayî",
"its": "îsekiriyî",
"tgb": "tobilungî",
"bdy": "bandjalangî",
"ssb": "samayiya başûrî",
"hnn": "hanunooyî",
"enn": "engenniyî",
"srm": "saramakkanî",
"dmr": "damariya rojhilat",
"djo": "jangkangî",
"kij": "kîlîvîlayî",
"rob": "tae'",
"sad": "sandaweyî",
"har": "harariyî",
"hov": "hovonganî",
"pos": "popolucayiya sayula",
"sit-bok": "bokarî",
"kns": "kensiuyî",
"mbd": "dibabawon manoboyî",
"asu": "tocantins asurînî",
"sjw": "şawneeyî",
"btw": "butuanonî",
"jut": "jutişî",
"bgs": "tagabawayî",
"xsb": "sambalî",
"mkf": "miyayî",
"mrn": "çeke holoyî",
"kui": "kuikúroyî",
"hup": "hupayî",
"abm": "abanyomî",
"ukk": "muak sa-aakî",
"lbk": "bontociya navendî",
"dbp": "duwaiyî",
"jup": "hupdëî",
"cce": "çopiyî",
"muy": "muyangî",
"agt": "agtayiya kagayanî ya navendî",
"sxn": "sangirî",
"brc": "kreyoliya holendî ya berbiceyî",
"yux": "yukaghiriya başûrî",
"zpv": "zapotekiya çiçicapan",
"teo": "atesoyî",
"dif": "dieriyî",
"maq": "mazateciya çiquihuitlan",
"sgh": "şughnî",
"gnc": "guwançî",
"ega": "egayî",
"kbh": "camsayî",
"bni": "bangî",
"tdj": "tajioyî",
"ngi": "ngizimî",
"bue": "beothukî",
"pok": "pokangayî",
"myw": "muyuwî",
"bkn": "bukîtan",
"dyu": "dyulayî",
"asn": "xingú asuriní",
"cme": "cermayî",
"tna": "takanayî",
"mia": "miamî",
"epi": "epieyî",
"mcq": "eseyî",
"kyu": "kayahiya rojavayî",
"sai-pyk": "pykobjê",
"zaa": "zapotekiya sierra de juarez",
"dhv": "dehûyî",
"bxk": "bukusuyî",
"nuz": "nahwatliya tlamacazapa",
"trm": "tregamî",
"cps": "capiznonî",
"slm": "pangutaran samayî",
"cia": "cia-ciayî",
"abv": "erebiya bahranî",
"lod": "berawanî",
"mhj": "mogholî",
"mnv": "rennelleseyî",
"gir": "gelaoyiya sor",
"bfq": "badagayî",
"wyi": "woiwurrungî",
"eya": "eyakî",
"awk": "awabakal",
"zoc": "zoqueyiya copainala",
"smw": "sumbawayî",
"ank": "goemayî",
"mbl": "maxakalî",
"tbd": "kakî aeyî",
"nez": "nez perceyî",
"crn": "corayî",
"sai-tap": "tapayunayî",
"see": "senekayî",
"huv": "huaveyî",
"apn": "apinayé",
"mfa": "malayiya pattani",
"crx": "karriyerî",
"mam": "mamî",
"ibl": "îbaloiyî",
"cac": "çujî",
"kdt": "kuyî",
"ocu": "tlahuicayî",
"hvn": "sabuyî",
"cjp": "cabecarî",
"xbi": "kombioyî",
"xra": "krahô",
"blc": "bella koola",
"peq": "pomoyiya başûrî",
"bpz": "bilbayî",
"mzp": "movimayî",
"lhu": "lahuyî",
"kge": "komeringî",
"tue": "tuyukayî",
"taa": "tananaya jêrîn",
"vkp": "kreyoliya portugalî ya korlai",
"cmo": "mnongiya navendî",
"mov": "mojaveyî",
"kkz": "kaskayî",
"zro": "zaparoyî",
"mnb": "munayî",
"mwf": "murînpatayî",
"zkg": "goguryeoyî",
"kiw": "kiwaiyiya bakur-rojhilat",
"ebr": "ebrieyî",
"pmt": "tuamotuanî",
"roa-ang": "angevinî",
"ssg": "seimatî",
"hch": "huiçolî",
"bew": "betawî",
"ycn": "yucunayî",
"mbr": "nukak makuyî",
"apq": "a-pucikwar",
"nym": "nyamwezî",
"tbi": "gaamî",
"obi": "obispeñoyî",
"pri": "paicî",
"lu": "luba-katangayî",
"kcg": "tyapî",
"yui": "yurutî",
"kvm": "kendemî",
"djk": "aukanî",
"rir": "ribunî",
"lrg": "laragiayî",
"wnw": "wintuyî",
"woe": "woleayî",
"ljl": "li’oyî",
"kic": "kîkapûyî",
"ndh": "ndalî",
"hdy": "hadiyyayî",
"cbs": "caşinahuayî",
"kys": "baram kayanî",
"nxg": "ngadhayî",
"hix": "hixkaryanayî",
"mpe": "majangî",
"pwm": "molbogî",
"nyn": "nyankoleyî",
"ilb": "îlayî",
"qya": "qiwenyayî",
"wrk": "garawayî",
"def": "dezfuliyî",
"oym": "wayampî",
"rkb": "rikbaktsayî",
"sai-msk": "masakarayî",
"itz": "îtzayî",
"sgc": "kipsigisî",
"ppi": "paipaî",
"tji": "tujiayiya bakurî",
"yak": "yakîmayî",
"gvp": "para gaviãoyî",
"jmc": "maçameyî",
"bfs": "bayiya başûrî",
"ncb": "nicobariya navendî",
"kvb": "kubuyî",
"veo": "venturenyoyî",
"poi": "popolucayiya highland",
"bny": "bintuluyî",
"bhp": "bîmayî",
"rim": "nyaturuyî",
"sog": "sogdî",
"rth": "ratahanî",
"mse": "museyî",
"ncl": "nahwatliya mîçoakanê",
"acp": "akîpayiya rojhilatî",
"pao": "paiuteyiya bakurî",
"iyx": "yaayî",
"zhx-tai": "taişanîzî",
"coe": "koreguajeyî",
"ser": "serranoyî",
"nko": "nkonyayî",
"mgq": "malilayî",
"ppo": "folopayî",
"alc": "kawésqar",
"abg": "abagayî",
"wro": "wororayî",
"kre": "panarayî",
"tuv": "turkanayî",
"dav": "taitayî",
"ppk": "umayî",
"roa-oca": "katalaniya kevn",
"tso-lya": "çolyanî",
"myu": "mundurukú",
"dcc": "deccaniyî",
"lsi": "laşiyî",
"ugo": "gongî",
"nab": "nambikwarayî",
"lil": "lillooetî",
"gqi": "guiqiongî",
"gah": "alekanoyî",
"ncz": "natçezî",
"xom": "komoyî",
"prk": "paraukî",
"bea": "beaverî",
"sky": "sikayanayî",
"pui": "puinaveyî",
"kgg": "kusundayî",
"lml": "ragayî",
"ore": "orejónî",
"vbb": "babariya başûr-rojhilat",
"mbp": "wiwayî",
"bft": "baltî",
"lgg": "lugbarayî",
"mxd": "modangî",
"mir": "isthmus mixeyî",
"enf": "forest enetsî",
"pkp": "pukapukanî",
"kzi": "kelabît bariyoyî",
"wba": "waraoyî",
"xeg": "ǁxegwî",
"cpa": "palantla çinantecî",
"men": "mendeyî",
"btu": "batuyî",
"psy": "piscatawayî",
"xhu": "hurî",
"for": "foreyî",
"deg": "degemayî",
"sai-oto": "otomacoyî",
"nhv": "nahwatliya temascaltepec",
"gme-cgo": "gothîkiya krimî",
"kyi": "kîputî",
"olt": "lîtwanyayiya kevn",
"alp": "aluneyî",
"nbb": "ndoeyî",
"uvl": "loteyî",
"pab": "parecî",
"nbh": "ngamoyî",
"dra-okn": "kannadayiya kevn",
"aak": "ankaveyî",
"wiv": "vîtûyî",
"kuz": "kunzayî",
"atb": "zaiwa",
"aca": "açaguwayî",
"zmr": "maranungkuyî",
"xke": "kerehoyî",
"isk": "îşkaşimiyî",
"dig": "digoyî",
"agn": "agutaynenî",
"bji": "burjî",
"klw": "linduyî",
"bwi": "baniwayî",
"ygr": "yagariayî",
"mez": "menomineeyî",
"kag": "kajamanî",
"mey": "hassaniyayî",
"umo": "umotinayî",
"yii": "yidinyî",
"twy": "tawoyanî",
"ktw": "katoyî",
"ari": "arîkara",
"ysr": "sirenikî",
"adz": "adzerayî",
"spo": "spokanî",
"cgg": "rukîgayî",
"wuv": "wuvulu-auayî",
"etu": "ejaghamî",
"jmd": "yamdenayî",
"mhy": "ma'anyanî",
"tae": "taryanayî",
"kzr": "karangî",
"zhn": "nong zhuangî",
"ess": "yupikiya sîberyaya navendî",
"teg": "teke-tegeyî",
"cqd": "çuanqiandian cluster miaoyî",
"sri": "sirianoyî",
"dag": "dagbaniyî",
"gae": "warekenayî",
"lre": "laurentî",
"tbt": "kitemboyî",
"pgn": "paelignianî",
"onb": "lingaoyî",
"pth": "pataxó hã-ha",
"vmg": "minigirî",
"yah": "yazghulamî",
"kxn": "kanowitî",
"kde": "makondeyî",
"api": "apiaká",
"och": "çîniya kevn",
"pre": "prînsîpenî",
"mgr": "mambwe-lunguyî",
"stp": "tepehuaniya başûr-rojhilat",
"kak": "kayapa kallahanî",
"myg": "mantayî",
"kee": "keresiya rojhilatî",
"mfh": "matalî",
"bkr": "bakumpaî",
"alw": "alaba",
"pml": "sabirî",
"rag": "logûlî",
"mei": "midobî",
"mjy": "mahicanî",
"blm": "belî",
"nhu": "nooneyî",
"kuf": "katuyiya rojavayî",
"cux": "tepeuxila cuicatecî",
"nyy": "nyakyusayî",
"mtf": "murikî (Gîneya nû)",
"mrt": "margî",
"mpj": "martu wangkayî",
"tlh": "klîngonî",
"enh": "tundra enetsî",
"sai-crd": "coroado purî",
"umi": "ukitî",
"tcb": "tanakrosî",
"kpt": "karatayî",
"xvn": "vandalî",
"xsm": "kasemî",
"ltc": "çîniya navîn",
"yuz": "yuracareyî",
"bhw": "biyakî",
"sqt": "soqotrî",
"dny": "deniyî",
"lcp": "lawayiya rojavayî",
"tpx": "akatepekiya me'phaayî",
"ake": "akawaîo",
"jeb": "jeberoyî",
"gup": "gunwingguyî",
"xeb": "eblaiteyî",
"zkt": "xîtanî",
"lex": "luangî",
"mnq": "minriqî",
"njm": "angamî",
"sge": "segayî",
"hoi": "holîkaçukî",
"tee": "huehuetla tepehuayî",
"bil": "bileyî",
"gej": "genî",
"wim": "wik-mungkanî",
"oyd": "oydayî",
"gvj": "guajayî",
"blw": "balangao",
"lgt": "pahîyî",
"sai-cac": "cacanî",
"xok": "xoklengî",
"knv": "taboyî",
"slc": "salibayî (Kolombiya)",
"noz": "nayî",
"bnq": "bantîkî",
"ykm": "yakamulî",
"dym": "yanda dogonî",
"cri": "sãotomenseyî",
"shu": "erebiya çadî",
"tcs": "creoleyiya torres strait",
"gmw-stm": "sathmar swabî",
"rbl": "miraya bikolî",
"mbn": "macaguanî",
"mgu": "mailuyî",
"pib": "yineyî",
"yku": "kuamasî",
"gva": "kaskihayî",
"sai-yur": "yurumanguî",
"clw": "çulymî",
"bln": "bîkolanoyiya başûr katanduanî",
"mxi": "mozarabîkî",
"sob": "sobeyî",
"agd": "agarabiyî",
"bxe": "ongotayî",
"ito": "îtonamayî",
"mmq": "aisî",
"gnd": "zulgo-gemzekî",
"wig": "wik-ngathanayî",
"dto": "tommo soyî",
"suz": "sunwarî",
"rol": "romblomanonî",
"llu": "lawî",
"jaa": "jamamadiyî",
"bns": "bundelî",
"wal": "wolayttayî",
"oui": "oyguriya kevn",
"bjt": "balanta-ganjayî",
"alk": "alakî",
"nhr": "naroyî",
"gmw-vog": "almaniya volga",
"nsn": "nehanî",
"kqe": "kalaganî",
"end": "endeyî",
"jui": "ngadcurî",
"hay": "hayayî",
"svb": "ulau-suainî",
"saz": "sauraştrayî",
"mep": "miriwungî",
"ert": "eritaiyî",
"yen": "yendangî",
"mxb": "mixteciya tezoatlan",
"pmw": "plains miwokî",
"fak": "fangî (Beboid)",
"sai-bet": "betoî",
"arl": "arabela",
"cks": "tayoyî",
"nrn": "nornî",
"kao": "kassonkeyî",
"blb": "bilua",
"wab": "wabî",
"kwd": "kwaioyî",
"abr": "abronî",
"wbi": "wanjî",
"cso": "soçiapam çinantecî",
"kmo": "kwomayî",
"ddw": "dawera-daweloorî",
"zae": "zapotekiya yareni",
"rac": "rasawayî",
"bra": "brajî",
"naz": "nahwatliya koatepek",
"qwm": "kipçakî",
"ayz": "maybratî",
"amp": "alamblakî",
"sit-liz": "lizuyî",
"jum": "jumjumî",
"tub": "tübatulabalî",
"hih": "pamosuyî",
"kbc": "kadiweuyî",
"tun": "tunikayî",
"cod": "cocamayî",
"abt": "ambulasî",
"ame": "yaneşa'",
"xed": "hdî",
"yrb": "yarebayî",
"mbc": "macuşî",
"sai-mal": "malalî",
"khs": "kasuayî",
"soz": "temî",
"mva": "manamî",
"bcu": "bîlîwayî",
"zpo": "zapotekiya amatlan",
"tfr": "teribeyî",
"xgf": "gabrielino-fernandeñoyî",
"aah": "abu' arapeşî",
"adn": "adangî",
"btn": "ratagnonî",
"gby": "gbariyî",
"sxb": "subayî",
"onn": "onobasuluyî",
"aih": "aî-çamî",
"djm": "jamsayî",
"wun": "bunguyî",
"bhv": "bahauyî",
"ahk": "akha",
"tow": "jemezî",
"duw": "dusun wituyî",
"alj": "alanganî",
"sbk": "safwayî",
"kho": "xotanî",
"ndj": "ndambayî",
"mmh": "mehinakuyî",
"ttw": "long watî",
"sai-cat": "catacaoyî",
"kck": "kalangayî",
"yav": "yangbenî",
"heh": "heheyî",
"szw": "sawayî",
"phk": "phakeyî",
"aoa": "angolar",
"xur": "urartûyî",
"txn": "taranganiya rojava",
"piv": "pilenî",
"xta": "mixtekiya alcozauca",
"ute": "uteyî",
"tad": "tauseyî",
"yug": "yugî",
"zum": "kumzarî",
"nkr": "nukuoroyî",
"xaw": "kawaiisuyî",
"mpa": "mpotoyî",
"zng": "mangî",
"gad": "gaddangî",
"drn": "damariya rojava",
"oca": "ocainayî",
"mcg": "mapoyoyî",
"gbm": "garhwaliyî",
"sbh": "sorî-harenganî",
"kew": "kewayî",
"mki": "dhatkî",
"obt": "bretoniya kevn",
"alo": "larike-wakasihu",
"drl": "baagandjiyî",
"tog": "tongayî (Malawî)",
"tdl": "surî",
"met": "matoyî",
"cle": "lealao çinantecî",
"gmq-jmk": "jamtîşî",
"gvf": "golinî",
"tlc": "totonakiya misantla",
"bfg": "busang kayanî",
"kvc": "kovêyî",
"kay": "kamayurayî",
"hei": "heiltsukî",
"urt": "uratî",
"nll": "nihalî",
"bdp": "bendeyî",
"ybe": "yuguriya rojavayî",
"nbr": "numanayî",
"mht": "mandahuacayî",
"wap": "wapişanayî",
"dzg": "dazagayî",
"wrg": "warunguyî",
"tiv": "tivî",
"tox": "tobî",
"kvo": "dobelî",
"ubl": "buhi'non bikolî",
"aja": "ajayî",
"toi": "tongayî (Zambiya)",
"sus": "susuyî",
"nhm": "nahwatliya morelos",
"mcf": "matsesî",
"lew": "ledo kailiyî",
"ckx": "cakayî",
"bxg": "bangalayî",
"nem": "nemî",
"mgo": "meta'",
"eno": "engganoyî",
"crd": "coeur d'aleneyî",
"bdb": "basapî",
"cui": "cuibayî",
"emx": "erromintxelayî",
"bsw": "baysoyî",
"piw": "pimbweyî",
"nim": "nilambayî",
"mzs": "makanîzî",
"njo": "aoyî",
"duk": "uyajitayayî",
"old": "moçî",
"sam": "aramiya samarî",
"mlq": "malinkî",
"awd-kaw": "kawişanayî",
"mro": "mruyî",
"sjm": "mapunî",
"bot": "bongoyî",
"lay": "lama baiyî",
"aif": "agî",
"bks": "masbate sorsogon",
"ibd": "îwaidjayî",
"dob": "dobûyî",
"noa": "woun meuyî",
"too": "totonakiya xicotepec de juarez",
"duv": "duvleyî",
"bqo": "baloyî",
"mna": "mbulayî",
"pbh": "panareyî",
"cav": "cavineñayî",
"scg": "sanggauyî",
"con": "cofanî",
"ubr": "ubirî",
"ata": "pele-ata",
"ngj": "ngieyî",
"ers": "ersuyî",
"tro": "taraoyî",
"yki": "yokeyî",
"tya": "tauyayî",
"byk": "biaoyî",
"tuq": "tedagayî",
"xrn": "arinî",
"mhq": "mandanî",
"ktx": "kaxarariyî",
"beu": "blagarî",
"mtv": "asaro'oyî",
"zca": "zapotekiya coatecas altas",
"abd": "manîdeyî",
"imn": "îmondayî",
"ofo": "ofoyî",
"avv": "avá-kanoeîro",
"ree": "rejang kayanî",
"klr": "khalingî",
"dby": "dibiyasoyî",
"bzd": "bribriyî",
"iwm": "îwamî",
"bvk": "bukatî",
"mgw": "matumbî",
"aus-wul": "wulguruyî",
"mto": "totontepec mixeyî",
"inc-ogu": "gujaratiya kevn",
"kpm": "kohoyî",
"bgz": "banggaî",
"klg": "tagakaulu kalaganî",
"xab": "sambeyî",
"pnz": "panayî (Afrîkaya navendî)",
"snl": "sangilî",
"aoc": "pemon",
"cul": "culinayî",
"nnq": "ngindoyî",
"cji": "çamalalî",
"urh": "urhoboyî",
"hoc": "hoyî",
"yok-nvy": "yokutiya geliyê bakurî",
"nbp": "nnamî",
"qyp": "kuiripî",
"ski": "sikayî",
"whk": "wahau kenyahî",
"fos": "sirayayî",
"paa-nun": "nungonî",
"mtd": "mualangî",
"mrh": "mara çinî",
"xeu": "keoru-ahiayî",
"ass": "îpulo",
"ing": "deg xinagî",
"ajg": "adjayî",
"kjl": "khamî",
"wed": "wedauyî",
"mxz": "maselayiya navendî",
"miw": "akoyeyî",
"lmc": "limilnganî",
"bag": "tukî",
"bva": "bareinî",
"yal": "yalunkayî",
"asa": "pare",
"sai-col": "colanî",
"kdd": "yankunytjatjarayî",
"pne": "penaniya rojavayî",
"hna": "minayî",
"ayp": "erebiya mezopotamyayî ya bakur",
"can": "çambriyî",
"yey": "yeyî",
"szc": "semaq beriyî",
"byd": "benyadu'",
"yok-svy": "yokutiya geliyê başûrî",
"xet": "setayî",
"aro": "araona",
"ntw": "nottowayî",
"szv": "isubuyî",
"crw": "çrauyî",
"kyz": "kayabiyî",
"asl": "asîluluyî",
"poz-abi": "abay-sembwakî",
"tsx": "mubamî",
"ify": "keley-i kallahanî",
"srv": "waray sorsogonî",
"ong": "oloyî",
"mvm": "muyayî",
"lam": "lambayî",
"icl": "zimanê destan ê îzlandê",
"xww": "wemba-wembayî",
"ixl": "îxilî",
"ape": "bukiyîpî",
"rui": "rufijî",
"mhl": "mauwakeyî",
"lgr": "lengoyî",
"nmy": "namuyî",
"ncn": "naunayî",
"pez": "penaniya rojhilatî",
"mfg": "mixiforeyî",
"bei": "bekatî'",
"ydg": "yidghayî",
"cwd": "kriya woods",
"mmn": "mamanwayî",
"nai-kat": "kathlametî",
"cje": "çruyî",
"ark": "arîkapûyî",
"fut": "futuna-anîwayî",
"wad": "wandamenî",
"tew": "tewayî",
"nyo": "nyoroyî",
"bky": "bokyî",
"tjm": "timucuayî",
"ysg": "sonagayî",
"ogu": "ogbronuagumî",
"mnj": "munjî",
"gwd": "gawwadayî",
"fbl": "west albay bikolî",
"uiv": "îyiveyî",
"bkq": "bakairí",
"ibe": "akpesî",
"maa": "mazateciya san jerónimo tecóatl",
"jig": "jinguluyî",
"tvd": "tsuvadî",
"xod": "kokodayî",
"adw": "amondawayî",
"guu": "yanomamöî",
"srh": "sarikolî",
"nam": "ngan'gityemerrî",
"hto": "minica huitotoyî",
"yby": "yaweyuhayî",
"urz": "uru-eu-wau-wau",
"ewo": "ewondoyî",
"cal": "karolînî",
"arr": "arara-karo",
"yup": "yukpayî",
"iai": "îaaiyî",
"wbh": "wandayî",
"dmw": "mudburrayî",
"xel": "keloyî",
"rma": "ramayî",
"zwa": "zayî",
"emi": "mûssaû-emîrakî",
"lai": "lambyayî",
"dim": "dimeyî",
"agu": "agwakatekî",
"zin": "zinzayî",
"kiv": "kimbuyî",
"dbg": "dogul domî",
"bzg": "babuzayî",
"roa-ole": "leoniya kevn",
"bun": "şerbroyî",
"gnn": "gumatjî",
"mhs": "bûrî",
"pln": "palenqueroyî",
"aus-guw": "guwarî",
"tgt": "tagbanwayiya navendî",
"mwv": "mentawaî",
"kke": "kakabeyî",
"pla": "mianî",
"bpr": "koronadal blaanî",
"oty": "tamîliya kevn",
"ywr": "yawuruyî",
"nai-tap": "tapaçultecî",
"sai-sec": "seçurayî",
"pid": "piaroayî",
"mih": "mixteciya çayuco",
"icr": "kreyoliya îngilîzî ya îslanderê",
"hoh": "hobyótî",
"fab": "annoboneseyî",
"ssm": "semnamî",
"ncg": "nisga'ayî",
"mkg": "makî (Çîn)",
"max": "malayiya moluccana bakur",
"zak": "zanakî",
"kxv": "kuviyî",
"xkn": "kayan river kayanî",
"fuy": "fuyugî",
"zpl": "zapotekiya laçixio",
"kwf": "kwara'aeyî",
"aig": "îngilîziya kreyolî ya antîgua û barbud",
"rai": "ramoaainayî",
"otd": "dohoyî",
"bey": "akuwagelî",
"nwr": "nawaruyî",
"tmq": "tumleoyî",
"tgx": "tagişî",
"pbr": "pangwayî",
"loj": "louyî",
"emp": "emberayiya bakurî",
"nho": "takuuyî",
"bco": "kalulî",
"ifb": "batad ifugaoyî",
"jao": "yanyuwayî",
"inc-ohi": "hindiya kevn",
"cup": "cupeñoyî",
"bci": "bawuleyî",
"ngo": "ngonî",
"nun": "anongî",
"yee": "yimasî",
"kxb": "krobuyî",
"hub": "huambisayî",
"nee": "kumakî",
"bec": "iceve-macî",
"smb": "simbarî",
"kuj": "kuriayî",
"ian": "îatmulî",
"cjv": "çuaveyî",
"zne": "zandeyî",
"ssd": "siroî",
"cbn": "nyah kurî",
"lwg": "wangayî",
"bmr": "muinanî",
"kya": "kwayayî",
"xem": "kembayanî",
"acz": "açeronî",
"pav": "wari'",
"egx-dem": "demotîkî",
"bph": "botlixî",
"lev": "lammayî",
"btp": "budibudî",
"bzq": "bulî",
"tdv": "toroyî",
"klq": "rumuyî",
"ojv": "javayiya ontongê",
"bdi": "burunî",
"wya": "wyandotî",
"pbb": "paezî",
"lfn": "lingua franca nova",
"jit": "jitayî",
"amq": "amahaî",
"tcf": "mepaya malînaltepekî",
"ebu": "embuyî",
"rwm": "ambayî",
"pnh": "penrhynî",
"and": "ansus",
"pej": "pomoyiya bakurî",
"kue": "kumanî",
"fip": "fipayî",
"kcn": "nubiyî",
"lol": "mongoyî",
"bwd": "biwaydokayî",
"aia": "arosî",
"zau": "zangskarî",
"pud": "punan aputî",
"ikz": "îkizuyî",
"bgb": "bobongko",
"thk": "tharakayî",
"ymc": "mujiya başûrî",
"mny": "manyawayî",
"xwa": "kwazayî",
"wrs": "warisî",
"nai-tip": "tipaî",
"teu": "sooyî",
"ked": "kereweyî",
"szp": "suaboyî",
"rgr": "resigaroyî",
"bdm": "budumayî",
"nib": "nakameyî",
"lek": "leyponî",
"guh": "guahiboyî",
"bqr": "burusuyî",
"apl": "lipan",
"bnd": "banda",
"tsj": "tşanglayî",
"xme-old": "mediya kevn",
"ppn": "papapanayî",
"mwp": "kala lagaw yayî",
"bfa": "bariyî",
"plh": "paulohî",
"btd": "batakiya dairî",
"ure": "uruyî",
"sty": "tatariya sîberî",
"buy": "mmaniyî",
"xyy": "yorta yortayî",
"xdy": "malayîk dayakî",
"kmj": "kumarbhag pahariayî",
"vun": "vunjoyî",
"cuh": "çukayî",
"lgl": "walayî",
"pna": "punan bah-biauyî",
"now": "nyamboyî",
"gqa": "ga'andayî",
"thm": "thavungî",
"acr": "açiyî",
"cir": "tiriyî",
"mxr": "murîkî (Malezya)",
"swp": "suauyî",
"zor": "zoqueyiya rayón",
"wic": "wiçitayî",
"suw": "sumbwayî",
"bum": "buluyî (Kamerûn)",
"rnw": "rungwayî",
"nak": "nakanayî",
"trs": "trîkuyiya çicahuaxtla",
"lpo": "lipoyî",
"gwe": "gwenoyî",
"cbd": "carijonayî",
"mot": "barî",
"tlv": "taliabuyî",
"xsu": "sanumayî",
"sjl": "mijî",
"pip": "peroyî",
"acx": "erebiya ummanî",
"ybb": "yembayî",
"uln": "unserdeutsch",
"yil": "yindjilandjî",
"ykn": "kua-nsî",
"apu": "apurinã",
"sso": "sissanoyî",
"puc": "punan merapî",
"mwn": "nyamwangayî",
"bpa": "dakakayî",
"mmd": "maonanî",
"bof": "bolonî",
"ati": "attié",
"wji": "warjî",
"lra": "rara bakati'",
"mlu": "toabaîtayî",
"bdd": "bunamayî",
"bfd": "bafutî",
"keu": "akebuyî",
"wod": "wolanî",
"ksb": "şambalayî",
"mff": "nakî",
"azn": "durango nahuatliya rojavayî ya jêrîn",
"asi": "buruwayî",
"ala": "alago",
"tpy": "trumaî",
"zms": "mbesayî",
"kib": "koalibî",
"jun": "juangî",
"guf": "gupapuynguyî",
"liy": "banda-bambariyî",
"sai-pam": "pamiguayî",
"loa": "lolodayî",
"elm": "elemeyî",
"aad": "amalî",
"lcm": "tungagî",
"twh": "tai dónî",
"ppm": "papumayî",
"xmr": "meroytîkî",
"kno": "konoyî (sierra leone)",
"kzz": "kalabrî",
"emw": "emplawasî",
"pnk": "pawnakayî",
"gym": "ngäbereyî",
"mxj": "mijuyî",
"lun": "lundayî",
"kos": "kosraeyî",
"kzx": "kamarianî",
"aan": "anambeyî",
"ukq": "ukwayî",
"tau": "tananaya jorîn",
"anc": "ngas",
"rcf": "kreyola fransî ya réunion",
"knm": "kanamariyî",
"bvy": "baybayanonî",
"jnj": "yemsayî",
"onu": "unuayî",
"bdh": "tara bakayî",
"pij": "pijaoyî",
"mks": "mixteciya silacayoapan",
"juh": "honeyî",
"etx": "etenî",
"sai-chr": "çarruayî",
"aui": "anukî",
"cuc": "usila çinantecî",
"xme-ott": "tatiya kevn",
"njj": "njenî",
"mng": "mnongiya rojhilatî",
"cih": "çinaliyî",
"ard": "arabana",
"val": "vehesî",
"aos": "taykatî",
"peb": "pomoyiya rojhilatî",
"xcb": "kumbrîkî",
"clk": "iduyî",
"aem": "aremî",
"vut": "vuteyî",
"teq": "temeinî",
"siu": "sinagenî",
"xmm": "manado malayî",
"gdj": "kurtjarî",
"xau": "kauwerayî",
"atz": "arta",
"zsr": "zapoteciya rincona başûrî",
"wmt": "walmajarrî",
"ter": "terenoyî",
"sit-sit": "situyî",
"zns": "mangasî",
"kwz": "kwadiyî",
"iki": "îkoyî",
"prq": "aşeninka pereneyî",
"ztq": "zapotekiya quioquitani-quieri",
"wan": "wanî",
"txh": "thrasî",
"ahg": "qimant",
"boe": "mundablî",
"gww": "kwiniyî",
"ior": "înorî",
"ply": "bolyuyî",
"avt": "au",
"zpu": "zapotekiya yalalagî",
"bgv": "warkay-bîpîmî",
"srb": "sorayî",
"huu": "murui huitotoyî",
"zmm": "marimanindjî",
"xme-ker": "kermanî",
"gbv": "gbanuyî",
"awe": "awetí",
"xzh": "zhang-zhungî",
"wow": "wawonî",
"tqo": "toaripî",
"syb": "subaneniya navendî",
"ril": "riangî",
"nqo": "n'koyî",
"laj": "langoyî (Uganda)",
"bbh": "buganî",
"orr": "orumayî",
"gju": "gojriyî",
"ddd": "dongotonoyî",
"yik": "dongşanba laloyî",
"sai-bag": "baguayî",
"tsr": "akeî",
"txe": "totolî",
"nal": "nalikî",
"bez": "kîbenayî",
"jeh": "jehî",
"sem-saf": "safaitîkî",
"mka": "mbreyî",
"nai-jum": "jumaytepequeyî",
"ebg": "ebughuyî",
"cbv": "cacuayî",
"lnl": "bandayiya navendî ya başûr",
"inc-kho": "xolosî",
"tzx": "tabriakî",
"sln": "salînanî",
"ncr": "ncaneyî",
"kqt": "kadazaniya çemê kliasê",
"cbr": "caşibo-cacataiboyî",
"trt": "tunggareyî",
"tyj": "tai doyî",
"kpr": "korafe-yeghayî",
"hmt": "hamtaiyî",
"csi": "coast miwokî",
"bbi": "barombî",
"tvk": "ambrîmiya başûr-rojhilat",
"ynd": "yandruwandhayî",
"sai-sap": "saparayî",
"mik": "mikasukî",
"kid": "koşinî",
"bya": "batakiya palawan",
"awd-ana": "anauyayî",
"yrw": "yarawatayî",
"tnx": "tanemayî",
"lme": "peveyî",
"nbm": "ngbaka ma'boyî",
"myy": "macunayî",
"cao": "çacoboyî",
"anp": "angîka",
"sim": "seimî",
"nha": "nhandayî",
"kqn": "kaondeyî",
"ecr": "eteocretanî",
"crv": "çaurayî",
"bef": "benabenayî",
"aud": "anuta",
"yiy": "yir-yorontî",
"usp": "uspantekoyî",
"sry": "serayî",
"njy": "njyemî",
"mod": "mobilianî",
"mmt": "malalamaî",
"leu": "karayî (Gîneya nû)",
"mbe": "molaleyî",
"txi": "ikpengî",
"snc": "sinaugoroyî",
"noc": "nukî",
"mle": "manambuyî",
"kyr": "kuruayayî",
"ivb": "îbatanî",
"sai-chu": "çuruyayî",
"lsr": "aruopî",
"zaq": "zapotekiya aloapam",
"tef": "teressayî",
"siy": "sivandî",
"nyb": "nyangboyî",
"mpi": "mpadeyî",
"tcq": "kayî",
"kbt": "gabadiyî",
"dka": "dakpayî",
"bff": "bofî",
"ahs": "aşeyî",
"zar": "zapotekiya rincón",
"xct": "tibetiya klasîk",
"afz": "obokuîtayî",
"mnf": "mundanî",
"mpw": "mapidianî",
"gza": "ganzayî",
"acv": "açumawî",
"zmu": "muruwarî",
"zmt": "maringarrî",
"lbc": "lakkiayî",
"gbg": "gbanziriyî",
"des": "desanoyî",
"kud": "awhelawayî",
"agc": "agatuyî",
"tob": "tobayî",
"suc": "subanoniya rojavayî",
"oni": "onînî",
"mne": "nabayî",
"itm": "îtu mbon uzoyî",
"ges": "geser-goromî",
"aza": "azhayî",
"nfl": "aiwooyî",
"tqp": "tomoipî",
"rof": "romboyî",
"ury": "oryayî",
"axg": "mato grosso arára",
"jax": "jambî malayî",
"gkn": "gokanayî",
"tbq-gkh": "gokhyî",
"bkz": "bungku",
"aik": "akeyî",
"tku": "totonaciya nekaksaya jorîn",
"sho": "şangayî",
"crp-rsn": "russenorskî",
"nss": "nalî",
"guo": "guayaberoyî",
"dun": "dusun deyahî",
"bsm": "busamiyî",
"ble": "balanta-kentohe",
"axx": "xaragure",
"sxg": "şixingî",
"apz": "safeyoka",
"awd-pai": "paikonekayî",
"muc": "mbu'",
"kgu": "kobolî",
"dbf": "edopiyî",
"bbp": "bandayiya rojavayî ya navendî",
"loe": "saluanî",
"nux": "mehekî",
"elk": "elkeiyî",
"yaf": "yakayî",
"tiz": "tai hongjinî",
"stu": "samtaoyî",
"nkg": "nekginî",
"koz": "korakî",
"aus-bra": "barranbinyayî",
"tlr": "talîsî",
"spc": "sapeyî",
"sai-pyg": "payaguayî",
"tbq-mil": "milangî",
"klp": "kamasayî",
"crz": "cruzeñoyî",
"boj": "ancamî",
"tan": "tangaleyî",
"svs": "savosavoyî",
"ppq": "peyî",
"ngg": "ngbaka manzayî",
"mpx": "misima-paneatî",
"kcp": "kangayî",
"cbi": "çaçiyî",
"bfc": "bayiya bakurî",
"yec": "yeniçeyî",
"sai-trr": "tarairiú",
"plg": "pilagayî",
"hoe": "horomî",
"yun": "benayî",
"any": "anyî",
"yis": "yisî",
"ush": "uşojoyî",
"tav": "tatuyoyî",
"sve": "serilî",
"gob": "playeroyî",
"nkz": "nkarî",
"moc": "mocovî",
"jko": "kuboyî",
"reg": "karayî (Tanzanya)",
"hul": "hulayî",
"chh": "çinookî",
"yub": "yugambalî",
"tbg": "tayrorayiya bakur",
"mdc": "maleyî",
"kuo": "kumukioyî",
"mvy": "indus kohistanî",
"foi": "foiyî",
"coz": "çoçotecî",
"bim": "bimobayî",
"agf": "argunî",
"kmx": "wabodayî",
"mtl": "montolî",
"kjr": "kuruduyî",
"kcb": "kawaçayî",
"ibn": "îbinoyî",
"scb": "çutî",
"atx": "arutanî",
"mvt": "mpotovoroyî",
"kxa": "kayrîrûyî",
"boq": "bogayayî",
"zpx": "zapotekiya san baltazar loxiça",
"wnc": "wantoatî",
"itd": "tidongiya başûrî",
"xog": "sogayî",
"ann": "obolo",
"unr": "mundarî",
"bzh": "mapos buangî",
"tye": "kyengayî",
"kyq": "kengayî",
"kwa": "dâwî",
"bou": "bondeyî",
"aul": "aulua",
"zty": "zapotekiya yatee",
"wrp": "waropenî",
"mmi": "musarî",
"buq": "bremî",
"auj": "awjîla",
"gtu": "aghu tharrnggalayî",
"zil": "zialoyî",
"tlb": "tobeloyî",
"mty": "nabî",
"lbz": "lardilî",
"gdd": "gêdagêdî",
"mdx": "dizinî",
"bgt": "bugotûyî",
"tpc": "azoyú me'phaayî",
"jmb": "zumbunî",
"tdn": "tondanoyî",
"rng": "rongayî",
"mtm": "matorî",
"djd": "jaminjungî",
"gol": "golayî",
"doz": "dorzeyî",
"nmk": "namakurayî",
"mnt": "maykulanî",
"lbl": "libon bikolî",
"gde": "gudeyî",
"bxs": "busamî",
"xmd": "mbudumî",
"kdq": "koçî",
"cah": "cahuaranoyî",
"bza": "bandiyî",
"aes": "alseayî",
"dsq": "tadaksahakî",
"tmj": "samarokenayî",
"att": "pamplona atta",
"xhd": "hadramî",
"brp": "barapasiyî",
"omw": "tairorayiya başûr",
"nif": "nekî",
"iyo": "mesakayî",
"luq": "lucumiyî",
"kqz": "koranayî",
"coc": "cocopayî",
"amj": "amdang",
"tlk": "talokî",
"spi": "saponî",
"nnf": "ngaingî",
"mlj": "miltuyî",
"luz": "luriya başûrî",
"xas": "kamassî",
"cua": "cuayî",
"afd": "andaî",
"yxl": "yarlî",
"sit-tgm": "tangamî",
"nga": "ngbakayî",
"mrg": "misingî",
"igm": "kanggapeyî",
"gop": "yeretuarî",
"myh": "makahî",
"kpg": "kapîngamarancîyî",
"ero": "horpayî",
"eto": "etonî (Kamerûn)",
"bcq": "bençî",
"srr": "sererî",
"mqz": "malasangayî",
"hui": "huliyî",
"cap": "çipayayî",
"uar": "tayrumayî",
"mox": "molimayî",
"nai-ipa": "ipaî",
"arh": "arhuako",
"wdj": "wadjiginyî",
"tem": "temneyî",
"snn": "sionayî",
"mxk": "monumboyî",
"kru": "kurukhî",
"inc-mas": "asamiya navîn",
"zoo": "zapotekiya asunción mixtepec",
"wme": "wambuleyî",
"pru": "puragî",
"qwt": "kwalhioqua-tlatskanaî",
"gbb": "kaytetyeyî",
"bux": "boghomî",
"atm": "ata",
"abn": "abuayî",
"zab": "zapotekiya san juan guelavia",
"wny": "wanyî",
"sai-qtm": "quitemoyî",
"mmf": "mundatî",
"gdm": "laalî",
"kxi": "keningau murutî",
"dwr": "dawroyî",
"bfw": "bondoyî",
"aux": "aurá",
"ttv": "titanî",
"nrz": "lalayî (Gîneya nû)",
"gbp": "gbaya-bossangoayî",
"awn": "awngî",
"zia": "ziayî",
"way": "wayanayî",
"sut": "subtiabayî",
"rog": "roglayiya bakurî",
"ono": "onondagayî",
"mbj": "nadëbî",
"mls": "masalitî",
"bbj": "ghomalayî'",
"dyi": "djiminiyî",
"bgg": "bugunî",
"ail": "aîmeleyî",
"wir": "wirafedî",
"cla": "ronî",
"ost": "osatuyî",
"kkr": "kir-balarî",
"dgb": "bunogeyî",
"yha": "bahayî",
"mcd": "şaranahuayî",
"rwk": "rwayî",
"ifu": "mayoyao ifugaoyî",
"lig": "ligbiyî",
"jek": "jeri kuoyî",
"ghs": "guhu-samaneyî",
"bdn": "baldemuyî",
"xkf": "xengxayî",
"tsb": "tsamaî",
"sle": "şolagayî",
"nai-spt": "sahaptinî",
"nas": "nasioyî",
"mhd": "mbuguyî",
"kfa": "kodavayî",
"jur": "jurúnayî",
"goa": "guroyî",
"efa": "efaiyî",
"aqn": "altaya bakurî",
"tjs": "tujyayiya başûrî",
"tdy": "tadyawanî",
"los": "loniuyî",
"jka": "kaerayî",
"afo": "eloyî",
"cba-cat": "catio çibçayî",
"bsn": "barasanayî",
"ama": "amanayé",
"sai-san": "sanavironî",
"prc": "paraçî",
"nej": "nekoyî",
"cms": "messapicî",
"kyl": "kalapuyayî",
"coj": "coçimiyî",
"byr": "baruyayî",
"aey": "ameleyî",
"aus-ynk": "yangkaalî",
"yta": "taluyî",
"pay": "peç",
"lse": "lusengoyî",
"cub": "cubeoyî",
"gac": "andamaniya mezin a têkel",
"yry": "yarluyandî",
"tgp": "tangoayî",
"mjt": "sawriya pahariayî",
"phl": "phalurayî",
"ngt": "ngeqî",
"xnr": "kangrî",
"ciy": "çaimayî",
"bca": "bayiya navendî",
"aog": "angoram",
"yrn": "yerongî",
"skz": "sekarî",
"pia": "pima bajoyî",
"mjb": "makaleroyî",
"hot": "hoteyî",
"cbt": "çayahuitayî",
"aor": "aore",
"uve": "uveyiya rojava",
"pbv": "pnarî",
"mkr": "malasî",
"qvy": "kueyuyî",
"nai-chi": "çiquimulillayî",
"bhi": "bhilalî",
"erg": "sieyî",
"plo": "popolucayiya oluta",
"aun": "molmo one",
"kun": "kunamayî",
"laz": "aribwatsayî",
"waj": "waffayî",
"xsi": "sioyî",
"ibr": "îbuoroyî",
"zaf": "zapotekiya ayoquesco",
"lbq": "wamparî",
"keg": "teseyî",
"nyt": "nyawaygî",
"akc": "mpur",
"mnx": "manikionî",
"kmq": "kwamayî",
"khz": "keaparayî",
"ilk": "îlongotî",
"gaj": "gadsupî",
"aqp": "atakapa",
"kgr": "abunî",
"zpf": "zapotekiya san pedro quiatoni",
"sok": "sokoroyî",
"odu": "odualî",
"muh": "mündü",
"lbb": "labelî",
"knl": "keninjalî",
"bna": "boneratî",
"auy": "auyana",
"ade": "adeleyî",
"zpw": "zapotekiya zaniza",
"opm": "oksapminî",
"mug": "musguyî",
"hob": "mariyiya awistronezî",
"ywl": "laluyiya rojavayî",
"ksx": "kêdangî",
"gbq": "gbaya-bozoumî",
"xbm": "bretoniya navîn",
"kmn": "awtuwî",
"ziw": "zigulayî",
"wbm": "wayî",
"tgo": "sudestî",
"opo": "opaoyî",
"lan": "laruyî",
"xuu": "khweyî",
"gid": "gidarî",
"bvj": "baanî",
"zzj": "zuojiang zhuangî",
"wpc": "wirö",
"rnn": "roonî",
"don": "dourayî",
"bhj": "bahingî",
"lib": "likumî",
"akj": "jeru",
"awd-gnu": "guinauyî",
"dux": "duunî",
"bqp": "busayî",
"nsk": "naskapî",
"mqb": "mbukoyî",
"kwl": "kofyarî",
"nai-jtp": "jutiapayî",
"grd": "guruntumî",
"llp": "efateyiya bakur",
"agy": "altaya başûrî",
"yar": "yabaranayî",
"khc": "tukang besiya bakur",
"sbl": "sambaliya botolan",
"crc": "lonwolwolî",
"xkg": "kagoroyî",
"hdn": "haidayiya bakurî",
"sai-ctq": "catuquinaruyî",
"bbb": "barayî",
"amr": "amarakaerî",
"yky": "yakomayî",
"bsx": "yangkamî",
"tmz": "tamanakuyî",
"zsa": "sarasirayî",
"nig": "ngalakanî",
"khl": "lusiyî",
"xow": "kowakî",
"hem": "hembayî",
"pga": "erebiya jubayê",
"bhm": "batharî",
"bzb": "andioyî",
"yko": "yasayî",
"sax": "sayî",
"ypg": "pholayî",
"nnh": "ngiemboonî",
"mpd": "maçinereyî",
"vic": "kreyoliya giravên virginê",
"kdp": "kaningdon-nindemî",
"sit-cha": "çairelî",
"yes": "yeskwayî",
"uur": "urayî (Vanuatu)",
"mhu": "taraonî",
"slu": "selaruyî",
"xtd": "mixtekiya diuxi-tilantongo",
"utr": "etuloyî",
"bnv": "benerafî",
"ydk": "yoidikî",
"trr": "tauşîroyî",
"srk": "serudung murutî",
"xpo": "poçutekî",
"nkx": "nkorooyî",
"kes": "kugboyî",
"kgm": "karipúnayî",
"cax": "çiquitanoyî",
"big": "biangaî",
"vil": "vilelayî",
"dtu": "tebul ure dogonî",
"tty": "sikaritaî",
"rmg": "norweciya traveller",
"mlw": "molokoyî",
"biq": "bipî",
"ylu": "aribwaungî",
"wga": "wagayayî",
"tnz": "ten'ednî",
"qum": "sipakapenseyî",
"pue": "puelçeyî",
"nop": "numanggangî",
"mzq": "mori atasî",
"awd-kus": "kustenauyî",
"idi": "îdî",
"kzf": "da'a kailiyî",
"bib": "bîssayî",
"zad": "zapotekiya cajonos",
"waz": "wampurî",
"tll": "tetelayî",
"pur": "puruborayî",
"nih": "nyihayî",
"tnk": "kwamerayî",
"ilv": "îlueyî",
"dmn-dam": "damayî (Sierra leone)",
"cba-ata": "atanquesî",
"abu": "abureyî",
"zpt": "zapotekiya san vicente coatlan",
"aaw": "solongyî",
"opy": "ofayeyî",
"dtb": "labuk-kinabatangan kadazanî",
"ikt": "înuvialuktunî",
"auu": "auye",
"adi": "adî",
"wsk": "waskiayî",
"tix": "tiwayiya başûrî",
"atu": "reel",
"mui": "musî",
"iso": "îsokoyî",
"gya": "gbayayiya bakur-rojava",
"auw": "awyî",
"zik": "zimakanî",
"sai-way": "wayumarayî",
"sue": "suenayî",
"sai-opo": "opónî",
"srf": "nafî",
"qxs": "kiangiya başûrî",
"ggt": "gituayî",
"bcd": "babariya bakur",
"xam": "ǀxamî",
"wiu": "wiruyî",
"rro": "roroyî",
"osi": "osingî",
"mvb": "mattolî",
"mjk": "matukarî",
"lln": "leleyî (Çad)",
"kiy": "kirikiriyî",
"sit-jap": "japhugî",
"tds": "doutaî",
"blf": "buol",
"akt": "akolet",
"apb": "sa'a",
"awd-mpr": "maypureyî",
"jee": "jerungî",
"saj": "sahuyî",
"pkn": "pakanhayî",
"kkx": "kohinî",
"nai-cal": "calusayî",
"bgf": "banganduyî",
"ybm": "yabenî",
"bhq": "tukang besî başûr",
"mxe": "mele-filayî",
"lom": "loomayî",
"hka": "kaheyî",
"emn": "emanî",
"boi": "barbarenyoyî",
"aie": "amarayî",
"anh": "nendî",
"mej": "meyahî",
"kcl": "kalayî",
"hro": "haroiyî",
"enc": "enî",
"amy": "amî",
"yde": "yangum deyî",
"taj": "tamangiya rojhilatî",
"sar": "saravekayî",
"szb": "ngalumî",
"inm": "minaeanî",
"kwh": "kowyayî",
"hed": "herdeyî",
"cuy": "cuitlatecî",
"yvt": "yaviteroyî",
"sgw": "sebat bet gurageyî",
"nph": "phomî",
"mjs": "mişipî",
"mda": "madayî (Nîjerya)",
"wat": "kaninuwayî",
"blo": "anîî",
"yss": "yessan-mayoyî",
"ona": "selk'namî",
"pny": "pinyinî",
"noe": "nimadî",
"crm": "kriya mûsî",
"hhy": "hoyahoyayî",
"bzz": "evantî",
"inc-apa": "apabhramsayî",
"uuu": "uyî",
"seu": "serui-lautî",
"pbi": "podokoyî",
"mhc": "moçoyî",
"kzw": "kaririyî",
"faa": "fasuyî",
"sai-chi": "çirinoyî",
"yab": "yuhupî",
"vit": "vitî",
"myl": "momayî",
"crb": "island caribî",
"frq": "forakî",
"cog": "çongî",
"brk": "birgidî",
"waq": "wagemanî",
"nuy": "nunggubuyuyî",
"mdb": "morigî",
"idu": "îdomayî",
"fun": "fulniôî",
"dao": "daai çinî",
"wnb": "wanambreyî",
"skv": "skouyî",
"sai-pur": "purukotó",
"nyi": "nyimangî",
"kwn": "kwangaliyî",
"kec": "keigayî",
"gbu": "gagaduyî",
"dnj": "danî",
"bus": "bokobaruyî",
"ado": "abuyî",
"zpn": "zapotekiya santa ines yatzeçi",
"aml": "war-jaîntî",
"mij": "mungbamî",
"lbu": "labuyî",
"ken": "kenyangî",
"ipo": "îpikoyî",
"zam": "zapotekoyiya mahuatlana navendî",
"wac": "wasko-wişramî",
"sww": "sowayî",
"msu": "musomî",
"rkm": "markayî",
"slp": "lamaholotî",
"gso": "gbayayiya başûr-rojava",
"ahb": "axamb",
"kit": "agobî",
"bfi": "zimanê destan ê brîtanî",
"taz": "toçoyî",
"swi": "suî",
"prm": "kibirî",
"gis": "gizigayiya bakur",
"doe": "doeyî",
"abj": "aka-beayî",
"hnh": "ǁaniyî",
"roo": "rotokasî",
"nlv": "nahwatliya orizaba",
"npl": "nahwatliya pueblaya başûr-rojhilatî",
"llc": "leleyî (Gîne)",
"fkk": "kirya-konzelî",
"mde": "bura mabangî",
"bdl": "bajwayiya endonezyayî",
"bss": "akooseyî",
"scw": "şayî",
"lsm": "saamiayî",
"pqa": "pa'ayî",
"nmq": "nambyayî",
"mbq": "maysînî",
"jib": "jibuyî",
"bhs": "buwalî",
"sjo": "xibeyî",
"abw": "pal",
"nxa": "naueteyî",
"mck": "mbundayî",
"jmx": "juxtlahuaca mixteciya rojavayî",
"clu": "caluyanunî",
"ybo": "yabongî",
"tuo": "tukanoyî",
"nml": "ndemlî",
"mfx": "meloyî",
"lop": "lopayî",
"kzv": "komyandaretî",
"kct": "kaianî",
"has": "haislayî",
"mmw": "emayî",
"cyb": "cayubabayî",
"bcj": "bardî",
"awd-ama": "amarizanayî",
"ylr": "yalarnngayî",
"ago": "taînaeyî",
"prw": "parawenî",
"enw": "enwangî",
"kog": "coguiyî",
"bst": "basketoyî",
"ymo": "yangum monî",
"uda": "udayî",
"tma": "tamayî (Çad)",
"sre": "sarayî",
"nbv": "ngamamboyî",
"mcv": "minanibaî",
"koh": "koyoyî",
"zbt": "batuî",
"anb": "andoa",
"yaw": "yawalapitî",
"tnc": "tanimuca-retuarã",
"sbx": "seberuangî",
"yhl": "hlepho phowayî",
"bzv": "bebeyî",
"anf": "anîmere",
"yet": "yetfayî",
"pir": "piratapuyoyî",
"nmw": "nimoayî",
"nhb": "bengî",
"tbo": "tawalayî",
"szd": "seruyî",
"poy": "pogoloyî",
"bve": "malayiya berau",
"ctm": "çitimaçayî",
"aaf": "aranadanî",
"mkh-mvi": "viyetnamiya navîn",
"mnd": "mondeyî",
"mup": "malvî",
"kse": "kuniyî",
"btf": "birgîtî",
"aac": "ariyî",
"tex": "tennetî",
"kbb": "kaxuyanayî",
"ula": "fungwayî",
"dsh": "daasanaçî",
"zps": "zapotekiya coatlan",
"wnp": "wanapî",
"scs": "slaveyiya bakur",
"lid": "nyindrouyî",
"kvi": "kwangî",
"idb": "îndo-portegîzî",
"bdt": "bokotoyî",
"ate": "atemble",
"zpi": "zapotekiya santa maria quiegolani",
"tvy": "timor pidginî",
"sol": "solosî",
"rjs": "rajbanşî",
"ogc": "ogbahî",
"mth": "mungguî",
"dmc": "gavakî",
"zaj": "zaramoyî",
"sss": "soyî",
"nai-okw": "okwanuçuyî",
"hia": "lamangî",
"gyg": "gbayiyî",
"duy": "dicamay agtayî",
"sgt": "brokpakeyî",
"yix": "axi yî",
"tcx": "todayî",
"sui": "sukî",
"phi-nag": "nagtipunan agtayî",
"ixc": "îxcatecî",
"giz": "gizigayiya başûr",
"baa": "babatanayî",
"akm": "aka-bo",
"wiy": "wiyotî",
"tnt": "tontemboanî",
"uta": "otankî",
"nhc": "nahwatliya tabasco",
"mph": "maungî",
"led": "lenduyî",
"kiz": "kisiyî",
"dva": "duauyî",
"bvr": "burarrayî",
"yig": "wusa nasuyî",
"neb": "tourayî",
"shv": "şehrî",
"nnm": "namiayî",
"nai-wji": "jicaqueyiya rojavayî",
"gve": "duwetî",
"yln": "buyangiya langnî",
"blq": "baluan-pam",
"jiv": "şuarî",
"quv": "sakapultekoyî",
"ynk": "naukanskî",
"mgy": "mbungayî",
"kpx": "koiariyiya çiyayî",
"ktz": "juǀ'hoanî",
"ofu": "efutopî",
"wes": "cameroon pidginî",
"dba": "bangi meyî",
"aab": "alumu-tesuyî",
"bkj": "pande",
"ndg": "ndengerekoyî",
"bbo": "konabereyî",
"zka": "kaimbulawayî",
"hgm": "haiǁomî",
"alv-ama": "amasî",
"ttm": "tutçoneyiya bakurî",
"nen": "nengoneyî",
"zmf": "mfinuyî",
"ruf": "luguruyî",
"kfq": "korkuyî",
"tmd": "haruaî",
"eot": "eotileyî",
"sem-amm": "ammoniteyî",
"tdk": "tambasî",
"sba": "ngambayî",
"lue": "luvaleyî",
"khq": "koyra çiiniyî",
"doc": "kamiya bakurî",
"sai-cul": "cullî",
"ano": "andoque",
"yww": "yawarawargayî",
"uji": "tanjijilî",
"ypz": "phuzayî",
"nsq": "miwokiya sierraya bakurî",
"sgb": "mag-ançî aytayî",
"ish": "esanî",
"aoi": "anîndîlyakwa",
"uri": "urimî",
"yer": "tarokî",
"shb": "ninamî",
"kpj": "karajayî",
"hoz": "hozoyî",
"twm": "tawang monpayî",
"mqo": "modoleyî",
"meo": "malayiya kedah",
"bbv": "karnaî",
"agl": "fembeyî",
"ctg": "çittagonianî",
"tkq": "teeyî",
"wmd": "mamaindeyî",
"kjn": "kunjenî",
"kmg": "kâteyî",
"bqq": "biritaiyî",
"aai": "arîfama-mînîafîayî",
"swj": "sirayî",
"puw": "puluwatî",
"rin": "nunguyî",
"bdo": "moromî",
"khj": "kuturmiyî",
"fvr": "furî",
"dbq": "dabayî",
"blr": "blang",
"mfi": "wandalayî",
"xsl": "slaveyiya başûr",
"pww": "pwoyiya bakurî",
"knp": "kwanjayî",
"gbi": "galelayî",
"bqc": "bokoyî",
"zpr": "zapotekiya santiago xanica",
"sai-tim": "timoteyî",
"rki": "rakhineyî",
"ogb": "ogbiayî",
"mpv": "mungkipî",
"ker": "kerayî",
"iqu": "îquitoyî",
"gou": "gavarî",
"bvf": "boorî",
"tmb": "avavayî",
"was": "waşoyî",
"tkp": "tîkopyayî",
"reb": "rembongî",
"ogo": "khanayî",
"diu": "gcirikuyî",
"orw": "oro wînî",
"nlx": "nahalî",
"vme": "maselayiya rojhilat",
"ltn": "latundê",
"bvx": "baboleyî",
"aci": "aka-karî",
"rug": "rovyanayî",
"kqs": "kissiya bakurî",
"dmu": "dubuyî",
"bwr": "burayî",
"bkc": "baka",
"akf": "akpayî",
"wut": "wutungî",
"she": "şekoyî",
"pma": "paamayî",
"mgi": "jilî",
"gvl": "gulayî",
"dyy": "dyaabugayî",
"aiy": "aliyî",
"xin": "xincayî",
"skf": "sakirabiayî",
"zmp": "mbuunî",
"bex": "jûr modoyî",
"mea": "menkayî",
"kfc": "konda-dorayî",
"kbw": "kaîepî",
"cto": "embera-catioyî",
"cam": "cemuhî",
"bae": "baré",
"tce": "tutçoneyiya başûrî",
"nfu": "mfumteyî",
"lcq": "luhuyî",
"oco": "korniya kevn",
"ktg": "kalkatunguyî",
"sja": "epenayî",
"col": "columbia-wenatçiyî",
"alx": "amol",
"wca": "yanomamî",
"xxt": "tamborayî",
"auk": "heyo",
"cuo": "cumanagotoyî",
"sai-and": "andoqueroyî",
"yva": "yawayî",
"due": "umiray dumaget agtayî",
"kml": "tanudan kalingayî",
"ptr": "piamatsinayî",
"blx": "mag-îndî ayta",
"gcl": "kreyoliya îngilîzî ya grenadî",
"ese": "ese ejjayî",
"uvh": "urî",
"nsm": "semayî",
"nin": "ninzoyî",
"hra": "hrangkholî",
"nai-taw": "tawasayî",
"sbi": "setî",
"mvq": "moereyî",
"mqg": "malayiya kota bangun kutai",
"uwa": "kuku-uwanhî",
"iow": "çiwereyî",
"bid": "bidiyoyî",
"yuk": "yukî",
"teh": "tehuelçeyî",
"mkc": "siliputî",
"zle-ono": "novgorodiya kevn",
"wmh": "waima'ayî",
"tio": "teopî",
"yae": "pumeyî",
"mqn": "moroneneyî",
"zma": "mandayî (Awistralya)",
"kdc": "kutuyî",
"kyt": "kayagarî",
"mps": "dadibî",
"byn": "blinî",
"cns": "asmatiya navendî",
"utp": "abayî",
"zpc": "zapotekiya çoapan",
"den": "slaveyî",
"pwo": "pwoyiya rojavayî",
"mub": "mubî",
"mev": "manoyî",
"bij": "kwankayî",
"kyo": "kelonî",
"inb": "îngayî",
"aph": "athpare",
"zas": "zapotekiya santo domingo albarradas",
"ral": "ralteyî",
"irn": "îrantxeyî",
"dge": "degenanî",
"boa": "borayî",
"adj": "adyukruyî",
"zal": "zauzouyî",
"wax": "watamî",
"tca": "tîkunayî",
"agv": "remontado agta",
"omg": "omaguayî",
"xru": "marriammuyî",
"khn": "khandeşiyî",
"gji": "gejiyî",
"ayd": "ayabadhu",
"zmb": "zimbayî",
"toj": "tojolabalî",
"syk": "sukurî",
"bnf": "masiwang",
"glw": "glavdayî",
"bav": "babungoyî",
"akx": "aka-kede",
"ots": "otomiya estado de meksîka",
"mjj": "mawakî",
"leh": "lenjeyî",
"kss": "kissiyiya başûrî",
"kbz": "duhwayî",
"sth": "şeltayî",
"myf": "bambassî",
"ald": "alladînî",
"ego": "eggonî",
"cbu": "candoşi-şaprayî",
"tmc": "tumakî",
"pgs": "pangsengî",
"ndz": "ndogoyî",
"knd": "kondayî",
"haj": "hajongî",
"cmi": "embera-çamiyî",
"mlp": "bargamî",
"yat": "yambetayî",
"bsg": "başkardiyî",
"pek": "pençalî",
"lwo": "luwoyî",
"kpk": "kpanî",
"kdx": "kamî",
"cug": "cungî",
"anx": "andra-hus",
"sey": "secoyayî",
"pio": "piapocoyî",
"jgo": "ngombayî",
"miy": "mixteciya ayutla",
"gyn": "kreyoliya îngilîzî ya guyanî",
"hoa": "hoavayî",
"amx": "anmatyerre",
"tdm": "tarumayî",
"sza": "semelayî",
"pit": "pitta-pittayî",
"nsz": "nisenanî",
"mis-mmd": "mîmiya decorseyî",
"mky": "makianiya rojhilat",
"kdj": "karamojongî",
"hre": "hreyî",
"bie": "bepourî",
"ena": "apaliyî",
"vgr": "vaghrî",
"sze": "sezeyî",
"not": "nomatsiguengayî",
"mif": "mofu-gudurî",
"mfp": "malayiya makassar",
"kul": "kulereyî",
"huo": "huyî",
"biu": "biete",
"twe": "teiwayî",
"stv": "silt'eyî",
"mqj": "mamasayî",
"kug": "kupayî",
"chw": "çuaboyî",
"zkr": "zakhringî",
"waw": "waiwaî",
"ntp": "tepehuaniya bakurî",
"pmi": "pumiya bakurî",
"hux": "nüpode huitotoyî",
"mor": "moroyî",
"mha": "mandayî (Hindistan)",
"thd": "kuuk thaayorreyî",
"dgz": "dagayî",
"mae": "bo-rukulî",
"sjg": "assangorî",
"zpg": "zapotekiya guevea de humboldt",
"tcz": "thado çinî",
"nyv": "nyulnyulî",
"aso": "dano",
"bld": "bolango",
"snk": "soninkeyî",
"sai-mar": "maratinoyî",
"laf": "lafofayî",
"krk": "kerekî",
"gyl": "gayilî",
"ksr": "borongî",
"avi": "avîkam",
"wah": "watubelayî",
"tpl": "tlacoapa me'phaayî",
"mfr": "marrithiyelî",
"khr": "khariayî",
"giq": "gelaoyiya hêşîn",
"aye": "ayere",
"owl": "weylsiya kevn",
"zsu": "sukurumî",
"nhk": "nahwatliya cosoleacaque",
"law": "laujeyî",
"izr": "îzereyî",
"goi": "gobasiyî",
"wog": "wogamusinî",
"ttu": "torauyî",
"dts": "toro so dogonî",
"mcw": "mawayî",
"azc-ktn": "kitanemukî",
"ddj": "jaruyî",
"dma": "dumayî",
"bkh": "bakoko",
"aqz": "akuntsu",
"pdo": "padoeyî",
"nnb": "nandeyî",
"dzl": "dzalayî",
"bax": "bamumî",
"xiy": "xipayayî",
"tct": "t'enî",
"lht": "lo-togayî",
"kkk": "kokotayî",
"lot": "lotukoyî",
"tdc": "embera-tadó",
"bjc": "barijî",
"aew": "ambakîç",
"tkm": "takelmayî",
"sbp": "sanguyî (Tanzanya)",
"sai-ptg": "patagónî",
"lgk": "neververî",
"ybj": "haşayî",
"amg": "amurdag",
"yns": "yansî",
"udu": "udukî",
"mwm": "sarî",
"ums": "pendauyî",
"wii": "minidienî",
"pbn": "kpasamî",
"cuq": "cunî",
"bbd": "bauyî",
"aty": "aneityum",
"ngc": "ngombeyî (Kongo)",
"kxo": "kanoeyî",
"ags": "esîmbî",
"bxb": "belanda borî",
"urn": "uruangnirinî",
"mis-mmn": "mîmiya naçtigalî",
"hru": "hrusoyî",
"apt": "apatanî",
"yon": "yongkomî",
"vag": "vaglayî",
"vkl": "kulisusuyî",
"kxh": "karoyî",
"jab": "hyamî",
"smg": "simbalî",
"asj": "nsarî",
"knk": "kurankoyî",
"kaf": "katsoyî",
"yml": "îamaleleyî",
"brt": "bitareyî",
"bao": "waîmaha",
"tla": "tepehuaniya başûr-rojavayî",
"pmj": "pumiya başûrî",
"nuf": "nusuyî",
"mrl": "mortlockeseyî",
"man": "mandingoyî",
"ign": "îgnacianoyî",
"bzn": "boanoyî (Maluku)",
"xss": "assanî",
"wne": "wanecî",
"thf": "thangmî",
"kjb": "q'anjob'alî",
"sai-muc": "mucuçî",
"msw": "mansoankayî",
"kem": "kemakî",
"bnp": "bolayî",
"aqm": "atohwaim",
"zat": "zapotekiya tabaa",
"sov": "sonsorolî",
"lhn": "lahananî",
"kjq": "keresiya rojavayî",
"dei": "demisayî",
"kwi": "awa-cuaiquerî",
"aez": "aekayî",
"zay": "zayse-zergullayî",
"una": "watutiya bakur",
"ctl": "tlacoatzintepec çinantecî",
"squ": "squamîşî",
"omb": "ombayî",
"sur": "mwaghavulî",
"umc": "marrusînî",
"lbn": "lametî",
"phi-din": "dinapigue agtayî",
"buw": "bubiyî",
"ahn": "ahàn",
"zrn": "zirenkelî",
"srg": "sulodî",
"ora": "orohayî",
"mtn": "matagalpayî",
"kco": "kinalaknayî",
"hmd": "a-hmaoyî",
"woc": "wogeoyî",
"tqr": "toronayî",
"rbb": "rumaî palaungî",
"ott": "otomiya temoaya",
"nhi": "nahwatliya zacatlan-ahuacatlan-tepetzintla",
"mgk": "mawesî",
"dus": "dumiyî",
"bzu": "burmesoyî",
"bbu": "bakulungî",
"trn": "trinitarioyî",
"sdp": "şerdukpenî",
"sbv": "sabineyî",
"sai-jrj": "jirajirayî",
"gvs": "gumawanayî",
"dnn": "dzuunî",
"tte": "bwanabwanayî",
"bcf": "bamuyî",
"xir": "xiriânayî",
"two": "tswapongî",
"sai-tab": "tabancaleyî",
"lgq": "logbayî",
"klm": "kolomî",
"ngs": "gvokoyî",
"eka": "ekajukî",
"dbw": "bankan tey dogonî",
"aly": "alyawarr",
"yad": "yaguayî",
"ndp": "ndoyî",
"mcr": "menyayî",
"xon": "konkombayî",
"kka": "kakandayî",
"hao": "haköyî",
"ckl": "cibakî",
"jbk": "barikewayî",
"abc": "ambala ayta",
"yaa": "yaminahuayî",
"sny": "saniyo-hiyeweyî",
"mmc": "miçoacan mazahuayî",
"xkq": "koronî",
"had": "hatamî",
"sai-cop": "copallenî",
"swy": "saruayî",
"nid": "ngandî",
"mhi": "ma'dî",
"cpo": "kpeeyî",
"anz": "anem",
"unz": "unde kailî",
"sai-tpr": "taparitayî",
"sed": "sedangî",
"fpe": "piçinglisî",
"mxy": "mixteciya noçixtlana başûr-rojhilatî",
"bfz": "mahasu paharî",
"sai-esm": "esmeraldayî",
"urv": "uruavayî",
"seh": "senayî",
"spx": "pîkeneyiya başûr",
"cag": "nivacleyî",
"zkk": "karankawayî",
"bkl": "berik",
"yut": "yopnoyî",
"vai": "vaî",
"slw": "sialumî",
"noj": "nonuyayî",
"caf": "karrieriya başûrî",
"fag": "finonganî",
"ibh": "bihî",
"awt": "araweté",
"tyx": "teke-tyeeyî",
"mog": "mongondowî",
"knt": "katukinayî",
"bwm": "biwatî",
"apr": "arop-lokep",
"atr": "waîmîrî-atroarî",
"mtt": "motayî",
"pym": "fyamî",
"dlk": "dahalikî",
"bzl": "boanoyî (sulawesî)",
"abp": "abenlen ayta",
"zaw": "zapotekiya mitla",
"svm": "slavomolisanoyî",
"zpz": "zapotekiya texmelucan",
"tit": "tiniguayî",
"rax": "rangî",
"asx": "muratayak",
"mvr": "marauyî",
"lha": "lahayî (Viyetnam)",
"irh": "îrarûtûyî",
"sai-gay": "gayónî",
"awi": "aekyom",
"mcy": "watutiya başûr",
"tpt": "tlaçiçilco tepehuayî",
"sto": "stoneyî",
"rea": "rerauyî",
"aom": "ömie",
"tlx": "khehekî",
"mrx": "dineorî",
"oro": "orokoloyî",
"acl": "akar-baleyî",
"wbw": "woî",
"otn": "otomiya tenango",
"gia": "kitjayî",
"ats": "gros ventre",
"tri": "trió",
"zmz": "mbandjayî",
"yzg": "e'ma buyangî",
"bwa": "bwatûyî",
"bcw": "banayî",
"ywt": "xişanba laloyî",
"tsc": "tswayî",
"gmw-tsx": "saksoniya transylvanyayê",
"fap": "palorî",
"nwa": "nawathinehenayî",
"mue": "media lenguayî",
"kcx": "kaçama-ganjuleyî",
"dah": "gwahatikeyî",
"ekg": "ekariyî",
"cbc": "carapanayî",
"bxw": "bankayî",
"ygw": "yagwoiayî",
"tbr": "tumtumî",
"tgw": "tagwana senoufoyî",
"pnr": "panimî",
"njt": "ndyuka-trio pidginî",
"vnk": "lovonoyî",
"kma": "konniyî",
"hal": "halangî",
"awc": "cicipu",
"bch": "bariyayî",
"gfk": "patpatarî",
"ule": "luleyî",
"vkm": "kamakanî",
"xht": "hattîkî",
"btz": "batakiya alas-kluet",
"dti": "ana tinga dogonî",
"yre": "yaoureyî",
"udj": "ujirî",
"tpu": "tampuanî",
"ung": "ngarinyinî",
"xjb": "minjungbalî",
"slz": "ma'yayî",
"kpe": "kpelleyî",
"xla": "kamulayî",
"kpc": "curripacoyî",
"bvz": "bawziyî",
"ets": "yekheeyî",
"bbn": "uneapayî",
"tvw": "sedoayî",
"crp-spp": "pidginiya samoan plantation",
"ngq": "ngoremeyî",
"mil": "mixteciya peñoles",
"sai-chn": "çanayî",
"kvu": "yinbaw karenî",
"txx": "tatanayî",
"lva": "maku'ayî",
"gel": "fakkanciyî",
"bom": "beromî",
"cvn": "valle nacional çinantecî",
"sya": "siangî",
"bql": "bilakurayî",
"arv": "arbore",
"sai-yup": "yupuayî",
"vnp": "vunapuyî",
"sbb": "simboyî",
"gmw-pro": "proto-cermeniya rojava",
"nbn": "kurî",
"wbv": "wajarrî",
"mwh": "moûk-arîakî",
"bwp": "mandobo bawahî",
"fie": "fyerî",
"dal": "dahaloyî",
"aba": "abeyî",
"zpm": "zapotekiya mixtepec",
"wky": "wangkayutyuruyî",
"laq": "qabiaoyî",
"nja": "nzanyî",
"dmo": "kemezungî",
"dro": "daro-matu melanauyî",
"ato": "atong (Kamerun)",
"yif": "açeyî",
"zts": "zapotekiya tilquiapan",
"lah": "lahndayî",
"iry": "îrayayî",
"roa-bbn": "bourbonnais-berriçonî",
"aal": "afadeyî",
"czn": "zenzontepekiya çatîno",
"mpl": "watutiya navîn",
"lmg": "lamogayî",
"nlg": "gelayî",
"ayo": "ayoreoyî",
"zoh": "zoqueyiya çimalapa",
"mtp": "wiçi lhamtes noctenî",
"suv": "sulungî",
"xmt": "matbatî",
"zga": "kingayî",
"jbt": "jabutiyî",
"gof": "gofayî",
"rmt": "domarî",
"bwu": "bulî (Gana)",
"jod": "wojenakayî",
"yyu": "torricelli yauyî",
"sbf": "şaboyî",
"yan": "mayangnayî",
"kii": "kitsaiyî",
"trc": "trîkuyiya copala",
"shx": "şeyî",
"pgu": "paguyî",
"gwa": "mbatoyî",
"dyo": "jola-fonyiyî",
"yas": "gunuyî",
"igb": "ebirayî",
"plz": "paluanî",
"alv-gwa": "gwarayî",
"eke": "ekitî",
"cfd": "carayî",
"abb": "bankonî",
"amc": "amahuaca",
"rhp": "yahangî",
"lmb": "mereiyî",
"koa": "konomalayî",
"hlb": "halbiyî",
"eme": "emerillonî",
"nai-cig": "ciguayoyî",
"ael": "ambeleyî",
"jay": "yan-nhanguyî",
"tak": "talayî",
"mmy": "migaamayî",
"lmd": "lumunî",
"kfp": "korwayî",
"woi": "kamangî",
"akg": "anakalunguyî",
"nai-per": "pericú",
"nrl": "ngarlumayî",
"mew": "maakayî",
"hig": "kamweyî",
"hnd": "hindkoyiya başûrî",
"cuv": "cuvokî",
"ylg": "yeloguyî",
"une": "unemeyî",
"tpj": "tapieteyî",
"sos": "seenkuyî",
"nsh": "ngoşieyî",
"mit": "mixteciya pueblaya başûr",
"mxx": "mahouyî",
"bzk": "kreyoliya nîkaraguayî",
"esq": "esselenî",
"nbc": "çangî",
"anu": "anuak",
"snu": "senggî",
"mpu": "makurapî",
"hbb": "hubayî",
"cbg": "çimilayî",
"wti": "bertayî",
"app": "apma",
"spg": "sianî",
"snf": "noonî",
"mkp": "moikodî",
"viv": "idunayî",
"gem-pro": "proto-cermenî",
"omx": "moniya kevn",
"maw": "mamprulî",
"are": "arrernteya rojavayî",
"zah": "zangwalî",
"ssl": "sisaalayiya rojavayî",
"mpc": "mangarayî",
"qun": "kuynaultî",
"gyd": "kayardildî",
"ikx": "îkî",
"dij": "daiyî",
"bwq": "boboyiya başûrî",
"aum": "asu",
"axb": "abipon",
"zac": "zapotekiya ocotlan",
"xwk": "wangkumarayî",
"nzi": "nzimayî",
"mzv": "manzayî",
"kwe": "kwerbayî",
"sjk": "kemi samî",
"gmv": "gamoyî",
"bkt": "bolokî",
"atw": "atsugewî",
"zpk": "zapotekiya tlacolulita",
"wbe": "waritaî",
"ray": "rapayî",
"ojs": "ojibweyiya severnê",
"zmd": "maridanî",
"kxz": "kerewoyî",
"irr": "îrî",
"gbr": "gbagyiyî",
"bzx": "bozoyiya hainyaxo",
"aya": "awar",
"res": "reşeyî",
"oin": "oneyiya inebu",
"mwe": "mwerayî",
"ite": "îteneyî",
"gaf": "gendeyî",
"gdl": "diraşayî",
"nfd": "ahwayî",
"tlm": "tolomakoyî",
"mgv": "matengoyî",
"gqn": "kinikinaoyî",
"jah": "jah hutî",
"gog": "gogoyî",
"doy": "dompoyî",
"bfj": "bafanjî",
"xwc": "wokkonî",
"tei": "torricellî",
"sha": "şall-zwallî",
"stn": "owayî",
"emy": "mayaniya epigrafîk",
"azd": "durango nahuatliya rojavayî",
"bls": "balaesang",
"dul": "alabat island agtayî",
"xan": "xamtangayî",
"plk": "şinayiya kohistanî",
"sai-sac": "sacatayî",
"apf": "pahanan agta",
"npa": "nar phuyî",
"mfn": "mbembeyiya çema crossê",
"czk": "knaanicî",
"jow": "jowuluyî",
"cbb": "cabiyariyî",
"bpq": "banda malayî",
"sit-tsh": "tşobdunî",
"sbe": "salibayî (Gîneya nû)",
"mfj": "mefeleyî",
"lok": "lokoyî",
"kdu": "kadaruyî",
"ekp": "ekpeyeyî",
"bap": "bantawa",
"ali": "amaimonî",
"ynu": "yahunayî",
"tuf": "tuneboyiya navendî",
"ppu": "paporayî",
"dcr": "negerhollandsî",
"meq": "mereyî",
"nai-knm": "konomihuyî",
"ijn": "kalabariyî",
"hla": "haliayî",
"alm": "amblongî",
"ynn": "yanayî",
"ntj": "ngaanyatjarrayî",
"kbq": "kamanoyî",
"anm": "analî",
"ukg": "ukurigumayî",
"mav": "satere-maweyî",
"mfz": "mabaanî",
"kqq": "krenakî",
"hns": "hindustaniyiya karibî",
"taf": "tapirapeyî",
"mig": "mixteciya san miguel el grande",
"kni": "kanufiyî",
"sai-chp": "çapacurayî",
"cko": "anufoyî",
"wnu": "usanî",
"spe": "sepayî (Gîneya nû)",
"xrw": "karawayî",
"bnt-cmw": "çimwiinî",
"vam": "vanimoyî",
"sjr": "siar-lakî",
"poo": "pomoyiya navendî",
"mlz": "malaynonî",
"xks": "kumbewahayî",
"ldb": "idunî",
"tqb": "tembeyî",
"nai-sin": "sinacantanî",
"nur": "nuguriayî",
"mqx": "mamujuyî",
"unn": "kurnayî",
"bcn": "bîbaalî",
"ttr": "terayî",
"wkd": "moyî",
"kzl": "kayeliyî",
"ntk": "îkomayî",
"gdg": "ga'dangî",
"gbj": "bodo gadabayî",
"abi": "abîdjî",
"zao": "zapotekiya ozolotepec",
"sai-wnm": "wanhamî",
"thp": "thompsonî",
"cwe": "kwereyî",
"xbn": "kenaboî",
"gnq": "ganayî",
"tcc": "datoogayî",
"ztg": "zapotekiya xanaguia",
"zmj": "maridjabinî",
"lak": "lakayî",
"kvr": "kerînçî",
"ggu": "gbanî",
"anv": "denya",
"aof": "bragat",
"awr": "awera",
"zhb": "zhabayî",
"www": "wawayî",
"stb": "subaneniya bakurî",
"ret": "rettayî",
"oon": "öngeyî",
"mlv": "mwotlapî",
"mzr": "marúboyî",
"lag": "langiyî",
"kxc": "khonsoyî",
"itx": "îtikî",
"bja": "budza",
"ayu": "ayuyî",
"tba": "aikanayî",
"txm": "tominî",
"orx": "oroyî",
"nhq": "nahwatliya huaxcaleca",
"mpq": "matisî",
"kfk": "kinnauriyî",
"kzh": "dongolawiyî",
"bck": "bunabayî",
"ksf": "bafiayî"
},
"numberLabels": {
"y": {
"display": "\u003Cabbr title=\"yekjimar\"\u003Ey\u003C/abbr\u003E"
},
"s": {
"display": "\u003Cabbr title=\"yekjimar\"\u003Ey\u003C/abbr\u003E"
},
"d": {
"cat": "dualia tantum",
"display": "\u003Cabbr title=\"hejmar dual\"\u003Edu\u003C/abbr\u003E"
},
"p": {
"cat": "POS pirjimar",
"display": "\u003Cabbr title=\"pirjimar\"\u003Ep\u003C/abbr\u003E"
},
"p+": {
"cat": "POS axlebî pirjimar",
"display": "axlebî pirjimar"
},
"tp": {
"cat": "POS tenê pirjimar",
"display": "tenê pirjimar"
},
"j": {
"cat": "POS jimarbar",
"display": "[[jimarbar]]"
},
"j+": {
"cat": "POS axlebî jimarbar",
"display": "axlebî jimarbar"
},
"j/nj": {
"cat": "POS jimarbar û nejimarbar",
"display": "[[jimarbar]] û [[nejimarbar]]"
},
"nj": {
"cat": "POS nejimarbar",
"display": "[[nejimarbar]]"
},
"nj+": {
"cat": "POS axlebî nejimarbar",
"display": "axlebî [[nejimarbar]]"
},
"hj!": {
"display": "hejmar nepeyitandî ye"
},
"hj?": {
"req": true,
"display": "hejmar hewce ye"
}
}
}
fjfxza3uviun12od0zlryjvmd3wrrdh
MediaWiki:Gadget-test.js
8
1358588
6333716
2026-08-14T19:50:18Z
Bikarhêner
3719
Rûpel bi "mw.loader.load('//ku.wiktionary.org/w/index.php?title=Bikarhêner:Wikihez/Gadget-test/loader.js&action=raw&ctype=text/javascript');" hat çêkirin
6333716
javascript
text/javascript
mw.loader.load('//ku.wiktionary.org/w/index.php?title=Bikarhêner:Wikihez/Gadget-test/loader.js&action=raw&ctype=text/javascript');
lzv8sr2h5cwlrqotqpuw6z9alcw05hy
MediaWiki:Gadget-test
8
1358589
6333723
2026-08-14T20:05:58Z
Wikihez
7344
Rûpel bi "Ji bo ceribadinê hatiye çêkirin, ji kerema xwe eger nizanin çi ye, aktîv nekin!" hat çêkirin
6333723
wikitext
text/x-wiki
Ji bo ceribadinê hatiye çêkirin, ji kerema xwe eger nizanin çi ye, aktîv nekin!
tmobxkhiq67olkewrx1ctei94jjuk4c
Bikarhêner:Wikihez/Gadget-test/util.js
2
1358591
6333751
2026-08-14T22:55:16Z
Wikihez
7344
Rûpel bi "/** * MediaWiki:Gadget-start/util.js * * Generic text and UI helpers for the entry-creation wizard. Nothing in here * knows about the wizard itself — no `steps`, no `refresh()`, no wikitext * assembly — so it can be required from any gadget, not just start.js. * * Split out of start.js on 15 Tebax 2026: that file had grown past 5700 lines * and the searchable-select widget alone was ~300 of them, sitting between * unrelated wizard code. * * Usage (Re..." hat çêkirin
6333751
javascript
text/javascript
/**
* MediaWiki:Gadget-start/util.js
*
* Generic text and UI helpers for the entry-creation wizard. Nothing in here
* knows about the wizard itself — no `steps`, no `refresh()`, no wikitext
* assembly — so it can be required from any gadget, not just start.js.
*
* Split out of start.js on 15 Tebax 2026: that file had grown past 5700 lines
* and the searchable-select widget alone was ~300 of them, sitting between
* unrelated wizard code.
*
* Usage (ResourceLoader package module):
* var util = require("./start/util.js");
* util.initSelects(myContainer);
*/
//<nowiki>
function capitalize(str) {
if (!str) return str;
return str[0].toUpperCase() + str.substr(1);
}
function decapitalize(str) {
if (!str) return str;
return str[0].toLowerCase() + str.substr(1);
}
function escapeRegExp(str) {
return str.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
}
function stripWikilinks(str) {
return str.replace(/\[\[([^\]|]+)(?:\|([^\]]+))?\]\]/g, function (m, target, display) {
return display || target;
});
}
function splitTercimeIzah(mane) {
var m = /^([\s\S]*?)\s*\{\{îzah\|([\s\S]*)\}\}\s*$/.exec(mane || "");
return m ? { tercime: m[1], izah: m[2] } : null;
}
function insertAtCursor(el, text) {
var start = el.selectionStart;
var end = el.selectionEnd;
var val = el.value;
el.value = val.slice(0, start) + text + val.slice(end);
var pos = start + text.length;
el.selectionStart = el.selectionEnd = pos;
}
var FOLD_EXTRA ={
"ı":"i", "ø":"o","đ":"d","ð":"d","ə":"e","ħ":"h","ł":"l","ŋ":"n","ʉ":"u", "ɨ":"i","ʒ":"z","ɛ":"e","ɔ":"o","æ":"ae", "œ":"oe","ß":"ss","þ":"th"
};
function foldDiacritics(str) {
if (str === null || str === undefined) return "";
var s = String(str).toLowerCase();
if (typeof s.normalize === "function") {
// Split "î" into "i" + combining circumflex, then drop the accent.
s = s.normalize("NFD").replace(/[\u0300-\u036f]/g, "");
}
return s.replace(/[^\u0000-\u007f]/g, function (ch) {
return Object.prototype.hasOwnProperty.call(FOLD_EXTRA, ch) ? FOLD_EXTRA[ch] : ch;
});
}
var WIKTKU_RESIZE_STORAGE_PREFIX = "wiktku_resize_height_";
function wiktkuResizeStorageKey(textarea) {
var cls = (textarea.attr("class") || "").trim().replace(/\s+/g, "_");
return WIKTKU_RESIZE_STORAGE_PREFIX + cls;
}
function wiktkuSaveResizeHeight(textarea, height) {
if (!(window.mw && mw.storage)) return;
try {
mw.storage.set(wiktkuResizeStorageKey(textarea), String(Math.round(height)));
} catch (e) { /* localStorage unavailable (private mode, quota, …) — skip caching */ }
}
function wiktkuLoadResizeHeight(textarea) {
if (!(window.mw && mw.storage)) return null;
try {
var v = mw.storage.get(wiktkuResizeStorageKey(textarea));
return v ? parseFloat(v) : null;
} catch (e) {
return null;
}
}
function wiktkuMakeManualResizable(textarea) {
textarea = $(textarea);
if (!textarea.is("textarea") || textarea.hasClass("wiktku-start-narrow")) return;
if (textarea.data("wiktkuResizableDone")) return;
textarea.data("wiktkuResizableDone", true);
textarea.wrap("<div class='wiktku-resize-wrap'></div>");
var grip = $("<div class='wiktku-resize-grip'></div>");
textarea.after(grip);
// Restore a previously chosen height for this kind of field, if any.
var cachedHeight = wiktkuLoadResizeHeight(textarea);
if (cachedHeight) {
var minHeightInit = parseFloat(textarea.css("min-height")) || 0;
textarea.css("height", Math.max(cachedHeight, minHeightInit) + "px");
}
var dragging = false, startY = 0, startHeight = 0;
function onPointerMove(e) {
if (!dragging) return;
var oe = e.originalEvent || e;
var minHeight = parseFloat(textarea.css("min-height")) || 0;
var newHeight = startHeight + (oe.clientY - startY);
textarea.css("height", Math.max(newHeight, minHeight) + "px");
}
function onPointerUp(e) {
if (!dragging) return;
dragging = false;
var oe = e.originalEvent || e;
try { grip[0].releasePointerCapture(oe.pointerId); } catch (err) { /* ignore */ }
$(document).off("pointermove", onPointerMove);
$(document).off("pointerup pointercancel", onPointerUp);
wiktkuSaveResizeHeight(textarea, textarea.outerHeight());
}
grip.on("pointerdown", function (e) {
var oe = e.originalEvent || e;
if (oe.button !== undefined && oe.button !== 0) return; // primary contact only
e.preventDefault();
dragging = true;
startY = oe.clientY;
startHeight = textarea.outerHeight();
try { grip[0].setPointerCapture(oe.pointerId); } catch (err) { /* ignore */ }
$(document).on("pointermove", onPointerMove);
$(document).on("pointerup pointercancel", onPointerUp);
});
}
/** Applies wiktkuMakeManualResizable to every eligible textarea already
* inside `context` (context itself, if it is a textarea, or any of its
* descendants). Used both for the initial form render and, via the
* MutationObserver set up in build(), for textareas added later on
* (new sense blocks, quote-source fields, nimûne rows, …). */
function wiktkuInitManualResize(context) {
var $context = $(context);
var $textareas = $context.is("textarea") ? $context : $context.find("textarea");
$textareas.each(function () {
wiktkuMakeManualResizable(this);
});
}
function wrapNativeSelect(select) {
var wrapper = $("<span class='wiktku-native-select-wrap'></span>");
if (select.prop("multiple")) {
return wrapper.append(select);
}
var placeholder = select.attr("data-placeholder") || "Lê bigere...";
select.hide();
var textInput = $("<input type='search' autocomplete='off'>")
.attr("placeholder", placeholder)
.attr("role", "combobox")
.attr("aria-autocomplete", "list")
.attr("aria-expanded", "false")
.addClass("wiktku-start-narrow wiktku-ac-input");
var resultsList = $("<ul class='wiktku-ac-results' role='listbox'></ul>").hide();
var allOptions = [];
var shown = [];
var activeIndex = -1;
function cacheOptions() {
allOptions = [];
select.find("option").each(function () {
var v = $(this).val();
var text = $(this).text();
// A blank value with no label (most selects' placeholder) is
// never a real choice, so skip it. But a blank value WITH a
// label -- e.g. tplSelect's "— yan jî şablonek hilbijêre —" --
// is a meaningful "clear the selection" choice, so keep it
// searchable/selectable like any other option.
if (!v && !text) return;
// Language options read "Name (code)" -- score the name on its own
// so the trailing code doesn't also count as a name match.
var name = text.replace(/\s*\([^()]*\)\s*$/, "");
allOptions.push({
value: v,
text: text,
disabled: $(this).prop("disabled"),
foldCode: foldDiacritics(v),
foldName: foldDiacritics(name),
foldText: foldDiacritics(text)
});
});
}
cacheOptions();
// True if `q` starts a word inside `name` ("kevn" in "ingiliziya kevn").
function startsWord(name, q) {
var from = 0, at;
while ((at = name.indexOf(q, from)) !== -1) {
if (at === 0 || /[\s\-\u2013\u2014(/,.]/.test(name.charAt(at - 1))) return true;
from = at + 1;
}
return false;
}
// Lower rank = better match.
// a code that *is* the query, or begins with it, always outranks a name
// that merely contains it -- so "ang" lists "Îngilîziya kevn (ang)"
// first instead of burying it among every name containing "ang".
var RANK_NONE = 99;
function rankOption(o, q) {
var code = o.foldCode, name = o.foldName;
if (code === q) return 0; // exact code
if (code.indexOf(q) === 0) return 1; // code prefix
if (name === q) return 2; // exact name
if (name.indexOf(q) === 0) return 3; // name prefix
if (startsWord(name, q)) return 4; // starts a word in the name
if (name.indexOf(q) !== -1) return 5; // name substring
if (code.indexOf(q) !== -1) return 6; // code substring
if (o.foldText.indexOf(q) !== -1) return 7; // anywhere else in the label
return RANK_NONE;
}
function positionList() {
// Position the list above or below depending on viewport space.
var inputRect = textInput[0].getBoundingClientRect();
var viewportH = window.innerHeight;
var spaceBelow = viewportH - inputRect.bottom - 8;
var spaceAbove = inputRect.top - 8;
var maxH = Math.min(224, Math.max(spaceBelow, spaceAbove)); // 224px = 14em
resultsList.css({
"max-height": maxH + "px",
"top": spaceBelow >= spaceAbove ? "100%" : "auto",
"bottom": spaceBelow >= spaceAbove ? "auto" : "100%"
});
}
function closeList() {
resultsList.hide();
textInput.attr("aria-expanded", "false");
activeIndex = -1;
}
function showResults(query) {
var q = foldDiacritics($.trim(query || ""));
resultsList.empty();
activeIndex = -1;
var matched = [];
if (q) {
$.each(allOptions, function (i, o) {
if (o.disabled) return;
var rank = rankOption(o, q);
if (rank !== RANK_NONE) matched.push({ opt: o, rank: rank, i: i });
});
if (!matched.length && q.indexOf(" ") !== -1) {
var tokens = q.split(/\s+/);
$.each(allOptions, function (i, o) {
if (o.disabled) return;
var all = true;
$.each(tokens, function (_, t) {
if (o.foldText.indexOf(t) === -1) { all = false; return false; }
});
if (all) matched.push({ opt: o, rank: 8, i: i });
});
}
matched.sort(function (a, b) {
if (a.rank !== b.rank) return a.rank - b.rank;
// Inside the code tiers the shorter code is the better hit:
// "an" -> "an" before "ang" before "ang-x-...".
if (a.rank <= 1 && a.opt.foldCode.length !== b.opt.foldCode.length) {
return a.opt.foldCode.length - b.opt.foldCode.length;
}
// Otherwise keep the menu's own order (pinned languages first).
return a.i - b.i;
});
} else {
$.each(allOptions, function (i, o) {
if (!o.disabled) matched.push({ opt: o, rank: 0, i: i });
});
}
shown = $.map(matched.slice(0, 50), function (m) { return m.opt; });
if (!shown.length) {
closeList();
return;
}
$.each(shown, function (idx, opt) {
var li = $("<li role='option'></li>")
.text(opt.text)
.attr("data-value", opt.value)
.attr("aria-selected", "false");
// touchend (not touchstart) so a scroll doesn't trigger a select.
var touchMoved = false;
li.on("touchstart", function () {
touchMoved = false;
});
li.on("touchmove", function () {
touchMoved = true;
});
li.on("touchend", function (e) {
if (touchMoved) return; // was a scroll, not a tap
e.preventDefault();
selectOption(opt.value, opt.text);
});
// mousedown (not click) so it beats the input's blur handler.
li.on("mousedown", function (e) {
e.preventDefault();
selectOption(opt.value, opt.text);
});
li.on("mouseenter", function () {
// Hovered items are already in view -- don't scroll the list
// under the mouse, or the shift can trigger the next item's
// mouseenter and cascade into a runaway scroll.
setActive(idx, /* scrollIntoView */ false);
});
resultsList.append(li);
});
positionList();
resultsList.show();
resultsList[0].scrollTop = 0;
textInput.attr("aria-expanded", "true");
}
function setActive(idx, scrollIntoView) {
var items = resultsList.children("li");
if (!items.length) return;
if (idx < 0) idx = items.length - 1;
if (idx >= items.length) idx = 0;
activeIndex = idx;
items.removeClass("wiktku-ac-active").attr("aria-selected", "false");
var li = items.eq(idx).addClass("wiktku-ac-active").attr("aria-selected", "true");
if (scrollIntoView === false) return;
// Keep the cursor visible inside the scrollable list -- only for
// keyboard navigation. A mouse-hovered item is already visible, so
// scrolling here would shift the list under a stationary pointer
// and cascade into further mouseenter events.
var ul = resultsList[0], el = li[0];
if (el.offsetTop < ul.scrollTop) {
ul.scrollTop = el.offsetTop;
} else if (el.offsetTop + el.offsetHeight > ul.scrollTop + ul.clientHeight) {
ul.scrollTop = el.offsetTop + el.offsetHeight - ul.clientHeight;
}
}
/** Puts the currently selected option's label back in the text box. */
function syncInputToSelect() {
var cur = select.val();
var match = null;
if (cur) {
$.each(allOptions, function (_, o) {
if (o.value === cur) { match = o; return false; }
});
}
textInput.val(match ? match.text : "");
}
function selectOption(value, text) {
textInput.val(text);
select.val(value);
closeList();
select.trigger("change");
}
textInput.on("input", function () {
showResults($(this).val());
});
textInput.on("focus", function () {
// Select the current label so typing replaces it, and open the full list
this.select();
showResults("");
});
textInput.on("click", function () {
if (!resultsList.is(":visible")) showResults($(this).val());
});
textInput.on("keydown", function (e) {
var open = resultsList.is(":visible");
switch (e.which) {
case 40: // Down
e.preventDefault();
if (!open) { showResults($(this).val()); setActive(0); }
else setActive(activeIndex + 1);
break;
case 38: // Up
e.preventDefault();
if (!open) { showResults($(this).val()); setActive(-1); }
else setActive(activeIndex - 1);
break;
case 13: // Enter -- must never submit the form while the list is open
if (open) {
e.preventDefault();
if (activeIndex >= 0 && shown[activeIndex]) {
selectOption(shown[activeIndex].value, shown[activeIndex].text);
} else if (shown.length === 1) {
selectOption(shown[0].value, shown[0].text);
}
}
break;
case 27: // Esc -- abandon the search, restore the real value
if (open) {
e.preventDefault();
closeList();
syncInputToSelect();
}
break;
case 9: // Tab -- commit the highlighted row on the way out
if (open && activeIndex >= 0 && shown[activeIndex]) {
selectOption(shown[activeIndex].value, shown[activeIndex].text);
}
closeList();
break;
}
});
textInput.on("blur", function () {
// Short delay so a touchstart/mousedown on a result fires first.
setTimeout(function () {
closeList();
// Half-typed text that never became a selection would otherwise sit
// in the box looking like a choice -- put the real value back.
syncInputToSelect();
}, 200);
});
// Re-caches the option list. Fired after the full language list loads, after
// options are enabled/disabled, and after programmatic .val() changes.
select.on("wiktku:refresh", function () {
cacheOptions();
syncInputToSelect();
if (resultsList.is(":visible")) showResults(textInput.val());
});
wrapper.append(textInput).append(resultsList).append(select);
return wrapper;
}
/**
* Gives every plain <select> under `root` the searchable picker. Selects
* marked .wiktku-plain-select opt out, and the call is idempotent, so it is
* safe to re-run after new rows or sense blocks are inserted.
*/
function initSelects(root) {
$(root).find("select").addBack("select").not(".wiktku-plain-select").each(function () {
var sel = $(this);
if (sel.prop("multiple")) return;
if (sel.closest(".wiktku-native-select-wrap").length) return; // already wrapped
var marker = $("<span></span>").insertBefore(sel);
marker.replaceWith(wrapNativeSelect(sel));
});
}
module.exports = {
capitalize: capitalize,
decapitalize: decapitalize,
escapeRegExp: escapeRegExp,
stripWikilinks: stripWikilinks,
insertAtCursor: insertAtCursor,
foldDiacritics: foldDiacritics,
wrapNativeSelect: wrapNativeSelect,
initSelects: initSelects,
makeManualResizable: wiktkuMakeManualResizable,
initManualResize: wiktkuInitManualResize
};
//</nowiki>
093w8199mf28ab8c249dfvs6jyki3z2
6333761
6333751
2026-08-14T23:33:55Z
Wikihez
7344
6333761
javascript
text/javascript
/**
* MediaWiki:Gadget-start/util.js
*
* Generic text and UI helpers for the entry-creation wizard. Nothing in here
* knows about the wizard itself — no `steps`, no `refresh()`, no wikitext
* assembly — so it can be required from any gadget, not just start.js.
*
* Split out of start.js on 15 Tebax 2026: that file had grown past 5700 lines
* and the searchable-select widget alone was ~300 of them, sitting between
* unrelated wizard code.
*
* Usage (ResourceLoader package module):
* var util = require("./start/util.js");
* util.initSelects(myContainer);
*/
//<nowiki>
function capitalize(str) {
if (!str) return str;
return str[0].toUpperCase() + str.substr(1);
}
function decapitalize(str) {
if (!str) return str;
return str[0].toLowerCase() + str.substr(1);
}
function escapeRegExp(str) {
return str.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
}
function stripWikilinks(str) {
return str.replace(/\[\[([^\]|]+)(?:\|([^\]]+))?\]\]/g, function (m, target, display) {
return display || target;
});
}
function splitTercimeIzah(mane) {
var m = /^([\s\S]*?)\s*\{\{îzah\|([\s\S]*)\}\}\s*$/.exec(mane || "");
return m ? { tercime: m[1], izah: m[2] } : null;
}
function insertAtCursor(el, text) {
var start = el.selectionStart;
var end = el.selectionEnd;
var val = el.value;
el.value = val.slice(0, start) + text + val.slice(end);
var pos = start + text.length;
el.selectionStart = el.selectionEnd = pos;
}
var FOLD_EXTRA ={
"ı":"i", "ø":"o","đ":"d","ð":"d","ə":"e","ħ":"h","ł":"l","ŋ":"n","ʉ":"u", "ɨ":"i","ʒ":"z","ɛ":"e","ɔ":"o","æ":"ae", "œ":"oe","ß":"ss","þ":"th"
};
function foldDiacritics(str) {
if (str === null || str === undefined) return "";
var s = String(str).toLowerCase();
if (typeof s.normalize === "function") {
// Split "î" into "i" + combining circumflex, then drop the accent.
s = s.normalize("NFD").replace(/[\u0300-\u036f]/g, "");
}
return s.replace(/[^\u0000-\u007f]/g, function (ch) {
return Object.prototype.hasOwnProperty.call(FOLD_EXTRA, ch) ? FOLD_EXTRA[ch] : ch;
});
}
var WIKTKU_RESIZE_STORAGE_PREFIX = "wiktku_resize_height_";
function wiktkuResizeStorageKey(textarea) {
var cls = (textarea.attr("class") || "").trim().replace(/\s+/g, "_");
return WIKTKU_RESIZE_STORAGE_PREFIX + cls;
}
function wiktkuSaveResizeHeight(textarea, height) {
if (!(window.mw && mw.storage)) return;
try {
mw.storage.set(wiktkuResizeStorageKey(textarea), String(Math.round(height)));
} catch (e) { /* localStorage unavailable (private mode, quota, …) — skip caching */ }
}
function wiktkuLoadResizeHeight(textarea) {
if (!(window.mw && mw.storage)) return null;
try {
var v = mw.storage.get(wiktkuResizeStorageKey(textarea));
return v ? parseFloat(v) : null;
} catch (e) {
return null;
}
}
function wiktkuMakeManualResizable(textarea) {
textarea = $(textarea);
if (!textarea.is("textarea") || textarea.hasClass("wiktku-start-narrow")) return;
if (textarea.data("wiktkuResizableDone")) return;
textarea.data("wiktkuResizableDone", true);
textarea.wrap("<div class='wiktku-resize-wrap'></div>");
var grip = $("<div class='wiktku-resize-grip'></div>");
textarea.after(grip);
// Restore a previously chosen height for this kind of field, if any.
var cachedHeight = wiktkuLoadResizeHeight(textarea);
if (cachedHeight) {
var minHeightInit = parseFloat(textarea.css("min-height")) || 0;
textarea.css("height", Math.max(cachedHeight, minHeightInit) + "px");
}
var dragging = false, startY = 0, startHeight = 0;
function onPointerMove(e) {
if (!dragging) return;
var oe = e.originalEvent || e;
var minHeight = parseFloat(textarea.css("min-height")) || 0;
var newHeight = startHeight + (oe.clientY - startY);
textarea.css("height", Math.max(newHeight, minHeight) + "px");
}
function onPointerUp(e) {
if (!dragging) return;
dragging = false;
var oe = e.originalEvent || e;
try { grip[0].releasePointerCapture(oe.pointerId); } catch (err) { /* ignore */ }
$(document).off("pointermove", onPointerMove);
$(document).off("pointerup pointercancel", onPointerUp);
wiktkuSaveResizeHeight(textarea, textarea.outerHeight());
}
grip.on("pointerdown", function (e) {
var oe = e.originalEvent || e;
if (oe.button !== undefined && oe.button !== 0) return; // primary contact only
e.preventDefault();
dragging = true;
startY = oe.clientY;
startHeight = textarea.outerHeight();
try { grip[0].setPointerCapture(oe.pointerId); } catch (err) { /* ignore */ }
$(document).on("pointermove", onPointerMove);
$(document).on("pointerup pointercancel", onPointerUp);
});
}
/** Applies wiktkuMakeManualResizable to every eligible textarea already
* inside `context` (context itself, if it is a textarea, or any of its
* descendants). Used both for the initial form render and, via the
* MutationObserver set up in build(), for textareas added later on
* (new sense blocks, quote-source fields, nimûne rows, …). */
function wiktkuInitManualResize(context) {
var $context = $(context);
var $textareas = $context.is("textarea") ? $context : $context.find("textarea");
$textareas.each(function () {
wiktkuMakeManualResizable(this);
});
}
function wrapNativeSelect(select) {
var wrapper = $("<span class='wiktku-native-select-wrap'></span>");
if (select.prop("multiple")) {
return wrapper.append(select);
}
var placeholder = select.attr("data-placeholder") || "Lê bigere...";
select.hide();
var textInput = $("<input type='search' autocomplete='off'>")
.attr("placeholder", placeholder)
.attr("role", "combobox")
.attr("aria-autocomplete", "list")
.attr("aria-expanded", "false")
.addClass("wiktku-start-narrow wiktku-ac-input");
var resultsList = $("<ul class='wiktku-ac-results' role='listbox'></ul>").hide();
var allOptions = [];
var shown = [];
var activeIndex = -1;
function cacheOptions() {
allOptions = [];
select.find("option").each(function () {
var v = $(this).val();
var text = $(this).text();
// A blank value with no label (most selects' placeholder) is
// never a real choice, so skip it. But a blank value WITH a
// label -- e.g. tplSelect's "— yan jî şablonek hilbijêre —" --
// is a meaningful "clear the selection" choice, so keep it
// searchable/selectable like any other option.
if (!v && !text) return;
// Language options read "Name (code)" -- score the name on its own
// so the trailing code doesn't also count as a name match.
var name = text.replace(/\s*\([^()]*\)\s*$/, "");
allOptions.push({
value: v,
text: text,
disabled: $(this).prop("disabled"),
foldCode: foldDiacritics(v),
foldName: foldDiacritics(name),
foldText: foldDiacritics(text)
});
});
}
cacheOptions();
// True if `q` starts a word inside `name` ("kevn" in "ingiliziya kevn").
function startsWord(name, q) {
var from = 0, at;
while ((at = name.indexOf(q, from)) !== -1) {
if (at === 0 || /[\s\-\u2013\u2014(/,.]/.test(name.charAt(at - 1))) return true;
from = at + 1;
}
return false;
}
// Lower rank = better match.
// a code that *is* the query, or begins with it, always outranks a name
// that merely contains it -- so "ang" lists "Îngilîziya kevn (ang)"
// first instead of burying it among every name containing "ang".
var RANK_NONE = 99;
function rankOption(o, q) {
var code = o.foldCode, name = o.foldName;
if (code === q) return 0; // exact code
if (code.indexOf(q) === 0) return 1; // code prefix
if (name === q) return 2; // exact name
if (name.indexOf(q) === 0) return 3; // name prefix
if (startsWord(name, q)) return 4; // starts a word in the name
if (name.indexOf(q) !== -1) return 5; // name substring
if (code.indexOf(q) !== -1) return 6; // code substring
if (o.foldText.indexOf(q) !== -1) return 7; // anywhere else in the label
return RANK_NONE;
}
function positionList() {
// Position the list above or below depending on viewport space.
var inputRect = textInput[0].getBoundingClientRect();
var viewportH = window.innerHeight;
var spaceBelow = viewportH - inputRect.bottom - 8;
var spaceAbove = inputRect.top - 8;
var maxH = Math.min(224, Math.max(spaceBelow, spaceAbove)); // 224px = 14em
resultsList.css({
"max-height": maxH + "px",
"top": spaceBelow >= spaceAbove ? "100%" : "auto",
"bottom": spaceBelow >= spaceAbove ? "auto" : "100%"
});
}
function closeList() {
resultsList.hide();
textInput.attr("aria-expanded", "false");
activeIndex = -1;
}
function showResults(query) {
var q = foldDiacritics($.trim(query || ""));
resultsList.empty();
activeIndex = -1;
var matched = [];
if (q) {
$.each(allOptions, function (i, o) {
if (o.disabled) return;
var rank = rankOption(o, q);
if (rank !== RANK_NONE) matched.push({ opt: o, rank: rank, i: i });
});
if (!matched.length && q.indexOf(" ") !== -1) {
var tokens = q.split(/\s+/);
$.each(allOptions, function (i, o) {
if (o.disabled) return;
var all = true;
$.each(tokens, function (_, t) {
if (o.foldText.indexOf(t) === -1) { all = false; return false; }
});
if (all) matched.push({ opt: o, rank: 8, i: i });
});
}
matched.sort(function (a, b) {
if (a.rank !== b.rank) return a.rank - b.rank;
// Inside the code tiers the shorter code is the better hit:
// "an" -> "an" before "ang" before "ang-x-...".
if (a.rank <= 1 && a.opt.foldCode.length !== b.opt.foldCode.length) {
return a.opt.foldCode.length - b.opt.foldCode.length;
}
// Otherwise keep the menu's own order (pinned languages first).
return a.i - b.i;
});
} else {
$.each(allOptions, function (i, o) {
if (!o.disabled) matched.push({ opt: o, rank: 0, i: i });
});
}
shown = $.map(matched.slice(0, 50), function (m) { return m.opt; });
if (!shown.length) {
closeList();
return;
}
$.each(shown, function (idx, opt) {
var li = $("<li role='option'></li>")
.text(opt.text)
.attr("data-value", opt.value)
.attr("aria-selected", "false");
// touchend (not touchstart) so a scroll doesn't trigger a select.
var touchMoved = false;
li.on("touchstart", function () {
touchMoved = false;
});
li.on("touchmove", function () {
touchMoved = true;
});
li.on("touchend", function (e) {
if (touchMoved) return; // was a scroll, not a tap
e.preventDefault();
selectOption(opt.value, opt.text);
});
// mousedown (not click) so it beats the input's blur handler.
li.on("mousedown", function (e) {
e.preventDefault();
selectOption(opt.value, opt.text);
});
li.on("mouseenter", function () {
// Hovered items are already in view -- don't scroll the list
// under the mouse, or the shift can trigger the next item's
// mouseenter and cascade into a runaway scroll.
setActive(idx, /* scrollIntoView */ false);
});
resultsList.append(li);
});
positionList();
resultsList.show();
resultsList[0].scrollTop = 0;
textInput.attr("aria-expanded", "true");
}
function setActive(idx, scrollIntoView) {
var items = resultsList.children("li");
if (!items.length) return;
if (idx < 0) idx = items.length - 1;
if (idx >= items.length) idx = 0;
activeIndex = idx;
items.removeClass("wiktku-ac-active").attr("aria-selected", "false");
var li = items.eq(idx).addClass("wiktku-ac-active").attr("aria-selected", "true");
if (scrollIntoView === false) return;
// Keep the cursor visible inside the scrollable list -- only for
// keyboard navigation. A mouse-hovered item is already visible, so
// scrolling here would shift the list under a stationary pointer
// and cascade into further mouseenter events.
var ul = resultsList[0], el = li[0];
if (el.offsetTop < ul.scrollTop) {
ul.scrollTop = el.offsetTop;
} else if (el.offsetTop + el.offsetHeight > ul.scrollTop + ul.clientHeight) {
ul.scrollTop = el.offsetTop + el.offsetHeight - ul.clientHeight;
}
}
/** Puts the currently selected option's label back in the text box. */
function syncInputToSelect() {
var cur = select.val();
var match = null;
if (cur) {
$.each(allOptions, function (_, o) {
if (o.value === cur) { match = o; return false; }
});
}
textInput.val(match ? match.text : "");
}
function selectOption(value, text) {
textInput.val(text);
select.val(value);
closeList();
select.trigger("change");
}
textInput.on("input", function () {
showResults($(this).val());
});
textInput.on("focus", function () {
// Select the current label so typing replaces it, and open the full list
this.select();
showResults("");
});
textInput.on("click", function () {
if (!resultsList.is(":visible")) showResults($(this).val());
});
textInput.on("keydown", function (e) {
var open = resultsList.is(":visible");
switch (e.which) {
case 40: // Down
e.preventDefault();
if (!open) { showResults($(this).val()); setActive(0); }
else setActive(activeIndex + 1);
break;
case 38: // Up
e.preventDefault();
if (!open) { showResults($(this).val()); setActive(-1); }
else setActive(activeIndex - 1);
break;
case 13: // Enter -- must never submit the form while the list is open
if (open) {
e.preventDefault();
if (activeIndex >= 0 && shown[activeIndex]) {
selectOption(shown[activeIndex].value, shown[activeIndex].text);
} else if (shown.length === 1) {
selectOption(shown[0].value, shown[0].text);
}
}
break;
case 27: // Esc -- abandon the search, restore the real value
if (open) {
e.preventDefault();
closeList();
syncInputToSelect();
}
break;
case 9: // Tab -- commit the highlighted row on the way out
if (open && activeIndex >= 0 && shown[activeIndex]) {
selectOption(shown[activeIndex].value, shown[activeIndex].text);
}
closeList();
break;
}
});
textInput.on("blur", function () {
// Short delay so a touchstart/mousedown on a result fires first.
setTimeout(function () {
closeList();
// Half-typed text that never became a selection would otherwise sit
// in the box looking like a choice -- put the real value back.
syncInputToSelect();
}, 200);
});
// Re-caches the option list. Fired after the full language list loads, after
// options are enabled/disabled, and after programmatic .val() changes.
select.on("wiktku:refresh", function () {
cacheOptions();
syncInputToSelect();
if (resultsList.is(":visible")) showResults(textInput.val());
});
wrapper.append(textInput).append(resultsList).append(select);
return wrapper;
}
/**
* Gives every plain <select> under `root` the searchable picker. Selects
* marked .wiktku-plain-select opt out, and the call is idempotent, so it is
* safe to re-run after new rows or sense blocks are inserted.
*/
function initSelects(root) {
$(root).find("select").addBack("select").not(".wiktku-plain-select").each(function () {
var sel = $(this);
if (sel.prop("multiple")) return;
if (sel.closest(".wiktku-native-select-wrap").length) return; // already wrapped
var marker = $("<span></span>").insertBefore(sel);
marker.replaceWith(wrapNativeSelect(sel));
});
}
module.exports = {
capitalize: capitalize,
decapitalize: decapitalize,
escapeRegExp: escapeRegExp,
stripWikilinks: stripWikilinks,
splitTercimeIzah: splitTercimeIzah,
insertAtCursor: insertAtCursor,
foldDiacritics: foldDiacritics,
wrapNativeSelect: wrapNativeSelect,
initSelects: initSelects,
makeManualResizable: wiktkuMakeManualResizable,
initManualResize: wiktkuInitManualResize
};
//</nowiki>
71pa0sbtfrwdvxp9ionzdp0sbq95uu8
6333772
6333761
2026-08-15T10:00:42Z
Wikihez
7344
6333772
javascript
text/javascript
/**
* MediaWiki:Gadget-start/util.js
*
* Generic text and UI helpers for the entry-creation wizard. Nothing in here
* knows about the wizard itself — no `steps`, no `refresh()`, no wikitext
* assembly — so it can be required from any gadget, not just start.js.
*
* Split out of start.js on 15 Tebax 2026: that file had grown past 5700 lines
* and the searchable-select widget alone was ~300 of them, sitting between
* unrelated wizard code.
*
* Usage (ResourceLoader package module):
* var util = require("./start/util.js");
* util.initSelects(myContainer);
*/
//<nowiki>
function capitalize(str) {
if (!str) return str;
return str[0].toUpperCase() + str.substr(1);
}
function decapitalize(str) {
if (!str) return str;
return str[0].toLowerCase() + str.substr(1);
}
function escapeRegExp(str) {
return str.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
}
function stripWikilinks(str) {
return str.replace(/\[\[([^\]|]+)(?:\|([^\]]+))?\]\]/g, function (m, target, display) {
return display || target;
});
}
function splitTercimeIzah(mane) {
var m = /^([\s\S]*?)\s*\{\{îzah\|([\s\S]*)\}\}\s*$/.exec(mane || "");
return m ? { tercime: m[1], izah: m[2] } : null;
}
function insertAtCursor(el, text) {
var start = el.selectionStart;
var end = el.selectionEnd;
var val = el.value;
el.value = val.slice(0, start) + text + val.slice(end);
var pos = start + text.length;
el.selectionStart = el.selectionEnd = pos;
}
var FOLD_EXTRA ={
"ı":"i", "ø":"o","đ":"d","ð":"d","ə":"e","ħ":"h","ł":"l","ŋ":"n","ʉ":"u", "ɨ":"i","ʒ":"z","ɛ":"e","ɔ":"o","æ":"ae", "œ":"oe","ß":"ss","þ":"th"
};
function foldDiacritics(str) {
if (str === null || str === undefined) return "";
var s = String(str).toLowerCase();
if (typeof s.normalize === "function") {
// Split "î" into "i" + combining circumflex, then drop the accent.
s = s.normalize("NFD").replace(/[\u0300-\u036f]/g, "");
}
return s.replace(/[^\u0000-\u007f]/g, function (ch) {
return Object.prototype.hasOwnProperty.call(FOLD_EXTRA, ch) ? FOLD_EXTRA[ch] : ch;
});
}
var WIKTKU_RESIZE_STORAGE_PREFIX = "wiktku_resize_height_";
function wiktkuResizeStorageKey(textarea) {
var cls = (textarea.attr("class") || "").trim().replace(/\s+/g, "_");
return WIKTKU_RESIZE_STORAGE_PREFIX + cls;
}
function wiktkuSaveResizeHeight(textarea, height) {
if (!(window.mw && mw.storage)) return;
try {
mw.storage.set(wiktkuResizeStorageKey(textarea), String(Math.round(height)));
} catch (e) { /* localStorage unavailable (private mode, quota, …) — skip caching */ }
}
function wiktkuLoadResizeHeight(textarea) {
if (!(window.mw && mw.storage)) return null;
try {
var v = mw.storage.get(wiktkuResizeStorageKey(textarea));
return v ? parseFloat(v) : null;
} catch (e) {
return null;
}
}
function wiktkuMakeManualResizable(textarea) {
textarea = $(textarea);
if (!textarea.is("textarea") || textarea.hasClass("wiktku-start-narrow")) return;
if (textarea.data("wiktkuResizableDone")) return;
textarea.data("wiktkuResizableDone", true);
textarea.wrap("<div class='wiktku-resize-wrap'></div>");
var grip = $("<div class='wiktku-resize-grip'></div>");
textarea.after(grip);
// Restore a previously chosen height for this kind of field, if any.
var cachedHeight = wiktkuLoadResizeHeight(textarea);
if (cachedHeight) {
var minHeightInit = parseFloat(textarea.css("min-height")) || 0;
textarea.css("height", Math.max(cachedHeight, minHeightInit) + "px");
}
var dragging = false, startY = 0, startHeight = 0;
function onPointerMove(e) {
if (!dragging) return;
var oe = e.originalEvent || e;
var minHeight = parseFloat(textarea.css("min-height")) || 0;
var newHeight = startHeight + (oe.clientY - startY);
textarea.css("height", Math.max(newHeight, minHeight) + "px");
}
function onPointerUp(e) {
if (!dragging) return;
dragging = false;
var oe = e.originalEvent || e;
try { grip[0].releasePointerCapture(oe.pointerId); } catch (err) { /* ignore */ }
$(document).off("pointermove", onPointerMove);
$(document).off("pointerup pointercancel", onPointerUp);
wiktkuSaveResizeHeight(textarea, textarea.outerHeight());
}
grip.on("pointerdown", function (e) {
var oe = e.originalEvent || e;
if (oe.button !== undefined && oe.button !== 0) return; // primary contact only
e.preventDefault();
dragging = true;
startY = oe.clientY;
startHeight = textarea.outerHeight();
try { grip[0].setPointerCapture(oe.pointerId); } catch (err) { /* ignore */ }
$(document).on("pointermove", onPointerMove);
$(document).on("pointerup pointercancel", onPointerUp);
});
}
/** Applies wiktkuMakeManualResizable to every eligible textarea already
* inside `context` (context itself, if it is a textarea, or any of its
* descendants). Used both for the initial form render and, via the
* MutationObserver set up in build(), for textareas added later on
* (new sense blocks, quote-source fields, nimûne rows, …). */
function wiktkuInitManualResize(context) {
var $context = $(context);
var $textareas = $context.is("textarea") ? $context : $context.find("textarea");
$textareas.each(function () {
wiktkuMakeManualResizable(this);
});
}
/** URL of a template's own wiki page. Uses mw.util when available so it
* honours the wiki's article path, with a plain fallback for tests. */
function tplPageUrl(name) {
var title = "Şablon:" + name;
if (window.mw && mw.util && typeof mw.util.getUrl === "function") {
return mw.util.getUrl(title);
}
return "/wiki/" + encodeURIComponent(title);
}
function wrapNativeSelect(select) {
var wrapper = $("<span class='wiktku-native-select-wrap'></span>");
if (select.prop("multiple")) {
return wrapper.append(select);
}
var placeholder = select.attr("data-placeholder") || "Lê bigere...";
select.hide();
var textInput = $("<input type='search' autocomplete='off'>")
.attr("placeholder", placeholder)
.attr("role", "combobox")
.attr("aria-autocomplete", "list")
.attr("aria-expanded", "false")
.addClass("wiktku-start-narrow wiktku-ac-input");
var resultsList = $("<ul class='wiktku-ac-results' role='listbox'></ul>").hide();
var allOptions = [];
var shown = [];
var activeIndex = -1;
function cacheOptions() {
allOptions = [];
select.find("option").each(function () {
var v = $(this).val();
var text = $(this).text();
// A blank value with no label (most selects' placeholder) is
// never a real choice, so skip it. But a blank value WITH a
// label -- e.g. tplSelect's "— yan jî şablonek hilbijêre —" --
// is a meaningful "clear the selection" choice, so keep it
// searchable/selectable like any other option.
if (!v && !text) return;
// Language options read "Name (code)" -- score the name on its own
// so the trailing code doesn't also count as a name match.
var name = text.replace(/\s*\([^()]*\)\s*$/, "");
allOptions.push({
value: v,
text: text,
disabled: $(this).prop("disabled"),
// Template affordances (v3 spec): an option tagged with
// data-tpl renders as a template row — name, a link to the
// template page, and an ⓘ that explains it — instead of a
// plain line of text. Everything else is unaffected.
tpl: $(this).attr("data-tpl") || "",
tplStatus: $(this).attr("data-tpl-status") || "",
foldCode: foldDiacritics(v),
foldName: foldDiacritics(name),
foldText: foldDiacritics(text)
});
});
}
cacheOptions();
// True if `q` starts a word inside `name` ("kevn" in "ingiliziya kevn").
function startsWord(name, q) {
var from = 0, at;
while ((at = name.indexOf(q, from)) !== -1) {
if (at === 0 || /[\s\-\u2013\u2014(/,.]/.test(name.charAt(at - 1))) return true;
from = at + 1;
}
return false;
}
// Lower rank = better match.
// a code that *is* the query, or begins with it, always outranks a name
// that merely contains it -- so "ang" lists "Îngilîziya kevn (ang)"
// first instead of burying it among every name containing "ang".
var RANK_NONE = 99;
function rankOption(o, q) {
var code = o.foldCode, name = o.foldName;
if (code === q) return 0; // exact code
if (code.indexOf(q) === 0) return 1; // code prefix
if (name === q) return 2; // exact name
if (name.indexOf(q) === 0) return 3; // name prefix
if (startsWord(name, q)) return 4; // starts a word in the name
if (name.indexOf(q) !== -1) return 5; // name substring
if (code.indexOf(q) !== -1) return 6; // code substring
if (o.foldText.indexOf(q) !== -1) return 7; // anywhere else in the label
return RANK_NONE;
}
function positionList() {
// Position the list above or below depending on viewport space.
var inputRect = textInput[0].getBoundingClientRect();
var viewportH = window.innerHeight;
var spaceBelow = viewportH - inputRect.bottom - 8;
var spaceAbove = inputRect.top - 8;
var maxH = Math.min(224, Math.max(spaceBelow, spaceAbove)); // 224px = 14em
resultsList.css({
"max-height": maxH + "px",
"top": spaceBelow >= spaceAbove ? "100%" : "auto",
"bottom": spaceBelow >= spaceAbove ? "auto" : "100%"
});
}
function closeList() {
resultsList.hide();
textInput.attr("aria-expanded", "false");
activeIndex = -1;
}
function showResults(query) {
var q = foldDiacritics($.trim(query || ""));
resultsList.empty();
activeIndex = -1;
var matched = [];
if (q) {
$.each(allOptions, function (i, o) {
if (o.disabled) return;
var rank = rankOption(o, q);
if (rank !== RANK_NONE) matched.push({ opt: o, rank: rank, i: i });
});
if (!matched.length && q.indexOf(" ") !== -1) {
var tokens = q.split(/\s+/);
$.each(allOptions, function (i, o) {
if (o.disabled) return;
var all = true;
$.each(tokens, function (_, t) {
if (o.foldText.indexOf(t) === -1) { all = false; return false; }
});
if (all) matched.push({ opt: o, rank: 8, i: i });
});
}
matched.sort(function (a, b) {
if (a.rank !== b.rank) return a.rank - b.rank;
// Inside the code tiers the shorter code is the better hit:
// "an" -> "an" before "ang" before "ang-x-...".
if (a.rank <= 1 && a.opt.foldCode.length !== b.opt.foldCode.length) {
return a.opt.foldCode.length - b.opt.foldCode.length;
}
// Otherwise keep the menu's own order (pinned languages first).
return a.i - b.i;
});
} else {
$.each(allOptions, function (i, o) {
if (!o.disabled) matched.push({ opt: o, rank: 0, i: i });
});
}
shown = $.map(matched.slice(0, 50), function (m) { return m.opt; });
if (!shown.length) {
closeList();
return;
}
$.each(shown, function (idx, opt) {
var li = $("<li role='option'></li>")
.attr("data-value", opt.value)
.attr("aria-selected", "false");
if (opt.tpl) {
// Template row: coloured status dot, the name, then the two
// icons pinned right. Both icons stopPropagation — without
// it, clicking either would also pick the option, which is
// the opposite of "let me check what this does first".
li.addClass("wiktku-ac-tplrow");
li.append($("<span class='wiktku-tpl-dot'></span>")
.addClass(opt.tplStatus === "yellow" ? "wiktku-tpl-dot-special" : "wiktku-tpl-dot-ok")
.attr("title", opt.tplStatus === "yellow"
? "Tenê ji bo rewşên taybet"
: "Tê pêşniyar kirin"));
li.append($("<span class='wiktku-ac-tpltext'></span>").text(opt.text));
var icons = $("<span class='wiktku-tpl-icons'></span>");
var link = $("<a class='wiktku-tpl-icon wiktku-tpl-icon-link' target='_blank' rel='noopener'>🔗</a>")
.attr("title", "Rûpela şablonê veke")
.attr("href", tplPageUrl(opt.tpl));
link.on("click", function (e) { e.stopPropagation(); });
link.on("mousedown touchstart", function (e) { e.stopPropagation(); });
var info = $("<button type='button' class='wiktku-tpl-icon wiktku-tpl-icon-info'>i</button>")
.attr("title", "Ev şablon çi dike?");
info.on("mousedown touchstart", function (e) { e.stopPropagation(); });
info.on("click", function (e) {
e.preventDefault();
e.stopPropagation();
var handler = select.data("wiktkuTplInfo");
if (typeof handler === "function") handler(opt.tpl, wrapper);
});
icons.append(link).append(info);
li.append(icons);
} else {
li.text(opt.text);
}
// touchend (not touchstart) so a scroll doesn't trigger a select.
var touchMoved = false;
li.on("touchstart", function () {
touchMoved = false;
});
li.on("touchmove", function () {
touchMoved = true;
});
li.on("touchend", function (e) {
if (touchMoved) return; // was a scroll, not a tap
e.preventDefault();
selectOption(opt.value, opt.text);
});
// mousedown (not click) so it beats the input's blur handler.
li.on("mousedown", function (e) {
e.preventDefault();
selectOption(opt.value, opt.text);
});
li.on("mouseenter", function () {
// Hovered items are already in view -- don't scroll the list
// under the mouse, or the shift can trigger the next item's
// mouseenter and cascade into a runaway scroll.
setActive(idx, /* scrollIntoView */ false);
});
resultsList.append(li);
});
positionList();
resultsList.show();
resultsList[0].scrollTop = 0;
textInput.attr("aria-expanded", "true");
}
function setActive(idx, scrollIntoView) {
var items = resultsList.children("li");
if (!items.length) return;
if (idx < 0) idx = items.length - 1;
if (idx >= items.length) idx = 0;
activeIndex = idx;
items.removeClass("wiktku-ac-active").attr("aria-selected", "false");
var li = items.eq(idx).addClass("wiktku-ac-active").attr("aria-selected", "true");
if (scrollIntoView === false) return;
// Keep the cursor visible inside the scrollable list -- only for
// keyboard navigation. A mouse-hovered item is already visible, so
// scrolling here would shift the list under a stationary pointer
// and cascade into further mouseenter events.
var ul = resultsList[0], el = li[0];
if (el.offsetTop < ul.scrollTop) {
ul.scrollTop = el.offsetTop;
} else if (el.offsetTop + el.offsetHeight > ul.scrollTop + ul.clientHeight) {
ul.scrollTop = el.offsetTop + el.offsetHeight - ul.clientHeight;
}
}
/** Puts the currently selected option's label back in the text box. */
function syncInputToSelect() {
var cur = select.val();
var match = null;
if (cur) {
$.each(allOptions, function (_, o) {
if (o.value === cur) { match = o; return false; }
});
}
textInput.val(match ? match.text : "");
}
function selectOption(value, text) {
textInput.val(text);
select.val(value);
closeList();
select.trigger("change");
}
textInput.on("input", function () {
showResults($(this).val());
});
textInput.on("focus", function () {
// Select the current label so typing replaces it, and open the full list
this.select();
showResults("");
});
textInput.on("click", function () {
if (!resultsList.is(":visible")) showResults($(this).val());
});
textInput.on("keydown", function (e) {
var open = resultsList.is(":visible");
switch (e.which) {
case 40: // Down
e.preventDefault();
if (!open) { showResults($(this).val()); setActive(0); }
else setActive(activeIndex + 1);
break;
case 38: // Up
e.preventDefault();
if (!open) { showResults($(this).val()); setActive(-1); }
else setActive(activeIndex - 1);
break;
case 13: // Enter -- must never submit the form while the list is open
if (open) {
e.preventDefault();
if (activeIndex >= 0 && shown[activeIndex]) {
selectOption(shown[activeIndex].value, shown[activeIndex].text);
} else if (shown.length === 1) {
selectOption(shown[0].value, shown[0].text);
}
}
break;
case 27: // Esc -- abandon the search, restore the real value
if (open) {
e.preventDefault();
closeList();
syncInputToSelect();
}
break;
case 9: // Tab -- commit the highlighted row on the way out
if (open && activeIndex >= 0 && shown[activeIndex]) {
selectOption(shown[activeIndex].value, shown[activeIndex].text);
}
closeList();
break;
}
});
textInput.on("blur", function () {
// Short delay so a touchstart/mousedown on a result fires first.
setTimeout(function () {
closeList();
// Half-typed text that never became a selection would otherwise sit
// in the box looking like a choice -- put the real value back.
syncInputToSelect();
}, 200);
});
// Re-caches the option list. Fired after the full language list loads, after
// options are enabled/disabled, and after programmatic .val() changes.
select.on("wiktku:refresh", function () {
cacheOptions();
syncInputToSelect();
if (resultsList.is(":visible")) showResults(textInput.val());
});
wrapper.append(textInput).append(resultsList).append(select);
return wrapper;
}
/**
* Gives every plain <select> under `root` the searchable picker. Selects
* marked .wiktku-plain-select opt out, and the call is idempotent, so it is
* safe to re-run after new rows or sense blocks are inserted.
*/
function initSelects(root) {
$(root).find("select").addBack("select").not(".wiktku-plain-select").each(function () {
var sel = $(this);
if (sel.prop("multiple")) return;
if (sel.closest(".wiktku-native-select-wrap").length) return; // already wrapped
var marker = $("<span></span>").insertBefore(sel);
marker.replaceWith(wrapNativeSelect(sel));
});
}
module.exports = {
capitalize: capitalize,
decapitalize: decapitalize,
escapeRegExp: escapeRegExp,
stripWikilinks: stripWikilinks,
splitTercimeIzah: splitTercimeIzah,
insertAtCursor: insertAtCursor,
foldDiacritics: foldDiacritics,
wrapNativeSelect: wrapNativeSelect,
initSelects: initSelects,
tplPageUrl: tplPageUrl,
makeManualResizable: wiktkuMakeManualResizable,
initManualResize: wiktkuInitManualResize
};
//</nowiki>
6a0xm1bf3bbhjkqlgxwa48graeug62t
6333779
6333772
2026-08-15T11:03:18Z
Wikihez
7344
6333779
javascript
text/javascript
/**
* MediaWiki:Gadget-start/util.js
*
* Generic text and UI helpers for the entry-creation wizard. Nothing in here
* knows about the wizard itself — no `steps`, no `refresh()`, no wikitext
* assembly — so it can be required from any gadget, not just start.js.
*
* Split out of start.js on 15 Tebax 2026: that file had grown past 5700 lines
* and the searchable-select widget alone was ~300 of them, sitting between
* unrelated wizard code.
*
* Usage (ResourceLoader package module):
* var util = require("./start/util.js");
* util.initSelects(myContainer);
*/
//<nowiki>
function capitalize(str) {
if (!str) return str;
return str[0].toUpperCase() + str.substr(1);
}
function decapitalize(str) {
if (!str) return str;
return str[0].toLowerCase() + str.substr(1);
}
function escapeRegExp(str) {
return str.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
}
function stripWikilinks(str) {
return str.replace(/\[\[([^\]|]+)(?:\|([^\]]+))?\]\]/g, function (m, target, display) {
return display || target;
});
}
function splitTercimeIzah(mane) {
var m = /^([\s\S]*?)\s*\{\{îzah\|([\s\S]*)\}\}\s*$/.exec(mane || "");
return m ? { tercime: m[1], izah: m[2] } : null;
}
function insertAtCursor(el, text) {
var start = el.selectionStart;
var end = el.selectionEnd;
var val = el.value;
el.value = val.slice(0, start) + text + val.slice(end);
var pos = start + text.length;
el.selectionStart = el.selectionEnd = pos;
}
var FOLD_EXTRA ={
"ı":"i", "ø":"o","đ":"d","ð":"d","ə":"e","ħ":"h","ł":"l","ŋ":"n","ʉ":"u", "ɨ":"i","ʒ":"z","ɛ":"e","ɔ":"o","æ":"ae", "œ":"oe","ß":"ss","þ":"th"
};
function foldDiacritics(str) {
if (str === null || str === undefined) return "";
var s = String(str).toLowerCase();
if (typeof s.normalize === "function") {
// Split "î" into "i" + combining circumflex, then drop the accent.
s = s.normalize("NFD").replace(/[\u0300-\u036f]/g, "");
}
return s.replace(/[^\u0000-\u007f]/g, function (ch) {
return Object.prototype.hasOwnProperty.call(FOLD_EXTRA, ch) ? FOLD_EXTRA[ch] : ch;
});
}
var WIKTKU_RESIZE_STORAGE_PREFIX = "wiktku_resize_height_";
function wiktkuResizeStorageKey(textarea) {
var cls = (textarea.attr("class") || "").trim().replace(/\s+/g, "_");
return WIKTKU_RESIZE_STORAGE_PREFIX + cls;
}
function wiktkuSaveResizeHeight(textarea, height) {
if (!(window.mw && mw.storage)) return;
try {
mw.storage.set(wiktkuResizeStorageKey(textarea), String(Math.round(height)));
} catch (e) { /* localStorage unavailable (private mode, quota, …) — skip caching */ }
}
function wiktkuLoadResizeHeight(textarea) {
if (!(window.mw && mw.storage)) return null;
try {
var v = mw.storage.get(wiktkuResizeStorageKey(textarea));
return v ? parseFloat(v) : null;
} catch (e) {
return null;
}
}
function wiktkuMakeManualResizable(textarea) {
textarea = $(textarea);
if (!textarea.is("textarea") || textarea.hasClass("wiktku-start-narrow")) return;
if (textarea.data("wiktkuResizableDone")) return;
textarea.data("wiktkuResizableDone", true);
textarea.wrap("<div class='wiktku-resize-wrap'></div>");
var grip = $("<div class='wiktku-resize-grip'></div>");
textarea.after(grip);
// Restore a previously chosen height for this kind of field, if any.
var cachedHeight = wiktkuLoadResizeHeight(textarea);
if (cachedHeight) {
var minHeightInit = parseFloat(textarea.css("min-height")) || 0;
textarea.css("height", Math.max(cachedHeight, minHeightInit) + "px");
}
var dragging = false, startY = 0, startHeight = 0;
function onPointerMove(e) {
if (!dragging) return;
var oe = e.originalEvent || e;
var minHeight = parseFloat(textarea.css("min-height")) || 0;
var newHeight = startHeight + (oe.clientY - startY);
textarea.css("height", Math.max(newHeight, minHeight) + "px");
}
function onPointerUp(e) {
if (!dragging) return;
dragging = false;
var oe = e.originalEvent || e;
try { grip[0].releasePointerCapture(oe.pointerId); } catch (err) { /* ignore */ }
$(document).off("pointermove", onPointerMove);
$(document).off("pointerup pointercancel", onPointerUp);
wiktkuSaveResizeHeight(textarea, textarea.outerHeight());
}
grip.on("pointerdown", function (e) {
var oe = e.originalEvent || e;
if (oe.button !== undefined && oe.button !== 0) return; // primary contact only
e.preventDefault();
dragging = true;
startY = oe.clientY;
startHeight = textarea.outerHeight();
try { grip[0].setPointerCapture(oe.pointerId); } catch (err) { /* ignore */ }
$(document).on("pointermove", onPointerMove);
$(document).on("pointerup pointercancel", onPointerUp);
});
}
/** Applies wiktkuMakeManualResizable to every eligible textarea already
* inside `context` (context itself, if it is a textarea, or any of its
* descendants). Used both for the initial form render and, via the
* MutationObserver set up in build(), for textareas added later on
* (new sense blocks, quote-source fields, nimûne rows, …). */
function wiktkuInitManualResize(context) {
var $context = $(context);
var $textareas = $context.is("textarea") ? $context : $context.find("textarea");
$textareas.each(function () {
wiktkuMakeManualResizable(this);
});
}
/** URL of a template's own wiki page. Uses mw.util when available so it
* honours the wiki's article path, with a plain fallback for tests. */
function tplPageUrl(name) {
var title = "Şablon:" + name;
if (window.mw && mw.util && typeof mw.util.getUrl === "function") {
return mw.util.getUrl(title);
}
return "/wiki/" + encodeURIComponent(title);
}
function wrapNativeSelect(select) {
var wrapper = $("<span class='wiktku-native-select-wrap'></span>");
if (select.prop("multiple")) {
return wrapper.append(select);
}
var placeholder = select.attr("data-placeholder") || "Lê bigere...";
select.hide();
var textInput = $("<input type='search' autocomplete='off'>")
.attr("placeholder", placeholder)
.attr("role", "combobox")
.attr("aria-autocomplete", "list")
.attr("aria-expanded", "false")
.addClass("wiktku-start-narrow wiktku-ac-input");
var resultsList = $("<ul class='wiktku-ac-results' role='listbox'></ul>").hide();
var allOptions = [];
var shown = [];
var activeIndex = -1;
function cacheOptions() {
allOptions = [];
select.find("option").each(function () {
var v = $(this).val();
var text = $(this).text();
// A blank value with no label (most selects' placeholder) is
// never a real choice, so skip it. But a blank value WITH a
// label -- e.g. tplSelect's "— yan jî şablonek hilbijêre —" --
// is a meaningful "clear the selection" choice, so keep it
// searchable/selectable like any other option.
if (!v && !text) return;
// Language options read "Name (code)" -- score the name on its own
// so the trailing code doesn't also count as a name match.
var name = text.replace(/\s*\([^()]*\)\s*$/, "");
allOptions.push({
value: v,
text: text,
disabled: $(this).prop("disabled"),
// Template affordances (v3 spec): an option tagged with
// data-tpl renders as a template row — name, a link to the
// template page, and an ⓘ that explains it — instead of a
// plain line of text. Everything else is unaffected.
tpl: $(this).attr("data-tpl") || "",
tplStatus: $(this).attr("data-tpl-status") || "",
foldCode: foldDiacritics(v),
foldName: foldDiacritics(name),
foldText: foldDiacritics(text)
});
});
}
cacheOptions();
// True if `q` starts a word inside `name` ("kevn" in "ingiliziya kevn").
function startsWord(name, q) {
var from = 0, at;
while ((at = name.indexOf(q, from)) !== -1) {
if (at === 0 || /[\s\-\u2013\u2014(/,.]/.test(name.charAt(at - 1))) return true;
from = at + 1;
}
return false;
}
// Lower rank = better match.
// a code that *is* the query, or begins with it, always outranks a name
// that merely contains it -- so "ang" lists "Îngilîziya kevn (ang)"
// first instead of burying it among every name containing "ang".
var RANK_NONE = 99;
function rankOption(o, q) {
var code = o.foldCode, name = o.foldName;
if (code === q) return 0; // exact code
if (code.indexOf(q) === 0) return 1; // code prefix
if (name === q) return 2; // exact name
if (name.indexOf(q) === 0) return 3; // name prefix
if (startsWord(name, q)) return 4; // starts a word in the name
if (name.indexOf(q) !== -1) return 5; // name substring
if (code.indexOf(q) !== -1) return 6; // code substring
if (o.foldText.indexOf(q) !== -1) return 7; // anywhere else in the label
return RANK_NONE;
}
function positionList() {
// Position the list above or below depending on viewport space.
var inputRect = textInput[0].getBoundingClientRect();
var viewportH = window.innerHeight;
var spaceBelow = viewportH - inputRect.bottom - 8;
var spaceAbove = inputRect.top - 8;
var maxH = Math.min(224, Math.max(spaceBelow, spaceAbove)); // 224px = 14em
resultsList.css({
"max-height": maxH + "px",
"top": spaceBelow >= spaceAbove ? "100%" : "auto",
"bottom": spaceBelow >= spaceAbove ? "auto" : "100%"
});
}
function closeList() {
resultsList.hide();
textInput.attr("aria-expanded", "false");
activeIndex = -1;
}
function showResults(query) {
var q = foldDiacritics($.trim(query || ""));
resultsList.empty();
activeIndex = -1;
var matched = [];
if (q) {
$.each(allOptions, function (i, o) {
if (o.disabled) return;
var rank = rankOption(o, q);
if (rank !== RANK_NONE) matched.push({ opt: o, rank: rank, i: i });
});
if (!matched.length && q.indexOf(" ") !== -1) {
var tokens = q.split(/\s+/);
$.each(allOptions, function (i, o) {
if (o.disabled) return;
var all = true;
$.each(tokens, function (_, t) {
if (o.foldText.indexOf(t) === -1) { all = false; return false; }
});
if (all) matched.push({ opt: o, rank: 8, i: i });
});
}
matched.sort(function (a, b) {
if (a.rank !== b.rank) return a.rank - b.rank;
// Inside the code tiers the shorter code is the better hit:
// "an" -> "an" before "ang" before "ang-x-...".
if (a.rank <= 1 && a.opt.foldCode.length !== b.opt.foldCode.length) {
return a.opt.foldCode.length - b.opt.foldCode.length;
}
// Otherwise keep the menu's own order (pinned languages first).
return a.i - b.i;
});
} else {
$.each(allOptions, function (i, o) {
if (!o.disabled) matched.push({ opt: o, rank: 0, i: i });
});
}
shown = $.map(matched.slice(0, 50), function (m) { return m.opt; });
if (!shown.length) {
closeList();
return;
}
$.each(shown, function (idx, opt) {
var li = $("<li role='option'></li>")
.attr("data-value", opt.value)
.attr("aria-selected", "false");
if (opt.tpl) {
// Template row: coloured status dot, the name, then the two
// icons pinned right. Both icons stopPropagation — without
// it, clicking either would also pick the option, which is
// the opposite of "let me check what this does first".
li.addClass("wiktku-ac-tplrow");
li.append($("<span class='wiktku-tpl-dot'></span>")
.addClass(opt.tplStatus === "yellow" ? "wiktku-tpl-dot-special" : "wiktku-tpl-dot-ok")
.attr("title", opt.tplStatus === "yellow"
? "Tenê ji bo rewşên taybet"
: "Tê pêşniyar kirin"));
li.append($("<span class='wiktku-ac-tpltext'></span>").text(opt.text));
var icons = $("<span class='wiktku-tpl-icons'></span>");
// touchend matters most here: the row itself listens for it,
// calls preventDefault() and selects the option. Without
// stopping it at the icon, tapping either one on a phone
// picked the template instead — and the link never navigated,
// because the row had already cancelled the default.
var STOP = "mousedown touchstart touchend touchmove";
var link = $("<a class='wiktku-tpl-icon wiktku-tpl-icon-link' target='_blank' rel='noopener'>🔗</a>")
.attr("title", "Rûpela şablonê veke")
.attr("href", tplPageUrl(opt.tpl));
// stopPropagation only — no preventDefault, or the link would
// stop being a link.
link.on("click", function (e) { e.stopPropagation(); });
link.on(STOP, function (e) { e.stopPropagation(); });
var info = $("<button type='button' class='wiktku-tpl-icon wiktku-tpl-icon-info'>i</button>")
.attr("title", "Ev şablon çi dike?");
info.on(STOP, function (e) { e.stopPropagation(); });
info.on("click", function (e) {
e.preventDefault();
e.stopPropagation();
var handler = select.data("wiktkuTplInfo");
if (typeof handler === "function") handler(opt.tpl, wrapper);
});
icons.append(link).append(info);
li.append(icons);
} else {
li.text(opt.text);
}
// touchend (not touchstart) so a scroll doesn't trigger a select.
var touchMoved = false;
li.on("touchstart", function () {
touchMoved = false;
});
li.on("touchmove", function () {
touchMoved = true;
});
li.on("touchend", function (e) {
if (touchMoved) return; // was a scroll, not a tap
e.preventDefault();
selectOption(opt.value, opt.text);
});
// mousedown (not click) so it beats the input's blur handler.
li.on("mousedown", function (e) {
e.preventDefault();
selectOption(opt.value, opt.text);
});
li.on("mouseenter", function () {
// Hovered items are already in view -- don't scroll the list
// under the mouse, or the shift can trigger the next item's
// mouseenter and cascade into a runaway scroll.
setActive(idx, /* scrollIntoView */ false);
});
resultsList.append(li);
});
positionList();
resultsList.show();
resultsList[0].scrollTop = 0;
textInput.attr("aria-expanded", "true");
}
function setActive(idx, scrollIntoView) {
var items = resultsList.children("li");
if (!items.length) return;
if (idx < 0) idx = items.length - 1;
if (idx >= items.length) idx = 0;
activeIndex = idx;
items.removeClass("wiktku-ac-active").attr("aria-selected", "false");
var li = items.eq(idx).addClass("wiktku-ac-active").attr("aria-selected", "true");
if (scrollIntoView === false) return;
// Keep the cursor visible inside the scrollable list -- only for
// keyboard navigation. A mouse-hovered item is already visible, so
// scrolling here would shift the list under a stationary pointer
// and cascade into further mouseenter events.
var ul = resultsList[0], el = li[0];
if (el.offsetTop < ul.scrollTop) {
ul.scrollTop = el.offsetTop;
} else if (el.offsetTop + el.offsetHeight > ul.scrollTop + ul.clientHeight) {
ul.scrollTop = el.offsetTop + el.offsetHeight - ul.clientHeight;
}
}
/** Puts the currently selected option's label back in the text box. */
function syncInputToSelect() {
var cur = select.val();
var match = null;
if (cur) {
$.each(allOptions, function (_, o) {
if (o.value === cur) { match = o; return false; }
});
}
textInput.val(match ? match.text : "");
}
function selectOption(value, text) {
textInput.val(text);
select.val(value);
closeList();
select.trigger("change");
}
textInput.on("input", function () {
showResults($(this).val());
});
textInput.on("focus", function () {
// Select the current label so typing replaces it, and open the full list
this.select();
showResults("");
});
textInput.on("click", function () {
if (!resultsList.is(":visible")) showResults($(this).val());
});
textInput.on("keydown", function (e) {
var open = resultsList.is(":visible");
switch (e.which) {
case 40: // Down
e.preventDefault();
if (!open) { showResults($(this).val()); setActive(0); }
else setActive(activeIndex + 1);
break;
case 38: // Up
e.preventDefault();
if (!open) { showResults($(this).val()); setActive(-1); }
else setActive(activeIndex - 1);
break;
case 13: // Enter -- must never submit the form while the list is open
if (open) {
e.preventDefault();
if (activeIndex >= 0 && shown[activeIndex]) {
selectOption(shown[activeIndex].value, shown[activeIndex].text);
} else if (shown.length === 1) {
selectOption(shown[0].value, shown[0].text);
}
}
break;
case 27: // Esc -- abandon the search, restore the real value
if (open) {
e.preventDefault();
closeList();
syncInputToSelect();
}
break;
case 9: // Tab -- commit the highlighted row on the way out
if (open && activeIndex >= 0 && shown[activeIndex]) {
selectOption(shown[activeIndex].value, shown[activeIndex].text);
}
closeList();
break;
}
});
textInput.on("blur", function () {
// Short delay so a touchstart/mousedown on a result fires first.
setTimeout(function () {
closeList();
// Half-typed text that never became a selection would otherwise sit
// in the box looking like a choice -- put the real value back.
syncInputToSelect();
}, 200);
});
// Re-caches the option list. Fired after the full language list loads, after
// options are enabled/disabled, and after programmatic .val() changes.
select.on("wiktku:refresh", function () {
cacheOptions();
syncInputToSelect();
if (resultsList.is(":visible")) showResults(textInput.val());
});
wrapper.append(textInput).append(resultsList).append(select);
return wrapper;
}
/**
* Gives every plain <select> under `root` the searchable picker. Selects
* marked .wiktku-plain-select opt out, and the call is idempotent, so it is
* safe to re-run after new rows or sense blocks are inserted.
*/
function initSelects(root) {
$(root).find("select").addBack("select").not(".wiktku-plain-select").each(function () {
var sel = $(this);
if (sel.prop("multiple")) return;
if (sel.closest(".wiktku-native-select-wrap").length) return; // already wrapped
var marker = $("<span></span>").insertBefore(sel);
marker.replaceWith(wrapNativeSelect(sel));
});
}
module.exports = {
capitalize: capitalize,
decapitalize: decapitalize,
escapeRegExp: escapeRegExp,
stripWikilinks: stripWikilinks,
splitTercimeIzah: splitTercimeIzah,
insertAtCursor: insertAtCursor,
foldDiacritics: foldDiacritics,
wrapNativeSelect: wrapNativeSelect,
initSelects: initSelects,
tplPageUrl: tplPageUrl,
makeManualResizable: wiktkuMakeManualResizable,
initManualResize: wiktkuInitManualResize
};
//</nowiki>
dd3oznp41gxtxanmlpvt6lv4xlkaguf
uzak kalmak
0
1358592
6333781
2026-08-15T11:03:51Z
Rewiye tine
7120
([[Mediawiki:Gadget-start.js|WF:NÛ]] v.2.0) +tr:lêker:dûr ketin
6333781
wikitext
text/x-wiki
== {{ziman|tr}} ==
=== Lêker ===
{{lêker|tr}}
# [[dûr ketin]]
#* {{nimûne?|tr}}
==== Etîmolojî ====
{{ji?|tr}}
n2r36hh9emxpw0bhfh7im6yi005i8wu