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<&#47;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 &#91;{{w|Godel's ontological proof}}&#93; |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 &#91;{{w|Galway Kinnell}}'s&#93; 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>&amp;#91;</code> and <code>&amp;#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, "&amp;") .replace(/</g, "&lt;") .replace(/>/g, "&gt;"); } // 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, "&amp;") .replace(/</g, "&lt;") .replace(/>/g, "&gt;"); } // 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, "&amp;") .replace(/</g, "&lt;") .replace(/>/g, "&gt;"); } // 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, "&amp;") .replace(/</g, "&lt;") .replace(/>/g, "&gt;"); } // 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, "&amp;") .replace(/</g, "&lt;") .replace(/>/g, "&gt;"); } // 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, "&amp;") .replace(/</g, "&lt;") .replace(/>/g, "&gt;"); } // 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, "&amp;") .replace(/</g, "&lt;") .replace(/>/g, "&gt;"); } // 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, "&amp;") .replace(/</g, "&lt;") .replace(/>/g, "&gt;"); } // 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, "&amp;") .replace(/</g, "&lt;") .replace(/>/g, "&gt;"); } // 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:&#123;&#123;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``:&#91;&#91;``link``|``display``&#93;&#93;}: 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:&#91;&#91;Маркс, Карл|Карл Ге́нрих Маркс&#93;&#93;}, 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:&#91;&#91;``link``|``display``&#93;&#93;} û {w:``lang``:&#91;&#91;``link``|``display``&#93;&#93;}: 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``:&#91;&#91;``link``|``display``&#93;&#93;}: 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:&#91;&#91;조선_독립의_서#一._槪論|조선 독립의 서&#93;&#93;} (belgeyek li ser serxwebûna Kore di dema dagirkirina Japonî de). Ev bi mahiyet dişibihe {lw:``lang``:&#91;&#91;``link``|``display``&#93;&#93;} ji bo Wîkîpediyayê. * {s:&#91;&#91;``link``|``display``&#93;&#93;} û {s:``lang``:&#91;&#91;``link``|``display``&#93;&#93;}: 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 {&amp;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